前言
本文主要講解如何一步步將ASP.NET Core網站發布到Linux服務器,文中會講解具體步驟及需要避免的各種問題。
?
目錄
一、環境介紹
二、創建及發布ASP.NET Core網站項目
三、服務器軟件安裝(.NET Core SDK)
四、在服務器上部署ASP.NET Core網站項目
五、服務器端配置Nginx
六、配置服務器端的守護進程(Supervisor)
七、設置守護程序為開機自啟
?
?
環境介紹
本機所需開發工具: vs2017、XShell 、FileZilla(不限定,可使用其他上傳工具)
服務器系統及所需軟件:CentOS7、.Netcore、Nginx、Supervisor、Policycoreutils-python
?
創建及發布ASP.NET Core網站項目
打開vs2017,選擇 文件->新建->項目,選擇ASP.NET Core Web應用程序(.NET Core),在ASP.NET Core 1.1 模板處選擇 Web應用程序
此時ASP.NET Core 網站項目已建立完成,直接F5運行,可以在瀏覽器中看到如下頁面
回到vs2017,右鍵項目->發布,選擇文件夾,文件夾名稱更改為MyWebCore(可以不更改,默認名為PulishOutput,默認路徑為bin\Release)點擊發布后,可以在發布時填寫的文件夾下找到發布的文件
ASP.NET Core 網站發布完成,進行下一步
?
?服務器軟件安裝(.NET Core SDK)
?
通過XShell登錄Linux服務
執行下列命令,安裝.NET Core SDK(微軟官方教程地址?https://www.microsoft.com/net/core#linuxcentos)
sudo yum install libunwind libicu
curl -SSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?linkid=843449sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -c /opt/dotnetsudo ln -s /opt/dotnet/dotnet /usr/local/bin
執行下列命名,返回版本號即表示.NET Core SDK已經安裝成功
dotnet -–version
.NET Core SDK安裝完成,進行下一步
在服務器上部署ASP.NET Core網站項目
找到本地發布好的ASP.NET Core項目(bin\Release\MyWebCore),使用FileZilla(可以使用其他上傳工具)將MyWebCore文件夾整個上傳至服務器(具體上傳到什么位置可以自定義,此處使用/usr/myweb/文件夾)
確保文件都成功上傳之后,就可以進行在Linux服務器的部署了
執行下列命令,部署ASP.NET Core網站
cd /usr/myweb/MyWebCoredotnet MyWebCore.dll
出現如下信息,即表示網址已部署成功
(注:ASP.NET Core 默認端口為5000,可以在項目中通過配置自定義端口,此處不做過多介紹)
此時是無法訪問到這個頁面的,需要部署一個web容器來進行轉發(即需要為Linux服務器配置Nginx)
ASP.NET Core網站部署完成,進行下一步
服務器端配置Nginx
執行下列命令,安裝Nginx
curl -o nginx.rpm http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpmrpm -ivh nginx.rpmyum install nginx
成功安裝Nginx之后繼續執行下列命令
systemctl start nginx //啟動Nginx
systemctl enable nginx //將Nginx設置為開機自啟
執行下列命令,配置防火墻
firewall-cmd --zone=public --add-port=80/tcp --permanent //開放80端口systemctl restart firewalld //重啟防火墻,使配置生效
此時在瀏覽器輸入服務器IP地址,測試Nginx是否可以訪問
Nginx可以正常訪問,接下來開始配置Nginx對我們所部署的ASP.NET Core應用的轉發
找到Nginx配置文件nginx.conf(我的是在/ect/nginx/目錄下)下載到本地,并將其server{}中的內容進行如下修改(建議先備份)
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;} }
將修改完成后的nginx.conf回傳至服務器進行覆蓋
執行下列命令,使修改后的文件生效
nginx -s reload
執行下列命令,啟動ASP.NET Core網站
cd /usr/myweb/MyWebCoredotnet MyWebCore.dll
瀏覽器輸入網址進行訪問
如果出現502錯誤,執行下列命令,將Nginx添加至白名單,然后再重啟啟動ASP.NET Core
yum install policycoreutils-pythonsudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginxsudo semodule -i mynginx.pp
Nginx配置完成,進行下一步
?
?配置服務器端的守護進程(Supervisor)
為避免Shell退出后仍然可以繼續訪問網站,我們需要守護進程(Supervisor)來監控ASP.NET Core網站,以保證其長久健康的運行
執行下列命令,安裝Supervisor
yum install python-setuptoolseasy_install supervisor
執行下列命令,配置Supervisor
mkdir /etc/supervisor //此處也可以使用上傳工具手動創建文件夾 echo_supervisord_conf > /etc/supervisor/supervisord.confmkdir /etc/supervisor/conf.d
?
修改supervisord.conf,對文件最后部分的內容進行修改
//原內容 ;[include] ;files = relative/dictory/*.ini
//新內容 [include] files = conf.d/*.conf //此處也可以是*.ini //注意以上內容不要有;
創建MyWebCore.conf文件(也可以是*.ini,需跟上一步保持一致),填寫如下內容
[program:MyWebCore] command=dotnet MyWebCore.dll ; directory=/usr/myweb/MyWebCore ; autorestart=true ; stderr_logfile=/var/log/MyWebCore.err.log ; stdout_logfile=/var/log/MyWebCore.out.log ; environment=ASPNETCORE_ENVIRONMENT=Production ; user=root ; stopsignal=INT
將MyWebCore.conf文件拷貝至下列目錄
/etc/supervisor/conf.d/
執行下列命令,查看是否生效
supervisord -c /etc/supervisor/supervisord.conf ps -ef | grep MyWebCore
如果存在 dotnet MyWebCore.dll進程,則表示運行成功
配置文件如有修改,執行下列命令更新(沒有則忽略)
supervisorctl reload
此處可能出現的問題(沒有則忽略)
--重復的監聽,會提示如下錯誤
another program is already listening on a port that one of our HTTP servers is configured to use
--解決方法
ps -ef | grep supervisord //查看監聽的端口,出現以下信息
root 2503 1 0 Nov19 ? 00:03:23 /usr/bin/python /usr/bin/supervisord root 21337 2556 0 18:15 pts/8 00:00:00 grep --color=auto supervisord
kill -s SIGTERM 2503
在瀏覽器中進行訪問
守護進程Supervisor配置完成,進行下一步
?
?設置守護程序開機自啟
如果服務器宕機,重新啟動后我們希望守護程序可以自啟,那么需要做以下操作
新建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
將supervisord.service文件上傳至服務器下列目錄
/usr/lib/systemd/system/
執行下列命令,將supervisor設為開機啟動
systemctl enable supervisord
執行下列命令,驗證設置是否成功
systemctl is-enabled supervisord
返回enabled即為成功,可以執行重啟Linux服務器來進行驗證
reboot
至此,ASP.NET Core網站部署到Linux服務器的操作全部完成。
?