隨着雲計算和容器化技術的普及,Linux 服務器已成為部署 Web 應用程序的主流平台之一。ASP.NET Core 作為一個跨平台、高性能的框架,非常適合在 Linux 環境中運行。本篇博客將詳細介紹如何在 Linux 服務器上部署 ASP.NET Core Web API 應用,包括部署準備、應用發佈、配置反向代理(Nginx)、設置系統服務以及日誌管理等步驟。
一、部署準備
在開始之前,請確保你具備以下條件:
- 一台運行 Linux(如 Ubuntu 20.04)的服務器,具有 SSH 訪問權限。
- ASP.NET Core Web API 項目,並確保在本地能夠正常運行。
二、安裝 MySQL(如需)
1. 安裝MySQL服務器
sudo apt install mysql-server -y
2. 啓動並設置MySQL開機自啓
sudo systemctl start mysql
sudo systemctl enable mysql
3. 驗證MySQL安裝
登錄MySQL以確認安裝成功。
sudo mysql -u root -p
MySQL默認密碼是root,直接登錄即可。
4. 修改初始密碼
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
5. 創建庫和表
這裏我們用SQL語句把項目需要的數據庫建好即可。
三、安裝 .NET 運行環境
首先,需要在你的 Linux 服務器上安裝 .NET 運行環境(如果選擇框架依賴部署)或 .NET SDK(如果需要編譯代碼)。
1. 添加 Microsoft 包存儲庫
# 安裝所需的依賴
sudo apt-get update
sudo apt-get install -y wget apt-transport-https software-properties-common
# 下載並安裝微軟的公鑰
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
# 更新包索引
sudo apt-get update
2. 安裝 .NET 運行環境
# 安裝 ASP.NET Core 運行時
sudo apt-get install -y aspnetcore-runtime-8.0
注意:根據你的應用所使用的 .NET 版本,調整安裝的運行時版本。
3. 驗證安裝
dotnet --version
你應該會看到已安裝的 .NET 版本號,如 8.0.x。
四、發佈 ASP.NET Core 應用
1. Visual Studio 發佈應用
在本地開發環境中,使用 visual studio 發佈應用。
選擇框架依賴部署(FDD)或自包含部署(SCD):
- 框架依賴部署(FDD):目標服務器需要預先安裝 .NET 運行環境。
- 自包含部署(SCD):應用程序包含了所有必要的運行時文件,無需在服務器上安裝 .NET。
保存發佈配置,點擊發布。
發佈成功。
發佈後的項目在目標位置裏:D:\DCO\dco_ll\bin\Release\net8.0
2. 複製發佈後的內容到服務器目錄
將文件夾內所有內容複製到服務器上的預發佈項目目錄上。
其中,應用涉及的配置信息一般在 appsettings.json 裏。
五、啓動項目
切換到項目目錄,指定端口啓動項目。
cd xxxx #你的項目在服務器上的部署路徑
sudo dotnet DCOWebhook.dll --urls "http://0.0.0.0:80"
到這裏,程序已經用公網IP訪問了。
六、配置 Nginx 作為反向代理(可選)
Nginx 將作為反向代理,將來自客户端的請求轉發到 ASP.NET Core 應用,處理 SSL、負載均衡等任務。
如果你的項目端口監聽的不是默認80端口(比如5000端口),那麼可以通過 Nginx 監聽80端口進行轉發,訪問80端口的請求會自動轉發到5000端口上。
1. 安裝 Nginx
sudo apt-get update
sudo apt-get install -y nginx
2. 配置 Nginx
創建一個新的 Nginx 配置文件,或修改默認配置。
sudo nano /etc/nginx/sites-available/default
修改為以下內容:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name dco021.atomgit.net; # 替換為你的域名或服務器IP
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;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
3. 啓用配置並重啓 Nginx
# 創建符號鏈接以啓用配置
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/
# 測試 Nginx 配置是否正確
sudo nginx -t
# 重啓 Nginx
sudo systemctl restart nginx
七、設置系統服務(可選)
使用 systemd 將你的 ASP.NET Core 應用配置為服務,確保應用在服務器啓動時自動運行,並在崩潰後自動重啓。
1. 創建 systemd 服務文件
sudo nano /etc/systemd/system/dcowebhook.service
添加以下內容:
[Unit]
Description=DCOWebhook ASP.NET Core Web API
After=network.target
[Service]
WorkingDirectory=/var/www/dco
ExecStart=/usr/bin/dotnet /var/www/dco/DCOWebhook.dll --urls "http://0.0.0.0:5000" #換成需要監聽的端口
Restart=always
# 用户和組
User=www-data
Group=www-data
# 環境變量
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
注意:
WorkingDirectory:你的應用所在的目錄。ExecStart:啓動應用的命令。根據你的發佈方式(FDD 或 SCD)調整路徑和參數。User和Group:推薦使用非 root 用户(如www-data)運行服務,提升安全性。
2. 重新加載 systemd 並啓動服務
sudo systemctl daemon-reload
sudo systemctl start dcowebhook.service #如果是修改配置需要刷新則寫restart
sudo systemctl enable dcowebhook.service
3. 檢查服務狀態
sudo systemctl status dcowebhook.service
你應該會看到服務正在運行,並監聽指定的端口。
八、配置防火牆
確保服務器的防火牆允許 HTTP(80)和 HTTPS(443)端口的流量。
使用 UFW 配置防火牆。
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status
注意:
Nginx Full配置包括 HTTP 和 HTTPS 端口。
九、查看日誌
如果項目依然無法訪問,可以查看日誌分析問題所在。
1. 查看 Nginx 錯誤日誌
sudo tail -f /var/log/nginx/error.log
2. 查看 ASP.NET Core 應用日誌
sudo tail -f /var/log/dcowebhook/log-*.txt
十、常見問題
1. 解決端口占用
偶爾會遇到端口被佔用的問題,我們要先查看是哪個進程在佔用這個端口。
sudo lsof -i 5000 #換成你需要查的端口
再來殺死這個進程。
sudo kill -9 76681 #換成上一步查到的進程的pid
十一、總結
通過本文的步驟,你已經成功在 Linux 服務器上部署了 ASP.NET Core Web API 應用。你不僅配置了應用的發佈和運行,還設置了 Nginx 作為反向代理,確保了應用的高可用性和安全性。此外,配置日誌記錄幫助你更好地監控和維護應用。根據實際需求,你還可以進一步優化配置,如啓用 HTTPS、配置負載均衡等。部署成功後,建議定期檢查應用和服務器的性能,及時更新和維護,以確保應用的穩定運行。