CentOS 下運行.net Core程序


系統: 阿里雲的默認 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 的形式,就可以通過圖形界面管理守護的進程了。非常方便。

 

 


免責聲明!

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



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