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
至此,部署完畢。。。