[学习笔记]Linux环境下部署 .Net5 程序
公司的项目需要部署到一台公网的linux服务器,以便同事们测试小程序。
目标服务器是新搭建的CentOS 8虚拟机,以非docker的方式部署。现记录过程便于日后部署至项目甲方的服务器上,因为甲方的服务器可能未联网,或者网络资源有限(公司按流量算钱的WiFi棒) 宗旨是尽量用U盘拷贝二进制文件以离线的方式安装
首先需要准备环境:
- .net5 环境Download .NET 5.0 (Linux, macOS, and Windows) (microsoft.com)下载SDK X64就好
- Microsoft SQL Server 14 数据库Index of /rhel/7/mssql-server-2017/ (microsoft.com)
- Node-v16.13.0下载 | Node.js (nodejs.org)
- 以及一些服务,比如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错误日志

我们更改了监听端口到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 程序的更多相关文章
- Linux环境下部署完JDK后运行一个简单的Java程序
前言 前一篇文章详细讲解了如何在Windows环境下安装虚拟机+Linux系统,并且成功部署了JDK. 不过部署完JDK之后,我们判断部署是否成功的依据是看"java -version&qu ...
- Django Linux环境下部署CentOS7+Python3+Django+uWSGI+Nginx(含Nginx返回400问题处理、防火墙管理)
本文将介绍如何在Linux系统上部署Django web项目,本次部署基于下面的架构: CentOS7+ Python3.5 + Django1.11 + uWSGI + Nginx 亲测可行!!按照 ...
- linux 环境下部署 Asp.Net Core 项目 访问 oralce 数据库
1.ASP.NET Core 是一个跨平台的高性能开源框架,可以部署到Linux上,那项目部署在Linux上有哪些好处呢? 1.linux硬件需求小,大部分版本免费,成本低. 2.linux的用户管理 ...
- Linux 学习笔记 Linux环境变量初稿
set命令会显示为某个特定进程设置的所有环境变量,但不包括一些没有设置值的默认环境变量 可以通过等号来给环境变量赋值,值可以是数值或字符串 如果要给变量赋一个含有空格的字符串值,必需用单引号来界定字符 ...
- 在Linux环境下部署MySql服务
之前有下载部署过几次,但是每次都会踩一些坑.特此记录在liunx下部署安装mysql的基本步骤: 1.卸载老版本的mysql find / -name mysql|xargs rm -rf 查 ...
- linux环境下部署tomcat
服务器环境:Red Hat Enterprise Linux Server release 6.5 安装部署包:apache-tomcat-8.0.30.tar.gz.jdk-8u66-linux-x ...
- Docker学习笔记之向服务器部署应用程序
部署的应用仅仅是简单应用程序,使用的是node管理的web应用,具体我也不是很会,当然也可以配置tomcat服务器.这里主要是学习docker.需要客户机和服务机,其中服务机必须要为Linux操作系统 ...
- .NetCore~Linux环境下部署
NetCore正式版已经出现有段时候了,Windows下使用vs2015开发.netCore应用程序,然后通过dotnet程序开启WEB服务,用着很像node.js,当然我们不会于只局限于window ...
- linux环境下编译C++ 程序
GCC(GNU Compiler Collection)是Linux下最主要的编译工具,GCC不仅功能非常强大,结构也异常灵活.它可以通过不同的前端模块来支持各种语言,如:Java.Fortran.P ...
随机推荐
- Shell实现文件内容批量替换的方法
在Linux系统中,文件内容的批量替换同Windows平台相比要麻烦一点.不过这里可以通过Shell命令或脚本的方式实现批量替换的功能. 笔者使用过两个命令:perl和sed ,接下来会对其做出说明. ...
- Jmeter性能测试场景的创建和运行
目录 性能测试场景的分析 项目背景 Jmeter指标 性能测试场景的设计以及准备 性能测试的总结 性能测试场景的分析 项目背景 实际工作中,我们拿到一个项目一般来说都会是项目经理说XXX来进行一下 ...
- Mysql数据库服务端的安装
一般提到Mysql数据库的安装在工作当中是说的安装数据库管理软件的服务端,服务端的安装可以安装在Windows环境,也可以安装在Linux环境. Windows环境安装:目前安装比较流行的是5.7,增 ...
- 图像处理opencv-Rect 排序、合并[转]
opencv进行rect检测时,当检测到多个rect,组成rect vector之后,有些rect是由一个区域误分割得到的, 可以按照某种规格将这些rect合并为一个rect.比如按照x,y,widt ...
- 每天学一点——python用户的交互、格式化输出与基础运算符运用
用户交互 input输入 input接收的数据都是字符串类型 如下图 output输出 还可以相加 换行符 想让他们隔行排列的话就可以这样(如图) 在想各行的开头前面加上\n即可 那若是想将两个输出的 ...
- 游戏中的自动寻路-A*算法(第一版优化——走斜线篇)
一.简述以及地图 G 表示从起点移动到网格上指定方格的移动距离 (暂时不考虑沿斜向移动,只考虑上下左右移动). H 表示从指定的方格移动到终点的预计移动距离,只计算直线距离,走直角篇走的是直角路线. ...
- nginx worker_cpu_affinity使用方法
Nginx默认没有开启利用多核CPU,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核CPU.CPU是任务处理,计算最关键的资源,CPU核越多,性能就越好. 配置Nginx ...
- linux 之 非root用户安装mysql5.7.27
下载 下载 mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz 详见linux(CentOS7) 之 MySQL 5.7.30 下载及安装. 配置规划 用户: zhj ...
- Git_同一个本地仓库上传到不同的远端仓库(github、gitee)
一.背景 github访问.推拉代码都太慢了,于是想把github上面的项目全部迁移到gitee(码云)上,但又不想放弃在github上维护项目,于是想同时维护两个远端仓库 二.准备工作 1.创建相同 ...
- mybatis学习笔记(四)
resultType 语句返回值类型的完整类名或别名 resultType 返回的是一个map集合,key是列名,value是对应的值 使用resultMap实现联表查询 resultMap 查询的结 ...