Tiếng Việt
Deploy ứng dụng ASP.NET
Giả sử bạn có một ứng dụng ASP.NET Core muốn chạy dưới domain domain.com. Ứng dụng chạy bằng Kestrel ở cổng 3000, được quản lý bởi một Systemd Service, còn website trên FlashPanel chuyển request từ domain tới cổng 3000.
Yêu cầu
- Máy chủ đã kết nối với FlashPanel
- DNS của domain đã trỏ về IP máy chủ
Bước 1: Cài đặt .NET SDK
Vào trang quản lý máy chủ, bấm menu Ứng dụng, chọn tab Chưa cài đặt, tìm ASP.NET Core rồi bấm Cài đặt. Chọn Phiên bản trùng với phiên bản .NET của dự án (ví dụ dự án nhắm net8.0 thì chọn 8.0). Xem chi tiết tại Ứng dụng.
Bước 2: Tạo trang web
- Vào trang quản lý máy chủ, bấm menu Website ở thanh bên, sau đó bấm nút Tạo website
- Nhập Tên miền (ví dụ:
domain.com) - Nhập Proxy Port: cổng ứng dụng sẽ lắng nghe, ví dụ
3000 - Bấm Tạo trang web
TIP
Nếu bật Cách ly trang web, website sẽ chạy bằng một người dùng Linux riêng. Khi đó hãy thay flashpanel trong các đường dẫn bên dưới bằng tên người dùng cách ly của website.
Bước 3: Đưa mã nguồn lên máy chủ
Chọn một trong hai cách:
- Từ Git (khuyến nghị): vào trang quản lý website, bấm menu Cài đặt Mã nguồn và cài repository. Xem hướng dẫn tại Cài đặt mã nguồn.
- Tự tải lên: mở Quản Lý File trên trang tổng quan của website và tải mã nguồn vào thư mục website. Xem Quản lý file.
Mã nguồn nằm trong thư mục /home/flashpanel/domain.com.
Bước 4: Build và publish
Mở Terminal trên trang tổng quan của website (terminal đăng nhập bằng người dùng sở hữu website và mở sẵn thư mục website), sau đó chạy:
bash
cd /home/flashpanel/domain.com
# Cập nhật database (chỉ khi dùng Entity Framework Core migration)
dotnet ef database update
# Build và publish bản Release vào thư mục publish
dotnet publish -c Release -o publishSau lệnh trên, file chạy chính nằm tại publish/<TênDựÁn>.dll, ví dụ publish/domain_com.dll.
TIP
Lệnh dotnet ef database update chỉ cần khi ứng dụng dùng Entity Framework Core và đã cài công cụ dotnet-ef (dotnet tool install --global dotnet-ef). Bỏ qua lệnh này nếu ứng dụng không dùng database migration.
Bước 5: Tạo Service cho ứng dụng
Dùng tính năng quản lý Systemd Service để ứng dụng chạy nền và tự khởi động lại:
- Vào trang quản lý máy chủ, bấm menu Service, sau đó bấm Tạo Service
- Nhập Tên, ví dụ
domain_com(ngắn gọn, không chứa ký tự đặc biệt) - Thay nội dung trong trình soạn thảo bằng nội dung sau:
ini
[Unit]
Description=ASP.NET - domain.com
[Service]
WorkingDirectory=/home/flashpanel/domain.com/publish
ExecStart=/usr/bin/dotnet /home/flashpanel/domain.com/publish/domain_com.dll --urls "http://127.0.0.1:3000"
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=domain_com
User=flashpanel
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
StandardOutput=append:/var/log/services/domain_com.log
StandardError=append:/var/log/services/domain_com-error.log
[Install]
WantedBy=multi-user.target- Giữ chọn Khởi động cùng với hệ thống để service tự chạy khi máy chủ reboot
- Bấm Tạo Service. Service được tạo và khởi động ngay
WARNING
- Thay
3000bằng Proxy Port của website.127.0.0.1giúp ứng dụng chỉ nhận request qua website, không lộ cổng ra Internet - Thay
domain.combằng tên miền của website vàdomain_com.dllbằng tên file dll của dự án Userlà người dùng sở hữu website (không dùngroot)- Linux phân biệt chữ hoa chữ thường trong tên file. Với
ASPNETCORE_ENVIRONMENT=Production, ứng dụng đọc fileappsettings.Production.json, không phảiappsettings.production.json - Tên biến môi trường không hỗ trợ dấu hai chấm (
:). Dùng hai dấu gạch dưới (__) thay thế, ví dụ khóaConnectionStrings:DefaultConnectionđược khai báo là:iniEnvironment=ConnectionStrings__DefaultConnection={Connection String}
Bước 6: Cài đặt SSL
Vào trang quản lý website, bấm menu SSL và cài chứng chỉ cho domain. Xem hướng dẫn tại SSL.
Kiểm tra kết quả
- Trên trang Service, service
domain_comcó trạng thái đang hoạt động - Truy cập
https://domain.comvà kiểm tra ứng dụng phản hồi đúng
Cập nhật ứng dụng
- Cập nhật mã nguồn (bấm Triển khai ngay trong menu Triển khai nếu cài từ Git, hoặc tải bản mới lên bằng Quản Lý File)
- Mở Terminal của website và chạy lại
dotnet publish -c Release -o publish - Trên trang Service, bấm nút Khởi động lại của service
domain_com
TIP
Nếu cài mã nguồn từ Git, bạn có thể thêm dotnet publish -c Release -o publish vào Deployment Script để không phải chạy tay ở bước 2. Deployment Script chạy bằng người dùng sở hữu website nên không khởi động lại được Systemd Service; bạn vẫn cần bấm Khởi động lại trên trang Service.
Xử lý sự cố
Ứng dụng không khởi chạy được
- Trên trang Service, bấm Xem Log lỗi của service
domain_com - Chạy thử thủ công trong thư mục website để xem lỗi:
dotnet publish/domain_com.dll --urls "http://127.0.0.1:3000" - Kiểm tra đường dẫn file dll trong
ExecStartcó đúng không
Lỗi 502 Bad Gateway
- Kiểm tra service đang chạy trên trang Service
- Đảm bảo cổng trong
--urlskhớp với Proxy Port của website - Xem thêm Lỗi 502 Bad Gateway
Lỗi You must install or update .NET to run this application
Phiên bản .NET đã cài không khớp với phiên bản mà dự án nhắm tới. Chạy dotnet --list-runtimes để xem các phiên bản đang có, sau đó cài đúng phiên bản trên trang Ứng dụng.