Deploy ứng dụng Golang
Hướng dẫn này sẽ giúp bạn triển khai ứng dụng Golang sử dụng tính năng Service trong FlashPanel để tự động khởi động lại và reverse proxy với Nginx.
Yêu cầu
- Server đã được kết nối với FlashPanel
- Domain đã trỏ DNS về server
- Quyền truy cập vào FlashPanel
Bước 1: Cài đặt Go (Golang)
Sử dụng tính năng Application trong FlashPanel để cài đặt Go:
- Vào FlashPanel → Chọn server → Applications (Ứng dụng)
- Tìm và chọn Go trong danh sách ứng dụng
- Click nút Install để cài đặt Go
Sau khi cài đặt xong, mở terminal để xác minh:
/usr/local/go/bin/go versionWARNING
Chỉ cần cài đặt Go một lần trên server. Nếu bạn đã cài đặt Go rồi, có thể bỏ qua bước này. Kiểm tra trong danh sách Applications xem Go đã có chưa.
Bước 2: Cài đặt và cấu hình Database (Tùy chọn)
Nếu ứng dụng Golang của bạn cần kết nối với database, bạn có thể cài đặt và quản lý database thông qua FlashPanel. FlashPanel hỗ trợ các loại database sau:
- MySQL - Hệ quản trị cơ sở dữ liệu quan hệ phổ biến
- MariaDB - Fork mã nguồn mở của MySQL
- PostgreSQL - Hệ quản trị cơ sở dữ liệu quan hệ nâng cao
- MongoDB - Cơ sở dữ liệu NoSQL
Tất cả các database trên đều có:
- Tính năng cài đặt qua Application
- Dashboard quản lý database và user qua Database
Cài đặt Database
Sử dụng tính năng Application trong FlashPanel để cài đặt database:
- Vào FlashPanel → Chọn server → Applications (Ứng dụng)
- Tìm và chọn database bạn muốn cài đặt (MySQL, MariaDB, PostgreSQL, hoặc MongoDB)
- Click nút Install để cài đặt database
WARNING
Nếu database đã được cài đặt rồi, bạn có thể bỏ qua bước này. Kiểm tra trong danh sách Applications xem database đã có chưa.
Tạo database và user
Sử dụng tính năng Database trong FlashPanel để tạo database và user:
Tạo Database User
- Vào FlashPanel → Chọn server → Database (Cơ sở dữ liệu)
- Click Create database user (Tạo người dùng cơ sở dữ liệu)
- Điền thông tin:
- Username: Tên user (ví dụ:
myapp_user) - Password: Mật khẩu mạnh cho user
- Access scope: Chọn phạm vi truy cập (localhost hoặc từ xa)
- Username: Tên user (ví dụ:
- Click Save để tạo user
Tạo Database
- Vẫn trong tab Database, click Create Database (Tạo Cơ sở dữ liệu)
- Điền thông tin:
- Database name: Tên database (ví dụ:
myapp_db) - Users: Chọn user vừa tạo ở trên để cấp quyền truy cập
- Database name: Tên database (ví dụ:
- Click Save để tạo database
WARNING
Lưu lại các thông tin sau để sử dụng trong bước tiếp theo:
- Database name (ví dụ:
myapp_db) - Database username (ví dụ:
myapp_user) - Database password
- Database host (thường là
localhost) - Database port (MySQL/MariaDB:
3306, PostgreSQL:5432, MongoDB:27017)
Bước 3: Tạo website với Reverse Proxy
Vào FlashPanel → Chọn server → Sites → Add new site
Điền thông tin website:
- Domain: Nhập domain của bạn (ví dụ:
api.example.com) - Proxy Port: Chọn một cổng để ứng dụng Golang chạy (ví dụ:
8080) - PHP Version: Không cần chọn (vì đây là ứng dụng Golang)

- Domain: Nhập domain của bạn (ví dụ:
Click Add site để tạo website
Trỏ DNS domain về IP của server và cài đặt SSL cho website
Bước 4: Upload và build ứng dụng Golang
Upload mã nguồn
Có 2 cách để đưa mã nguồn lên server:
Cách 1: Upload qua File Manager trong FlashPanel
- Vào Sites → Chọn website → File Manager
- Upload các file mã nguồn vào thư mục website
Cách 2: Clone từ Git
Sử dụng tính năng Source Code trong FlashPanel để clone mã nguồn từ Git:
Vào FlashPanel → Chọn website → Source Code
Chọn một trong các tùy chọn sau:
Tùy chọn A: GitHub/GitLab/Bitbucket (Khuyến nghị)
- Chọn GitHub, GitLab, hoặc Bitbucket
- Chọn repository và branch bạn muốn deploy
- Chọn
Automatically add deployment key (Recommended) - Click Install GitHub/GitLab/Bitbucket Repository
WARNING
Trước khi sử dụng GitHub/GitLab/Bitbucket, bạn cần kết nối tài khoản Git với FlashPanel trước.
Tùy chọn B: Git Repository
- Chọn Git
- Nhập SSH URL của repository (ví dụ:
[email protected]:username/repo.git) - Nhập tên branch (ví dụ:
mainhoặcmaster) - Chọn
Automatically add deployment key (Recommended)nếu chưa đăng ký server global key - Click Install Git Repository
WARNING
Trước khi sử dụng Git Repository, bạn cần thêm SSH key của FlashPanel vào Git provider trước.
Sau khi cài đặt xong, mã nguồn sẽ được clone vào thư mục website
Build ứng dụng Golang
Mở terminal dành cho site, chạy các lệnh sau:
# Di chuyển vào thư mục website
cd /home/flashpanel/your-domain.com
# Build ứng dụng (thay main.go bằng file main của bạn nếu khác)
/usr/local/go/bin/go build -o app main.go
# Hoặc build với tối ưu hóa cho production
CGO_ENABLED=0 GOOS=linux /usr/local/go/bin/go build -a -installsuffix cgo -o app main.goWARNING
- Thay
your-domain.combằng domain thực tế của bạn - Thay
main.gobằng file main của ứng dụng nếu khác - File binary sau khi build sẽ có tên
app(hoặc tên bạn đặt)
Tạo file .env cho biến môi trường
Tạo file .env trong thư mục website để lưu cấu hình:
cd /home/flashpanel/your-domain.com
nano .envThêm các biến môi trường cần thiết:
# Database configuration (thay đổi theo loại database bạn sử dụng)
DB_HOST=localhost
DB_PORT=3306 # MySQL/MariaDB: 3306, PostgreSQL: 5432, MongoDB: 27017
DB_USER=myapp_user
DB_PASSWORD=your_strong_password_here
DB_NAME=myapp_db
# Application configuration
APP_PORT=8080
APP_ENV=productionLưu file (Ctrl+O, Enter, Ctrl+X trong nano)
Bước 5: Test chạy ứng dụng
Trước khi tạo service, hãy test xem ứng dụng có chạy được không:
cd /home/flashpanel/your-domain.com
./appNếu ứng dụng chạy thành công, bạn sẽ thấy log khởi động. Nhấn Ctrl+C để dừng ứng dụng.
WARNING
Đảm bảo ứng dụng của bạn đọc biến môi trường từ file .env hoặc từ system environment variables. Nếu ứng dụng không đọc được .env, bạn sẽ cần cấu hình trong service file ở bước tiếp theo.
Bước 6: Tạo Systemd Service để tự động khởi động lại
Sử dụng tính năng quản lý Systemd Service trong FlashPanel để tạo service tự động khởi động lại ứng dụng.
Tạo Service trong FlashPanel
Vào FlashPanel → Chọn server → Services → Add new service
Điền thông tin service:
- Service Name: Tên service (ví dụ:
myapphoặcgolang-app) - Description: Mô tả service (ví dụ:
Golang Application - api.example.com)
- Service Name: Tên service (ví dụ:
Cấu hình Service như sau:
[Unit]
Description=Golang Application - your-domain.com
After=network.target mysql.service
# Thay mysql.service bằng mariadb.service, postgresql.service, hoặc mongod.service tùy theo database bạn sử dụng
[Service]
Type=simple
User=flashpanel
WorkingDirectory=/home/flashpanel/your-domain.com
ExecStart=/home/flashpanel/your-domain.com/app
Restart=always
RestartSec=10
StandardOutput=append:/var/log/services/myapp.log
StandardError=append:/var/log/services/myapp-error.log
# Biến môi trường (nếu ứng dụng không đọc từ .env)
Environment="DB_HOST=localhost"
Environment="DB_PORT=3306" # MySQL/MariaDB: 3306, PostgreSQL: 5432, MongoDB: 27017
Environment="DB_USER=myapp_user"
Environment="DB_PASSWORD=your_strong_password_here"
Environment="DB_NAME=myapp_db"
Environment="APP_PORT=8080"
Environment="APP_ENV=production"
[Install]
WantedBy=multi-user.targetClick Add service để tạo service
Sau khi tạo service, click nút Enable để service tự động khởi động khi server reboot
Click nút Start để khởi động service ngay
WARNING
Quan trọng:
- Thay
your-domain.combằng domain thực tế của bạn - Thay
flashpanelbằng user mà website đang chạy (thường là tên domain không có dấu chấm) - Thay
myapptrong tên service và log file bằng tên bạn đã chọn - Thay các giá trị biến môi trường bằng thông tin thực tế của bạn
APP_PORTphải khớp với Proxy Port bạn đã đặt khi tạo website (ví dụ:8080)- Nếu ứng dụng của bạn đọc từ file
.env, bạn có thể bỏ phầnEnvironmenthoặc chỉ thêm các biến không có trong.env After=mysql.serviceđảm bảo database khởi động trước khi ứng dụng Golang khởi động. Thay đổi tên service tùy theo database bạn sử dụng (mysql.service, mariadb.service, postgresql.service, hoặc mongod.service)DB_PORTcần được thay đổi tùy theo loại database: MySQL/MariaDB:3306, PostgreSQL:5432, MongoDB:27017
Bước 7: Kiểm tra và quản lý Service
Xem trạng thái service
Trong FlashPanel → Services, bạn có thể:
- Start: Khởi động service
- Restart: Khởi động lại service
- Stop: Dừng service
- View log: Xem log bình thường
- View error log: Xem log lỗi
- Enable/Disable: Bật/tắt tự động khởi động khi server reboot
Xem log ứng dụng
Để xem log chi tiết, bạn có thể:
- Xem log trong FlashPanel: Click View log hoặc View error log
- Xem log trực tiếp trên server:
# Log bình thường
tail -f /var/log/services/myapp.log
# Log lỗi
tail -f /var/log/services/myapp-error.logBước 8: Kiểm tra ứng dụng
- Truy cập domain của bạn qua trình duyệt:
https://your-domain.com - Nếu ứng dụng chạy thành công, bạn sẽ thấy ứng dụng hoạt động
- Nếu có lỗi, kiểm tra log trong FlashPanel hoặc trên server
Troubleshooting
Ứng dụng không khởi động
- Kiểm tra log lỗi: Services → Click View error log
- Kiểm tra quyền thực thi của file binary:
chmod +x /home/flashpanel/your-domain.com/app- Kiểm tra đường dẫn trong service file có đúng không
- Test chạy thủ công để xem lỗi:
cd /home/flashpanel/your-domain.com
./appLỗi kết nối Database
- Kiểm tra database đã khởi động:
# MySQL/MariaDB
sudo systemctl status mysql
# hoặc
sudo systemctl status mariadb
# PostgreSQL
sudo systemctl status postgresql
# MongoDB
sudo systemctl status mongodHoặc kiểm tra trong FlashPanel → Applications → Chọn database của bạn → Xem trạng thái
Kiểm tra thông tin kết nối trong file
.envhoặc service file. Đảm bảo các thông tin khớp với database và user đã tạo trong FlashPanel → DatabaseTest kết nối database thủ công:
# MySQL/MariaDB
mysql -u myapp_user -p myapp_db
# PostgreSQL
psql -U myapp_user -d myapp_db
# MongoDB
mongo -u myapp_user -p --authenticationDatabase myapp_db- Nếu quên thông tin database, bạn có thể xem lại trong FlashPanel → Database tab
Lỗi reverse proxy
- Kiểm tra ứng dụng có đang chạy trên đúng port không:
sudo netstat -tlnp | grep 8080- Kiểm tra cấu hình Proxy Port trong website có đúng không
- Restart Nginx:
sudo systemctl restart nginxTóm tắt
Sau khi hoàn thành các bước trên, bạn đã:
✅ Cài đặt Go trên server
✅ Cài đặt và cấu hình MySQL
✅ Tạo website với reverse proxy
✅ Build và upload ứng dụng Golang
✅ Tạo Systemd Service để tự động khởi động lại
✅ Cấu hình biến môi trường
✅ Ứng dụng đã sẵn sàng phục vụ qua domain với SSL
Ứng dụng Golang của bạn giờ đã được triển khai thành công với:
- Reverse proxy qua Nginx
- Tự động khởi động lại khi server reboot hoặc ứng dụng crash
- SSL/HTTPS bảo mật
- Log management dễ dàng theo dõi