運行環境
照例,先亮底
centos:7.2
cpu:1核 2G內存 1M帶寬
輔助工具:xshell xftp
搭建.net core運行環境
.net core 的運行環境我單獨寫了一篇,請看我的這篇文章[linux(centos)搭建.net core 運行環境]
准備你的.net core web 程序
我這里新建一個空的.net core web程序用以演示,實際部署時是你的項目
創建web項目(我自己使用vs2017 ,如使用vscode的需要自己安裝windows的SDK和使用dotnet命令)
首先確保你的項目能在windows上運行
ok,接下來發布
我發布到默認的 bin\Release\netcoreapp2.1\publish\ 下面,你們可以自定義目錄
發布完成后可看到如下文件結構
ok,web程序已經准備好。
上傳應用程序到linux
我這里使用xftp工具上傳,上傳目錄是 /home/website/WebApplication3
啟動web站點
去程序所在目錄
cd /home/website/WebApplication3
啟動站點
dotnet WebApplication3.dll
顯示上示信息代表啟動成功。現在打開 http://你的服務器ip:5000
看到運行正常的web頁面(5000端口打不開請檢查你的服務器防火牆,網絡配置等);
配置守護進程(Supervisor)
從上面的運行結果來看,.net core 程序是以服務的方式前台運行(類似windows控制台),那么如果:
1、服務器突然死機重啟了;
2、異常導致站點服務掛掉了;
3、運行的shell被運維人員或什么人不知道,關掉了;
等等原因,不管什么原因,服務異常關閉在生產環境都是不可接受的,那么我能不能有什么辦法保證,我的服務時刻要處於運行狀態,一旦掛掉,我立刻重啟它呢?
有,這就是Supervisor干的事;
(其實還有其他的進程守護工具的,有機會我們再單獨聊聊)
1、安裝Supervisor
yum install python-setuptools
easy_install supervisor
2、配置Supervisor
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
將supervisord.conf文件的最底下的,改成這樣
[include]
files = conf.d/*.conf
如果需要啟用UI管理的話也是修改這個文件
改這幾句
;[inet_http_server] ; inet (TCP) server disabled by default
;port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface) #監聽
;username=user ; (default is no username (open server)) #用戶名
;password=123 #密碼
*ps:如果服務已啟動,修改配置文件可用“supervisorctl reload”命令來使其生效*
3、添加對WebApplication3.dll的守護
創建一個 WebApplication3.conf文件,內容如下:
;后面的中文是注釋,為避免亂碼等問題導致supervisor啟動失敗,可以先刪掉注釋再放到服務器
[program:WebApplication3]
command=dotnet WebApplication3.dll ; 運行程序的命令
directory=/home/wwwroot/WebApplication3/ ; 命令執行的目錄
autorestart=true ; 程序意外退出是否自動重啟
stderr_logfile=/var/log/WebApplication3.err.log ; 錯誤日志文件
stdout_logfile=/var/log/WebApplication3.out.log ; 輸出日志文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 進程環境變量
user=root ; 進程執行的用戶身份
stopsignal=INT
將文件拷貝至:“/etc/supervisor/conf.d/WebApplication3.conf”下
運行supervisord,查看是否生效
supervisord -c /etc/supervisor/supervisord.conf
ps -ef | grep WebApplication3
可以看到,WebApplication3正在運行,那么對WebApplication3站點的進程守護配置完成,下面測試一下;
4、Supervisor配置開機啟動
不言而喻,這個很重要了,守護進程是需要開機啟動的;
cd /usr/lib/systemd/system/
vim supervisord.service
插入以下內容,保存:
# dservice for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
激活開機啟動:
systemctl enable supervisord
查看是否已激活:
systemctl is-enabled supervisord
5、測試Supervisor對.net core 站點的守護
使用:reboot
命令重啟后即可,再次訪問站點,你會驚喜的發現站點依舊在運行
[參考]
http://www.cnblogs.com/ants/p/5732337.html
至此,.net core 程序普通部署方式完畢,若使用docker方式部署,請看我的 Asp.Net Core 程序部署到Linux(centos)生產環境(二):docker部署(已發布)