在CentOS 7上部署ASP.NET Core 2.0 Web應(yīng)用程序
說(shuō)明:
??在Windows平臺(tái)上用Visual Studio 2017編寫ASP.NET Core 2.0的Web MVC項(xiàng)目腕让,并用VS 2017發(fā)布項(xiàng)目滥玷。
??在虛擬機(jī)上安裝CentOS 7系統(tǒng),將Web項(xiàng)目部署在Cent OS 7上碱妆。
??使用Nginx(服務(wù)器和反向代理服務(wù)器)蜘拉。
??使用Supervisor進(jìn)行進(jìn)程管理嘹裂。
目錄
- 部署環(huán)境
- 發(fā)布ASP.NET Core 2.0程序
- 安裝CentOS 7
- 安裝.NET Core SDK
- 在CentOS 7上部署程序
- 配置Nginx
- 配置進(jìn)程守護(hù)(Supervisor)
部署環(huán)境
??系統(tǒng):CentOS 7
??相關(guān)軟件和工具:.NET Core SDK市框、Nginx、Supervisor佑笋、policycoreutils-python
發(fā)布ASP.NET Core 2.0程序
??發(fā)布方式有兩種翼闹,一種是使用Visual Studio 2017上的發(fā)布,另一種是在控制臺(tái)使用命令方式在項(xiàng)目文件夾下發(fā)布蒋纬,即dotnet publish(發(fā)布)命令
安裝CentOS 7
??安裝方式很多猎荠,比如:https://blog.csdn.net/hui_2016/article/details/68927487
安裝.NET Core SDK
??這里丟出一個(gè)官方鏈接:https://www.microsoft.com/net/learn/get-started/linux/centos
??要是不想看鏈接,看下面:
??照著做:
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
sudo yum update
sudo yum install libunwind libicu
sudo yum install dotnet-sdk-2.1.200 //最好選最新版本
??做完后可以輸入dotnet --info看一下是否安裝成功颠锉。
在CentOS 7上部署程序
??弄完之后就是準(zhǔn)備在CentOS 7上部署Webc程序了法牲。
??先將發(fā)布后的文件夾放到CentOS 7下史汗,檢查一下能否運(yùn)行琼掠,使用dotnet命令。
??如果成功了停撞,就繼續(xù)瓷蛙。此時(shí)悼瓮,無(wú)法訪問(wèn)這個(gè)Web程序的頁(yè)面,需要部署一個(gè)Web容器進(jìn)行轉(zhuǎn)發(fā)艰猬,就是Nginx横堡。
配置Nginx
??先下載安裝Nginx。
curl -o nginx.rpm http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
rpm -ivh nginx.rpm
yum install nginx
systemctl start nginx(啟動(dòng)Nginx)
systemctl enable nginx (設(shè)置nginx的開機(jī)啟動(dòng))
??如果需要冠桃,可以配置防火墻命贴。
??命令:firewall-cmd --zone=public --add-port=80/tcp –permanent(開放80端口)
??命令:systemctl restart firewalld(重啟防火墻以使配置即時(shí)生效)
??輸入ip地址測(cè)試Nginx是否可以訪問(wèn)。
??配置Nginx對(duì)ASP.NET Core應(yīng)用的轉(zhuǎn)發(fā):
??修改 /etc/nginx/conf.d/default.conf 文件食听。(如果對(duì)文件沒(méi)有修改權(quán)限胸蛛,就用chmod命令修改文件權(quán)限)
??根據(jù)需要修改文件內(nèi)容:
server {
listen 80;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
??執(zhí)行nginx –s reload 命令使配置生效。
??使用dotnet命令啟動(dòng)Web程序樱报。
??在瀏覽器輸入ip地址訪問(wèn)葬项,如果訪問(wèn)成功就表示已經(jīng)在CentOS 7上部署成功。
??如果訪問(wèn)顯示“502 Bad Gateway”,可能是由于SELinux保護(hù)機(jī)制所導(dǎo)致迹蛤,
??需要將nginx添加至SELinux的白名單民珍。命令如下:
yum install policycoreutils-python
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
sudo semodule -i mynginx.pp
??成功,部署完成盗飒。
配置進(jìn)程守護(hù)(Supervisor)
??在CentOS 7上嚷量,如果關(guān)閉終端,開啟的進(jìn)程就會(huì)關(guān)閉逆趣,導(dǎo)致程序無(wú)法訪問(wèn)津肛。
??為了解決這個(gè)問(wèn)題,就用到了Supervisor這個(gè)工具汗贫,Supervisor使用Python開發(fā)的身坐,用于監(jiān)聽ASP.NET Core 應(yīng)用程序的狀況。在應(yīng)用程序停止運(yùn)行的時(shí)候立即重新啟動(dòng)落包。
??Supervisor(http://supervisord.org/)是用Python開發(fā)的一個(gè)client/server服務(wù)部蛇,是Linux/Unix系統(tǒng)下的一個(gè)進(jìn)程管理工具,不支持Windows系統(tǒng)咐蝇。它可以很方便的監(jiān)聽涯鲁、啟動(dòng)、停止有序、重啟一個(gè)或多個(gè)進(jìn)程抹腿。用Supervisor管理的進(jìn)程,當(dāng)一個(gè)進(jìn)程意外被殺死旭寿,supervisort監(jiān)聽到進(jìn)程死后警绩,會(huì)自動(dòng)將它重新拉起,很方便的做到進(jìn)程自動(dòng)恢復(fù)的功能盅称,不再需要自己寫shell腳本來(lái)控制肩祥。
??安裝Supervisor(...我在安裝的時(shí)候碰到一些問(wèn)題后室,弄了很久才成功安裝。)
??這里丟出兩個(gè)鏈接:https://blog.csdn.net/bbg221/article/details/78715734
??https://blog.csdn.net/fenglailea/article/details/77146248
1混狠、安裝Python包管理工具(easy_install)
??easy_install是setuptools包里帶的一個(gè)命令岸霹,使用easy_install實(shí)際上是在調(diào)用setuptools來(lái)完成安裝模塊的工作,所以安裝setuptools即可。
??wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py -O - | sudo python 或 yum install python-setuptools
2将饺、安裝supervisor
??easy_install supervisor 或 yum install supervisor
3贡避、配置Supervisor
??mkdir /etc/supervisor
??echo_supervisord_conf > /etc/supervisor/supervisord.conf (注意文件權(quán)限,沒(méi)有讀寫權(quán)限必出錯(cuò))
??修改supervisord.conf文件予弧,一般修改最后兩行就行贸桶。去掉兩行前面的分號(hào),把files后改成conf.d/*.conf
??如果服務(wù)已經(jīng)啟動(dòng)桌肴,修改配置文件可用“supervisorctl reload”命令來(lái)使其生效皇筛。
4、配置對(duì)ASP.NET Core應(yīng)用的守護(hù)
??創(chuàng)建一個(gè) WebApplication1.conf文件坠七,內(nèi)容大概如下:(根據(jù)需要修改)
[program:WebApplication1]
command=dotnet WebApplication1.dll ; 運(yùn)行程序的命令
directory=/home/wwwroot/WebApplication1/ ; 命令執(zhí)行的目錄
autorestart=true ; 程序意外退出是否自動(dòng)重啟
stderr_logfile=/var/log/WebApplication1.err.log ; 錯(cuò)誤日志文件(如果文件不存在就創(chuàng)建一個(gè))
stdout_logfile=/var/log/WebApplication1.out.log ; 輸出日志文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 進(jìn)程環(huán)境變量
user=root ; 進(jìn)程執(zhí)行的用戶身份
stopsignal=INT
??然后水醋,將文件拷貝到:“/etc/supervisor/conf.d/WebApplication1.conf”下
??運(yùn)行supervisord,查看是否生效。命令如下:
supervisord -c /etc/supervisor/supervisord.conf
ps -ef | grep WebApplication1
??如果存在dotnet WebApplication1.dll 進(jìn)程則代表運(yùn)行成功彪置,這時(shí)候在使用瀏覽器進(jìn)行訪問(wèn)拄踪。
??如果訪問(wèn)成功,關(guān)于ASP.NET Core應(yīng)用程序的守護(hù)就配置完成了拳魁。
??再將Supervisor設(shè)為開機(jī)自啟動(dòng)惶桐,就完了。