本文主要介紹了阿里雲CentOS7下如何成功的發佈ASP.Core應用並使用nginx進行代理, 並對所踩的坑加以記錄;html
使用putty鏈接阿里雲CentOS;並根據相關提示輸入帳戶密碼登陸便可(建議以root權限登陸)以下圖:python
.NET Core SDK的安裝很簡單, 根據 ASP.NET Core 10分鐘入門指導一步一步的安裝便可;本文簡單的將安裝步驟進行展現;linux
使用以下命令註冊Microsoft須要的依賴環境;nginx
rpm -Uvh https: //packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
更新可供安裝的產品vim
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版本tcp
dotnet --version
建立發佈的.NET Core runtime 要和你在CentOS 安裝的runtime一致; 本文是2.1.4
使用FTP工具FileZilla將編譯發佈後的程序文件上傳到服務器 /home/wwwroot
經過以下命令運行應用程序, 程序目錄爲你發佈到服務器的物理路徑, CoreWebTest.dll爲你建立的程序入庫DLL
dotnet /home/wwwroot/CoreWebTest/CoreWebTest.dll
當你看到以下內容, 表示程序已成功運行
使用以下命令安裝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 //重啓防火牆
首先,把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
查看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下正常運行;
經過上面的操做, 咱們已經能正常將.NET Core程序發佈到CentOS下來, 可是發佈過程當中咱們也發現了問題, 就是.NET Core不能自動的運行, 一旦咱們的命令行工具關掉, 發佈的程序就不能訪問了;
是否是能安裝一個相似於Windows Service同樣的服務, 能實時監控程序狀態,異常退出時能自動重啓。通過各類百度我找到了Supervisor。
Supervisor 是用Python開發的Linux/Unix系統下的一個進程管理工具。它可使進程(相似Windows Service)脫離終端,變爲後臺守護進程(daemon)。能實時監控進程狀態,異常退出時能自動重啓。詳細文檔請查看官網。
yum install python-setuptools
easy_install 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 後綴的文件做爲服務配置。
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下
命令以下:
supervisord -c /etc/supervisor/conf.d
這個時候, 咱們已經不須要使用dotnet命令運行程序, 一樣能夠訪問咱們部署的.NET Core程序了^ ^
一樣咱們須要配置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 已經結束;
若是這篇博文對你有所幫助,麻煩動動手指點個贊^-^