阿里雲CentOS7部署ASP.NET Core


本文主要介紹了阿里雲CentOS7下如何成功的發布ASP.Core應用並使用nginx進行代理, 並對所踩的坑加以記錄;

環境、工具、准備工作

開始進行ASP.Net Core 應用程序部署

使用putty連接阿里雲CentOS;並根據相關提示輸入賬戶密碼登錄即可(建議以root權限登錄)如下圖:

1.進行安裝.NET Core SDK

.NET Core SDK的安裝很簡單, 根據 ASP.NET Core 10分鍾入門指導一步一步的安裝即可;本文簡單的將安裝步驟進行展示;

使用如下命令注冊Microsoft需要的依賴環境;

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

更新可供安裝的產品

yum update

64位Centos 需要安裝 libunwind (libunwind介紹), 32位系統跳過

yum install libunwind libicu

 安裝.NET Core SDK

yum install dotnet-sdk-2.1.4

.net core sdk的版本根據自己需要進行選擇(官方版本鏈接) 本文2.1.4版本

安裝比較慢, 請耐心等候, 一定要等到Complete!出現;

使用如下命令查看sdk版本

dotnet --version

 

2.使用VS2017創建一個新的ASP.NET Core MVC程序, 並發布;

創建發布的.NET Core runtime 要和你在CentOS 安裝的runtime一致; 本文是2.1.4

3.部署ASP.NET Core 應用程序到阿里雲CentOS服務器

使用FTP工具FileZilla將編譯發布后的程序文件上傳到服務器 /home/wwwroot

4.運行ASP.NET Core 應用程序

通過如下命令運行應用程序, 程序目錄為你發布到服務器的物理路徑, CoreWebTest.dll為你創建的程序入庫DLL

dotnet /home/wwwroot/CoreWebTest/CoreWebTest.dll

 當你看到如下內容, 表示程序已成功運行

安裝配置Nginx進行反向代理

1.安裝 Nginx

使用如下命令安裝CentOS的 EPEL倉庫;

yum install epel-release

 使用如下命令安裝Nginx

yum install nginx

 Nginx安裝完成后, 系統並不會啟動Nginx, 使用如下命令啟動Nginx:

systemctl start nginx

使用如下命令設置系統啟動后, 默認啟動Nginx:

systemctl enable nginx

 查看firewall 狀態, 並啟動防火牆

systemctl status firewalld  //查看防火牆狀態 

systemctl start firewalld //啟動防火牆

 使用如下命令, 允許HTTP和HTTPS通過防火牆

firewall-cmd  --permanent --zone=public --add-service=http

firewall-cmd  --permanent --zone=public --add-service=https

firewall-cmd  --reload

在瀏覽器地址欄輸入你服務器的IP地址, 如果出現下圖表示Nginx安裝配置成功;如果無法訪問, 請查看firewall 是否開放80端口;

firewall-cmd --zone=public --add-port=80/tcp --permanent   //開放80端口
systemctl restart firewalld.service //重啟防火牆

阿里雲下還要添加安全規則, 開放80端口;

2.修改Nginx的配置文件

首先,把Nginx的默認配置文件 /etc/nginx/nginx.conf里 80 端口轉發配置 server 節點用 # 符注釋掉。使用命令vi 或將 nginx.conf 文件下載(使用FileZilla)到本地修改完成后在上傳(建議);

vi /etc/nginx/nginx.conf //打開文件編輯模式, 輸入i 進行編輯 完成后 按ESC鍵輸入:wq 回車 退出編輯模式

 

然后我們重新創建一個自定義的Nginx配置文件用來代理Core 程序, 我創建名稱為NginxForCore.conf(你可以自定義文件名);配置文件內容如下:

