Centos7.2部署.Net Core2.0 WebApi

部署前準備

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.conf

修改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

相關文章
相關標籤/搜索