部署前准備
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