# Môi Trường Phát Triển ## Yêu Cầu Cài Đặt - **Docker Engine 24+** & Docker Compose v2 - **Node.js 22 LTS** - **pnpm 10.27+** — cài đặt qua `corepack enable && corepack prepare pnpm@latest --activate` ## Khởi Động Nhanh ```bash # 1. Sao chép các biến môi trường cp .env.example .env # 2. Khởi động tất cả dịch vụ hạ tầng docker compose up -d # 3. Kiểm tra tất cả dịch vụ đang hoạt động bình thường docker compose ps # 4. Cài đặt các phụ thuộc pnpm install # 5. Tạo Prisma client pnpm db:generate # 6. Chạy các migration cơ sở dữ liệu pnpm db:migrate:dev # 7. Seed dữ liệu vào cơ sở dữ liệu (tuỳ chọn) pnpm db:seed # 8. Khởi động API và Web ở chế độ phát triển pnpm dev ``` API chạy tại `http://localhost:3001/api/v1`, Web tại `http://localhost:3000`. > **Swagger UI**: `http://localhost:3001/api/v1/docs` — tài liệu API tương tác. ## Các Dịch Vụ Hạ Tầng | Dịch vụ | Cổng | Mô tả | Bảng điều khiển/UI | |---------|---------|-------------|--------------| | PostgreSQL + PostGIS | 5432 | Cơ sở dữ liệu với truy vấn không gian địa lý | — | | Redis | 6379 | Cache, phiên đăng nhập, hàng đợi | — | | Typesense | 8108 | Công cụ tìm kiếm toàn văn bản | `http://localhost:8108/health` | | MinIO | 9000 / 9001 | Lưu trữ đối tượng tương thích S3 | `http://localhost:9001` (console) | | AI Services | 8000 | FastAPI — AVM + kiểm duyệt nội dung | `http://localhost:8000/health` | | Prometheus | 9090 | Thu thập số liệu giám sát | `http://localhost:9090` | | Grafana | 3002 | Bảng điều khiển & giám sát | `http://localhost:3002` | ## Các Lệnh Thông Dụng ### Docker Compose ```bash # Khởi động các dịch vụ docker compose up -d # Xem nhật ký (tất cả hoặc từng dịch vụ cụ thể) docker compose logs -f docker compose logs -f postgres # Dừng các dịch vụ (dữ liệu được giữ nguyên trong volume) docker compose down # Dừng và xoá toàn bộ dữ liệu docker compose down -v # Khởi động lại một dịch vụ đơn lẻ docker compose restart redis # Kiểm tra tình trạng dịch vụ docker compose ps ``` ### Phát Triển ```bash pnpm dev # Khởi động tất cả ứng dụng ở chế độ theo dõi pnpm build # Build tất cả các gói pnpm lint # ESLint trên toàn bộ monorepo pnpm typecheck # Kiểm tra kiểu TypeScript pnpm format # Định dạng bằng Prettier pnpm test # Chạy kiểm thử đơn vị/tích hợp ``` ### Cơ Sở Dữ Liệu ```bash pnpm db:generate # Tạo lại Prisma client pnpm db:migrate:dev # Tạo và áp dụng các migration pnpm db:seed # Seed dữ liệu vào cơ sở dữ liệu pnpm db:studio # Mở Prisma Studio (trình chỉnh sửa trực quan) pnpm db:reset # Đặt lại cơ sở dữ liệu (thao tác phá huỷ dữ liệu) ``` ### Kiểm Thử E2E ```bash pnpm test:e2e # Chạy tất cả kiểm thử E2E pnpm test:e2e:api # Chỉ kiểm thử API pnpm test:e2e:web # Chỉ kiểm thử giao diện Web pnpm test:e2e:report # Mở báo cáo kiểm thử HTML ``` ## Kết Nối Đến Các Dịch Vụ ### PostgreSQL ```bash # Qua psql psql postgresql://goodgo:goodgo_secret@localhost:5432/goodgo # Xác minh PostGIS psql postgresql://goodgo:goodgo_secret@localhost:5432/goodgo -c "SELECT PostGIS_Version();" ``` ### Redis ```bash redis-cli -p 6379 ping ``` ### Typesense ```bash curl http://localhost:8108/health ``` ### MinIO - **API**: `http://localhost:9000` - **Console**: `http://localhost:9001` (đăng nhập bằng `MINIO_ACCESS_KEY` / `MINIO_SECRET_KEY` từ file `.env`) ### AI Services ```bash curl http://localhost:8000/health ``` ### Grafana - **URL**: `http://localhost:3002` - **Đăng nhập**: `admin` / `admin` (mặc định, có thể cấu hình qua `.env`) ## Xử Lý Sự Cố - **Xung đột cổng** — Thay đổi cổng trong `.env` (ví dụ: `DB_PORT=5433`) - **Lỗi quyền truy cập** — Chạy `docker compose down -v` rồi khởi động lại - **PostGIS không khả dụng** — Đảm bảo đang sử dụng image `postgis/postgis:16-3.4` - **Prisma client lỗi thời** — Chạy `pnpm db:generate` sau khi kéo các thay đổi schema - **AI service không khởi động được** — Kiểm tra `docker compose logs ai-services` để xem lỗi phụ thuộc Python - **Typesense không khoẻ mạnh** — Xác minh `TYPESENSE_API_KEY` khớp trong `.env` và cấu hình Docker