ASP.NET Core部署系列二:發佈到CentOS上

前言html

  在上一節中,經過一系列的步驟,已經將項目部署到IIS上,雖然遇到了一些問題,但最終解決併成功運行了。而在這一節中,將嘗試經過linux系統的環境下,部署項目,實現Net Core跨平臺的亮點。python

雖然網上已經有不少關於asp.net core在linux下的部署教程了,但我仍是想寫一篇,主要加強我本身的記憶,同時分享下我部署遇到的坑。linux

我在我電腦win7的操做系統中用來虛擬機建了個CentOS7,來演示,咱們的項目如何發佈在Linux上運行。nginx

開始web

1、安裝.Dotnet Core 2.2shell

  Linux上運行Dotnet Core程序的前提是安裝Dotnet Core Runtime,若是想要在Linux作 .NET Core的開發和編譯工做,那麼須要安裝 Dotnet Core SDK。Dotnet Core SDK中包括了Dotnet Core Runtime,因此這裏就直接安裝了Dotnet Core SDKvim

  Step 1:安裝Dotnet產品的必要前提centos

  在安裝Dotnet Core前,須要註冊Microsoft簽名密鑰並添加Microsoft產品提要,每臺機器只需註冊一次,執行以下命令:服務器

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

  Step 2:安裝Dotnet Core SDk,執行下列命令app

sudo yum update
y
sudo yum install dotnet-sdk-2.2
y
  你們注意,會有兩個「y」的緣由是,命令執行的中途停頓了,讓你確認下是否進行安裝,你要輸入「y」確認安裝纔會執行安裝

安裝完後,咱們輸入以下命令看下是否安裝成功

2、部署Asp.net Core 應用程序

  在CentOS系統中,新建publish文件夾

  上傳上一節發佈的文件到至/home/publish/。

  這邊我使用了Xftp進行文件的上傳。(若是是在本地虛擬機操做的話,也能夠直接複製到系統對應的文件夾目錄下)

  進入目錄:cd publish

   檢查是否能夠運行:dotnet LCzarCms.Admin.dll

  若是出現這些信息則表示成功運行

 

  到此,項目就運行成功了,這時候咱們是沒法訪問到這個頁面的,這時候咱們須要部署一個web容器來進行轉發,咱們可能還要安裝 nginx 、配置咱們的 FireWall 以及配置守護服務 Supervisor 等等

3、配置Nginx託管

  微軟官方提供的https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.2#monitor-the-app,把dotnet建立成一個服務

  安裝nginx

curl -o  nginx.rpm http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

 rpm -ivh nginx.rpm

yum install nginx

  啓動 Nginx

systemctl start nginx

  設置開機啓動linux宕機、重啓會自動運行nginx不須要連上去輸入命令):

systemctl enable nginx

4、配置防火牆

  開放80端口

firewall-cmd --zone=public --add-port=80/tcp –permanent

  重啓防火牆以使配置即時生效

systemctl restart firewalld

  測試nginx是否能夠訪問

 

5、配置Nginx對ASP.net Core 應用的轉發

  修改Nginx的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;
    }
}

  進行修改覆蓋

  從新加載,即時生效

nginx -s reload

  再次運行ASP.NET Core應用程序

  可是,測試咱們再次瀏覽運行的時候,會出現以下這種狀況:

  這是什麼狀況?通過後續瞭解,這個問題是因爲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

  咱們再次訪問運行一下:

  此次已經能夠成功的運行起來了。

  至此基本完成了部署

