CentOS8 .NET Core项目部署
1. 安装 .NET Core SDK
.NET Core 3.1 在 CentOS 8 的默认包存储库中有提供,直接使用下面命令安装 SDK:
sudo dnf install dotnet-sdk-3.1
安装完成后,使用 dotnet --info 命令查看是否能正确输出当前 SDK 信息。
2. 安装 ftp
2.1 使用以下命令安装VSFTPD:
sudo yum install vsftpd
2.2 启动服务,并将其设置为在系统启动时启动,并显示以下内容:
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
2.3 开启21端口进行通信,注意这里是云服务器控制台开启端口
2.4 配置VSFTPD
修改 /etc/vsftpd/vsftpd.conf 配置文件 。
使用以下命令编辑配置文件:
vi /etc/vsftpd/vsftpd.conf
此处注意 userlist_enable 、userlist_deny 的设置,如果仅用来上传一次文件,可以设置 userlist_enable=No, 之后再关闭
完成配置文件编辑后,保存更改。vi 保存退出: Esc 进入命令模式,输入 :wq 即可。
重启vsftpd服务:
sudo systemctl restart vsftpd
2.5 创建ftp 用户
使用命令:
sudo adduser newftpuser
sudo passwd newftpuser
根据提示输入密码。
将新用户添加到用户列表:
echo "newftpuser" | sudo tee –a /etc/vsftpd/user_list
给新用户创建目录,并调整权限:
sudo mkdir –p /home/newftpuser/ftp/upload sudo chmod 550 /home/newftpuser/ftp sudo chmod 750 /home/newftpuser/ftp/upload sudo chown –R testuser: /home/newftpuser/ftp
使用用户及密码登录服务器
ftp ip
3. 使用ftp 上传 .NET Core 文件
将文件压缩为.zip 文件
命令上传文件:
put test.zip
上传成功后,在服务器的 /home/newftpuser 文件中将出现 上传的 test.zip
命令解压文件:
unzip test.zip
4. 启用防火墙
查看防火墙状态:
systemctl status firewalld
启动防火墙:
systemctl start firewalld
允许 HTTP 和 HTTPS:
firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --permanent --zone=public --add-service=https
开放 80 端口:
firewall-cmd --permanent --zone=public --add-port=80/tcp
重启防火墙:
firewall-cmd --reload
5. 安装 nginx
安装 nginx
sudo dnf install nginx
启动 nginx
systemctl start nginx
设置开机自启
systemctl enable nginx
配置 nginx,nginx 默认的配置文件为 /etc/nginx/nginx.conf
修改 该配置文件,如果有多个项目配置文件可以在 /etc/nginx/conf.d 中创建多个 .conf 文件
server { listen 80; #更改为80端口 server_name localhost; #更改为域名名称 location / { proxy_pass http://localhost:5000; #更改为 .netcore项目的地址 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; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
}
测试配置:
nginx -t
重新启动:
nginx -s reload
查看状态:
sudo systemctl status nginx
需要注意80 端口是否被占用,使用以下命令查看端口:
netstat -tulpn
如果被占用,可用以下命令杀死进程:
kill -pid
6. 启动项目
进入项目文件,使用以下命令启动项目:
dotnet TEST.WebAPI.dll
至此,如果配置正确,你应该可以使用域名或者ip 在你本地访问项目。
7. 守护进程Supervisor
7.1 安装 Supervisor
#执行epel-release sudo yum -y install epel-release #安装Supervisor sudo yum -y install supervisor #使用配置文件启动supervisor sudo supervisord -c /etc/supervisord.conf #启动supervisorctl sudo supervisorctl -c /etc/supervisord.conf #查看supervisor 版本 version
#查看状态
status
7.2 创建.NET Core项目的Supervisor配置文件
#进入supervisord.d目录 cd /etc/supervisord.d #新建NetCore进程配置文件 sudo touch DemoNetCore.ini #查看和编辑DemoNetCore.ini配置文件 sudo vim DemoNetCore.ini #进入文件后,按“i”或者“a”进入插入模式,插入下面的配置信息
#配置程序名称 [program:DemoNetCore] #运行程序的命令 command=dotnet Demo.Net.Core.dll --urls="http://*:8081;http://*:8082" #命令执行的目录 directory=/var/www #进程环境变量 environment=ASPNETCORE_ENVIRONMENT=Production #进程执行的用户身份 user=demo #进程停止信号,可以为TERM, HUP, INT, QUIT, KILL, USR1, or USR2等信号默认为TERM 。当用设定的信号去干掉进程,退出码会被认为是expected,非必须设置 stopsignal=INT #如果是true的话,子进程将在supervisord启动后被自动启动,默认就是true,非必须设置 autostart=true #这个是设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。如果为false的时候,无论什么情况下,都不会被重新启动,如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的退出码的时候,才会被自动重启。当为true的时候,只要子进程挂掉,将会被无条件的重启 autorestart=true #这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功了,默认值为1 。非必须设置 startsecs=1 #错误日志文件 stderr_logfile=/var/log/DemoNetCore.err.log #输出日志文件 stdout_logfile=/var/log/DemoNetCore.out.log
7.3 保存配置文件,并重新启动
#通过配置文件来启动supervisor sudo supervisord -c /etc/supervisord.conf #启动supervisorctl sudo supervisorctl -c /etc/supervisord.conf #重新加载配置文件 reload #查看运行的状态 status
7.4 查看站点知否运行
ps -aux | grep "Demo.Net.Core.dll"
7.5 配置Supervisor开机自启动
#进入system目录 cd /usr/lib/systemd/system #编辑supervisord.service文件 sudo vim supervisord.service
supervisord.service文件内容为:
[Unit]
Description=Process Monitoring and Control Daemon
After=rc-local.service nss-user-lookup.target
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42
[Install]
WantedBy=multi-user.target
编辑好后保存退出,然后执行命令,查看是否启动成功
#启动服务 systemctl enable supervisord #验证一下是否为开机启动 systemctl is-enabled supervisord
7.6 Supervisor常用命令
# 启动所有
supervisorctl start all
# 重启所有
supervisorctl restart all
# 停止所有
supervisorctl stop all
#PS:要操作某个服务,把all换成服务名即可
#查看服务状态
supervisorctl status
至此,部署完毕。。。