Skip to content

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:

  1. Vào FlashPanel → Chọn server → Applications (Ứng dụng)
  2. Tìm và chọn Go trong danh sách ứng dụng
  3. Click nút Install để cài đặt Go

Sau khi cài đặt xong, mở terminal để xác minh:

bash
/usr/local/go/bin/go version

WARNING

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ó:

Cài đặt Database

Sử dụng tính năng Application trong FlashPanel để cài đặt database:

  1. Vào FlashPanel → Chọn server → Applications (Ứng dụng)
  2. Tìm và chọn database bạn muốn cài đặt (MySQL, MariaDB, PostgreSQL, hoặc MongoDB)
  3. 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

  1. Vào FlashPanel → Chọn server → Database (Cơ sở dữ liệu)
  2. Click Create database user (Tạo người dùng cơ sở dữ liệu)
  3. Đ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)
  4. Click Save để tạo user

Tạo Database

  1. Vẫn trong tab Database, click Create Database (Tạo Cơ sở dữ liệu)
  2. Đ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
  3. 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

  1. Vào FlashPanel → Chọn server → SitesAdd new site

  2. Đ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)

  3. Click Add site để tạo website

  4. 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:

  1. Vào FlashPanel → Chọn website → Source Code

  2. 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ụ: main hoặc master)
    • 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.

  3. 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:

bash
# 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.go

WARNING

  • Thay your-domain.com bằng domain thực tế của bạn
  • Thay main.go bằ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:

bash
cd /home/flashpanel/your-domain.com
nano .env

Thêm các biến môi trường cần thiết:

properties
# 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=production

Lư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:

bash
cd /home/flashpanel/your-domain.com
./app

Nế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

  1. Vào FlashPanel → Chọn server → ServicesAdd new service

  2. Điền thông tin service:

    • Service Name: Tên service (ví dụ: myapp hoặc golang-app)
    • Description: Mô tả service (ví dụ: Golang Application - api.example.com)
  3. Cấu hình Service như sau:

ini
[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.target
  1. Click Add service để tạo service

  2. Sau khi tạo service, click nút Enable để service tự động khởi động khi server reboot

  3. Click nút Start để khởi động service ngay

WARNING

Quan trọng:

  1. Thay your-domain.com bằng domain thực tế của bạn
  2. Thay flashpanel bằng user mà website đang chạy (thường là tên domain không có dấu chấm)
  3. Thay myapp trong tên service và log file bằng tên bạn đã chọn
  4. Thay các giá trị biến môi trường bằng thông tin thực tế của bạn
  5. APP_PORT phải khớp với Proxy Port bạn đã đặt khi tạo website (ví dụ: 8080)
  6. Nếu ứng dụng của bạn đọc từ file .env, bạn có thể bỏ phần Environment hoặc chỉ thêm các biến không có trong .env
  7. 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)
  8. DB_PORT cầ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ể:

  1. Xem log trong FlashPanel: Click View log hoặc View error log
  2. Xem log trực tiếp trên server:
bash
# Log bình thường
tail -f /var/log/services/myapp.log

# Log lỗi
tail -f /var/log/services/myapp-error.log

Bước 8: Kiểm tra ứng dụng

  1. Truy cập domain của bạn qua trình duyệt: https://your-domain.com
  2. Nếu ứng dụng chạy thành công, bạn sẽ thấy ứng dụng hoạt động
  3. 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

  1. Kiểm tra log lỗi: Services → Click View error log
  2. Kiểm tra quyền thực thi của file binary:
bash
chmod +x /home/flashpanel/your-domain.com/app
  1. Kiểm tra đường dẫn trong service file có đúng không
  2. Test chạy thủ công để xem lỗi:
bash
cd /home/flashpanel/your-domain.com
./app

Lỗi kết nối Database

  1. Kiểm tra database đã khởi động:
bash
# MySQL/MariaDB
sudo systemctl status mysql
# hoặc
sudo systemctl status mariadb

# PostgreSQL
sudo systemctl status postgresql

# MongoDB
sudo systemctl status mongod

Hoặc kiểm tra trong FlashPanel → Applications → Chọn database của bạn → Xem trạng thái

  1. Kiểm tra thông tin kết nối trong file .env hoặc service file. Đảm bảo các thông tin khớp với database và user đã tạo trong FlashPanel → Database

  2. Test kết nối database thủ công:

bash
# 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
  1. Nếu quên thông tin database, bạn có thể xem lại trong FlashPanel → Database tab

Lỗi reverse proxy

  1. Kiểm tra ứng dụng có đang chạy trên đúng port không:
bash
sudo netstat -tlnp | grep 8080
  1. Kiểm tra cấu hình Proxy Port trong website có đúng không
  2. Restart Nginx:
bash
sudo systemctl restart nginx

Tó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