1. 程式人生 > >Asp.net Core 打包釋出 (Linux+Nginx)

Asp.net Core 打包釋出 (Linux+Nginx)

前言

上篇文章中介紹瞭如何在 Docker 容器中部署我們的 asp.net core 應用程式,本篇主要是怎麼樣為我們在 Linux 或者 macOs 中部署的 dotnet 程式建立一個守護程序,來保證我們的程式在異常或者是電腦重啟的時候仍然能夠正常訪問。

如果你以後用準備使用 asp.net core來開發專案的話,程式並且部署到 Linux 上的話,那麼此篇文章你值得收藏。
如果你覺得對你有幫助的話,不妨點個【推薦】。

目錄

  • 什麼是守護程序
  • Supervisor 介紹
  • Supervisor 安裝
  • Supervisor 配置,常用命令
  • Supervisor UI管理臺

什麼是守護程序

在linux或者unix作業系統中,守護程序(Daemon)是一種執行在後臺的特殊程序,它獨立於控制終端並且週期性的執行某種任務或等待處理某些發生的事件。由於在linux中,每個系統與使用者進行交流的介面稱為終端,每一個從此終端開始執行的程序都會依附於這個終端,這個終端被稱為這些程序的控制終端,當控制終端被關閉的時候,相應的程序都會自動關閉。但是守護程序卻能突破這種限制,它脫離於終端並且在後臺執行,並且它脫離終端的目的是為了避免程序在執行的過程中的資訊在任何終端中顯示並且程序也不會被任何終端所產生的終端資訊所打斷。它從被執行的時候開始運轉,直到整個系統關閉才退出。

此處的建立守護程序,是指釋出在Linux上 asp.net core 程式的dotnet xxx.dll命令的宿主程序建立一個守護程序。

在 Linux 上有很多可以管理程序的工具,我們使用 Supervisor 來做這個事情。
原因有兩點:
1、它是微軟官方文件推薦的,降低學習成本。
2、它並不一定是最好的,但一定是文件最全的。

Supervisor 介紹

Supervisor是採用 Python(2.4+) 開發的,它是一個允許使用者管理 基於 Unix 系統程序的 Client/Server 系統,提供了大量功能來實現對程序的管理。

Supervisor 安裝

在 masOS 中直接使用brew

工具進行安裝即可:
brew install supervisor

在 linux 中使用以下命令進行安裝:

ubuntu
sudo apt-get install supervisor

centos
yum install supervisor

python
pip install supervosor
easy_install supervisor

安裝完成之後:

image

mac:~ yangxiaodong$ brew install supervisor
Warning: supervisor-3.2.1 already installed

Supervisor 配置,常用命令

安裝完成之後,在 /ect/supervisor/confg.d/

 目錄下新建一個配置檔案(touch HelloWebApp.conf),取名為 HelloWebApp.conf

開啟HelloWebApp.conf (vim HelloWebApp.conf),寫入如下命令:

[program:HelloWebApp]
command=dotnet HelloWebApp.dll  #要執行的命令
directory=/home/yxd/Workspace/publish #命令執行的目錄
environment=ASPNETCORE__ENVIRONMENT=Production #環境變數
user=www-data  #程序執行的使用者身份
stopsignal=INT
autostart=true #是否自動啟動
autorestart=true #是否自動重啟
startsecs=1 #自動重啟間隔
stderr_logfile=/var/log/HelloWebApp.err.log #標準錯誤日誌
stdout_logfile=/var/log/HelloWebApp.out.log #標準輸出日誌

配置好以後 (:wq儲存退出),需要重新載入一下配置

sudo supervisorctl shutdown && sudo supervisord -c /etc/supervisor/supervisord.conf

或者你可以直接重啟 Supervisor:

sudo service supervisor stop
sudo service supervisor start

如果啟動的時候報錯,可以開啟位於/etc/log/supervisor/supervisord.log檔案來檢視具體的日誌。

其中dotnet 命令輸出的日誌檔案分別為位於

/var/log/HelloWebApp.err.log
/var/log/HelloWebApp.out.log

在這些檔案裡面你可以檢視程式中的異常資訊或者是執行資訊。

開啟瀏覽器,輸入 http://localhost:5000 發現已經可以瀏覽了。

Supervisor 常用命令

supervisorctl shutdown #關閉所有任務

supervisorctl stop|start program_name

supervisorctl status #檢視所有任務狀態

Supervisor UI 管理臺

Supervisor 預設給我們提供了一個圖形介面來供我們管理程序和任務,在 macOS 中預設配置的有,但是在 Linux 中我們需要手動開啟一下。

開啟位於/etc/supervisor/supervisord.conf檔案,新增inet_http_server 節點

image

然後就可以通過介面來檢視執行的程序了:

image

測試一下

最後,我們測試一下是否會自動重啟,開機自動執行?

1、程序管理中幹掉dot net ,發現可以重新啟動。以下是日誌:

2016-07-09 12:24:18,626 INFO spawned: 'HelloWebApp' with pid 1774
2016-07-09 12:24:19,766 INFO success: HelloWebApp entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2016-07-09 12:27:43,208 INFO exited: HelloWebApp (exit status 0; expected)
2016-07-09 12:27:44,223 INFO spawned: 'HelloWebApp' with pid 3687
2016-07-09 12:27:45,243 INFO success: HelloWebApp entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)

2、重啟機器,發現可以自動執行。