Tài liệu triển khai dự án OnePush
Tài Liệu Triển Khai Dự Án OnePush — Docker#
Triển Khai Dự Án OnePush Production với Docker
🔥 Tổng Quan#
Tài liệu này mô tả quy trình build và triển khai dự án OnePush chạy trên Docker trong môi trường production. Dự án OnePush bao gồm hai dịch vụ chính:| Dịch Vụ | Công Nghệ | Runtime | Mục Đích |
|---|
| Admin | Laravel (PHP) | PHP-FPM + Nginx | Dashboard quản trị push notification |
| Stack Novu | Node.js (pnpm + nx monorepo) | Node.js | Hạ tầng notification mã nguồn mở |
Hạ Tầng Chính#
| Thành Phần | Dịch Vụ AWS | Mục Đích |
|---|
| Container Images | AWS ECR | Registry Docker image riêng tư |
| Cơ sở dữ liệu (Admin) | AWS RDS | MySQL cho Laravel |
| Cache | ElastiCache | Redis cho session, queue, cache driver |
🏢 Dịch Vụ Admin#
Tech Stack#
Xây dựng: Multi-stage — Composer install → npm install → npm build
Runtime: PHP-FPM + Nginx (nhiều container)
ECR: tools/onepush-admin-prod
Source: Git submodule tại admin/build/source/
Cấu Trúc Dự Án#
OnePush/admin/
├─ build/
│ ├─ Dockerfile-base.production # Base image: FPM + Nginx + CLI
│ ├─ Dockerfile.production # Production: multi-stage Laravel build
│ ├─ source/ # ⚡ Git submodule — Laravel source
│ │ ├─ composer.json / package.json
│ │ ├─ artisan
│ │ └─ ...
│ ├─ conf/
│ │ ├─ nginx/template/default.conf.template
│ │ └─ supervisor/onepush-admin.conf
│ └─ data/php/
├─ database/
└─ docker-compose.yml.production
Xây dựng Pipeline#
┌──────────────────────────────────────────────────────────────────────────┐
│ MULTI-STAGE BUILD PIPELINE │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ GIAI ĐOẠN 1 │ │ GIAI ĐOẠN 2 │ │ GIAI ĐOẠN 3 │ │
│ │ vendor │───▶│ node_base │───▶│ build │ │
│ │ • composer │ │ • npm │ │ • npm run │ │
│ │ install │ │ install │ │ build │ │
│ └─────────────┘ └─────────────┘ └──────┬──────┘ │
│ ┌──────────────────────┬────┴───────────────┐ │
│ ▼ ▼ ▼
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ cli │ │ fpm_server │ │ web_server │ │
│ │ • Artisan │ │ • PHP-FPM │ │ • Nginx │ │
│ │ • Horizon │ │ • Supervisor│ │ • Static │ │
│ │ • Queues │ │ │ │ assets │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└──────────────────────────────────────────────────────────────────────────┘
Cấu Hình Laravel (build/source/.env)#
Xây dựng & Triển Khai#
📡 Dịch Vụ Stack Novu#
Tổng Quan#
Novu stack là hạ tầng notification tự host được triển khai sử dụng Docker image chính thức của Novu từ GitHub Container Registry (ghcr.io/novuhq/novu). Không cần build custom — source code trong novu/build/source/ chỉ là monorepo gốc của Novu để tham khảo.Stack bao gồm 4 container:| Container | Image | Port | Mục Đích |
|---|
| API | ghcr.io/novuhq/novu/api:2.3.0 | 3000 | REST API server |
| Worker | ghcr.io/novuhq/novu/worker:2.3.0 | — | Xử lý tác vụ nền |
| WebSocket | ghcr.io/novuhq/novu/ws:2.3.0 | 3002 | WebSocket server thời gian thực |
| Dashboard | ghcr.io/novuhq/novu/dashboard:2.3.0 | 4000 | Giao diện dashboard |
Phụ Thuộc#
| Dịch Vụ | Mục Đích |
|---|
| MongoDB | Cơ sở dữ liệu chính cho Novu |
| Redis | Cache, queue, và pub/sub messaging |
Cấu Trúc Dự Án#
OnePush/novu/
├─ build/
│ └─ source/ # Git submodule — Novu monorepo (chỉ tham khảo)
├─ .env.production # Biến môi trường cho production
├─ .env.development # Biến môi trường cho development
├─ docker-compose.yml.production # Compose: triển khai production
└─ docker-compose.yml.development # Compose: triển khai development
Cấu Hình#
Biến Môi Trường (.env.production)#
Triển Khai#
Lưu ý: Stack này sử dụng image chính thức của Novu từ ghcr.io/novuhq/novu. Không cần bước build custom. Để nâng cấp, chỉ cần cập nhật tag image trong .env.production và triển khai lại.
🛡️ Các Thực Hành Bảo Mật#
1.
.env không bao giờ nhúng vào image — mount read-only khi runtime
2.
Container non-root — chạy dưới user không đặc quyền (UID: 1200)
3.
Supervisor quản lý — PHP-FPM với auto-restart
4.
Horizon & Queue — Laravel Horizon giám sát queue
📚 Tài Liệu Li ên Quan#
Modified at 2026-03-21 09:03:52