Asp.Net Core 程序部署到Linux(centos)生產環境(一):普通部署


Image result for linux .net core

運行環境

照例,先亮底

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命令)

1539874500349

首先確保你的項目能在windows上運行

1539874615825

ok,接下來發布

我發布到默認的 bin\Release\netcoreapp2.1\publish\ 下面,你們可以自定義目錄

1539874647886

發布完成后可看到如下文件結構

1539874735884

ok,web程序已經准備好。

上傳應用程序到linux

我這里使用xftp工具上傳,上傳目錄是 /home/website/WebApplication3

1539875022573

啟動web站點

去程序所在目錄

cd /home/website/WebApplication3

啟動站點

dotnet WebApplication3.dll

1539876880136

顯示上示信息代表啟動成功。現在打開 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文件的最底下的,改成這樣

1539917139050

[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站點的進程守護配置完成,下面測試一下;

1539917767557

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部署(已發布)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM