Virtualization

Dùng VPS xây dựng boottrade: hướng dẫn kỹ thuật cơ bản

Bạn đã viết xong chiến lược giao dịch, bot boottrade chạy tốt trên local, nhưng để nó hoạt động trong giờ hành chính khi bạn tắt laptop thì sao? Việc dùng VPS xây dựng boottrade là giải pháp thực tế nhất: bạn có một máy chủ chạy liên tục, độ trễ thấp khi kết nối đến sàn, và toàn quyền root để cài đặt mọi công cụ mình cần. Bài này hướng dẫn bạn từ A đến Z cách host một bot boottrade lên VPS Linux cơ bản, tập trung vào Docker, bảo mật API key và quản lý uptime. Mọi hành động của bạn đều rủi ro tài chính, và bài viết này không phải lời khuyên đầu tư.

Yêu cầu trước khi bắt đầu

  • Một VPS Linux với tối thiểu 1 vCPU và 2GB RAM. Bạn có thể dùng VPS Linux giá rẻ để chạy bot phiên bản nhẹ, nhưng nếu bot xử lý nhiều cặp tiền hoặc dùng indicator nặng, nên nâng lên 4GB RAM.
  • OS: Ubuntu 24.04 LTS hoặc Debian 12. Cả hai đều hỗ trợ Docker tốt và có gói kernel mới.
  • User sudo non-root đã được tạo. rất cao không chạy bot dưới quyền root, nếu API key bị lộ, attacker có toàn bộ hệ thống.
  • SSH key pair đã cấu hình để đăng nhập (không dùng password). Nếu chưa, xem lại bài cấu hình fail2ban chống brute-force SSH trước khi tiếp tục.
  • Tài khoản sàn giao dịch đã tạo API key với quyền tối thiểu: chỉ cho phép trade margin (nếu cần) và read balance. rất cao không bật quyền withdraw.
  • Domain hoặc IP tĩnh của VPS để truy cập web UI của bot (nếu bot có).

Vì sao nên dùng VPS để chạy boottrade?

Máy tính cá nhân không phải là môi trường lý tưởng: mất điện, mất mạng, hay lỡ tay tắt nhầm cửa sổ terminal. Một VPS chạy trong giờ hành chính với uptime trung bình 99.9%, kết nối mạng ổn định trong nước sẽ giúp bot không bỏ lỡ lệnh nào. Thêm vào đó, bạn có thể cài thêm các công cụ giám sát, gửi cảnh báo qua Telegram khi bot gặp lỗi, hoặc chạy nhiều instance cho nhiều chiến lược cùng lúc.

Việc dùng VPS xây dựng boottrade còn giúp bạn cách ly môi trường: bot chạy trong container Docker, tách biệt với OS host. Nếu container bị lỗi, bạn chỉ cần xóa và tạo lại, không lo ảnh hưởng đến SSH hay các dịch vụ khác.

Bước 1 - Cài đặt Docker và Docker Compose trên VPS

Docker là lựa chọn hàng đầu để chạy boottrade vì bạn có thể đóng gói toàn bộ môi trường (Python, thư viện, config) vào một image. Nếu bot không hỗ trợ Docker, bạn vẫn có thể cài thủ công, nhưng bài này tôi sẽ dùng Docker vì nó sạch và dễ rollback.

sudo apt update && sudo apt upgrade -y
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Sau khi cài xong, kiểm tra Docker đã chạy và user của bạn có quyền sử dụng chưa:

sudo systemctl status docker | grep "active (running)"
sudo usermod -aG docker $USER
newgrp docker
docker ps

Nếu lệnh docker ps chạy không báo lỗi, bạn đã sẵn sàng.

Bước 2 - Tạo cấu trúc thư mục và file Docker cho bot boottrade

Giả sử bot của bạn là một script Python sử dụng thư viện python-binance hoặc ccxt. Tôi sẽ tạo cấu trúc thư mục như sau:

mkdir -p ~/boottrade
cd ~/boottrade
mkdir config logs data

