前言:
最近公司需要開發專案能在Linux系統上執行,示例開發專案採用.Net Core + Angular開發;理論上完全支援跨平臺。
但是實踐才是檢驗真理的唯一標準;那麼還是動手來驗證實現下;過程中萬一出現什麼問題也算是積累經驗。
一、環境準備
由於本次主要驗證專案部署Linux環境,也不想去重新搭建一個虛擬機器環境;就使用Win10中Linux子系統(WSL什麼?)
1、WSL啟用步驟:
- 進入【啟用或關閉Windows功能】中啟用WSL,如下圖
- 進入Microsoft store 選擇相應版本,本機安裝的是CentOS
- 安裝完成後啟動時(出現問題)
最終確定問題原因:需要更新Linux核心包(更新包下載地址:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi)
下載安裝後,CentOS系統環境準備好了。
2、.NET Core 環境安裝:
- 更新下系統基礎軟體版本(可不執行)
sudo yum update
- 註冊微軟簽名祕鑰:
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
- 安裝.NET Core SDK,示例程式採用3.1版本開發
sudo yum install dotnet-sdk-3.1
- 檢視是安裝成功,如圖則表示已經安裝成功
3、Nginx環境安裝:(部署web專案)
-
依賴環境安裝
yum install gcc-c++ yum install pcre pcre-devel yum install zlib zlib-devel yum install openssl openssl--devel
-
新增Nginx的yum庫
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
-
安裝Nginx
sudo yum install nginx
-
Nginx基本資訊
目錄結構:
配置路徑 | /etc/nginx/ |
錯誤日誌 | /var/log/nginx/error.log |
訪問日誌 | /var/log/nginx/access.log |
預設站點目錄 | /usr/share/nginx/html |
基本命令:
-
- nginx //啟動nginx
- nginx -s quit //停止nginx
- nginx -s reload //重新載入配置檔案
二、專案部署
部署專案到CentOS有多種方式:直接執行、Docker部署(前面學習文章已多次使用),本次就採用直接執行方式來部署應用。由於專案採用前後端分離實現,需要分別部署
- 服務端部署
1、將服務端專案檔案拷貝到CentOS目錄中:本次部署路徑為:/home/www/publish
2、修改配置檔案:需要使用vim命令(需要單獨安裝)
通過命令進入配置檔案編輯:
vim appsettings.json
編輯完成後採用以下命令退出
vim命令 :w 儲存但不退出 :wq 儲存並退出 :q 退出 :q! 強制退出,不儲存 :e! 放棄所有修改,從上次儲存檔案開始再編輯命令歷史
3、啟動服務
進入專案目錄執行命令:
[root@Coder supervisor]# cd /home/www/publish [root@Coder publish]# dotnet ZLSoft.UnifiedDS.Web.Host.dll --urls http://*:8220
- 前端專案部署
1、將web專案拷貝到:/home/www/web
2、在Nginx配置檔案目錄中新增配置檔案web.conf
server { listen 8221; server_name 192.168.243.86:8220; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /home/www/web; index index.html index.htm; try_files $uri $uri/ /index.html?$query_string; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
注意: 由於Angular專案中使用了路由重定向,則需要使用標記內容
3、更新Nginx配置檔案:
/usr/sbin/nginx -s reload
三、執行示例
服務端執行:
Web專案執行效果:
到此專案已成功執行,但是當我把CentOS命令結束執行,則web服務端停止執行,那麼需要把建立服務實現守護程式
四、守護程式建立-supervisor
1、安裝supervisor
#安裝python的擴充套件 yum install python-setuptools #通過python的擴充套件安裝supervisor easy_install supervisor #建立設定資料夾 mkdir /etc/supervisor mkdir /etc/supervisor/conf.d #設定檔案 echo_supervisord_conf > /etc/supervisor/supervisord.conf #修改設定檔案(supervisord.d 資料夾下的所有 ini 型別的檔案都是配置檔案) #在檔案/etc/supervisor/supervisord.conf末端 ;files = relative/directory/*.ini 改為 files = conf.d/*.ini
2、建立配置檔案:在/etc/supervisor/conf.d目錄下建立publish.conf
[program:publish] command=dotnet ZLSoft.UnifiedDS.Web.Host.dll --urls http://192.168.243.86:8220 #執行命令 directory=/home/www/publish #程式路徑 environment=ASPNETCORE__ENVIRONMENT=Production user=root stopsignal=INT autostart=true #自動啟動 autorestart=true #3秒自動重啟 startsecs=3 stderr_logfile=/var/log/ossoffical.err.log stdout_logfile=/var/log/ossoffical.out.log
3、啟動服務
#進入supervisor目錄 cd /etc/supervisor #啟動supervisord 服務 supervisord -c supervisord.conf
4、開啟守護程式的介面管理功能
#修改配置檔案:
vim /etc/supervisord.conf
#取消註釋內容
[inet_http_server] ; inet (TCP) server disabled by default
port=*:9001 ; ip_address:port specifier, *:port for all iface
username=user ; default is no username (open server)
password=123 ; default is no password (open server)
#重新載入配置檔案
supervisorctl reload
5、supervisorctl 常用命令
$ sudo service supervisor stop 停止supervisor服務 $ sudo service supervisor start 啟動supervisor服務 $ supervisorctl shutdown #關閉所有任務 $ supervisorctl stop|start program_name #啟動或停止服務 $ supervisorctl status #檢視所有任務狀態
五、總結
在CentOS系統中執行部署執行專案,主要是Linux相關內容是否熟練:如命令、許可權、軟體等相關內容,不管什麼還是需要孰能生巧,多加練習吧。
另外WSL中的Linux系統還是不夠全面,暫時沒有服務、防火牆相關功能,所以如果在真實環境中,可以設定服務開機啟動、以及防火牆相關處理。
所以還是需要找個完整環境進行學習練習。