【無私分享:ASP.NET CORE 項目實戰(第十章)】發佈項目到 Linux 上運行 Core 項目 【無私分享:ASP.NET CORE 項目實戰】目錄索引

目錄索引 

 

【無私分享:ASP.NET CORE 項目實戰】目錄索引html

 

簡介

 

  

  ASP.Net Core 給咱們帶來的最大的亮點就是跨平臺,我在我電腦(win7)上用虛擬機建了個 CentOS7 ,來演示下,咱們windows上的項目如何發佈項目到Linux上運行。我這裏有個在windows上搭建過的程序,咱們主要演示如何在linux上運行,因此你們不要糾結於這些,你們能夠新建一個web項目嘗試一下。python

  

 

安裝.NET Core SDK for CentOS

   微軟有詳細的安裝命令,能夠參考 Install .NET Core SDKlinux

  ① 安裝 libicu 依賴: sudo yum install libunwind libicunginx

  

 

  安裝成功:git

  

 

    ② 下載 SDK 壓縮包:curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?LinkID=809131github

   

 

  ③ 解壓縮:sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnetweb

  

 

  ④ 建立鏈接:sudo ln -s /opt/dotnet/dotnet /usr/local/binshell

  

 

 

測試安裝是否成功

  經過 dotnet --info  來查看一下,出現以下界面,表示成功:json

  

 

 

測試項目運行

  注意:不熟悉Linux的朋友請注意,Liunx下路徑是區分目錄大小寫的。windows

  ① 新建一個目錄:mkdir TestApp

  

 

  ② 進入目錄:cd TestApp

  

 

  ③ 新建一個默認的 web 項目:dotnet new -t web

  

 

  ④ 還原包:dotnet restore

  這個時間可能比較長,看網速了,你們要耐心等待。

  

 

  ⑤ 咱們來運行一下:dotnet run

  

 

 

發佈咱們的項目到Linux

  你們可使用Ftp等方式將文件發佈到服務器上,我這裏直接發佈到本地文件夾中,而後經過FileZilla 發送到服務器上。

  發佈項目的方式有多種,好比可使用 dotnet publish 命令,咱們這裏使用 VS :

  首先,咱們打開 Project.json 來添加幾個發佈的運行時(這一步能夠不要,若是不配置這裏,那麼發佈的時候是 Any,咱們待會講到)

  

  

  而後,右擊咱們的項目,選擇發佈:

  

 

  新建一個發佈配置文件,發佈方法選擇 文件系統 :

  

 

  設置裏,咱們選擇目標運行時:centos.7-x64 (在上面,咱們講到 Project.json 裏添加了 幾個運行時,若是沒有那一步,那麼這裏 沒有選項,只有一個 Any)

  

 

  而後點擊發布,咱們把發佈完的文件上傳到CentOS上:我放到了 Wwwroot 目錄下

  

 

  

  咱們來編譯咱們的文件:dotnet XXX.dll

  這裏先爲你們演示一個 錯誤 :個人 wkmvc.dll 是在 Wwwroot 目錄下的 ,因此 我執行命令(注意路徑大小寫,Linux區分大小寫,咱們上面提到) dotnet Wwwroot/wkmvc.dll

  

  

  顯示成功了,咱們打開瀏覽器,輸入 localhost:5000

  

 

 

  是空白的,咱們修改一下咱們的程序,輸出一下日誌看看:

  

 

  這是什麼緣由呢?爲何沒找到Index.cshtml呢?請你們再次注意一下 咱們的 Content root path,答案是 她沒有對 root 的操做權限的,咱們來對比一下 咱們安裝過程當中 測試成功的 web  和 咱們這個 web 的 Content root path

  

 

  咱們來嘗試一下:咱們進入Wwwroot目錄下,而後執行 dotnet wkmvc.dll

  

  

  咱們再次打開瀏覽器,輸入 localhost:5000

  

 

  是否是 OK 了,咱們來進入咱們的區域的 登陸頁 測試一下:

  

 

  

 

  也沒有問題,到此,項目就運行成功了,可是在實際中,咱們可能還要安裝 nginx 、配置咱們的 FireWall 以及配置守護服務 Supervisor 等等,這裏就不演示了。

  

 

  既然你們不是很瞭解,或者網上找資料比較繁瑣,對於 nginx firewall 以及 supervisor 的配置,我就再一步一步給你們演示一下。

 

 

