在linux上部署netcore專案
sudo yum install libunwind libicu(安裝libicu依賴)
sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet(解壓縮)
sudo ln -s /opt/dotnet/dotnet /usr/local/bin(建立連結)
輸入 dotnet –info 來檢視是否安裝成功
如果可以執行則表明.NET Core SDK安裝成功。
回到目錄部署ASP.NET Core應用程式
上傳之前釋出的資料夾至/home/wwwroot/。
這邊我使用了Xftp進行檔案的上傳。
檢查是否能夠執行
命令:dotnet /home/wwwroot/WebApplication1/WebApplication1.dll
如果出現這些資訊則表示成功執行。
這時候我們是無法訪問到這個頁面的,這時候我們需要部署一個web容器來進行轉發。
回到目錄配置Nginx
安裝Nginx
安裝成功!
輸入:systemctl start nginx 來啟動nginx。
輸入:systemctl enable nginx 來設定nginx的開機啟動(linux宕機、重啟會自動執行nginx不需要連上去輸入命令)。
配置防火牆
命令:firewall-cmd --zone=public --add-port=80/tcp --permanent
命令:systemctl restart firewalld(重啟防火牆以使配置即時生效)
測試nginx是否可以訪問。
配置nginx對ASP.NET Core應用的轉發
修改 /etc/nginx/conf.d/default.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;
}
}
上傳至CentOS進行覆蓋。
執行:nginx –s reload 使其即時生效
執行ASP.NET Core應用程式
命令:dotnet /home/wwwroot/WebApplication1/WebApplication1.dll
這時候再次嘗試訪問。
想哭的心都有。。。經過後續瞭解,這個問題是由於SELinux保護機制所導致,我們需要將nginx新增至SELinux的白名單。
接下來我們通過一些命令解決這個問題。。
yum install policycoreutils-python
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
sudo semodule -i mynginx.pp
再次嘗試訪問。
至此基本完成了部署。
回到目錄配置守護服務(Supervisor)
目前存在三個問題
問題1:ASP.NET Core應用程式執行在shell之中,如果關閉shell則會發現ASP.NET Core應用被關閉,從而導致應用無法訪問,這種情況當然是我們不想遇到的,而且生產環境對這種情況是零容忍的。
問題2:如果ASP.NET Core程序意外終止那麼需要人為連進shell進行再次啟動,往往這種操作都不夠及時。
問題3:如果伺服器宕機或需要重啟我們則還是需要連入shell進行啟動。
為了解決這個問題,我們需要有一個程式來監聽ASP.NET Core 應用程式的狀況。在應用程式停止執行的時候立即重新啟動。這邊我們用到了Supervisor這個工具,Supervisor使用Python開發的。
安裝Supervisor
yum install python-setuptools
easy_install supervisor
配置Supervisor
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
修改supervisord.conf檔案,將檔案尾部的配置
修改為
ps:如果服務已啟動,修改配置檔案可用“supervisorctl reload”命令來使其生效
配置對ASP.NET Core應用的守護
建立一個 WebApplication1.conf檔案,內容大致如下
[program:WebApplication1]
command=dotnet WebApplication1.dll ; 執行程式的命令
directory=/home/wwwroot/WebApplication1/ ; 命令執行的目錄
autorestart=true ; 程式意外退出是否自動重啟
stderr_logfile=/var/log/WebApplication1.err.log ; 錯誤日誌檔案
stdout_logfile=/var/log/WebApplication1.out.log ; 輸出日誌檔案
environment=ASPNETCORE_ENVIRONMENT=Production ; 程序環境變數
user=root ; 程序執行的使用者身份
stopsignal=INT
將檔案拷貝至:“/etc/supervisor/conf.d/WebApplication1.conf”下
執行supervisord,檢視是否生效
supervisord -c /etc/supervisor/supervisord.conf
ps -ef | grep WebApplication1
如果存在dotnet WebApplication1.dll 程序則代表執行成功,這時候在使用瀏覽器進行訪問。
至此關於ASP.NET Core應用程式的守護即配置完成。
配置Supervisor開機啟動
新建一個“supervisord.service”檔案
# dservice for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s[Install]
WantedBy=multi-user.target
將檔案拷貝至:“/usr/lib/systemd/system/supervisord.service”
執行命令:systemctl enable supervisord
執行命令:systemctl is-enabled supervisord #來驗證是否為開機啟動