File docker-compose.yml sẽ định nghĩa container chạy bot. Mở file:

nano docker-compose.yml

Dán nội dung sau (thay tên image và biến môi trường cho khớp với bot của bạn):

version: '3.8'
services:
  bot:
    image: your-boottrade-image:latest   # hoặc build từ Dockerfile local
    container_name: boottrade-bot
    restart: unless-stopped
    environment:
      - EXCHANGE_API_KEY=${EXCHANGE_API_KEY}
      - EXCHANGE_SECRET_KEY=${EXCHANGE_SECRET_KEY}
      - TRADE_SYMBOLS=BTCUSDT,ETHUSDT
      - RISK_PERCENT=2
    volumes:
      - ./config:/app/config
      - ./logs:/app/logs
      - ./data:/app/data
    ports:
      - "127.0.0.1:8080:8080"   # web UI chỉ listen localhost
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

Lưu ý quan trọng: hiếm khi hardcode API key vào file docker-compose. Dùng biến môi trường và file .env riêng (sẽ tạo ở bước 3). Cổng web UI chỉ nên listen trên 127.0.0.1 và dùng SSH tunnel hoặc Nginx reverse proxy với HTTPS để truy cập từ bên ngoài.

Bước 3 - Bảo mật API key và biến môi trường

Đây là bước quan trọng nhất. API key boottrade là chìa khóa két sắt của bạn. Nếu bị lộ, attacker có thể rút hết tiền từ sàn. Tạo file .env với quyền chỉ user sở hữu mới đọc được:

nano ~/boottrade/.env

Dán 2 dòng (thay key thật của bạn):

EXCHANGE_API_KEY=your_api_key_here
EXCHANGE_SECRET_KEY=your_secret_key_here

Khóa file ngay lập tức:

chmod 600 ~/boottrade/.env

Bây giờ khi chạy docker compose up -d, Docker sẽ tự động đọc biến từ file .env trong cùng thư mục. Kiểm tra container đã nhận biến chưa:

docker compose config
# hoặc exec vào container và echo biến
docker exec boottrade-bot env | grep EXCHANGE

Không thấy key ở output? Kiểm tra lại file .env có đúng tên service không (phải khớp tên trong docker-compose.yml).

Bước 4 - Chạy và quản lý container boottrade

Khởi động container:

cd ~/boottrade
docker compose up -d
docker compose logs -f --tail=50

Kiểm tra xem bot có bắt đầu chạy và kết nối sàn thành công không. Output mẫu bạn sẽ thấy (tùy bot):

[2026-04-01 10:15:23] INFO - Connected to exchange Binance
[2026-04-01 10:15:24] INFO - Starting bot for BTCUSDT
[2026-04-01 10:15:24] INFO - Waiting for next candle...

Nếu thấy lỗi kết nối, kiểm tra API key và xem sàn có đang bảo trì không. Lệnh dừng và xóa container khi cần cập nhật hoặc sửa lỗi:

docker compose down        # dừng + xóa container (giữ volume)
docker compose pull        # cập nhật image mới
docker compose up -d       # chạy lại

Để bot chạy lại tự động khi VPS reboot, Docker đã có sẵn restart: unless-stopped trong compose file. Bạn không cần cấu hình thêm systemd cho container.

Bước 5 - Giám sát và alert qua Telegram

Bot chạy ổn định rồi, nhưng bạn không thể lúc nào cũng SSH vào xem log. Cách đơn giản: dùng script docker logs kết hợp với bot Telegram. Tôi thường dùng một script cron gửi log lỗi qua Telegram mỗi 5 phút. Tạo file monitor.sh:

#!/bin/bash
CONTAINER_NAME="boottrade-bot"
TELEGRAM_BOT_TOKEN="your_bot_token"
TELEGRAM_CHAT_ID="your_chat_id"
if ! docker ps --format '{{.Names}}' | grep -q "$CONTAINER_NAME"; then
  curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage" \
    -d "chat_id=$TELEGRAM_CHAT_ID" \
    -d "text=ALERT: Container $CONTAINER_NAME stopped on $(hostname)"
