天天看點

Centos7.2部署.Net Core2.0 WebApi

Centos7.2部署.Net Core2.0 WebApi

部署前準備

1.VisualStudio2017+.netcore2.0SDK

2.Centos7.2

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

建立WebApi項目

Centos7.2部署.Net Core2.0 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啟動應用程式,啟動項配置在

Centos7.2部署.Net Core2.0 WebApi

 一切正常,然後我們釋出程式,右鍵項目-釋出-釋出到檔案夾,釋出完成後的應用程式位置在\bin\Release\CoreTest.WebApi\

Centos7.2部署.Net Core2.0 WebApi

 Xftp注意兩處連接配接選項,使用Xftp将釋出好的程式上傳到伺服器,位置在/home/wwwroot/

Centos7.2部署.Net Core2.0 WebApi

Centos7.2部署.Net Core2.0 WebApi

安裝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的安裝資訊,如下圖

Centos7.2部署.Net Core2.0 WebApi

 輸入指令dotnet /home/wwwroot/CoreTest.WebApi/CoreTest.WebApi.dll  出現下圖資訊表明運作成功,我們的程式正在監聽localhost:5000,此時還不能通過外網通路,我們使用Nginx将外部請求轉發到應用程式上

Centos7.2部署.Net Core2.0 WebApi

安裝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的預設通路頁面,表明安裝成功

Centos7.2部署.Net Core2.0 WebApi

修改Nginx的配置檔案,轉發外部請求到應用程式

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

Centos7.2部署.Net Core2.0 WebApi

鍵入I 進入輸入模式

Centos7.2部署.Net Core2.0 WebApi

将檔案内容替換為

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回車,儲存并退出

Centos7.2部署.Net Core2.0 WebApi

 儲存成功後

Centos7.2部署.Net Core2.0 WebApi

 重新加載service nginx reload

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

 此時再通路接口/api/values(建立項目的時候自帶的)    Nginx監聽80端口接收外部請求并将請求轉發給應用程式

Centos7.2部署.Net Core2.0 WebApi

配置守護服務(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.conf

修改supervisord.conf檔案,将檔案尾部的配置

Centos7.2部署.Net Core2.0 WebApi

修改成(注意前面的兩個分号去掉)

Centos7.2部署.Net Core2.0 WebApi

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      

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

Centos7.2部署.Net Core2.0 WebApi

此時不用手動dotnet CoreTest.WebApi.dll啟動應用程式也能通路(由Supervisor程序在背景監聽)

Centos7.2部署.Net Core2.0 WebApi

配置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

Centos7.2部署.Net Core2.0 WebApi

 重新開機伺服器:reboot  此時不能通路

Centos7.2部署.Net Core2.0 WebApi

重新開機完成後,所有服務自動開啟,正常通路

Centos7.2部署.Net Core2.0 WebApi

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

繼續閱讀