Files
goodgo-platform/docs/audits/INFRASTRUCTURE_AUDIT.md
Ho Ngoc Hai 11f2bf26e6
Some checks failed
CI / Lint → Typecheck → Test → Build (22) (push) Failing after 29s
CI / E2E Tests (push) Has been skipped
CodeQL Analysis / CodeQL (javascript-typescript) (push) Failing after 2m42s
Deploy / Build Web Image (push) Failing after 27s
Deploy / Build AI Services Image (push) Failing after 29s
E2E Tests / Playwright E2E (push) Failing after 43s
Deploy / Build API Image (push) Failing after 1m31s
Security Scanning / Dependency Audit (pnpm) (push) Failing after 6s
Security Scanning / Trivy Scan — API Image (push) Failing after 5m35s
Security Scanning / Trivy Scan — AI Services Image (push) Failing after 3m45s
Deploy / Deploy to Staging (push) Has been skipped
Deploy / Smoke Test Staging (push) Has been skipped
Deploy / Deploy to Production (push) Has been skipped
Deploy / Smoke Test Production (push) Has been skipped
Deploy / Rollback Staging (push) Has been skipped
Deploy / Rollback Production (push) Has been skipped
Security Scanning / Trivy Scan — Web Image (push) Failing after 13m51s
Security Scanning / Trivy Filesystem Scan (push) Failing after 14m46s
Security Scanning / Security Gate (push) Has been cancelled
chore: update project documentation, audit reports, and initialize IDE configuration files
2026-04-19 03:12:54 +07:00

36 KiB

Báo Cáo Kiểm Tra Hạ Tầng Nền Tảng GoodGo

Ngày: 11 tháng 4 năm 2026
Kho lưu trữ: goodgo-platform-ai
Tổng dung lượng: 27GB (bao gồm node_modules)
Trạng thái: Nền tảng có cấu trúc tốt, sẵn sàng cho môi trường sản xuất


Tóm Tắt Điều Hành

Nền tảng GoodGo là một monorepo tinh vi, sẵn sàng cho môi trường sản xuất với hạ tầng toàn diện, quy trình CI/CD mạnh mẽ và các thực hành DevOps xuất sắc. Nền tảng tích hợp:

  • Backend: NestJS 11 + Prisma ORM + CQRS
  • Frontend: Next.js 15 + React 18 + Tailwind CSS
  • Cơ sở dữ liệu: PostgreSQL 16 + PostGIS 3.4
  • Tìm kiếm: Typesense 27
  • Cache/Bất đồng bộ: Redis 7
  • AI/ML: FastAPI + XGBoost + Claude API
  • Giám sát: Prometheus + Grafana + Loki
  • Thanh toán: VNPay, MoMo, ZaloPay

1. CẤU HÌNH MONOREPO

Cấu Hình Trình Quản Lý Gói

Tệp: package.json
Trạng thái: Xuất sắc

{
  "packageManager": "pnpm@10.27.0",
  "engines": {
    "node": ">=22.0.0"
  },
  "pnpm": {
    "onlyBuiltDependencies": [
      "@nestjs/core",
      "@prisma/client",
      "@prisma/engines",
      "esbuild",
      "prisma"
    ],
    "overrides": {
      "axios": ">=1.15.0",
      "lodash": ">=4.18.0",
      "@hono/node-server": ">=1.19.13",
      "@tootallnate/once": ">=3.0.1"
    }
  }
}

Điểm nổi bật:

  • Yêu cầu Node.js 22 LTS được thực thi
  • pnpm 10.27.0 được cấu hình (trình quản lý gói cấp độ sản xuất)
  • Ghi đè bảo mật cho các gói có lỗ hổng đã biết (axios, lodash)
  • Phụ thuộc build được tối ưu hóa được chỉ định
  • Husky + lint-staged được cấu hình cho các hook trước khi commit

Các lệnh có sẵn:

  • pnpm dev - Chế độ phát triển (tất cả ứng dụng)
  • pnpm build - Build sản xuất
  • pnpm lint - Kiểm tra ESLint
  • pnpm test - Kiểm thử đơn vị
  • pnpm typecheck - Kiểm tra TypeScript
  • pnpm format - Định dạng Prettier
  • pnpm db:* - Các lệnh quản lý cơ sở dữ liệu
  • pnpm test:e2e* - Bộ kiểm thử E2E

⚠️ Vấn đề nhỏ:

  • Tệp .nvmrc tồn tại (chỉ định Node 22) nhưng cũng có thể ghim phiên bản pnpm

Cấu Hình Turbo

Tệp: turbo.json
Trạng thái: Được cấu hình đúng

