CentOS 下執行.net Core程式 .Net Core+Nginx+supervisor
系統: 阿里雲的預設 CentOS 7.5 映象
專案環境:.Net Core 2.2
一、安裝.Net Core的執行環境
第一步,如果是一臺新的伺服器,可以升級一下系統的基礎軟體。如果沒有必要也可以跳過這一步。
執行命令
sudo yum update
第二步,註冊Microsoft簽名金鑰,每個機器只要註冊一次就可以
註冊命令
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
執行結果
第三步:安裝.Net Core SDK ,這裡根據專案環境,需要安裝2.2版的。不同的開發環境選擇對應的執行時版本即可
執行命令
sudo yum install dotnet-sdk-2.2
完成後,通過命令,可以看出.net core的版本
dotnet --version
第四步:上傳一個.Net Core的程式,進入到程式包所在目錄
執行命令
dotnet HelloWrold.dll #專案的dll檔案
到這裡,就可以通過伺服器IP加上程式設定的埠號(一般預設是5000)進行訪問了。如果你的伺服器是在雲端,有安全防護,需要開啟對應的埠訪問許可權
二、通過 nginx 進行轉發
第一步、安裝nginx
執行命令
sudo yum install nginx
第二步,修改 nginx 的配置檔案
執行命令
vim /etc/nginx/nginx.conf
修改 location的值,修改的內容如下:
# 傳遞真實IP到後端 proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:5000;
這個配置的意思是監聽80埠,如果有人訪問80埠就把請求轉到5000埠,這裡的5000埠就是你 .Net Core 程式的埠,預設為5000可以更改,如果有更改換掉即可。
第三步、重啟 nginx 的服務。啟動 .Net Core 的程式
#重啟 nginx systemctl restart nginx #進行dotnet 專案目錄 cd /home/www/hello/ #執行dotnet 專案 dotnet Helloworld.dll
這個時候,我們就可以通過伺服器的80埠,訪問我們的 .Net Core 程式了。
第四步、配置多個.net core的轉發
如果你的伺服器的nginx需要轉發多個正在執行的 .Net Core 專案,可以通過在nginx的/etc/nginx/conf.d/ 目錄下,為每個專案建立一個轉發的規則檔案
# 開啟配置檔案目錄 cd /etc/nginx/conf.d/
這裡的配置檔案目錄和檔案格式 在 nginx.conf 中有指定。
進入目錄後,新建一個檔案
vim hello.conf #名稱沒有要求,可以和自己的專案名稱一樣,方便查詢
server { listen 80; server_name hello.leodev.cn; index index.html; location / { # 傳遞真實IP到後端 proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:5000; } }
可以看到,配置中,和之前nginx.conf的檔案基本是一樣的。 我們只是為專案綁定了一個域名
然後重啟 nginx 服務,這個時候,我們就可以通過 繫結的域名,訪問到我們的 .Net Core 程式了。
三、使用 supervisor 為程式建立守護程序
第一步、安裝 supervisor
執行命令:
yum install supervisor
第二步、修改 supervisor 的配置檔案
vi /etc/supervisord.conf
這裡的意思,在 supervisord.d 資料夾下的所有 ini 型別的檔案都是配置檔案
我們在這個資料夾下為我們的守護程式建立一個配置檔案
#建立配置檔案
vim /etc/supervisord.d/hello.ini
[program:helloworldnetcore] command=dotnet helloworld.dll #執行命令 directory=/home/www/hello #程式路徑 environment=ASPNETCORE__ENVIRONMENT=Production user=root stopsignal=INT autostart=true #自動啟動 autorestart=true #3秒自動重啟 startsecs=3 stderr_logfile=/var/log/ossoffical.err.log stdout_logfile=/var/log/ossoffical.out.log
以上是我的專案的守護配置檔案,可以根據自己的配置檔案,修改前三行的內容
第三步、啟動服務
supervisord -c /etc/supervisord.conf #啟動服務 supervisorctl reload #重新載入配置 #其他相關操作 supervisorctl shutdown #關閉 systemctl enable supervisord #開機啟動 systemctl is-enabled supervisord #驗證是否開機啟動
有時候啟動的時候會提示錯誤:
錯誤1:埠被佔用
解決方案:
#查詢到 supervisord的程序 ps -ef | grep supervisord #將查詢的程序的 id,殺掉 kill -9 PId
錯誤二:配置檔案有問題
提示你執行
#執行命令,檢視伺服器啟動失敗的原因 systemctl status supervisord.service
可以看到提示的錯誤,不是一個有效的 boolean 值。 或者其他的錯誤提示。
這個情況,我會把建立的hello.ini 中的註釋,都刪除掉。這樣就沒有問題了。
還有人說是配置檔案的編碼格式問題,這個我沒有去研究,發現只要把註釋刪除就可以正常啟動。
到這裡基本就完成了對 .Net Core 程式的程序守護,當 .Net Core 程序意外結束時,會自動啟動。
第四步、配置守護程序的介面管理功能
開啟 supervisor 的配置檔案
vim /etc/supervisord.conf
去掉這裡的註釋,然後把值根據自己的習慣,修改一下。 記得開啟阿里雲中埠 9001 的訪問許可權。
這樣,在瀏覽器,通過IP:port 的形式,就可以通過圖形介面管理守護的程序了。非常方便。
https://www.cnblogs.com/leoxuan/p/11108231.html