可是,咱們仍是存在着其餘的問題:

  1.ASP.NET Core應用程序運行在shell之中,若是關閉shell則會發現ASP.NET Core應用被關閉,從而致使應用沒法訪問,這種狀況固然是咱們不想遇到的,並且生產環境對這種狀況是零容忍的。

  2.若是ASP.NET Core進程意外終止那麼須要人爲連進shell進行再次啓動,每每這種操做都不夠及時。

  3.若是服務器宕機或須要重啓咱們則仍是須要連入shell進行啓動。

  爲了解決這些問題,咱們須要有一個程序來監聽ASP.NET Core 應用程序的情況。

  那麼要解決這些問題,咱們就必需要實現這麼一個功能:若是ASP.NET Core 意外終止,那麼咱們要自動重啓;若是服務器服務器重啓後,咱們要有個相似腳本命令同樣,自動執行 dotnet 命令。如今正好有個基於 Python 開發的工具 Supervisor 能夠解決咱們上述問題

6、配置Supervisor守護服務

  在應用程序中止運行的時候當即從新啓動。這邊咱們用到了Supervisor這個工具,Supervisor使用Python開發的。

  安裝Supervisor

yum install python-setuptools

easy_install supervisor

  配置Supervisor

①運行supervisord 服務的時候,須要指定 Supervisor 配置文件,因此,先經過以下命令建立目錄,以便讓 supervisor 成功加載默認配置:

mkdir /etc/supervisor

②目錄建立成功後, 經過 echo_supervisord_conf 程序(用來生成初始配置文件,文件名能夠自定義)來初始化一個配置文件: 

echo_supervisord_conf > /etc/supervisor/supervisord.conf

③經過vim命令修改建立好的supervisord.conf配置信息:

vi /etc/supervisor/supervisord.conf

④最下邊找到以下文本片斷:

  修改成:

  爲咱們部署的.NET Core添加進程配置文件

①建立配置文件LCzarCmsAdmin.ini(文件名自定義)

[program:LCzarCmsAdmin]
command=dotnet /root/publish/LCzarCms.Admin.dll
directory=/root/publish/
autostart=true
autorestart=true
stderr_logfile=/var/log/LCzarCms.err.log
stdout_logfile=/var/log/LCzarCms.out.log
environment=ASPNETCORE_ENVIRONMENT=Production
user=root
stopsignal=INT

②在/etc/supervisor/目錄下建立一個文件夾conf.d

mkdir /etc/supervisor/conf.d/

  將剛建立的配置文件LCzarCmsAdmin.ini移到conf.d文件夾下

  若是服務已經啓動,則須要使用 supervisorctl reload 命令來使新的配置生效,固然,咱們這裏並無啓動,因此不須要這一步。

  啓動 Supervisor 服務

supervisord -c /etc/supervisor/supervisord.conf

  啓動服務後,咱們能夠檢測看一下

ps -ef | grep LCzarCms.Admin.dll

  這個時候, 咱們已經不須要使用dotnet命令運行程序, 一樣能夠訪問咱們部署的.NET Core程序了。

  至此關於ASP.NET Core應用程序的守護即配置完成

7、配置Supervisor開機啓動

①進入/usr/lib/systemd/system/目錄,並建立supervisord.service文件(或者在本地寫好了再經過ftp工具傳輸到指定目錄下)

vi /usr/lib/systemd/system/supervisord.service

  修改文件

[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

②設置開機啓動

  激活開機啓動:

systemctl enable supervisord.service

  啓動supervisor進程:

systemctl start supervisord.service

systemctl daemon-reload

  驗證一下是否爲開機啓動:

systemctl is-enabled supervisord

  重啓,測試是否能夠開機自啓

  好了。最終也成功的在重啓以後,能夠訪問地址。

總結

  1.在虛擬機上安裝CentOS7操做系統,這裏就不作具體的安裝內容了,能夠參考VMwear安裝Centos7

  2.學習了linux(CentOS) 環境下,新建、刪除、移動文件夾和文件的命令。同時,Linux下路徑是區分目錄大小寫的

  3.不少東西都是翻閱了網上大神的資料加上本身的實踐理解總結記錄的。若是有不對的或不理解的地方,但願你們能夠指正和多多交流

相關文章
相關標籤/搜索