​公司的项目需要部署到一台公网的linux服务器,以便同事们测试小程序。

目标服务器是新搭建的CentOS 8虚拟机,以非docker的方式部署。现记录过程便于日后部署至项目甲方的服务器上,因为甲方的服务器可能未联网,或者网络资源有限(公司按流量算钱的WiFi棒) 宗旨是尽量用U盘拷贝二进制文件以离线的方式安装

首先需要准备环境:

  1. .net5 环境Download .NET 5.0 (Linux, macOS, and Windows) (microsoft.com)下载SDK X64就好
  2. Microsoft SQL Server 14 数据库Index of /rhel/7/mssql-server-2017/ (microsoft.com)
  3. Node-v16.13.0下载 | Node.js (nodejs.org)
  4. 以及一些服务,比如RocketChat或者Nginx

使用github或者gitee创建代码仓库,用于迁移代码至测试服务器,如果公司的git和代码仓库需要同时更新,可以依据下面文章进行设置:

如何同步多个 git 远程仓库 - taadis - 博客园 (cnblogs.com)https://www.cnblogs.com/taadis/p/12170953.html

调整项目源代码

各项安装好之后,新建一个解决方案专用的文件夹,git clone代码至文件夹内

并打开解决方案的WebHost项目目录,并键入dotnet build测试编译情况

处理一下错误,以我为例:

比如我在Windows下编写的一些代码文件会以GB2312的编码保存,则Linux下会出现乱码,更改后编译通过。

在Configuration读取的时候用了reloadOnChange为True:

那么linux在使用inotify 文件系统的变化通知机制时就会报错超过使用上限的错误:

---> System.IO.IOException: The configured user limit (128) on the number of inotify instances has been reached, or the per-process limit on the number of open file descriptors has been reached

另外linux下的SQL server不支持集成验证方式登录,将连接字符串的 integrated security改为false;并且在后面提供用户名及密码:

User ID=YourProperUserName;Password=YourProperUserPassword;

配置数据库

bash中键入sudo /opt/mssql/bin/mssql-conf setup以启动配置脚本,在一些列配置完成后,输入systemctl status mssql-server以确认SQL server启动成功

如果没有成功,需要手动运行systemctl start mssql-server启动服务,运行systemctl enable mssql-server保证开机时能自动启动

安装sql-tool工具:

curl https://packages.microsoft.com/config/rhel/8/prod.repo > /etc/yum.repos.d/msprod.repo
sudo yum install -y mssql-tools unixODBC-devel
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc

验证安装是否成功

sqlcmd -S localhost -U SA -P '<你的数据库密码>'

如果显示>1表示链接成功

[可选]建议修改管理员登录密码

sqlcmd -U sa -P oldpassword -Z newpassword

[可选]如果在宿主机上使用数据库管理工具,则需要打开1433端口,以便外部访问

firewall-cmd --zone=public --add-port=1433/tcp --permanent

firewall-cmd --reload

运行数据库迁移

回到解决方案目录的Miguration项目目录中运行迁移,如下运行成功

运行完迁移,回到Web.Host项目中运行dotnet run。如下运行成功

配置网络  

首先来配置Nginx,打开配置文件:etc/nginx/nginx.conf,修改配置为:

