# Hướng Dẫn Bắt Đầu > **Lưu ý**: Hướng dẫn này giả định bạn đang cài đặt trên macOS hoặc Linux. Người dùng Windows nên sử dụng WSL2. ## Mục lục 1. [Yêu cầu tiên quyết](#yêu-cầu-tiên-quyết) 2. [Tổng quan Kiến trúc](#tổng-quan-kiến-trúc) 3. [Cấu trúc Dự án](#cấu-trúc-dự-án) 4. [Cài đặt & Thiết lập](#cài-đặt--thiết-lập) 5. [Quy trình Phát triển](#quy-trình-phát-triển) 6. [Các Lệnh Thường dùng](#các-lệnh-thường-dùng) 7. [Xử lý Sự cố](#xử-lý-sự-cố) ## Yêu cầu tiên quyết Trước khi bắt đầu, đảm bảo bạn đã cài đặt: * **Node.js**: v20.0.0 trở lên (khuyến nghị v22+ hoặc v25+) ```bash node -v # v25.2.1 ``` * **PNPM**: v8.15.0 trở lên (sử dụng pnpm workspaces) ```bash pnpm -v # 8.15.0 ``` * **Docker & Docker Compose**: v24.0.0 trở lên cho infrastructure cục bộ ```bash docker -v # Docker version 29.1.3, build f52814d ``` * **Git**: Để quản lý version * **Tài khoản Neon**: Serverless PostgreSQL (https://neon.tech) ## Tổng quan Kiến trúc GoodGo Platform sử dụng kiến trúc microservices với layer infrastructure chia sẻ. ```mermaid graph TD Client[Client Apps] --> Traefik[Traefik Gateway] Traefik --> IAM[IAM Service] Traefik --> Template[Template Service] IAM --> DB[(Neon PostgreSQL)] IAM --> Redis[(Redis Cache)] IAM --> Kafka[Kafka Events] style Client fill:#7F8C8D,color:#fff style Traefik fill:#2980B9,color:#fff style IAM fill:#27AE60,color:#fff style Template fill:#E67E22,color:#fff style DB fill:#8E44AD,color:#fff style Redis fill:#F39C12,color:#fff style Kafka fill:#3498DB,color:#fff ``` ### Color Palette / Bảng màu ```mermaid graph LR A["Primary #2980B9"] --> B["Data/Cache #F39C12"] B --> C["Success #27AE60"] C --> D["Warning #E67E22"] D --> E["Error #C0392B"] E --> F["Processing #8E44AD"] F --> G["Info #3498DB"] G --> H["Neutral #7F8C8D"] style A fill:#2980B9,color:#fff style B fill:#F39C12,color:#fff style C fill:#27AE60,color:#fff style D fill:#E67E22,color:#fff style E fill:#C0392B,color:#fff style F fill:#8E44AD,color:#fff style G fill:#3498DB,color:#fff style H fill:#7F8C8D,color:#fff ``` ## Cấu trúc Dự án Repository tuân theo cấu trúc monorepo: ``` Base/ apps/ # Ứng dụng Frontend app-admin/ # Admin dashboard application app-client/ # Client mobile application (Flutter) web-client/ # Next.js web application web-docs/ # Documentation website (Next.js) services/ # Backend microservices iam-service/ # Service xác thực & phân quyền _template/ # Template cho service mới packages/ # Thư viện chia sẻ (Shared libraries) auth-sdk/ # Authentication SDK config/ # Shared configuration utilities http-client/ # Client HTTP nội bộ logger/ # Structured logging (@goodgo/logger) tracing/ # OpenTelemetry tracing types/ # TypeScript types chia sẻ infra/ # Cấu hình Infrastructure databases/ # Scripts thiết lập Database docker/ # Docker configurations observability/ # Prometheus, Grafana, Loki configs secrets/ # Secrets management templates traefik/ # Cấu hình API Gateway deployments/ # Cấu hình Deploy local/ # Docker Compose cho dev staging/ # Staging environment configs production/ # Production Kubernetes manifests scripts/ # Automation scripts build/ # Build scripts db/ # Database utilities deploy/ # Deployment scripts dev/ # Development helpers observability/ # Monitoring setup scripts setup/ # Initial setup scripts utils/ # Utility scripts docs/ # Tài liệu en/ # English documentation vi/ # Vietnamese documentation ``` ## Cài đặt & Thiết lập ### 1. Clone Repository ```bash git clone cd Base ``` ### 2. Cấu hình Môi trường Mỗi service và infrastructure cục bộ cần biến môi trường. Chúng tôi cung cấp templates sẵn. ```bash # Khởi tạo setup dự án (copy .env.example sang .env) ./scripts/setup/init-project.sh ``` ### 3. Thiết lập Neon Database Dự án sử dụng Neon (Serverless PostgreSQL) cho mọi môi trường. 1. Tạo project tại [neon.tech](https://neon.tech). 2. Tạo branch tên `dev` (hoặc `main`). 3. Lấy Connection String từ dashboard. 4. Cập nhật file `deployments/local/.env.local`: ```env DATABASE_URL="postgres://user:pass@ep-xyz.region.neon.tech/neondb" ``` ### 4. Khởi động Infrastructure Khởi động các dịch vụ hỗ trợ (Redis, Traefik, Observability) bằng Docker Compose. ```bash cd deployments/local docker-compose up -d # Expected output: Containers for traefik, redis, kafka created ``` ### 5. Cài đặt Dependencies ```bash pnpm install ``` ### 6. Setup Database Schema Đẩy Prisma schema lên Neon database. ```bash # Chạy migration cho IAM service pnpm --filter @goodgo/iam-service prisma migrate dev ``` ### 7. Khởi động Services Chạy tất cả backend services ở chế độ development. ```bash pnpm dev # hoặc chạy service cụ thể pnpm --filter @goodgo/iam-service dev ``` ## Quy trình Phát triển ### Tạo Service Mới 1. Copy từ template: ```bash cp -r services/_template services/my-new-service ``` 2. Cập nhật tên trong `package.json`. 3. Thêm logic trong `src/modules/`. 4. Đăng ký trong `deployments/local/docker-compose.yml`. ### Thực hiện Thay đổi 1. Tạo branch mới: `feature/my-feature`. 2. Implement thay đổi. 3. Chạy tests: `pnpm test`. 4. Commit với conventional commits: `feat(iam): add login endpoint`. ## Các Lệnh Thường dùng | Lệnh | Mô tả | | :--- | :--- | | `pnpm install` | Cài đặt dependencies | | `pnpm dev` | Chạy tất cả services (dev mode) | | `pnpm build` | Build tất cả packages và services | | `pnpm test` | Chạy unit tests | | `pnpm lint` | Kiểm tra lỗi cú pháp (Lint) | | `docker-compose up -d` | Bật local infra | | `docker-compose down` | Tắt local infra | ## Xử lý Sự cố ### Xung đột Port (Port Conflicts) **Lỗi**: `Bind for 0.0.0.0:80 failed: port is already allocated` **Giải pháp**: Kiểm tra process nào đang dùng port 80 (thường là web server khác) và tắt nó, hoặc đổi port Traefik trong `docker-compose.yml`. ```bash lsof -i :80 kill -9 ``` ### Lỗi Kết nối Database **Lỗi**: `P1001: Can't reach database server` **Giải pháp**: 1. Kiểm tra kết nối internet (Neon là cloud DB). 2. Kiểm tra `DATABASE_URL` trong `deployments/local/.env.local`. 3. Đảm bảo IP của bạn được allow trong Neon dashboard. ### Gateway Không Tìm Thấy Service **Lỗi**: `404 Not Found` từ api.localhost **Giải pháp**: 1. Kiểm tra service có đang chạy không. 2. Kiểm tra Traefik dashboard tại http://localhost:8080. 3. Kiểm tra labels `PathPrefix` trong `docker-compose.yml`. ## Bước Tiếp Theo * [Hướng dẫn Development](development.md) - Chi tiết chuẩn code và quy trình * [Tài liệu API](../api/openapi/) - Khám phá các API endpoints * [Kiến trúc Hệ thống](../architecture/system-design.md) - Hiểu về thiết kế hệ thống