server {
    listen 80;
    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_pass http: 后的url為你在core 啟動項配置的路徑(默認localhost:5000,如何修改請點擊連接查看)

 將創建好的自定義配置文件上傳到 /etc/nginx/conf.d目錄下 ,最后執行命令 重啟Nginx;

nginx -s reload

3.將Nginx添加到SELinux白名單

查看SELinux狀態是否為Enforcing(SELinux默認狀態為Disabled如何修改狀態請查看連接), 必須保證SELinux的狀態為Enforcing否則添加白名單會失敗;

使用如下命令:

getenforce

 如果查詢出狀態如下圖, 添加Nginx到SELinux白名單

使用如下命令, 將Nginx添加至SELinux白名單;

yum install policycoreutils-python

cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M  AddNginxToWhiteList

semodule -i  AddNginxToWhiteList.pp

 

 紅色部分(AddNginxToWhiteList)可自己命名;

在瀏覽器地址欄輸入你服務器的IP地址, 如果出現下圖說明我們的ASP.NET Core MVC 已經發布成功了;(要保證你發布的.NET Core程序在Linux已經運行,如何運行見步驟:4.運行ASP.NET Core 應用程序)

如果沒有出現上圖, 而是

請檢查:

1-Nginx是否按上述步驟正確配置;

2-防火牆及阿里雲安全組策略是否正確配置(主要指80端口);

3-.NET Core程序是否在CentOS下正常運行;

 配置守護進程Supervisor, 讓我們的程序能365天24小時不間斷運行

  通過上面的操作, 我們已經能正常將.NET Core程序發布到CentOS下來, 但是發布過程中我們也發現了問題, 就是.NET Core不能自動的運行, 一旦我們的命令行工具關掉, 發布的程序就不能訪問了;

是不是能安裝一個類似於Windows Service一樣的服務, 能實時監控程序狀態,異常退出時能自動重啟。經過各種百度我找到了Supervisor。

   Supervisor 是用Python開發的Linux/Unix系統下的一個進程管理工具。它可以使進程(類似Windows Service)脫離終端,變為后台守護進程(daemon)。能實時監控進程狀態,異常退出時能自動重啟。詳細文檔請查看官網。

1-安裝Supervisor

yum install python-setuptools
easy_install supervisor

 2-配置Supervisor

運行S upervisord 服務的時候,需要指定 Supervisor 配置文件,所以,先通過如下命令創建目錄,以便讓 Supervisor 成功加載默認配置:

mkdir /etc/supervisor

 目錄創建成功后, 通過 echo_supervisord_conf 程序(用來生成初始配置文件,文件名可以自定義)來初始化一個配置文件

echo_supervisord_conf > /etc/supervisor/supervisord.conf

 通過vim命令修改創建好的supervisord.conf配置信息

vi /etc/supervisor/supervisord.conf

最下邊找到如下文本片段:

將上面配置改為:

該操作的目的是我們創建一個Supervisor 進程配置文件加載目錄。讓Supervisor自動加載該目錄下.conf 后綴的文件作為服務配置。

3-為我們部署的.NET Core添加進程配置文件CoreWebTest.conf

在本地創建文件CoreWebTest.conf 內容如下:

[program:CoreWebTest]                         ;自定義進程名稱, 根據自己喜好命名
command=dotnet CoreWebTest.dll                ;程序啟動命令 使用dotnet 命令 directory=/home/wwwroot/CoreWebTest ;命令執行的目錄 你.NET Core 程序存放目錄 autostart=true ;在Supervisord啟動時,程序是否啟動 autorestart=true ;程序退出后自動重啟 startretries=5 ;啟動失敗自動重試次數,默認是3 startsecs=1 ;自動重啟間隔 user=root ;設置啟動進程的用戶,默認是root priority=999 ;進程啟動優先級,默認999,值小的優先啟動 stderr_logfile=/var/log/CoreWebTest.err.log ;標准錯誤日志 路徑可以自定義 stdout_logfile=/var/log/CoreWebTest.out.log ;標准輸出日志  路徑可以自定義 environment=ASPNETCORE_ENVIRONMENT=Production ;進程環境變量 stopsignal=INT ;請求停止時用來殺死程序的信號

 通過FileZilla將文件上傳到目錄:/etc/supervisor/conf.d下

 4-啟動 Supervisor 服務

命令如下:

supervisord -c /etc/supervisor/conf.d

 這個時候, 我們已經不需要使用dotnet命令運行程序, 同樣可以訪問我們部署的.NET Core程序了^ ^

5-配置Supervisor開機啟動

  同樣我們需要配置Supervisor在CentOS斷電或重啟的情況下自動開機運行, 從而保證我們的程序能正常訪問;

  為Supervisor創建一個服務啟動的腳本AutoStartSupervisor.service, 上傳到系統目錄: /usr/lib/systemd/system/ 腳本內容如下:

[Unit]
Description=Supervisor daemon
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
# 具體屬性作用請官網查看

通過FileZilla將文件上傳到目錄: /usr/lib/systemd/system/ 下

設置Supervisor開機啟動

systemctl enable AutoStartSupervisor.service

 使用重啟命令驗證配置是否成功.

reboot  //驗證方式為CentOS正常重啟后, 我們能在瀏覽器里訪問到我們發布的.NET Core程序

Supervisor的配置比較復雜,本文只是進行了簡單的使用,如需詳細深入的配置,請去官網學習;

至此,阿里雲CentOS7下部署ASP.NET Core 已經結束;

如果這篇博文對你有所幫助,麻煩動動手指點個贊^-^


免責聲明!

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



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