server {
listen 3100;
location / {
proxy_pass http://localhost:21021;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}

然后运行重新加载命令

nginx -s reload

宿主机的浏览器打开http://192.168.137.101:3100/192.168.137.101来测试代理是否畅通,如果无法链接(ERR_CONNECTION_REFUSED)或者出现502(Bad Gateway)错误,则需要对网络配置进行排查:

1. 安装nmap查看对外端口开放情况:

​​

2. 查看nginx错误日志

​​

比如我的情况是没有权限,则参考此方案解决django - (13: Permission denied) while connecting to upstream:[nginx] - Stack Overflowhttps://stackoverflow.com/questions/23948527/13-permission-denied-while-connecting-to-upstreamnginx

我们更改了监听端口到3100,则因为Centos的安全策略可能会出现 [emerg] bind() to 0.0.0.0:XXXX failed (13: Permission denied)的报错,则运行如下命令将3100添加至http的端口配置:

sudo semanage port -a -t http_port_t  -p tcp 3100

添加完成后运行 ,观察到端口3100已经添加完成

semanage port -l | grep http_port_t

​​

再次在宿主机的浏览器打开http://192.168.137.101:3100/192.168.137.101来测试代理是否畅通

查看到主页已经顺利打开

​​

配置宿主机网络

若要在公网上顺利访问,则需要配置宿主机的网络

之后在宿主机将这个端口号添加至端口转发规则:

netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=3100 connectaddress=192.168.137.1 connectport=3100

​​

在宿主机的防火墙设置中,将3100端口添加到入站和出站规则

在任意终端访问我的阿里云域名,可以访问到接口,至此所有部署工作已结束!

[学习笔记]Linux环境下部署 .Net5 程序的更多相关文章

  1. Linux环境下部署完JDK后运行一个简单的Java程序

    前言 前一篇文章详细讲解了如何在Windows环境下安装虚拟机+Linux系统,并且成功部署了JDK. 不过部署完JDK之后,我们判断部署是否成功的依据是看"java -version&qu ...

  2. Django Linux环境下部署CentOS7+Python3+Django+uWSGI+Nginx(含Nginx返回400问题处理、防火墙管理)

    本文将介绍如何在Linux系统上部署Django web项目,本次部署基于下面的架构: CentOS7+ Python3.5 + Django1.11 + uWSGI + Nginx 亲测可行!!按照 ...

  3. linux 环境下部署 Asp.Net Core 项目 访问 oralce 数据库

    1.ASP.NET Core 是一个跨平台的高性能开源框架,可以部署到Linux上,那项目部署在Linux上有哪些好处呢? 1.linux硬件需求小,大部分版本免费,成本低. 2.linux的用户管理 ...

  4. Linux 学习笔记 Linux环境变量初稿

    set命令会显示为某个特定进程设置的所有环境变量,但不包括一些没有设置值的默认环境变量 可以通过等号来给环境变量赋值,值可以是数值或字符串 如果要给变量赋一个含有空格的字符串值,必需用单引号来界定字符 ...

  5. 在Linux环境下部署MySql服务

    之前有下载部署过几次,但是每次都会踩一些坑.特此记录在liunx下部署安装mysql的基本步骤: 1.卸载老版本的mysql find / -name mysql|xargs rm -rf     查 ...

  6. linux环境下部署tomcat

    服务器环境:Red Hat Enterprise Linux Server release 6.5 安装部署包:apache-tomcat-8.0.30.tar.gz.jdk-8u66-linux-x ...

  7. Docker学习笔记之向服务器部署应用程序

    部署的应用仅仅是简单应用程序,使用的是node管理的web应用,具体我也不是很会,当然也可以配置tomcat服务器.这里主要是学习docker.需要客户机和服务机,其中服务机必须要为Linux操作系统 ...

  8. .NetCore~Linux环境下部署

    NetCore正式版已经出现有段时候了,Windows下使用vs2015开发.netCore应用程序,然后通过dotnet程序开启WEB服务,用着很像node.js,当然我们不会于只局限于window ...

  9. linux环境下编译C++ 程序

    GCC(GNU Compiler Collection)是Linux下最主要的编译工具,GCC不仅功能非常强大,结构也异常灵活.它可以通过不同的前端模块来支持各种语言,如:Java.Fortran.P ...

随机推荐

  1. 【计算机组成】 Quartus II 关于总线data[][]转换多个总线data[]时不成功的问题

    xjtuse 直接使用报错: 加中间层不报错:

  2. 【服务器】【环境搭建】WordPress建立数据库连接时出错---问题---解决

    这意味着您在wp-config.php文件中指定的用户名和密码信息不正确,或我们未能在localhost联系到数据库服务器.这可能意味着您主机的数据库服务器未在运行. 您确定用户名和密码正确吗? 您确 ...

  3. CS5211替代兼容PS8625|普瑞PS8625替代方案|CapstoneCS5211

    PS8625是一个DP显示端口 到LVDS转换器芯片,利用GPU和显示端口(DP) 或嵌入式显示端口(eDP) 输出和接受LVDS输入的显示面板.PS8625实现双通道DP输入,双链路LVDS输出.P ...

  4. 基于Spring MVC + Spring + MyBatis的【图书信息管理系统(二)】

    资源下载:https://download.csdn.net/download/weixin_44893902/35123371 练习点设计:添加.删除.修改 一.语言和环境 实现语言:JAVA语言. ...

  5. DOTween实现缓动变值动效

    DOTween.To(getter, setter, to, float duration) 是常用的一个变值方法(一定时间将某变量从起始值到终点值进行变化),可以便捷实现 滚分.涨进度条 等功能 但 ...

  6. 【java多线程】synchronized和volatile

    文章目录 一.synchronized 1.synchronized使用的方法 2.注意 3.不要以字符串作为锁的对象 4.`synchronized`锁的是什么? 二.volatile 1.引出问题 ...

  7. vue3 父菜单渲染出来了,但是子菜单渲染不出来的原因

    子菜单始终渲染不出来,控制台出现警告如下: 在查看框架源码时,发现在渲染时应用了递归.在这个博客找到答案,原因是升级的vue的版本没有升级@vue/compiler-sfc的版本,这两个版本应该保持一 ...

  8. unittest_认识unittest(1)

    unittest是python内置的单元测试框架,具备编写用例.组织用例.执行用例.输出报告等自动化框架的条件. 使用unittest前需要了解该框架的五个概念: 即test case,test su ...

  9. 详解nginx的请求限制(连接限制和请求限制)

    https://www.jb51.net/article/143682.htm 一,背景 我们经常会遇到这种情况,服务器流量异常,负载过大等等.对于大流量恶意的攻击访问,会带来带宽的浪费,服务器压力, ...

  10. kubernetes 之部署metrics-server

    Kubernetes 版本是 1.14 # kubectl version --short Client Version: v1.14.3 Server Version: v1.14.2 下载文件 f ...