新的業務來了,需要使用linux環境部署web服務,作為一個C#的懶惰程式員,就這麼上了車【狗臉】,廢話不多說,跟我一樣的小白請看,大神請繞路。 站點暫時沒有使用Docker部署,為什麼呢,因為我還沒搞清楚哇,攤手~ 目標 VS2017+Core2.0+bootstrap+vue+ubuntu14. ...
新的業務來了,需要使用linux環境部署web服務,作為一個C#的懶惰程式員,就這麼上了車【狗臉】,廢話不多說,跟我一樣的小白請看,大神請繞路。
站點暫時沒有使用Docker部署,為什麼呢,因為我還沒搞清楚哇,攤手~
目標
VS2017+Core2.0+bootstrap+vue+ubuntu14.04+nginx半天完成一個新網站的搭建和部署。
GO
首先下載VS2017,安裝的時候,註意請務必勾選如下:
確認本地Windows和linux環境下都已經安裝.net core
檢測方法如下:windows 打開cmd 輸入dotnet
linux 下打開temernal 輸入dotnet亦然,
具體安裝方法請參考微軟官網,window:https://www.microsoft.com/net/download/windows/build
linux:https://www.microsoft.com/net/download/linux/build
新建解決方案:
此處先說說拙見:Program.cs和Startup.cs文件同為項目啟動文件,但是實際上項目由main作為唯一入口startup中主要含有一些項目的配置,比如IOC組件註入、MVC配置,具體請百度。
開發就到此為止。
window下部署:本地運行CMD控制台,切換到程式運行目錄:cd E:\QMX\qmxweb\QMX.CoreWeb\QMX.CoreWeb
運行命令:dotnet restore 拉取項目所需引用以及幻雲nuget包准備運行
運行命令:dotnet run 這個命令完成了本地的程式運行,結果如下:
此時使用瀏覽器打開localhost:8080/# 完成本地的站點運行。
以上僅僅完成了程式的運行,並沒有完成部署,若想使用8080埠部署該應用,操作如下:
在運行目錄下,執行命令:dotnet publish
此時即完成了站點發佈產物的生成 那麼我們怎麼將這個產物進行部署到指定埠呢?
上圖中最後一行指出了發佈產物的位置,切換到此目錄下:cd E:\QMX\qmxweb\QMX.CoreWeb\QMX.CoreWeb\bin\Debug\netcoreapp2.0\publish\
執行發佈命令:dotnet QMX.CoreWeb.dll 此時即完成了站點的發佈,並會報告出該應用程式監聽埠,如下:
至此已經完成window下core站點的發佈。
linux下部署:
準備:
1)安裝nginx 此處不再贅述 具體請參考https://www.cnblogs.com/jimisun/p/8057156.html
2)安裝.netcore組件
3)下載winscap 地址 https://www.winpcap.org/install/default.htm
4)下載putty 地址https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
GO:
1)使用nginx監聽8080埠 具體操作就是在nginx的安裝目錄下配置站點對應功能變數名稱映射本機8080埠。
2)使用winscap連接本機的window環境和伺服器linux環境
在此工具幫助下在linux下建立文件夾 從window下找到coreweb對應的發佈產物,拷貝到對應的linux環境下。
3)使用putty連接上遠程機器之後,切換到對應的發佈產物 預設:【應用程式名稱】.ll所在目錄下,執行
dotnet [YourAppName].dll
此時可以看到shell提示系統已經監聽了8080埠,此時linux內部訪問8080埠已經可以直接訪問該應用,配合上nginx則實現了功能變數名稱直接訪問內部8080埠的過程。
那麼,是不是到此結束了呢??答案是:否
當你辛辛苦苦擼完代碼部署完畢之後,你隨後關掉了shell,卻發現原先能訪問的站點不能訪問了,這是為什麼呢?
因為該程式依賴shell的持續執行,如若不想乾等,只有重新搞一個守護進程持續幫我們執行dotnet運行app的命令。
守護進程
執行命令:sudo apt-get install supervisor 安裝完畢守護進程
但是我們要進行守護進程的配置:本人安裝的守護進程預設安裝路徑在/etc/supervisor/之下,ls我們看到有一個conf.d的文件夾和supervisor.conf,顯然後者就是我們要的配置文件了!
vim打開之後,大失所望,原因,包含的文件是*.conf 嗎,去讀取的守護配置文件,自己在寫一個吧。
切換到conf,d文件夾下,打開vim [AppName].conf 編寫如下文件
[program:qmxCoreService]
command=dotnet QMX.CoreWeb.dll; 運行程式的命令
directory=/root/QMX.Web/ ; 命令執行的目錄
autostart=true ; 程式意是否自動啟動
autorestart=true; 程式意外退出是否自動重啟
stderr_logfile=/var/log/QMX.CoreWeb.err.log ; 錯誤日誌文件
stdout_logfile=/var/log/QMX.CoreWeb.out.log ; 輸出日誌文件
user=root; 進程執行的用戶身份
stopsignal=INT
以上配置完畢之後,:wq退出vim之後 執行命令:supervisord -c /etc/supervisor/supervisord.conf
執行之後,正常情況下啥都不發生,如果發生了以下錯誤,如:
Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.
For help, use /usr/bin/supervisord -h
不要緊張,兩步即可輕鬆解決:
1)find / -name supervisor.sock 得到該路徑 path1
2)unlink path1
再次讀取supervisord -c /etc/supervisor/supervisord.conf
此時 ps -ef | grep [APPName***] 如果出現兩個進程,一個是守護進程,一個是dotnet [app].dll則說明完成守護了呢。
到此為止 coreweb在linux下的部署就ok了。