Triển Khai Social Tool ở môi trường production với Docker
🔥 Tổng Quan#
Tài liệu này mô tả quy trình xây dựng và triển khai dịch vụ Social Tool chạy trên Docker trong môi trường production.Tech Stack#
Framework: Bun (TypeScript) + Puppeteer
Xây dựng: bun install → bun run build → bun compile
Runtime: Bun + Supervisor + Google Chrome Stable
ECR: social/tool-prod (production) / social/tool-base-prod (base)
Source: Git submodule tại build/tools/
📖 Tài Liệu Tham Khảo#
🚧 Cấu Trúc Dự Án#
Social/tool/
├─ build/
│ ├─ Dockerfile-base # Base image: Supervisor
│ ├─ Dockerfile # Production: Bun + Chrome
│ ├─ Dockerfile.development # Development build
│ ├─ tools/ # ⚡ Git submodule — Bun source
│ │ ├─ .env
│ │ ├─ package.json
│ │ ├─ bun.lock
│ │ └─ src/
│ └─ conf/
│ └─ supervisor/social-tool.conf # Cấu hình Supervisor
├─ .env.production # Biến môi trường Docker Compose
└─ docker-compose.yml.production # Compose file
📦 Yêu Cầu Tiên Quyết#
| Công Cụ | Phiên Bản Tối Thiểu | Mục Đích |
|---|
| Docker | ≥ 24.0.0 | Quản lý container |
| Google Chrome Stable | ≥ 130.0.0 | Chrome headless cho tự động hóa |
| MongoDB | ≥ 7 | Máy chủ cơ sở dữ liệu |
Lưu ý: Nếu máy chủ không có phân vùng swap mặc định, có thể khởi tạo swap memory để đảm bảo hiệu năng social-tool khi vận hành ở tần suất cao từ 22 đến 25 tiến trình đồng thời.
🏗️ Pipeline Xây dựng#
┌──────────────────────────────────────────────────────────────┐
│ BUN + CHROME BUILD PIPELINE │
│ │
│ ┌─────────────┐ ┌──────────────┐ │
│ │ GIAI ĐOẠN 1 │ │ GIAI ĐOẠN 2 │ │
│ │ build │───────────▶│ production │ │
│ │ │ │ │ │
│ │ • bun │ │ • Base image │ │
│ │ install │ │ • Supervisor │ │
│ │ • bun run │ │ • Google │ │
│ │ build │ │ Chrome │ │
│ │ • bun │ │ • Bun dist │ │
│ │ compile │ │ │ │
│ └─────────────┘ └──────────────┘ │
└──────────────────────────────────────────────────────────────┘
❄️ Cấu Hình#
Biến Môi Trường Docker Compose (.env.production)#
Biến Môi Trường Ứng Dụng (build/tools/.env)#
Thiết Lập Cơ Sở Dữ Liệu (MongoDB)#
🚀 Xây dựng & Triển Khai#
Bước 1: Xây dựng Image#
Bước 2: Đẩy lên ECR#
Bước 3: Triển Khai#
🛡️ Các Thực Hành Bảo Mật#
1.
.env không bao giờ nhúng vào image — mount dưới dạng read-only volume khi runtime
2.
Container non-root — chạy dưới user không đặc quyền (UID: 1200)
3.
Supervisor quản lý — auto-restart khi có lỗi
4.
Puppeteer chromium bỏ qua — dùng Chrome hệ thống thay vì Chromium đóng gói
📚 Tài Liệu Liên Quan#
Modified at 2026-03-25 12:04:59