Tài liệu ngắn để thiết lập và chạy toàn bộ project (backend, frontend, workers, mobile) trong thư mục src.
Repo này có 3 lớp chính:
src/backend— Express API, services, controllers, workerssrc/frontend— Vite + React SPAsrc/mobile-rn— React Native / Expo
Ngoài ra, project gốc có docker-compose.yaml để chạy toàn bộ hạ tầng bằng container:
frontendtrên cổng5173backendtrên cổng3000nginxgateway trên cổng8080redis,rabbitmqprometheustrên cổng9090grafanatrên cổng3001- 4 worker container riêng:
ai-summary-worker,csv-sync-worker,notification-worker,outbox-worker
Copy src/backend/.env.example thành src/backend/.env rồi chỉnh các giá trị cần thiết:
DB_*hoặcDATABASE_URLREDIS_HOST,REDIS_PORT,REDIS_PASSWORDRABBITMQ_URLhoặcRABBITMQ_*SUPABASE_URL,SUPABASE_SERVICE_KEY- Các key khác như SMTP, Vertex AI, payment gateway
Lưu ý với Vertex AI: cần tạo Service Account trên Google Cloud Platform, cấp quyền phù hợp như Vertex User hoặc Vertex AI User, sau đó tạo key JSON để hệ thống được cấp quyền truy cập.
Backend có endpoint Prometheus tại GET /metrics, còn Prometheus lấy dữ liệu từ backend:3000 theo file cấu hình infra/prometheus.yml. Grafana được provision sẵn datasource trỏ vào Prometheus để bạn mở lên là xem dashboard được ngay.
Copy src/frontend/.env.example thành src/frontend/.env nếu bạn muốn override cấu hình mặc định.
Mặc định frontend gọi API qua gateway:
VITE_API_BASE_URL=/apiVITE_API_PROXY_TARGET=http://localhost:8080khi chạy local
Từ thư mục gốc của project:
docker compose up -d --buildLệnh này sẽ khởi động:
frontendởhttp://localhost:5173backendởhttp://localhost:3000nginxởhttp://localhost:8080redisrabbitmqai-summary-workercsv-sync-workernotification-workeroutbox-worker
Nếu bạn chỉ muốn chạy gateway và hạ tầng phụ trợ, có thể chạy từng service theo nhu cầu, ví dụ:
docker compose up -d redis rabbitmq nginxXem trạng thái container:
docker compose psXem log backend:
docker compose logs -f backendXem log từng worker:
docker compose logs -f ai-summary-worker
docker compose logs -f csv-sync-worker
docker compose logs -f notification-worker
docker compose logs -f outbox-workerTắt toàn bộ stack:
docker compose downTắt toàn bộ stack và xoá volume dữ liệu:
docker compose down -vcd src/backend
npm install
npm run devChạy production local:
npm startWorkers local:
npm run worker:all
npm run worker:ai-summary
npm run worker:csv-sync
npm run worker:notification
npm run worker:outboxcd src/frontend
npm install
npm run devBuild production:
npm run buildPreview bản build:
npm run previewcd src/mobile-rn
npm install
npm run startHoặc:
npm run android
npm run ios- Schema:
src/database/init.sql - Seed data:
src/database/data.sql
Thứ tự khởi tạo đúng là:
- Tạo database PostgreSQL / Supabase
- Chạy
init.sql - Chạy
data.sqlnếu muốn nạp dữ liệu mẫu
frontendvàbackendđều có Dockerfile riêng trongsrc/frontendvàsrc/backendnginxkhông cần Dockerfile riêng, chỉ mountinfra/nginx/nginx.conf- 4 worker chạy độc lập trong container riêng, nhưng dùng chung image backend
- Nếu backend không lên, kiểm tra lại
src/backend/.envvà kết nối PostgreSQL / Supabase - Nếu lỗi Redis hoặc RabbitMQ, xem lại mật khẩu và port trong
docker-compose.yaml - Nếu frontend không gọi được API, hãy kiểm tra
http://localhost:8080vàVITE_API_BASE_URL - Nếu container cũ bị kẹt do dependency native, chạy lại:
docker compose down -v
docker compose up -d --builddocker-compose.yaml— khai báo toàn bộ service containerinfra/nginx/nginx.conf— gateway proxy và rate limitsrc/backend/controllers/— API controllerssrc/backend/services/— business logicsrc/backend/workers/— worker entrypointssrc/database/init.sql— schemasrc/database/data.sql— dữ liệu mẫu