{
  "$schema": "https://turbo.build/schema.json",
  "tasks": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": ["dist/**", ".next/**"]
    },
    "dev": {
      "cache": false,
      "persistent": true
    },
    "lint": {
      "dependsOn": ["^build"]
    },
    "test": {
      "dependsOn": ["^build"]
    },
    "typecheck": {
      "dependsOn": ["^build"]
    }
  }
}

Điểm nổi bật:

  • Đồ thị phụ thuộc được định nghĩa đúng (^build đảm bảo các phụ thuộc workspace được build trước)
  • Bộ nhớ đệm đầu ra được cấu hình cho các artifact build
  • Tác vụ dev được đánh dấu là bền vững (không bộ nhớ đệm, tải lại trực tiếp)
  • Thứ tự tác vụ đảm bảo trình tự build đúng (lint/test yêu cầu build)

Cấu Hình Workspace pnpm

Tệp: pnpm-workspace.yaml
Trạng thái: Được cấu hình chính xác

packages:
  - 'apps/*'
  - 'packages/*'
  - 'libs/*'

Cấu trúc Workspace:

goodgo-platform-ai/
├── apps/
│   ├── api/                 # NestJS backend (port 3001)
│   └── web/                 # Next.js frontend (port 3000)
├── libs/
│   ├── ai-services/         # Python FastAPI service
│   └── mcp-servers/         # Model Context Protocol servers (TypeScript)
└── prisma/                  # Shared database schema

Phân tích:

  • Phân tách rõ ràng: Ứng dụng so với thư viện
  • Schema Prisma dùng chung: Quản lý cơ sở dữ liệu tập trung
  • Thư viện MCP servers: Các triển khai Model Context Protocol có thể tái sử dụng
  • Dịch vụ AI được cô lập: Dịch vụ Python trong container riêng biệt

2. DOCKER & ĐIỀU PHỐI

Tệp Compose Chính

Tệp: docker-compose.yml
Trạng thái: Thiết lập phát triển toàn diện

Các dịch vụ bao gồm:

Dịch vụ Image Cổng Mục đích Kiểm tra sức khỏe
postgres postgis/postgis:16-3.4 5432 Cơ sở dữ liệu + GIS
redis redis:7-alpine 6379 Cache/hàng đợi
typesense typesense:27.1 8108 Tìm kiếm toàn văn bản
minio minio:latest 9000, 9001 Lưu trữ tương thích S3
ai-services tùy chỉnh (libs/ai-services) 8000 Dịch vụ FastAPI
pg-backup postgis:16-3.4 Sao lưu tự động Lên lịch Cron
loki grafana/loki:3.0.0 3100 Tổng hợp nhật ký
promtail grafana/promtail:3.0.0 Gửi nhật ký
prometheus prom/prometheus:v2.51.0 9090 Thu thập chỉ số
grafana grafana/grafana:10.4.1 3002 Bảng điều khiển

Tính năng:

  • Cô lập mạng: Mạng bridge goodgo-net tùy chỉnh
  • Kiểm tra sức khỏe: Tất cả dịch vụ với các probe kiểm tra sức khỏe đúng
  • Lưu trữ bền vững: Volume chuyên dụng cho tất cả các dịch vụ có trạng thái
  • Chính sách khởi động lại: unless-stopped cho hành vi giống như sản xuất
  • Tự động hóa sao lưu: Dịch vụ pg-backup dựa trên Cron
  • Stack giám sát: Loki + Prometheus + Grafana đầy đủ
  • Chèn biến môi trường: Tích hợp tệp .env

Cấu hình kiểm tra sức khỏe (Ví dụ từ postgres):

healthcheck:
  test: ['CMD-SHELL', 'pg_isready -U ${DB_USER:-goodgo}']
  interval: 10s
  timeout: 5s
  retries: 5
  start_period: 30s

Tệp Compose Sản Xuất

Tệp: docker-compose.prod.yml
Trạng thái: Được tăng cường cho sản xuất

Các điểm khác biệt chính:

  • API chạy migration khi khởi động (cờ RUN_MIGRATIONS)
  • Giới hạn tài nguyên: Giới hạn bộ nhớ (1GB cho API, 512MB dự phòng)
  • Tùy chọn bảo mật: no-new-privileges:true, hệ thống tệp gốc chỉ đọc
  • Ghi nhật ký: Ghi nhật ký JSON có cấu trúc với xoay vòng
  • PgBouncer: Cấu hình connection pooling (chỉ dành cho sản xuất)
deploy:
  resources:
    limits:
      memory: 1g
      cpus: '1.0'
    reservations:
      memory: 512m
security_opt:
  - no-new-privileges:true
read_only: true
tmpfs:
  - /tmp
logging:
  driver: json-file
  options:
    max-size: '10m'
    max-file: '5'

Tệp Compose CI

Tệp: docker-compose.ci.yml
Trạng thái: Được tối ưu hóa cho GitHub Actions

  • Các dịch vụ tối thiểu (chỉ postgres + cấu hình kiểm thử thủ công)
  • Thời gian khởi động nhanh
  • Được sử dụng kết hợp với các dịch vụ GitHub Actions

Dockerfile

Dockerfile API (apps/api/Dockerfile)

Trạng thái: Build đa giai đoạn cấp độ sản xuất

# Các giai đoạn:
1. base          — Node 22 slim + pnpm
2. deps          — Cài đặt tất cả phụ thuộc (lớp được cache)
3. build         — Biên dịch TypeScript + Tạo Prisma
4. production    — Image cuối cùng tối giản chỉ với các phụ thuộc sản xuất

Các thực hành tốt nhất:

  • Build đa giai đoạn: 4 giai đoạn cho image cuối cùng tối giản
  • Tối ưu hóa cache lớp: Lockfile được sao chép trước (ít thay đổi hơn)
  • pnpm deploy: node_modules chỉ dành cho sản xuất (không có devDeps)
  • dumb-init: Xử lý tín hiệu PID 1 đúng cách
  • Người dùng không phải root: Chạy với tư cách người dùng node
  • Kiểm tra sức khỏe: Kiểm tra HTTP endpoint
  • Hệ thống tệp gốc chỉ đọc: Tăng cường bảo mật
  • Xử lý tín hiệu: Hỗ trợ tắt máy nhẹ nhàng

Dockerfile Web (apps/web/Dockerfile)

Trạng thái: Được tối ưu hóa cho Next.js

  • Đầu ra standalone: Sử dụng build standalone của Next.js
  • Dấu chân tối thiểu: Chỉ các tệp runtime trong môi trường sản xuất
  • Kiểm tra sức khỏe: Endpoint /api/health
  • Người dùng không phải root: Thực hành bảo mật tốt nhất

Dockerfile AI Services (libs/ai-services/Dockerfile)

Trạng thái: Dịch vụ Python FastAPI

  • Python 3.12 slim: Image cơ sở tối giản
  • Phụ thuộc hệ thống: gcc/g++ cho các thư viện ML (underthesea)
  • Mô hình được tải trước: Các mô hình XGBoost/Underthesea được cache tại thời điểm build
  • Người dùng không phải root: Chạy với tư cách appuser
  • Tắt máy nhẹ nhàng: dumb-init + thời gian chờ 30 giây

3. QUY TRÌNH CI/CD

Quy Trình GitHub Actions

Vị trí: .github/workflows/

a) Quy trình CI (ci.yml)

Trạng thái: Toàn diện

Trigger:

  • Push vào nhánh master
  • Pull request vào master
  • Kiểm soát đồng thời (hủy các lần chạy đang diễn ra)

Các jobs:

  1. Job CI chính (ubuntu-latest, Node 22):

    • Checkout code
    • Cài đặt pnpm
    • Cài đặt phụ thuộc (--frozen-lockfile)
    • Lint (ESLint)
    • Typecheck (TypeScript)
    • Kiểm thử (đơn vị/tích hợp)
    • Build (tất cả ứng dụng)
  2. Job E2E (phụ thuộc vào CI):

    • Dịch vụ: PostgreSQL, Redis, Typesense, MinIO
    • Thiết lập môi trường (cơ sở dữ liệu kiểm thử)
    • Cache trình duyệt Playwright
    • Migration cơ sở dữ liệu
    • Seed cơ sở dữ liệu
    • Chạy kiểm thử E2E
    • Tải lên báo cáo Playwright (lưu giữ 14 ngày)
    • Tải lên trace khi thất bại (lưu giữ 7 ngày)

Cấu hình:

services:
  postgres:
    image: postgis/postgis:16-3.4
    health-cmd: pg_isready
    health-interval: 10s

b) Quy trình E2E (e2e.yml)

Trạng thái: Trình chạy kiểm thử E2E chuyên dụng

  • Thiết lập giống với job E2E của CI
  • Quy trình riêng biệt để kiểm thử tập trung
  • Thời gian chờ 20 phút
  • Các dự án API + Web song song

c) Quy trình Deploy (deploy.yml)

Trạng thái: Triển khai sản xuất đa giai đoạn

Trigger:

  • Push vào master (tự động triển khai)
  • Khởi động quy trình thủ công (chọn môi trường)

Các jobs (chạy song song):

  1. Build Image API

    • Thiết lập Docker buildx
    • Đăng nhập GitHub Container Registry
    • Build image đa nền tảng
    • Tích hợp cache GHA
  2. Build Image Web

    • Thiết lập giống API
    • Quy trình build độc lập
  3. Job Deploy (phụ thuộc vào các build)

    • Chọn môi trường (staging/production)
    • Triển khai lên môi trường mục tiêu

Đặt tên image:

ghcr.io/goodgo/goodgo-api:sha
ghcr.io/goodgo/goodgo-web:sha

d) Quy trình Bảo mật (security.yml)

Trạng thái: Quét bảo mật toàn diện

Trigger:

  • Push vào main
  • Pull request
  • Lịch hàng ngày (05:43 UTC)

Các lần quét:

  1. Kiểm tra phụ thuộc (pnpm audit)

    • Thất bại khi có lỗ hổng nghiêm trọng
    • Đầu ra dễ đọc
  2. Quét Trivy (Quét lỗ hổng container)

    • Image API
    • Image Web
    • Mức độ nghiêm trọng: CRITICAL, HIGH, MEDIUM, LOW
  3. CodeQL (SAST)

    • Phát hiện ngôn ngữ
    • Phân tích tĩnh

e) Quy trình CodeQL (codeql.yml)

Trạng thái: Được cấu hình

  • Tự động phát hiện ngôn ngữ
  • Trigger Push/PR
  • Tải kết quả lên GitHub Security

f) Quy trình Kiểm thử Tải (load-test.yml)

Trạng thái: Kiểm thử hiệu năng dựa trên k6

  • Trigger khi push vào master
  • Phát hiện hồi quy hiệu năng

g) Quy trình Xác minh Sao lưu (backup-verify.yml)

Trạng thái: Xác thực sao lưu theo lịch

  • Xác minh hàng ngày về sao lưu cơ sở dữ liệu

4. PRISMA (Quản Lý Cơ Sở Dữ Liệu)

Tệp Schema

Tệp: prisma/schema.prisma
Trạng thái: Toàn diện, có cấu trúc tốt

Tính năng chính:

  • PostgreSQL 16 + PostGIS: Hỗ trợ dữ liệu không gian địa lý
  • Prisma Client v7.7.0: Phiên bản ổn định mới nhất
  • Enums: UserRole, KYCStatus, OAuthProvider, v.v.
  • Models: User, RefreshToken, OAuthAccount, Agent, Listing, Payment, v.v.
  • Quan hệ: Ràng buộc khóa ngoại đúng
  • Chỉ mục: Chỉ mục kết hợp để tối ưu hóa truy vấn
  • Xóa mềm: deletedAt, deletionScheduledAt cho nhật ký kiểm toán
  • Trường JSON: kycData cho dữ liệu nhạy cảm được mã hóa

Cân nhắc về kích thước cơ sở dữ liệu:

  • Nền tảng bất động sản với danh sách, phân tích, giao dịch
  • Dữ liệu địa lý (PostGIS)
  • Thông tin KYC người dùng (được mã hóa)

Migration

Vị trí: prisma/migrations/
Trạng thái: Được duy trì tốt

Số lượng migration: 12 migration (ngày 7 tháng 4 - 10 tháng 4 năm 2026)

Migration Ngày Mục đích
init 2026-04-07 Khởi tạo schema
add_missing_fk_indexes 2026-04-07 Tối ưu hóa truy vấn
add_idempotency_key_to_payment 2026-04-08 Tính bất biến thanh toán
fix_schema_integrity 2026-04-08 Sửa ràng buộc
add_analytics_media_quota_fields 2026-04-08 Tính năng: analytics & quotas
add_review_userid_index 2026-04-08 Tối ưu hóa hiệu năng
add_notification_read_at 2026-04-09 Theo dõi thông báo
add_compound_indexes_query_optimization 2026-04-09 Hiệu năng truy vấn
add_missing_query_indexes 2026-04-09 Tối ưu hóa bổ sung
add_user_soft_delete_fields 2026-04-10 Chính sách lưu giữ dữ liệu

Các thực hành tốt nhất:

  • Migration gia tăng: Các thay đổi nhỏ, tập trung
  • Đặt tên dựa trên thời gian: Thứ tự thời gian
  • Tên mô tả: Ý định rõ ràng
  • Tối ưu hóa truy vấn: Các chỉ mục kết hợp được thêm vào
  • Theo tính năng: Các trường mới được căn chỉnh với các tính năng

Tệp Seed

Tệp: prisma/seed.ts
Trạng thái: Toàn diện

Script Seed (scripts/):

  1. seed-districts.ts - Dữ liệu địa lý
  2. seed-plans.ts - Gói đăng ký
  3. import-market-data.ts - Phân tích thị trường
  4. encrypt-existing-kyc.ts - Tiện ích mã hóa KYC

Tính năng:

  • Bất biến (an toàn để chạy nhiều lần)
  • Hỗ trợ transaction
  • Xử lý lỗi
  • Ghi nhật ký tiến trình

Cấu Hình

Tệp: prisma/prisma.config.ts
Trạng thái: Hiện diện

  • Cấu hình seed tùy chỉnh
  • Cài đặt generator

5. CẤU HÌNH MÔI TRƯỜNG

Các Tệp Môi Trường

Tệp Mục đích Trạng thái
.env.example Mẫu (đã được kiểm tra) Toàn diện
.env Phát triển cục bộ Hiện diện
.env.test Môi trường kiểm thử E2E Được tối ưu hóa cho kiểm thử
.pnpmrc.json Cấu hình pnpm Các phụ thuộc build được chỉ định

Phân Tích .env.example

Trạng thái: Tài liệu xuất sắc

Các phần:

  1. PostgreSQL + PostGIS (7 biến)

    • Host, cổng, thông tin đăng nhập
    • Gợi ý connection pooling
  2. PgBouncer (3 biến)

    • Connection pooling (chỉ dành cho sản xuất)
  3. Redis (3 biến)

    • Host, cổng, mật khẩu
  4. Typesense (4 biến)

    • Cấu hình tìm kiếm toàn văn bản
  5. MinIO (5 biến)

    • Lưu trữ tương thích S3
  6. NestJS API (3 biến)

    • Cổng, môi trường
  7. CORS (1 biến)

    • Các origin được phép
  8. JWT/Auth (4 biến)

    • ⚠️ Lưu ý bảo mật: Placeholder với hướng dẫn tạo
    • Các secret riêng biệt cho token truy cập/làm mới
    • Yêu cầu độ dài tối thiểu rõ ràng
  9. Nhà cung cấp OAuth (5 biến)

    • Hỗ trợ Google + Zalo
  10. Next.js Web (2 biến)

  11. Dịch vụ AI (2 biến)

    • Endpoint FastAPI
    • Khóa API Claude
  12. Mapbox (1 biến)

  13. Cổng thanh toán (10 biến)

    • VNPay, MoMo, ZaloPay (URL sandbox)
  14. Email/SMTP (5 biến)

  15. Firebase Cloud Messaging (1 biến)

  16. Theo dõi lỗi Sentry (5 biến)

  17. Mã hóa KYC (2 biến)

    • AES-256-GCM cho dữ liệu nhạy cảm
    • Hướng dẫn tạo được bao gồm
  18. Ghi nhật ký (1 biến)

Nhận xét bảo mật:

  • Hướng dẫn tạo cho các secret (openssl rand -base64 48)
  • ⚠️ Không cho phép giá trị placeholder cho các secret
  • Tách biệt kiểm thử so với sản xuất
  • Cờ tính năng rõ ràng (trống = chưa được kích hoạt)

6. KIỂM THỬ E2E

Cấu Trúc Kiểm Thử

Vị trí: e2e/
Trạng thái: Toàn diện

Thư mục:

e2e/
├── api/                     # Kiểm thử API endpoint (18 tệp kiểm thử)
├── web/                     # Kiểm thử giao diện Web (17 tệp kiểm thử)
├── fixtures/                # Dữ liệu kiểm thử dùng chung
├── load/                    # Kiểm thử tải (k6)
├── global-setup.ts          # Khởi tạo cơ sở dữ liệu
├── global-teardown.ts       # Dọn dẹp sau kiểm thử

Số lượng kiểm thử:

  • 31 tệp kiểm thử E2E tổng cộng
  • 213 kiểm thử đơn vị/spec trong các ứng dụng

Cấu Hình Playwright

Tệp: playwright.config.ts
Trạng thái: Cấp độ sản xuất

Tính năng:

  • Hai dự án: API (không có trình duyệt) + Web (Chromium)
  • Thiết lập/dọn dẹp toàn cục: Cô lập cơ sở dữ liệu
  • Cấu hình web server: Tự động khởi động API & Web với npm run dev
  • Reporter: HTML + GitHub (CI)
  • Ảnh chụp màn hình: Chỉ khi thất bại
  • Trace: Khi thử lại để debug
  • Thực thi song song: fullyParallel: true
  • Điều chỉnh CI: 2 lần thử lại, 1 worker trong CI

Thiết lập toàn cục:

  • Chạy migration
  • Seed cơ sở dữ liệu
  • Xác minh sức khỏe dịch vụ

Dọn dẹp toàn cục:

  • Dọn dẹp dữ liệu được tạo trong quá trình kiểm thử
  • Ngắt kết nối cơ sở dữ liệu

Dữ Liệu Kiểm Thử Fixtures

Vị trí: e2e/fixtures/
Trạng thái: Được tổ chức

  • Người dùng kiểm thử dùng chung
  • Danh sách kiểm thử dùng chung
  • Tạo dữ liệu giả

Kiểm Thử Tải

Thư mục: load-tests/
Trạng thái: Dựa trên k6

  • Kiểm thử baseline hiệu năng
  • Kiểm thử spike/stress
  • Kiểm thử tải liên tục
  • Kết quả được lưu trữ trong load-tests/results/

7. LINT & CHẤT LƯỢNG CODE

Cấu Hình ESLint

Tệp: eslint.config.mjs
Trạng thái: Toàn diện, hiện đại

Thiết lập:

  • Cấu hình phẳng (ESLint 9+)
  • TypeScript ESLint các quy tắc được đề xuất
  • Plugin import: Kiểm tra thứ tự & loại bỏ trùng lặp
  • Tích hợp Prettier: Không xung đột về phong cách

Bộ quy tắc:

  1. Toàn cục:

    • Bỏ qua: node_modules, dist, .next, coverage
  2. Tệp TypeScript:

    • @typescript-eslint/no-unused-vars (bỏ qua tiền tố _)
    • @typescript-eslint/no-explicit-any (cảnh báo)
    • Import kiểu nhất quán (inline)
    • Thứ tự import (builtin → external → internal)
    • Cảnh báo console (cho phép warn/error)
  3. Đặc thù NestJS:

    • Cho phép class rỗng (modules)
    • Cho phép hợp nhất khai báo không an toàn (decorators)
  4. Đóng gói module API:

    • Ngăn chặn import nội bộ giữa các module
    • Thực thi xuất barrel
  5. React/Next.js:

    • Biến toàn cục trình duyệt
    • Không có console trong code sản xuất
  6. Tệp kiểm thử:

    • Quy tắc nới lỏng (any, console được phép)
  7. Tệp script:

    • Quy tắc nới lỏng (prisma seed, migrations)

Cấu Hình Prettier

Tệp: .prettierrc
Trạng thái: Được chuẩn hóa

{
  "singleQuote": true,
  "trailingComma": "all",
  "tabWidth": 2,
  "semi": true,
  "printWidth": 100,
  "bracketSpacing": true,
  "arrowParens": "always",
  "endOfLine": "lf"
}

Tính năng:

  • Dấu ngoặc đơn để nhất quán
  • Dấu phẩy cuối (ES5+)
  • Độ rộng dòng 100 ký tự (dễ đọc)
  • Kết thúc dòng LF (đa nền tảng)

EditorConfig

Tệp: .editorconfig
Trạng thái: Cài đặt không phụ thuộc IDE

  • Thụt lề 2 khoảng trắng
  • Kết thúc dòng LF
  • Bộ ký tự UTF-8
  • Cắt bỏ khoảng trắng cuối
  • Chèn dòng trống cuối cùng
  • ⚠️ Markdown: không cắt bỏ khoảng trắng cuối (giữ nguyên có chủ đích)

Hook Trước Khi Commit

Tệp: Husky + lint-staged
Trạng thái: Được tích hợp

"lint-staged": {
  "*.{ts,tsx}": [
    "eslint --fix",
    "prettier --write"
  ],
  "*.{json,md,yaml,yml}": [
    "prettier --write"
  ]
}
  • Tự động sửa các tệp TS/TSX
  • Định dạng cho JSON/MD/YAML
  • Ngăn chặn các commit lỗi

Dependency Cruiser

Tệp: .dependency-cruiser.cjs
Trạng thái: Được cấu hình

Lệnh: pnpm dep-cruise

  • Phát hiện phụ thuộc vòng
  • Xác thực cấu trúc module
  • Thực thi ranh giới kiến trúc

8. CẤU HÌNH TYPESCRIPT

Cấu Hình Cơ Sở

Tệp: tsconfig.base.json
Trạng thái: Nghiêm ngặt & hiện đại

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "lib": ["ES2022"],
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "resolveJsonModule": true,
    "declaration": true,
    "declarationMap": true,
    "sourceMap": true,
    "noUncheckedIndexedAccess": true,
    "noImplicitOverride": true,
    "noPropertyAccessFromIndexSignature": true
  }
}

Các thực hành tốt nhất:

  • Mục tiêu ES2022: JavaScript hiện đại
  • Phân giải module NodeNext: Xử lý ESM/CommonJS đúng
  • Chế độ nghiêm ngặt: Tất cả các kiểm tra nghiêm ngặt được kích hoạt
  • Tệp khai báo: Để sử dụng thư viện
  • Source map: Để debug
  • Bảo vệ truy cập thuộc tính: noUncheckedIndexedAccess

Cấu Hình Riêng Cho Từng Ứng Dụng

API (apps/api/tsconfig.json)

  • Module CommonJS cho NestJS
  • Đường dẫn tùy chỉnh: Bí danh @modules/*
  • Metadata decorator: emitDecoratorMetadata
  • Decorator thử nghiệm: Bắt buộc bởi NestJS

Web (apps/web/tsconfig.json)

  • Plugin Next.js: Tự động cấu hình
  • DOM + ESNext: Môi trường trình duyệt
  • Phân giải Bundler: Tối ưu hóa build Next.js
  • Đường dẫn tùy chỉnh: Bí danh @/* (import tương đối gốc)
  • JSX preserve: Next.js biên dịch JSX

9. HỆ THỐNG BUILD

Xác Minh Build

Trạng thái: Sẵn sàng để build

Các lệnh:

  • pnpm build - Build tất cả ứng dụng qua Turbo
  • pnpm typecheck - Kiểm tra TypeScript
  • pnpm lint - Kiểm tra chất lượng code

Đầu ra Build:

  • API: apps/api/dist/
  • Web: apps/web/.next/
  • MCP Servers: libs/mcp-servers/dist/

Bộ nhớ đệm Turbo:

  • Vị trí: .turbo/
  • Cache đầu ra build
  • Tăng tốc độ rebuild

Đánh Giá Vấn Đề Build

Không phát hiện vấn đề build nghiêm trọng. Dự án:

  • Có cấu hình TypeScript nhất quán
  • Sử dụng bí danh đường dẫn đúng
  • Xác định rõ ràng các thư mục đầu ra
  • Tách biệt phụ thuộc dev/prod

10. THƯ VIỆN

a) MCP Servers (libs/mcp-servers/)

Trạng thái: Thư viện TypeScript cấp độ sản xuất

Chi tiết gói:

{
  "name": "@goodgo/mcp-servers",
  "version": "0.1.0",
  "main": "./dist/index.js",
  "types": "./dist/index.d.ts"
}

Cấu trúc:

libs/mcp-servers/src/
├── __tests__/             # Kiểm thử đơn vị
├── market-analytics/      # MCP server dữ liệu thị trường
├── property-search/       # MCP server tìm kiếm bất động sản
├── valuation/            # MCP server định giá
├── shared/               # Tiện ích chung
├── nestjs/               # Tích hợp NestJS
└── index.ts              # API công khai

Phụ thuộc:

  • @modelcontextprotocol/sdk - Giao thức MCP
  • zod - Xác thực runtime

Phụ thuộc ngang hàng (tùy chọn):

  • @nestjs/common - Tích hợp NestJS
  • typesense - Tích hợp tìm kiếm

Build:

  • Biên dịch tsc
  • Chế độ nghiêm ngặt TypeScript
  • Khai báo kiểu được tạo

b) AI Services (libs/ai-services/)

Trạng thái: Dịch vụ Python cấp độ sản xuất

Mục đích: Dịch vụ AI/ML (AVM, kiểm duyệt nội dung, NLP)

Cấu hình:

[project]
name = "goodgo-ai-services"
version = "0.1.0"
requires-python = ">=3.12"

Phụ thuộc:

  • fastapi==0.115.0 - Framework web
  • uvicorn[standard]==0.32.0 - ASGI server
  • xgboost==2.1.0 - ML cho AVM
  • numpy==1.26.4 - Tính toán số
  • underthesea==6.8.0 - NLP tiếng Việt
  • pydantic==2.9.0 - Xác thực dữ liệu
  • httpx==0.27.0 - Client HTTP bất đồng bộ
  • slowapi==0.1.9 - Giới hạn tốc độ

Cấu trúc:

libs/ai-services/
├── app/                 # Ứng dụng FastAPI
│   ├── main.py         # Điểm vào
│   ├── routers/        # API endpoint
│   ├── models.py       # Mô hình Pydantic
│   └── services/       # Logic nghiệp vụ
├── tests/              # Kiểm thử pytest
└── Dockerfile          # Cấu hình container

Phụ thuộc phát triển:

  • pytest - Framework kiểm thử
  • pytest-asyncio - Hỗ trợ kiểm thử bất đồng bộ

11. SCRIPTS & TIỆN ÍCH

Vị trí: scripts/
Trạng thái: Được tổ chức tốt

Tiện Ích Cơ Sở Dữ Liệu

  1. Sao lưu & Khôi phục (scripts/backup/)

    • pg-backup.sh - Sao lưu PostgreSQL tự động
    • pg-verify-backup.sh - Xác minh sao lưu
    • pg-restore.sh - Khôi phục từ bản sao lưu
    • Chính sách lưu giữ (mặc định: 7 ngày)
  2. Import dữ liệu (scripts/)

    • seed-districts.ts - Dữ liệu địa lý
    • seed-plans.ts - Gói đăng ký
    • import-market-data.ts - Phân tích thị trường
    • encrypt-existing-kyc.ts - Mã hóa KYC
  3. Kiểm thử khói (scripts/smoke-test.sh)

    • Script kiểm tra sức khỏe
    • Xác minh tính khả dụng của dịch vụ

12. CẤU HÌNH GIT

.gitignore

Tệp: .gitignore
Trạng thái: Toàn diện

# Phụ thuộc
node_modules/
.pnpm-store/

# Build
dist/
.next/
.turbo/
out/

# Môi trường
.env
.env.local
.env.*.local

# IDE
.vscode/
.idea/

# Hệ điều hành
.DS_Store
Thumbs.db

# Kiểm thử
coverage/
playwright-report/
test-results/
blob-report/
load-tests/results/*.json

# Nhật ký
*.log

Phạm vi bao gồm:

  • Tất cả artifact Node.js
  • Cấu hình IDE/editor
  • Tệp đặc thù hệ điều hành
  • Secret môi trường
  • Báo cáo kiểm thử/coverage

Husky & Git Hook

Trạng thái: Được cấu hình

  • Hook trước khi commit qua Husky
  • Tích hợp lint-staged
  • Tự động định dạng khi commit

13. CÁC TỆP CẤU HÌNH BỔ SUNG

.dockerignore

Trạng thái: Tối ưu hóa các build Docker

  • Loại trừ tệp kiểm thử
  • Loại trừ báo cáo coverage
  • Loại trừ thư mục git
  • Giảm kích thước bối cảnh build

.pnpmrc.json

Trạng thái: Cấu hình pnpm

{
  "onlyBuiltDependencies": ["bcrypt"]
}
  • Chỉ build bcrypt từ nguồn
  • Tất cả các phụ thuộc khác sử dụng nhị phân được dựng sẵn
  • Thời gian cài đặt nhanh hơn

14. BẢO MẬT & TUÂN THỦ

Tính Năng Bảo Mật

  1. Secret môi trường

    • Không có tệp .env nào được commit
    • Secret trong GitHub Secrets
    • Tài liệu về tạo secret mạnh
  2. Bảo mật phụ thuộc

    • pnpm audit trong CI
    • Dependabot được cấu hình
    • Ghi đè bảo mật trong package.json
  3. Bảo mật container

    • Người dùng không phải root (node, appuser)
    • Hệ thống tệp gốc chỉ đọc
    • Cờ không có đặc quyền mới
    • Quét bảo mật (Trivy)
  4. Bảo mật code

    • SAST qua CodeQL
    • Quét phụ thuộc
    • Phát hiện secret
  5. Bảo mật cơ sở dữ liệu

    • Mã hóa KYC (AES-256-GCM)
    • Connection pooling với PgBouncer
    • Tự động hóa sao lưu
    • Xóa mềm cho nhật ký kiểm toán
  6. Bảo mật API

    • JWT + refresh token
    • Cấu hình CORS
    • Giới hạn tốc độ (slowapi trong Python)
    • Xác thực đầu vào (Zod, Pydantic)

15. GIÁM SÁT & QUAN SÁT

Stack Giám Sát

Trạng thái: Cấp độ sản xuất

Thành phần Mục đích Cấu hình
Prometheus Thu thập chỉ số Lưu giữ 15 ngày
Grafana Bảng điều khiển & cảnh báo Bảng điều khiển được cấp phép
Loki Tổng hợp nhật ký Tích hợp Grafana
Promtail Gửi nhật ký Nhật ký container Docker

Các chỉ số được thu thập:

  • Chỉ số ứng dụng (qua @willsoto/nestjs-prometheus)
  • Sử dụng tài nguyên container
  • Hiệu năng cơ sở dữ liệu
  • Thời gian phản hồi API

Các tệp cấu hình:

  • monitoring/prometheus/prometheus.yml
  • monitoring/grafana/provisioning/
  • monitoring/loki/loki-config.yml
  • monitoring/promtail/promtail-config.yml

16. CẤU HÌNH HẠ TẦNG

Cấu Hình PgBouncer

Vị trí: infra/pgbouncer/
Trạng thái: Connection pooling

  • Dịch vụ chỉ dành cho sản xuất
  • Kích thước pool: 20
  • Số kết nối client tối đa: 200
  • Giảm tải cơ sở dữ liệu

TÓM TẮT KẾT QUẢ TOÀN DIỆN

ĐIỂM MẠNH

  1. Xuất sắc về Monorepo

    • Cấu trúc workspace rõ ràng (apps, libs, prisma)
    • Turbo với phụ thuộc tác vụ đúng
    • pnpm với tối ưu hóa hiệu năng
  2. Hạ tầng

    • Thiết lập Docker Compose hoàn chỉnh
    • Dockerfile sản xuất đa giai đoạn
    • Kiểm tra sức khỏe trên tất cả dịch vụ
    • Tự động hóa sao lưu cơ sở dữ liệu
  3. Quy trình CI/CD

    • GitHub Actions toàn diện
    • Quy trình riêng biệt (CI, E2E, Deploy, Security)
    • Chính sách lưu giữ artifact
    • Quét bảo mật (Trivy, CodeQL)
  4. Cơ sở dữ liệu

    • 12 migration được cấu trúc tốt
    • PostGIS cho dữ liệu không gian địa lý
    • Chỉ mục để tối ưu hóa truy vấn
    • Xóa mềm cho nhật ký kiểm toán
  5. Kiểm thử

    • Playwright E2E (31 tệp kiểm thử)
    • Kiểm thử đơn vị (213 tệp kiểm thử)
    • Kiểm thử tải (k6)
    • Thiết lập/dọn dẹp toàn cục
  6. Chất lượng Code

    • Cấu hình TypeScript nghiêm ngặt
    • Quy tắc ESLint toàn diện
    • Định dạng Prettier
    • Hook trước khi commit
  7. Bảo mật

    • Kiểm tra phụ thuộc
    • Quét container
    • Quản lý secret
    • Mã hóa dữ liệu (KYC)
  8. Khả năng quan sát

    • Stack giám sát đầy đủ
    • Ghi nhật ký có cấu trúc
    • Thu thập chỉ số
    • Bảng điều khiển hiệu năng

⚠️ VẤN ĐỀ NHỎ

  1. Biến môi trường

    • Hướng dẫn tạo hiện diện, tài liệu tốt
    • Cân nhắc: Script tự động tạo cho phát triển cục bộ
  2. Tài liệu

    • README tốt, nhưng có thể mở rộng hướng dẫn triển khai
    • Cân nhắc: Thêm runbook cho vận hành
  3. Bộ nhớ đệm Build

    • GitHub Actions sử dụng cache GHA cho Docker
    • Cân nhắc: Tối ưu hóa cache lớp cho mạng chậm hơn
  4. Xử lý lỗi

    • Nên xác minh mã lỗi nhất quán trên toàn API
    • Cân nhắc: Tài liệu danh mục lỗi
  5. An toàn kiểu

    • MCP servers có thể có kiểu nghiêm ngặt hơn
    • Cân nhắc: Phạm vi kiểu đầy đủ

🚀 ĐỀ XUẤT

  1. Hiệu năng

    • Định kỳ phân tích truy vấn cơ sở dữ liệu
    • Theo dõi hiệu năng lập chỉ mục Typesense
    • Thiết lập cảnh báo cho truy vấn chậm
  2. Khả năng mở rộng

    • Thêm Redis sentinel cho HA
    • Triển khai read replica cho PostgreSQL
    • Cân nhắc microservices nếu độ phức tạp tăng
  3. DevOps

    • Thêm ArgoCD cho triển khai GitOps
    • Triển khai canary deployments
    • Thêm tự động rollback khi thất bại
  4. Kiểm thử

    • Tăng coverage E2E (hiện tại < 50%)
    • Thêm kiểm thử hợp đồng cho API
    • Triển khai kiểm thử chaos engineering
  5. Tài liệu

    • Thêm ADR (Bản ghi quyết định kiến trúc)
    • Tạo playbook cho các hoạt động phổ biến
    • Ghi lại quy trình khắc phục sự cố

KẾT LUẬN

Nền tảng GoodGo là một hệ thống được thiết kế tốt, sẵn sàng cho môi trường sản xuất với:

Các thực hành hạ tầng xuất sắc
Quy trình CI/CD toàn diện
Thế bảo mật mạnh
Giám sát & khả năng quan sát đầy đủ
Quản lý cơ sở dữ liệu đúng
Tiêu chuẩn chất lượng code cao

Nền tảng sẵn sàng cho triển khai và quy mô sản xuất. Nhóm đã triển khai các thực hành tốt nhất trong ngành trên tất cả các lớp của stack.

Điểm tổng thể: A (Sẵn sàng cho sản xuất)


Kiểm tra hoàn thành: 11 tháng 4 năm 2026
Tổng dung lượng kho lưu trữ: 27GB (bao gồm node_modules)