安裝Nginx

 

  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

 

 

   啓動 Nginx:systemctl start nginx 

 

  設置開機啓動(linux宕機、重啓會自動運行nginx不須要連上去輸入命令):systemctl enable nginx

 

   

 

 

 

配置防火牆

 

  ① 開放80端口:firewall-cmd --zone=public --add-port=80/tcp –permanent

 

  ② 重啓防火牆以使配置即時生效:systemctl restart firewalld

   

  

 

  咱們來測試一下Nginx是否能夠訪問:

 

  

 

 

 

配置Nginx對ASP.net Core 應用的轉發

 

  修改 Nginx 的 default.conf 文件(目錄:/ect/nginx/conf.d/default.conf)

  

  將內容替換爲(配置Nginx轉發):

  

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

 

  上傳覆蓋default.conf文件

  從新加載,即時生效:nginx –s reload 

 

  咱們來測試一下:

  

 

  

 

  這是什麼鬼?這個問題是因爲SELinux保護機制所致使,咱們須要將nginx添加至SELinux的白名單。

 

  咱們經過命令來解決這個問題:

  ① yum install policycoreutils-python

  

 

  ② sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx

  

  

 

  ③ sudo semodule -i mynginx.pp

 

  咱們再次嘗試訪問:

  

 

 

 

Supervisor 守護服務

 

  爲何要這個玩意呢?

  咱們先來看下咱們存在的問題:① 咱們在上面演示中,運行咱們的應用都是經過 dotnet  ***.dll 或者 dotnet run ,也就是咱們的 ASP.NET Core應用程序運行在shell之中,若是關閉shell則會發現ASP.NET Core應用被關閉,從而導

                  致應用沒法訪問。

                 ② 若是ASP.NET Core進程意外終止那麼須要人爲連進shell進行再次啓動。

                 ③ 若是服務器宕機或須要重啓咱們則仍是須要連入shell進行啓動。

 

  那麼要解決這些問題,咱們就必需要實現這麼一個功能:若是ASP.NET Core 意外終止,那麼咱們要自動重啓;若是服務器服務器重啓後,咱們要有個相似腳本命令同樣,自動執行 dotnet 命令。

 

  如今正好有個基於 Python 開發的工具 Supervisor 能夠解決咱們上述問題:

 

  ① 安裝Supervisor:

 

    1.1:yum install python-setuptools

 

 

 

    1.2:easy_install supervisor

 

 

 

   ② 配置Supervisor:

 

   mkdir /etc/supervisor

   echo_supervisord_conf > /etc/supervisor/supervisord.conf

  

  修改 supervisord.conf 文件(目錄:/etc/supervisor/supervisord.conf)

 

  在文件結尾處有個:[include] files = relative/directory/*.ini

   修改成:[include] files = conf.d/*.conf

 

  若是服務已經啓動,則須要使用 supervisorctl reload 命令來使新的配置生效,固然,咱們這裏並無啓動,因此不須要這一步。

 

 

  ③ 配置 Supervisor 對 Asp.net Core 應用的守護:

  

  建立一個conf文件,由於咱們的應用叫 wkmvc,因此我建立了一個 wkmvc.conf 的文件,在本地用記事本建立即可,而後保存爲 wkmvc.conf:

  [program:wkmvc]

  command=/usr/bin/dotnet /root/Wwwroot/wkmvc.dll
  directory=/root/Wwwroot/
  autostart=true
  autorestart=true
  stderr_logfile=/var/log/wkmvc.err.log
  stdout_logfile=/var/log/wkmvc.out.log
  environment=ASPNETCORE_ENVIRONMENT=Production
  user=root
  stopsignal=INT

 

  

  上傳至:/etc/supervisor/conf.d/ 目錄下,而後執行:  

  supervisord -c /etc/supervisor/supervisord.conf

  ps -ef | grep wkmvc

 

   

 

  

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

 

  將文件拷貝至:「/usr/lib/systemd/system/supervisord.service」

 

  systemctl enable supervisord

  

  驗證一下是否爲開機啓動:systemctl is-enabled supervisord

   

相關文章
相關標籤/搜索