fi

Thêm vào crontab:

crontab -e
*/5 * * * * /home/youruser/boottrade/monitor.sh

Thế là bạn sẽ nhận được cảnh báo ngay lập tức nếu container chết, kể cả khi VPS sống nhưng Docker gặp lỗi.

Xử lý lỗi thường gặp khi dùng VPS xây dựng boottrade

Lỗi 1: Container restart loop với status "Exited (1)"
Nguyên nhân: API key sai, hoặc script Python crash do thiếu thư viện. Xem log: docker compose logs boottrade-bot. Nếu thấy lỗi "ModuleNotFoundError: No module named …", bạn cần build lại image với requirements đầy đủ.

Lỗi 2: Bot kết nối sàn chậm hoặc timeout
Kiểm tra latency từ VPS đến sàn: ping -c 5 api.binance.com. Nếu ping trên 100ms, cân nhắc đổi VPS có băng thông trong nước ổn định hơn, hoặc dùng IP tĩnh của VPS Linux để giảm routing. Nếu ping ổn nhưng vẫn timeout, thử tăng timeout trong config bot (ví dụ CCXT_TIMEOUT=30000).

Lỗi 3: Log file tăng kích thước không kiểm soát
Docker mặc định ghi log ra JSON file không giới hạn. Trong compose file tôi đã cấu hình max-size: "10m"max-file: "3". Nếu chưa có, thêm vào và docker compose down && docker compose up -d để áp dụng. Bạn cũng có thể set log driver thành local để giảm overhead.

Câu hỏi thường gặp

VPS RAM bao nhiêu là đủ để chạy boottrade?

Tối thiểu 2GB RAM cho bot cơ bản chạy 1-2 cặp tiền. Nếu bạn dùng indicator nặng (EMA, RSI, MACD trên nhiều khung thời gian) hoặc chạy nhiều instance, nên nâng lên 4GB hoặc 8GB. Ubuntu + Docker + một bot trade nhẹ chỉ tốn ~800MB RAM, phần còn lại dành cho Python và thư viện.

Có nên dùng VPS Windows để chạy boottrade?

Không khuyến khích. Hầu hết bot boottrade viết bằng Python, chạy tốt trên Linux. VPS Windows thường đắt hơn và tốn nhiều tài nguyên cho GUI. Nếu bot yêu cầu .NET hoặc phần mềm chỉ chạy trên Windows, bạn có thể dùng VPS Windows, nhưng vẫn nên ưu tiên Docker trên Linux.

Làm sao để cập nhật phiên bản mới của bot?

Dùng Docker rất dễ: docker compose down && docker compose pull && docker compose up -d. Container cũ bị xóa, container mới dùng image mới nhất. Volume ./config./data vẫn giữ nguyên nên cài đặt của bạn không bị mất.

API key của tôi có an toàn trên VPS không?

Nếu bạn làm đúng: file .envchmod 600, SSH chỉ dùng key pair (không password), và container chỉ truyền biến môi trường khi runtime, thì an toàn. Không ai có thể SSH vào nếu không có private key. Nếu dùng dịch vụ VPS của nhà cung cấp uy tín, họ không can thiệp vào file của bạn.

Bot có chạy tiếp khi mất mạng VPS trong vài phút không?

Có. Docker compose với restart: unless-stopped sẽ tự khởi động lại container khi VPS online trở lại. Tuy nhiên bot có thể bỏ lỡ một số cây nến hoặc lệnh trong lúc mất mạng. Bạn nên tích hợp cơ chế catch-up trong code bot (ví dụ lấy lại dữ liệu từ lần chạy gần nhất).

Bài viết liên quan

Lưu ý: Bài viết mang tính tham khảo, tổng hợp kiến thức chung. Mỗi hệ thống, hạ tầng và nhu cầu có đặc thù riêng, nên kiểm thử trong môi trường an toàn và tham vấn kỹ sư trước khi triển khai thực tế.