Linux .Net Core发布项目及搭建
.Net Core环境部署
前言: 根据官方的要求 ,在安装DotNetCore 环境之前需要注册Microsoft Key以及Product Repository,并且还需要安装一些依赖,这一步每台机器只需要运行一次,具体命令如下:
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
1.先用下面的命令更新系统
sudo yum update
2.安装.Net Core SDK 3.1(这里我选的是3.1,你们可以根据项目的环境需要安装SDK的版本)
//注册 sudo yum install aspnetcore-runtime-3.0 sudo yum install dotnet-sdk-3.1
3.查看是否安装成功,也可以通过下面的命令知晓.Net Core 版本
dotnet --version
至此.Net Core环境安装结束!
.Net Core项目 发布至Linux
前言:建.Net Core项目的过程,在这里不做解释,大家可以自行百度即可,这里直接从发布项目开始
1.文件发布后是在本地,我们需要把本地的项目文件放入到Centos中,这里就需要借助一个软件FileZilla(下载地址:https://filezilla-project.org/download.php?platform=win64)
这个软件可以将windows的文件上传至Centos中(这个软件的详细用法请自行百度)
2.项目上传到Centos中后,在Centos发布项目的目录中执行 注意: 我的项目名是WebApplication1,所以是WebApplication1.dll,根据你自己取的名称来启动项目文件
dotnet WebApplication1.dll
可以看到我们已经启动了项目,但是现在还不急,我们要用Nginx反向代理来处理现有的端口
.Net Core使用Nginx反向代理
1.先安装下载Nginx
sudo yum install -y nginx
2. 检测是否安装完成(输入检测版本命令)
nginx -v
3. 直接启动nginx
sudo systemctl start nginx
3. 查看启动状态
sudo systemctl status nginx
4. (我这里是没有关闭防火墙的也可以访问,如果小伙伴访问不了可以尝试关闭防火墙,这里用Centos8版本)这个时候输入你自己的Centos IP地址在浏览器就可以访问了,页面如下:
5.嘿嘿,到了这一步,这个时候我们要开始干点正经事了,将.Net Core 项目端口进行(Nginx)反向代理
cd /etc/nginx/conf.d #先进入到nginx运行的代理文件中
6.开始在/etc/nginx/conf.d 这个文件夹下面新建一个后缀名为conf结尾的的文件
yum -y install vim* #如果没有vim命令安装vim,我用的是Centos8,已经默认安装,可省略此命令
vim demo.conf #创建配置文件
配置文件的内容如下:
server { listen 1233 ; #反向代理的访问的端口 location / { proxy_pass https://localhost:5001 ; #.net core 默认启动的端口 proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_cache_bypass $http_upgrade; } }
弄完, 命令 :wq保存并退出
7.重新加载NGINX
sudo systemctl reload nginx
在发布目录启动我们的项目文件,
8.接下来我们就可以在浏览器中访问我们的项目了(IP+代理端口)就可以访问了
9.如果遇到502错误,先查询端口是否正常运行
sudo netstat -antup #查询linux 的所有端口占用情况
10.项目启动正常+NgInx启动正常,Selinux没有关闭导致
关闭Selinux
setenforce 0 #为0即可
Centos .Net Core 后台守护进程(Supervisor)部署
前言:如果大家前面的配置都成功了,那么恭喜你,到了这里你应该会有一个疑问,现在项目是跑起来了但是如果我要一直运行项目,发现不能对Linux进行操作,而且终端关闭,项目也会立马停止,能不能有个东西,不用我们去管,项目一直在跑,又不会影响我们操作,更不会因为终端关闭而程序崩溃这个时候
Supervisor就出现了!它能很好的解决我们刚才说的问题
1.安装Supervisor
sudo su - #切换为root用户
yum install epel-release
sudo yum install supervisor
supervisord --version #检测supervisor是否安装成功
cat /usr/lib/systemd/system/supervisord.service #查看服务文件安装的位置
2.设置 supervisor 开机启动
sudo systemctl enable supervisord sudo systemctl start supervisord
3.进入 supervisor 控制台执行命令
sudo supervisorctl
4.查看配置文件目录
cat /etc/supervisord.conf #查看配置文件信息
[include] files = supervisord.d/*.ini #可以看到配置文件末尾是supervisord.d/*.ini的文件路径 在/etc/supervisord.d/的文件夹下创建文件后缀为ini结尾的文件
5.建立配置文件 demo.ini 注意:这个文件名是可以自定义的,不过后缀必须是ini
#注意:可能是supervisor,程序BUG 原因 项目启动 Deploy.Linux.dll 必须两端有空格,否则运行不了
[program:demo] command=/usr/bin/dotnet Deploy.Linux.dll ; 输入执行命令,这里表示 dotnet Deploy.Linux.dll directory=/data/sites/demo/publish ; 应用程序根目录 autostart=true ; 是否自动启动,当 supervisor 加载该配置文件的时候立即启动它 autorestart=true ; 是否自动重启,当执行 dotnet Deploy.Linux.dll 启动失败时,会重复的自动重启 logfile_maxbytes=50MB ; 该配置文件输出单个日志文件的大小 logfile_backups=10 ; 日志备份个数 loglevel=info ; 记录日志级别 stderr_logfile=/data/logs/demo/demo.err.log ; 指定标准错误输出日志文件 stdout_logfile=/data/logs/demo/demo.out.log ; 指定标准输出日志文件 environment=ASPNETCORE_ENVIRONMENT=Production ; 可配置环境变量,该环境变量将通过执行 dotnet Deploy.Linux.dll 命令的时候传入到 .NET Core 应用程序中 user=root ;启动服务的用户 stopsignal=INT redirect_stderr=true
6.创建日志文件目录,必须要创建对应配置文件日志的日志目录
sudo mkdir -p /data/logs/demo #因为上面的日志路径是/data/logs/demo,所以我们这里的路径就是这个,这个根据自己的日志路径进行创建
7. 重启 supervisor 服务
sudo systemctl restart supervisord
8. supervisor 服务命令
sudo systemctl restart supervisord #使配置生效
sudo systemctl enable supervisord #设置服务开机启动,即设置enable
sudo systemctl start supervisord #启动服务
4.验证dotnet 进程是否启动成功
ps -ef | grep dotnet
5.(拓展知识)supervisor远程管理
进入supervisor配置文件
vim /etc/supervisor/supervisord.conf
;[inet_http_server] ; inet (TCP) server disabled by default ;port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface) ;username=user ; (default is no username (open server)) ;password=123 ; (default is no password (open server)) ;以下内容开启http服务 [inet_http_server] port=192.168.1.71:9001 ;ip 加端口,改为自己Centos的IP username=admin ;登陆账号,可以不设 password=123456 ;登陆账户,可以不设
重启服务,就好了!
6.关闭防火墙
CentOS 7.0默认使用的是firewall作为防火墙。 查看防火墙状态命令:firewall-cmd --state 停止firewall命令:systemctl stop firewalld.service 禁止firewall开机启动命令:systemctl disable firewalld.service
-------------------------------------------------------------------------------------------------------------------------------------------------