在 .net core 發(fā)布之后另假,基于 .Net 開發(fā)的 Web 應用(AspNet.Core)可以平滑的部署到Linux系統(tǒng)上何之,拋棄了坑爹的IIS后岸夯,應用的穩(wěn)定性也大大提升读第。這里總結(jié)一下如何在 Linux 上部署 .net core 開發(fā)的應用胶哲。
總的來說昧诱,發(fā)布 ASP.Net Core? 應用晓淀,一般需要以下步驟:
1)從Visual Stuido中 發(fā)布(Publish)到服務器的某個目錄
2)設置進程管理
3)設置反向代理
1、服務器運行環(huán)境設置
以下部署盏档,基于CentOS 7.2 完成凶掰,其他系統(tǒng)可參考?https://www.microsoft.com/net/learn/get-started-with-dotnet-tutorial
按如圖位置選擇,可查看具體步驟蜈亩,本文中都使用 CentOS锄俄,其他系統(tǒng)可自行選擇。
具體步驟:
? ? 1)進入Centos系統(tǒng)勺拣,命令行下執(zhí)行下面的命令奶赠,加入 dotnet 產(chǎn)品源
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
? ? 2)安裝 .net SDK 或 runtime
sudo yum updatesudo
yum install dotnet-sdk-2.1?# 如果只需要運行環(huán)境,可不用安裝 dotnet-sdk-2.1药有,直接安裝 dotnet-runtime-2.1即可
yum install dotnet-runtime-2.1??
? ? 3)測試安裝毅戈,輸入下面的命令查看 版本信息
dotnet --version
2、安裝 Nginx
ASP.NET Core 應用是一個控制臺程序愤惰,需要用到一個服務管理軟件來進行管理苇经,在服務器啟動時啟動應用,在崩潰時重啟該應用宦言。ASP.NET Core 應用常見部署環(huán)境有以下:
? ? Window:IIS扇单,Windows Service
? ? Linux: Nginx, Apache
本例中,我們采用Nginx進行反向代理奠旺。
CENTOS 7.2 中安裝Nginx 可使用以下命令
yum install nginx
3蜘澜、配置 Systemd 服務
Systemd 是 Linux 系統(tǒng)工具,用來啟動守護進程响疚,已成為大多數(shù)發(fā)行版的標準配置鄙信。CentOS上可用Systemd來進行服務管理。
具體步驟
1)上傳 ASP.NET Core應用到指定目錄忿晕。本例中装诡,將應用部署到 /data/www/website,并將該目錄owner設置為nginx:nginx
cd /data/www
chown -R nginx:nginx /data/www/website
2)假設應用啟動文件為? WebApplication1.dll,創(chuàng)建 app1.service 配置文件
cd /etc/systemd/system
vim app1.service
app1.service 文件內(nèi)容如下
[Unit]
Description=WebApplication1[Service]
WorkingDirectory=/data/www/website?
ExecStart=/usr/bin/dotnet /data/www/website/WebApplication1.dll
Restart=always
RestartSec=30
SyslogIdentifier=Web Application 1
User=nginx
Environment=ASPNETCORE_ENVIROMENT=Production
Environment=ASPNETCORE_URLS=http://127.0.0.1:5002
[Install]
WantedBy=multi-user.target
其中粗斜體內(nèi)容鸦采,可根據(jù)實際情況進行修改
3)啟動該服務
systemctl enable app1.service
systemctl start app1.service
4)查看服務狀態(tài)
systemctl status app1.service
如果顯示為 active=running 宾巍,則表明服務已正確啟動,如果顯示錯誤渔伯,可使用 journalctl -xe 命令查看完整的錯誤日志進行排查
4顶霞、配置Nginx
在第三步,我們配置的APP的服務 咱旱,是在 127.0.0.1 的 5002 端口上監(jiān)聽确丢,外網(wǎng)是無法訪問的,這里我們需要用到 nginx 進行反向代理吐限。反向代理nginx的介紹鲜侥,就不在這里贅述了。
ASP.NET Core 默認是用?Kestrel 來運行服務诸典,Kestrel 是一個精簡的http服務描函,有較高的性能,但多個服務無法共享同一個IP和端口狐粱,不能通過Http中的Host來區(qū)分不同的服務舀寓,因此這時候就需要用到反向代理服務。
使用反向代理服務肌蜻,可以減少應用對外暴露更多細節(jié)互墓,提供額外的配置層與防御,可以與已有架構集成得更好蒋搜,簡化負載均衡與SSL配置篡撵,只需要在反向代理服務器上配置SSL證書。
配置步驟如下豆挽,這里我們演示使用虛擬服務器的方式來進行配置
1)創(chuàng)建Nginx虛擬配置文件
cd /etc/nginx/conf.d
vim app1.test.com.conf
2)配置文件內(nèi)容如下:
server
{
????listen 80;
? ? server_name app1.test.com;
????root /data/www/website;? ??
? ? access_log /var/log/www/app1.test.com.log main;
? ? error_log /var/log/www/app1.test.com_error.log;
? ? location / {
? ? ? ? proxy_pass http://localhost:5002;
? ? ? ? proxy_http_version 1.1;
? ? ? ? proxy_set_header X-Real-IP $remote_addr;
? ? ? ? proxy_set_header Upgrade $http_upgrade;
? ? ? ? proxy_set_header Connection keep-alive;
? ? ? ? proxy_set_header Host $host;
? ? ? ? proxy_cache_bypass $http_upgrade;
? ? ? ? client_max_body_size 8m;
? ? }
}
3)檢查配置文件
nginx -t
顯示如下育谬,表示nginx配置文件沒有語法錯誤
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
4)重啟nginx
systemctl restart nginx
至此,部署步驟完畢帮哈,將app1.test.com 域名解析到服務器地址膛檀,或者使用hosts文件 進行配置 之后,即可通過 app1.test.com 訪問到已部署的 ASP.NET Core服務娘侍。
參考:
【1】https://www.microsoft.com/net/learn/get-started-with-dotnet-tutorial
【2】https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.1&tabs=aspnetcore2x#when-to-use-kestrel-with-a-reverse-proxy
【3】https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.1&tabs=aspnetcore2x