Runtime và deploy
Trang này chỉ để học và giải thích kiến trúc vận hành. Không deploy production khi ôn code.
Nếu chỉ cần đưa tài liệu học codebase lên domain riêng, xem Deploy docs lên Cloudflare. Docs domain docs.holilihu.online nên tách khỏi app chính holilihu.online.
Local ports
| Service | Port mặc định | Ghi chú |
|---|---|---|
| Backend API | 8088 |
http://localhost:8088/api/v3, Swagger /swagger-ui |
| PostgreSQL | 5432 |
Container DB local |
| Frontend Angular | 4200 |
npm start trong fe |
| Docs site | 4010 |
Host port 4010 map vào Jekyll container port 4000 |
Jekyll mặc định dùng port 4000, nhưng máy này để docs ở 4010 để tránh nhầm/trùng với các dev server khác.
Production components
| Thành phần | File/runbook | Vai trò |
|---|---|---|
| Docker Compose base | docker-compose.yml |
Stack nền |
| Dev override | docker-compose.dev.yml |
Local development |
| Prod override | docker-compose.prod.yml |
Production runtime |
| Deploy script | deploy.sh |
Deploy app VM |
| Caddy | Caddyfile |
Reverse proxy, auto HTTPS, CSP/header |
| R2 storage | docs/runbooks/R2_STORAGE_RUNBOOK.md |
Object storage |
| Media domain edge auth | docs/runbooks/CLOUDFLARE_MEDIA_DOMAIN_EDGE_AUTH_RUNBOOK.md |
media.holilihu.online |
| Dedicated video worker | deploy-video-worker.sh, DEDICATED_VIDEO_WORKER_RUNBOOK.md |
Tách ingest video khỏi web backend |
| GitHub Actions | .github/workflows |
CI/build/smoke |
Video worker
Lý do có worker riêng: video ingest, transcode và Shaka packaging nặng CPU/I/O. Nếu chạy chung web backend, upload/ingest lớn có thể ảnh hưởng request học viên.
Web backend nhận upload/confirm
-> tạo video_ingest_job
-> video-worker claim job
-> FFmpeg/Shaka Packager xử lý
-> upload HLS/DASH/offline profiles lên R2
-> backend/player phát qua signed media URL
Production caveats
- Production phải dùng
.env.prodđúng, không chạy compose prod thiếu--env-file. spring.jpa.hibernate.ddl-autoproduction nên để Flyway quản lý, không dùng update bừa.- R2 secrets, JWT secrets, payment keys không commit.
- Caddy/CSP phải cho đúng frontend, backend, Wiii iframe, media domain.
- Cloudflare Worker/media domain không thay thế backend auth; nó là lớp edge kiểm soát media object.