WTM asp.net core應用程式在Ubuntu上和CentOS上部署

wtm在Ubuntu上和CentOS上部署

項目發布

在Visual Studio中右擊Web項目,選擇發布,如下圖:

Ubuntu安裝.net core運行時

Ubuntu我是用的Vmware虛擬機,版本是18.04
參考官方文檔,如果要開發 .NET Core 應用,請安裝 SDK(包括運行時)。 或者,如果只需運行應用程式,請安裝運行時。 如果要安裝該運行時,建議安裝 ASP.NET Core 運行時,因為它同時包括 .NET Core 和 ASP.NET Core 運行時。
.net core sdk

Ubuntu默認不啟用root,普通用戶切換root,可以用命令:

sudo su -

安裝完成後,輸入命令:dotnet --version,可以查看版本。

寶塔面板安裝

安裝寶塔面板是為了安裝nginx和mysql資料庫,同時配置網站路徑。用過很長時間,還是很方面的。
寶塔面板安裝非常簡單,一行命令解決問題,安裝參考:
寶塔面板安裝

安裝nginx和mysql

輸入命令bt default,可以查看訪問寶塔面板地址。
在軟體商店裡面安裝nginx和mysql資料庫。
查看訪問寶塔面板地址

安裝nginx和mysql

在寶塔面板中創建網站和資料庫

在網站介面創建一個純靜態站點。
靜態站點

網站配置

在網站設置裡面配置網站資訊,因為要將 Nginx 配置為反向代理以將請求轉接到 ASP.NET Core 應用,這裡按照微軟官網的方法配置反向代理:

server
{
    listen 80;
    server_name 192.168.186.133;
    index index.html index.htm default.htm default.html;
    root /www/wwwroot/leaveapp;
    
    #SSL-START SSL相關配置,請勿刪除或修改下一行帶注釋的404規則
    #error_page 404/404.html;
    #SSL-END
    
    #ERROR-PAGE-START  錯誤頁配置,可以注釋、刪除或修改
    #error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END
    
    #PHP-INFO-START  PHP引用配置,可以注釋或修改
    include enable-php-00.conf;
    #PHP-INFO-END
    
    #REWRITE-START URL重寫規則引用,修改後將導致面板設置的偽靜態規則失效
    include /www/server/panel/vhost/rewrite/leaveapp.com.conf;
    #REWRITE-END
    #反向代理配置
    location / {
        proxy_pass         //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;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
    #下邊者兩個很重要,不配置的化,圖片和css文件無法訪問
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
           proxy_pass //localhost:5000;
        }

    location ~ .*\.(js|css)?$
    {
        proxy_pass //localhost:5000;
    }
    #禁止訪問的文件或目錄
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }
    
    #一鍵申請SSL證書驗證目錄相關設置
    location ~ \.well-known{
        allow all;
    }
    
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log off;
        access_log /dev/null;
    }
    
    location ~ .*\.(js|css)?$
    {
        expires      12h;
        error_log off;
        access_log /dev/null; 
    }
    access_log  /www/wwwlogs/leaveapp.com.log;
    error_log  /www/wwwlogs/leaveapp.com.error.log;
}

參考:asp.net core linux nginx部署

複製發布文件到網站目錄

在創建網站的時候,寶塔會創建網路目錄,在/www/wwwroot目錄下,這裡創建了leaveapp目錄,把發布的文件的publish文件夾裡面的內容全部複製到leaveapp目錄下。可以通過寶塔面板把壓縮的文件直接上傳到leaveapp目錄,還可以通過複製粘貼方式先複製到虛擬機的桌面,再移動到leaveapp目錄。unzip解壓,最終把publish文件夾的內容複製到leaveapp目錄下。 複製完成後,配置許可權:

chattr -i .user.ini //如果不刪除這個文件,無法配置許可權
chmod -R 755 leaveapp //配置許可權
chown -R www:www leaveapp//更改所有者
vim appsettings.json //修改資料庫鏈接,第三步已經創建好的。

System.Drawing.Common問題

由於使用了驗證碼,在發布前,在web項目中引用System.Drawing.Common nuget包,在ubuntu中安裝libgdiplus。

 sudo apt-get -f install libgdiplus

在Ubuntu中運行項目

cd /www/wwwroot/leaveapp
dotnet leaverecordapp.dll

項目啟動後,在內外網都能夠訪問了

配置守護進程

上面運行項目,一關閉命令終端,程式就停止運行了。微軟官方文檔配置了服務,按照官方文檔,創建kestrel-helloapp.service服務。

[Unit]
Description=Leave Record App

[Service]
WorkingDirectory=/www/wwwroot/leaveapp
ExecStart=/usr/bin/dotnet /www/wwwroot/leaveapp/LeaveRecordApp.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=leaverecordapp
User=www
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target
啟用服務:
sudo systemctl enable kestrel-helloapp.service
啟動服務:
sudo systemctl start kestrel-helloapp.service
查看服務狀態:
sudo systemctl status kestrel-helloapp.service
查看服務運行日誌:
sudo journalctl -fu kestrel-helloapp.service

這時候網站就可以正常運行了。

下午又在自己伺服器上嘗試把WTM部署在CentOS伺服器上,也是沒有問題,列一些參考地址吧:

centos System.Drawing 解決驗證碼問題
.Net Core 使用 System.Drawing.Common 部署到CentOS上遇到的問題

CentOS下asp.net core 更改埠,默認asp.net core埠為5000,由於伺服器上已經有asp.net core網站,埠被佔用,需要更改埠,最簡單的方法是在appsettings.json中加兩行配置:

"urls": "//localhost:6000;//localhost:6001",
  "server.urls": "//localhost:6000;//localhost:6001",

原因可以參考這篇文章:
asp.net core 更改埠

wtm還是很優秀的,一兩天完成一個小應用沒問題。