Centos7 Nginx部署.Net Core with Supervisor


首先安裝.NET Core Runtime:

sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm

安裝.NET Runtime

sudo yum install aspnetcore-runtime-3.0 -y

安裝完成后使用以下命令驗證安裝:

dotnet --info

顯示以下內容表示安裝成功:

  It was not possible to find any installed .NET Core SDKs
  Did you mean to run .NET Core SDK commands? Install a .NET Core SDK from:
      https://aka.ms/dotnet-download

Host (useful for support):
  Version: 3.0.0
  Commit:  95a0a61858

.NET Core SDKs installed:
  No SDKs were found.

.NET Core runtimes installed:
  Microsoft.AspNetCore.App 3.0.0 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 3.0.0 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download

這里我只安裝了Runtime並沒有安裝開發使用的SDK,只需要保證能運行.net core項目就可以啦

下一步,使用VS2019創建一個.net core mvc項目,創建好后直接將演示內容發布(我這里直接發布成文件系統)

 

然后使用FTP工具將發布編譯生成的文件全部復制到Centos 7上指定的目錄,我這里是放在/etc/nginx/websites/coretest

使用使用命令定位到當前目錄:

cd /etc/nginx/websites/coretest

然后在當前目錄下運行dotnet CoreTest.dll命令以啟動網站:

dotnet CoreTest.dll

運行結果如下:

 

 可以看出當前網站運行在5000端口

接下來我們使用nginx訪問,直接在nginx上做個轉發代理到5000端口就可以了

首先先安裝好nginx后,在/etc/nginx/conf.d下面創建一個新的nginx配置文件,例如我的就叫coretest.conf,將內容設置如下:

server {
    listen       8080;
    server_name  localhost;
    location / {
	proxy_pass http://localhost:5000;
	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;
    }
}

這里我新建了一個8080端口,然后設置代理到5000端口

然后檢查nginx配置文件:

nginx -t

然后重啟nginx:

nginx -s reload

如果ngix -s reload 提示nginx: [error] invalid PID number "" in "/run/nginx.pid",解決方法:

#nginx.conf文件的路徑可以從nginx -t的返回中找到
nginx -c /etc/nginx/nginx.conf
# 然后再執行
nginx -s reload

配置文件加好后,防火牆開放8080端口:

firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload

然后使用IP + 端口訪問(8080):

http://192.168.100.131:8080/ ((lll¬ω¬) 我的是虛擬機。。。)

訪問之后可能會出現502的錯誤:

如果訪問顯示“502 Bad Gateway”,可能是由於SELinux保護機制所導致,需要將nginx添加至SELinux的白名單。命令如下:

yum install policycoreutils-python -y
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
sudo semodule -i mynginx.pp

執行完命令后重新訪問http://192.168.100.131:8080:

 

 

 訪問成功啦~

配置進程守護(Supervisor)

在CentOS 7上,如果關閉終端,開啟的進程就會關閉,導致程序無法訪問

為了解決這個問題,就用到了Supervisor這個工具,Supervisor使用Python開發的,用於監聽ASP.NET Core 應用程序的狀況。在應用程序停止運行的時候立即重新啟動。

Supervisor( http://supervisord.org/)是用Python開發的一個client/server服務,是Linux/Unix系統下的一個進程管理工具,不支持Windows系統。它可以很方便的監聽、啟動、停止、重啟一個或多個進程。用Supervisor管理的進程,當一個進程意外被殺死,supervisort監聽到進程死后,會自動將它重新拉起,很方便的做到進程自動恢復的功能,不再需要自己寫shell腳本來控制。
安裝 Supervisor
1、yum install python-setuptools -y
2、easy_install supervisor

配置Supervisor

創建supervisor文件夾,通過echo_supervisord_conf初始化配置文件

1、mkdir /etc/supervisor
2、echo_supervisord_conf > /etc/supervisor/supervisord.conf

修改新建的supervisord.conf配置信息,將最后面的

;files = relative/directory/*.ini

修改為:

[include]
files = /etc/supervisor/conf.d/*.ini

即去掉最后兩行前面的“;”號。

為.Net Core 項目添加進程配置文件:

在/etc/supervisor/目錄下創建名字為conf.d文件夾然后創建一個CoreTest.ini文件,內容如下:

[program:CoreTest]
command=dotnet CoreTest.dll ; 運行程序的命令
directory=/etc/nginx/websites/coretest/ ; 命令執行的目錄
autorestart=true ; 程序意外退出是否自動重啟
stderr_logfile=/etc/nginx/websites/coretest/log/CoreTest.err.log ; 錯誤日志文件
stdout_logfile=/etc/nginx/websites/coretest/log/CoreTest.out.log ; 輸出日志文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 進程環境變量
user=root ; 進程執行的用戶身份
stopsignal=INT

啟動Supervisor服務: 

supervisord -c /etc/supervisor/supervisord.conf

啟動服務后可以通過命令查看是否配置成功:

ps -ef | grep CoreTest.dll

如果看到以下內容,表示配置成功,就可以訪問.Net Core項目了:

 

 配置Supervisor開機啟動:

進入/usr/lib/systemd/system/目錄,並創建supervisord.service文件,添加內容:

[Unit]
Description=Supervisor daemon
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target

使配置生效:

systemctl daemon-reload

設置服務開機啟動:

systemctl enable supervisord

啟動supervisor進程:

systemctl start supervisord

驗證是否為開機啟動:

systemctl is-enabled supervisord

 

 

 supervisor常用命令:

supervisorctl status    //查看所有任務狀態
supervisorctl shutdown  //關閉所有任務
supervisorctl start|stop|restart all          //控制所有進程
supervisorctl start|stop|restart program_name //控制目標進程 
  • 參考與致謝:
    • https://www.cnblogs.com/zhuyuchao/p/11262666.html
    • https://www.jianshu.com/p/dc38b80727e4


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM