將 .NET 6 MVC 部署至 Linux

先在你的 Linux 伺服器上建立資料夾,這裡示範命名為 myweb。記得設定正確的資料夾權限,一般預設使用 0755。0755 對應的權限為 rwxr-xr-x

其他使用者:僅具備讀取與執行權限(r-x)

擁有者(你的使用者帳號):完整的讀取、寫入與執行權限(rwx)

群組成員:僅具備讀取與執行權限(r-x)

接著在 Visual Studio 中發布專案。先切換至「發行」組態並完成編譯,再對專案按右鍵選擇發布。發布作業完成後,透過 FTP 軟體將發布資料夾內所有檔案,複製到剛才建立的 myweb 目錄中。

cd /usr/myweb

檔案移動完畢後,執行下方指令將應用程式以背景程序方式啟動。採用背景執行的好處是,即便關閉遠端 Linux SSH 連線視窗,程式仍會持續運作。

sudo nohup dotnet yourprogramname.dll &Code language: CSS (css)

指令末尾的 & 符號是背景執行的關鍵。若省略此符號,程式會在前景執行,一旦關閉終端機或是按下 Ctrl + C,程式就會立刻停止。

這裡提供實際使用範例:sudo nohup dotnet WebSite.dll &

額外重要提醒

發布前請先設定連接埠,開啟 .NET MVC 專案裡的 appsettings.json 檔案。

請參考以下範例新增組態內容:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://0.0.0.0:8080"
      }
    }
  }
}Code language: JSON / JSON with Comments (json)

此組態會開放 8080 連接埠,接受來自任意 IP 位址的連線,你也能搭配 Nginx 實現反向代理,在同一台 Linux 伺服器上架設多個不同網域。

如果僅使用 Nginx 作為反向代理,建議不用開放防火牆連接埠,並將服務綁定至本機位址,設定方式如下:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://127.0.0.1:8080"
      }
    }
  }
}Code language: JSON / JSON with Comments (json)

套用這組設定後,應用程式只接受本機請求,並拒絕所有外部直接連線。

本次目標是透過網址 abc.com/hello 存取此應用程式。

接著執行 sudo nohup dotnet WebSite.dll & 啟動應用程式。

可使用下列指令檢查程式是否正常執行:ps -aux | grep WebSite.dll

若畫面出現對應的程序資訊,就代表服務已順利啟動。

設定 Nginx 反向代理(不需要此功能可跳過本段落)

若你的主機已安裝 Nginx,主要組態檔會位於 /etc/nginx/nginx.conf

接著編輯站台組態檔,路徑為 /etc/nginx/sites-available/default

server {
	listen 80 default_server;
	listen [::]:80 default_server;

	root /var/web/xxxx;
	index index.html index.htm index.nginx-debian.html;
	server_name _;

	# 主站
	location / {
		try_files $uri $uri/ =404;
	}

	# ✅ 重點:將 /hello 轉導至 .NET 服務
	location /hello {
		proxy_pass http://127.0.0.1:8080;
		proxy_http_version 1.1;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
	}
}Code language: PHP (php)

儲存修改後,重新啟動 Nginx

sudo nginx -t
sudo systemctl restart nginx

接下來重新啟動 .NET MVC 應用程式

先執行 ps -aux | grep WebSite.dll 找出正在執行的程序,並記下 sudo 程序列最前方的 PID 編號

透過該 PID 編號終止目前執行中的 .NET MVC 執行個體。

使用這行指令重新啟動服務:sudo nohup dotnet 你的專案.dll –urls http://127.0.0.1:8080 > /dev/null 2>&1 &

接下來進行整體功能測試

重新啟動 Nginx

執行下方指令:

bash

輸入指令:

sudo systemctl restart nginx

.NET 服務監聽 8080 連接埠

使用下列指令確認 .NET 服務運作狀態:

bash

輸入指令:

curl http://127.0.0.1:8080
Code language: JavaScript (javascript)

如果終端機畫面輸出原始 HTML 內容,就代表運作正常。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *