為什么叫新手必看?第一次必看?
因為我就是新手,我第一次用它。就在2周前。目前項目運行平穩。
此文有你第一次使用時,必須要使用的一切配置。
題外話:
雖然netcore現在已經是2.2版本了,江湖流傳是能比肩Java的微軟神作,但卻是我第一次用.netcore來做生產項目。選它的原因也有些令人尷尬。
公司因為變革,改走java路線了。服務器也不在我手上進行管理。於是問了管服務器的同事,說是windows服務器已經沒有了。
沒辦法。之前用java寫過一個項目,進度太慢。這次的項目時間短任務重,又只有自己一個干。
於是乎,那就.netcore走下去吧。至少是C#,再慢也比寫java快。
話不多說。接下來的內容就是本次項目使用netcore的各種經驗和總結,當然,也有坑坑坑的事兒發生。
開發環境:win7/win10 vs2017 .netcore2.1
生產環境:centos7.4,ubuntu 16
本次項目使用的技術點有:
netcore項目發布介紹(及添加linux下的駐守進程)[已完結]
netcore讀取配置文件及mysql連接
log4net 配置(全局異常捕獲)
swagger 配置
Autofac 的配置
https 的配置及使用
cors 跨域的配置
圖片合成,生成二維碼,
netcore項目發布介紹(及添加linux下的駐守進程)
1、本地發布:和原先.netframework項目一樣,項目右鍵,點發布即可。
注意下圖,發布的配置文件中需要選擇linux-64;
發布后,只有原先.netframework項目的bin目錄,沒有任何靜態資源文件夾。
若有使用到的話,記得將靜態資源文件,項目的xml文件(swagger會使用到)等也記得打包好。
2、安裝生產服務器的運行環境:
netcore在centos7.4安裝下的安裝步驟( ubuntu與之類似)
(官方教程:https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/install)
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
sudo yum update
sudo yum install dotnet-sdk-2.1
安裝步驟太簡單了,簡直不需要多余的描述了。
然后輸入 dotnet 回車,若出現如下圖所示,則表示安裝成功了。
否則,請詳細查看安裝時的內容,里面會有提示你為什么沒有安裝成功的原因。
注:之前用騰訊雲安裝了centos7.6(系統安裝好后服務器上本地查詢,卻是顯示的7.5版本,后來死活連接不上mysql。因為時間關系,具體原因沒有分析過。后來)
3、上傳打包好的文件夾到linux服務器
本文上傳路徑為: /usr/wwwroot/mynetcoreproject (路徑自己定,沒有的話就新建吧)
上傳好后進入此目錄,
輸入命令 dotnet mynetcoreproject .dll,
看到如下界面,則表示啟動成功
此時,表示服務器已經在8088端口啟用,
輸入命令: curl http://localhost:8088/api/values 應該就能看到此接口的返回數據了。
4、安裝守護進程supervisor
如第3步的操作,若退出xshell或退出控制台,那么這個站點也同時被關閉了(不能像服務一樣在后台運行,生產環境中這是不敢想象的)
面臨的問題以如下三個(出處:https://www.cnblogs.com/Hai--D/p/5820718.html)
問題1:ASP.NET Core應用程序運行在shell之中,如果關閉shell則會發現ASP.NET Core應用被關閉,從而導致應用無法訪問,這種情況當然是我們不想遇到的,而且生產環境對這種情況是零容忍的。
問題2:如果ASP.NET Core進程意外終止那么需要人為連進shell進行再次啟動,往往這種操作都不夠及時。
問題3:如果服務器宕機或需要重啟我們則還是需要連入shell進行啟動。
此時,就要安裝守護進程supervisor了。.至於它是什么?安裝好后就知道了。
安裝過程如下:(詳見https://www.cnblogs.com/Dicky-Zhang/p/6171954.html,眾多網友有反饋提到我下面的安裝方式是有坑的,在前面給到的鏈接文章中也是排在最后一位的安裝方式。具體有什么坑不得而知,我偷懶用了第四次,運氣好,一次成功,就不再研究了)
$ sudo su - #切換為root用戶
# yum install epel-release
# yum install -y supervisor
# systemctl enable supervisord # 開機自啟動
# systemctl start supervisord # 啟動supervisord服務
# systemctl status supervisord # 查看supervisord服務狀態
# ps -ef|grep supervisord # 查看是否存在supervisord進程
安裝完成后,先別急着啟動它,還需要做如下配置
在supervisord.conf中,添加控制台訪問
[inet_http_server] ; inet (TCP) server disabled by default
port=*:7002 ; (ip_address:port specifier, *:port for all iface)
username=yourusername ; (default is no username (open server))
password=yourpassword ; (default is no password (open server))
注意,在supervisord.conf的
[include]
files = /etc/supervisor/conf.d/*.ini
有如上信息,
所以,啟動進程的配置文件將寫在 /etc/supervisor/conf.d/目錄下
[program:yourprogram]
command=dotnet /usr/wwwroot/yourprogram/yourprogram.dll ;這一行其實就是手動啟動項目的命令
directory=/usr/wwwroot/yourprogram
environment=ASPNETCORE__ENVIRONMENT=Production
user=root
stopsignal=INT
autostart=true
autorestart=true
startsecs=3
stderr_logfile=/var/log/ossoffical.err.log
stdout_logfile=/var/log/ossoffical.out.log
保存並退出后,
再執行systemctl start supervisord啟動守護進程,此時,站點項目也就一起啟動起來了。
通過訪問 http://IP:7002,再輸入賬號密碼(supervisord.conf中inet_http_server節的配置)
就能看到如下界面了。
因為Supervisor已經設定為自動啟動了,所以每次它自身的啟動也會將所以配置文件下項目都啟動起來。
通過上文的界面管理,在版更項目后,也可方便的點一下“Restart“即可。