【.Net Core】使用 Nginx 發布 .Net Core 3.1 項目至LInux(Centos7)


前置博客(博客中使用的項目來自於此):

【Docker】 .Net Core 3.1 webapi 集成EF Code First,使用MySql進行業務操作 、配置swagger (三)

 

環境:.Net Core 3.1 , Centos7.6

工具:連接工具MobaXterm,阿里雲服務器一台

 

1.安裝微軟簽名,不安裝不能使用net。

rpm --import https://packages.microsoft.com/keys/microsoft.asc

 

2.安裝.net環境,也可以單獨安裝 dotnet-runtime ,但是缺少很多方便的工具包,不推薦。

yum install dotnet-sdk-3.1

 

3.先修改要發布的端口號,再右鍵項目發布,然后修改信息,發布。

 

 

 發布完,到目標文件夾把文件拖到  /home/xxx(隨意取名)   目錄下

      

dotnet Test.dll 

使用donet XXX運行項目,Test.dll是項目名。 運行后此項目只能本機訪問,沒有任何作用

  PS.運行的時候當前目錄一定要在項目文件夾 , 比如 在 /home/dotnet/Test 下執行 Test.dll ,如果在外部文件夾執行命令會有BUG。

 

下面使用nginx進行代理轉發請求,使外網也能訪問。

如果啟動的端口是5000,Nginx 可把5000端口映射到其他端口。

 

4.添加 Nginx 存儲庫

在某些Centos版本要添加 CentOS 7 EPEL 倉庫,實測Centos7.8不需要 :

yum install epel-release

 

5.安裝 Nginx

yum install nginx

 

6.啟動 Nginx

 systemctl enable nginx  #設置nginx為開機啟動

 systemctl start nginx  #啟動nginx服務

 // 其他

 systemctl stop nginx     #停止 nginx 服務

 systemctl restart nginx  #重啟 nginx 服務

 systemctl nginx reload   #重新加載配置文件。

 systemctl status nginx   #查看服務器狀態

 ps -ef | grep nginx      #查看Nginx是否啟動

 

 

7.修改 Nginx 配置文件

兩種方法,第一種是把 /etc/nginx/nginx.conf 文件中直接改 server 配置信息

第二種是把 /etc/nginx/nginx.conf 文件中server注釋掉,然后在 /etc/nginx/conf.d/ 添加一個 xxx.conf 配置文件,如下所示

  紅色畫圈部分的意思是加載這個文件夾下面的所有 .conf 配置文件

 新建一個xxx.conf配置文件

 

 netcore.conf 配置如下

server {
    listen 80;
    location / {
        proxy_pass http://localhost:8001;
        
        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;

        proxy_set_header Connection keep-alive;

        proxy_set_header Host $http_host;
 
        proxy_cache_bypass $http_upgrade;
    }
}

保存后重啟nginx

 systemctl restart nginx  #重啟 nginx 服務

或者刷新配置

sudo nginx -t    #檢查配置文件
sudo nginx -s reload    #重新加載配置文件

訪問站點80端口(80端口是默認端口自動隱藏),此端口會被nginx轉發至 8001端口

 再看看項目配置的swagger文檔

 

 

 

8.配置守護進程Supervisor

項目啟動只能前台運行,不能進行其他操作,所以要建一個守護進程,使得項目后台運行

安裝 supervisor

yum install supervisor

 檢查 /etc/supervisord.conf 配置文件,如果不為圈中代碼,請修改為圈中代碼。

意思是 supervisord.d 文件夾下的所有 ini 類型的文件都是配置文件

 

 

 

到/etc/supervisord.d 目錄下 新建 xxx.ini文件,文件配置內容如下 自己定義,記得一定要改運行命令和程序路徑。

[program:TestNetCore]
command=dotnet Test.dll                        #運行命令
directory=/home/dotnet/Test                    #程序路徑
environment=ASPNETCORE__ENVIRONMENT=Production #環境變量
user=root        #設置啟動進程的用戶,默認是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 #重新加載配置
systemctl enable supervisord #開機啟動
systemctl disable supervisord #取消開機啟動

其他相關操作

supervisorctl shutdown #關閉
supervisorctl reload      #重啟
systemctl is-enabled supervisord #驗證是否開機啟動
systemctl status supervisord.service #執行命令,查看服務器啟動失敗的原因
supervisorctl status                     #查看服務狀態
supervisorctl stop TestNetCore     #停止某個服務
supervisorctl start TestNetCore    #開始某個服務
supervisorctl restart TestNetCore # 重啟某個服務

測試一下是不是進程停止后supervisor使之自動啟動。

 

 

----- 分割線  -----   2020/12/23號補充 -------

最近在公司管服務器,新學會一種運行方式,特此分享,就是在dotnet xx.dll之前+nohup   后+ &

nohup dotnet Test.dll --urls="http://*:8001" > /dev/null 2>&1 &

 > /dev/null 2>&1   : 將日志輸出至 /dev/null , 2>&1 把錯誤輸出日志和標准輸出日志合並輸出

  • 標准輸入文件(stdin):stdin的文件描述符為0,Unix程序默認從stdin讀取數據。
  • 標准輸出文件(stdout):stdout 的文件描述符為1,Unix程序默認向stdout輸出數據。
  • 標准錯誤文件(stderr):stderr的文件描述符為2,Unix程序會向stderr流中寫入錯誤信息。

 

寫一個簡單Shell腳本,每次發布項目,重啟項目都使用這個腳本

腳本名定為: restartApi.sh

kill -9 $(ps -ef | grep 'dotnet Test.dll --urls=http://\*:8001' | grep -v grep | awk '{print $2}')

cd ./Test && nohup dotnet Test.dll --urls="http://*:8001" &

echo "重啟Test.Api執行完成"

說明:

1:搜索到名為 XXX 的進程,過濾掉grep本身進程,再選取輸出結果中的第二條數據(即PID),根據PID殺死這個進程。

2:   進入Test目錄下(項目在./home/dotnet/Test ,restartApi.sh在./home/dotnet), 運行項目。

3:輸出提示

使用 chmod u+x  賦予文件執行權限, 也可以使用 chmod 777 給所有權限。

 chmod 777 restartApi.sh 

執行腳本

./restartApi.sh 

 

 

 

 如果出現Killed提示,Ctrl+C退出就可以

 


免責聲明!

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



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