1. 程式人生 > >Centos7.2部署.Net Core2.0 WebApi

Centos7.2部署.Net Core2.0 WebApi

編輯 width 技術 pre daemon server 頁面 lease 重新

部署前準備

1.VisualStudio2017+.netcore2.0SDK

2.Centos7.2

3.SecureCRT,Xftp(根據自己喜好)

創建WebApi項目

技術分享

修改Program.cs中的BuildWebHost方法為(不改也可,core默認使用Kestrel作為Server)

 public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseUrls(
"http://localhost:5000") .UseStartup<Startup>() .Build();

嘗試使用IIS Express啟動應用程序,啟動項配置在

技術分享

一切正常,然後我們發布程序,右鍵項目-發布-發布到文件夾,發布完成後的應用程序位置在\bin\Release\CoreTest.WebApi\

技術分享

Xftp註意兩處連接選項,使用Xftp將發布好的程序上傳到服務器,位置在/home/wwwroot/,

技術分享

技術分享

安裝CentOS7下.NET Core SDK(參考https://www.microsoft.com/net/core#linuxcentos)

sudo yum install libunwind libicu

curl -sSL -o dotnet.tar.gz https://aka.ms/dotnet-sdk-2.0.0-linux-x64 mkdir -p ~/dotnet && tar zxf dotnet.tar.gz -C ~/dotnet

sudo ln -s /root/dotnet/dotnet /usr/local/bin

輸入命令dotnet --info查看sdk的安裝信息,如下圖

技術分享

輸入命令dotnet /home/wwwroot/CoreTest.WebApi/CoreTest.WebApi.dll 出現下圖信息表明運行成功,我們的程序正在監聽localhost:5000,此時還不能通過外網訪問,我們使用Nginx將外部請求轉發到應用程序上

技術分享

安裝Centos7下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

設置開機啟動:systemctl enable nginx

此時通過IP訪問,出現Nginx的默認訪問頁面,表明安裝成功

技術分享

修改Nginx的配置文件,轉發外部請求到應用程序

vi /etc/nginx/conf.d/default.conf

技術分享

鍵入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;
    }
}

然後按Esc退出輸入模式,進入命令模式,輸入:wq回車,保存並退出

技術分享

保存成功後

技術分享

重新加載service nginx reload

輸入命令dotnet /home/wwwroot/CoreTest.WebApi/CoreTest.WebApi.dll啟動應用程序

此時再訪問接口/api/values(創建項目的時候自帶的) Nginx監聽80端口接收外部請求並將請求轉發給應用程序

技術分享

配置守護服務(Supervisor)

目前存在三個問題

問題1:ASP.NET Core應用程序運行在shell之中,如果關閉shell則會發現ASP.NET Core應用被關閉,從而導致應用無法訪問,這種情況當然是我們不想遇到的,而且生產環境對這種情況是零容忍的。

問題2:如果ASP.NET Core進程意外終止那麽需要人為連進shell進行再次啟動,往往這種操作都不夠及時。

問題3:如果服務器宕機或需要重啟我們則還是需要連入shell進行啟動。

為了解決這個問題,我們需要有一個程序來監聽ASP.NET Core 應用程序的狀況。在應用程序停止運行的時候立即重新啟動。這邊我們用到了Supervisor這個工具,Supervisor使用Python開發的。

安裝Supervisor

yum install python-setuptools
easy_install supervisor
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf

vi /etc/supervisor/supervisord.onf

修改supervisord.conf文件,將文件尾部的配置

技術分享

修改成(註意前面的兩個分號去掉)

技術分享

Esc後:wq回車,保存退出ps:如果服務已啟動,修改配置文件後可用supervisorctl reload命令來使其生效

監聽應用程序配置

創建conf.d文件夾:mkdir /etc/supervisor/conf.d

創建並編輯CoreTest.conf配置文件:vi /etc/supervisor/conf.d/CoreTest.conf

[program:CoreTest]
command=/bin/bash -c "dotnet CoreTest.WebApi.dll"
directory=/home/wwwroot/CoreTest.WebApi/
autorestart=true
stderr_logfile=/var/log/CoreTest.err.log
stdout_logfile=/var/log/CoreTest.out.log
environment=ASPNETCORE_ENVIRONMENT=Production
user=root 
stopsignal=INT

運行supervisord,查看是否生效

supervisord -c /etc/supervisor/supervisord.conf

ps -ef | grep CoreTest

出現下圖所示,則表示配置成功

技術分享

此時不用手動dotnet CoreTest.WebApi.dll啟動應用程序也能訪問(由Supervisor進程在後臺監聽)

技術分享

配置Supervisor開機啟動

新建一個“supervisord.service”文件 vi /usr/lib/systemd/system/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

技術分享

重啟服務器:reboot 此時不能訪問

技術分享

重啟完成後,所有服務自動開啟,正常訪問

技術分享

部分內容參考:http://www.cnblogs.com/ants/p/5732337.html

Centos7.2部署.Net Core2.0 WebApi