Files
pos-system/docs/vi/guides/local-deployment.md
Ho Ngoc Hai b104fafa85 Refactor auth-service to iam-service and update related documentation
- Renamed auth-service to iam-service across various files for consistency.
- Updated Dockerfiles, deployment configurations, and documentation to reflect the service name change.
- Enhanced testing commands in documentation to point to the new iam-service.
- Removed outdated auth-service files and configurations to streamline the project structure.
- Improved bilingual documentation for clarity on the new service structure and usage.
2025-12-30 20:54:21 +07:00

262 lines
7.0 KiB
Markdown

# Triển Khai Phát Triển Cục Bộ
Thư mục này chứa cấu hình Docker Compose để chạy toàn bộ nền tảng GoodGo ở local.
## Bắt Đầu Nhanh
```bash
# 1. Thiết lập biến môi trường
cp env.local.example .env.local
# Chỉnh sửa .env.local với các giá trị của bạn (JWT_SECRET, DATABASE_URL, etc.)
# 2. Khởi động tất cả services
docker-compose up -d
# 3. Kiểm tra trạng thái service
docker-compose ps
# 4. Xem logs
docker-compose logs -f
```
## Điểm Truy Cập
| Service | URL | Mô Tả |
|---------|-----|-------|
| **Traefik Dashboard** | http://localhost:8080 | Dashboard API Gateway |
| **Auth Service** | http://localhost/api/v1/auth | API xác thực |
| **Web Admin** | http://admin.localhost | Dashboard quản trị |
| **Web Client** | http://localhost | Ứng dụng client |
| **Redis** | localhost:6379 | Cache (truy cập trực tiếp) |
## Services
### Hạ Tầng
- **Traefik** (Port 80, 8080): API Gateway với automatic service discovery
- **Redis** (Port 6379): Cache và session store chung
### Backend Services
- **iam-service** (Port 5001): Xác thực và quản lý người dùng
- Routes: `/api/v1/auth`, `/api/v1/users`
- Health: http://localhost/api/v1/auth/health
### Frontend Applications
- **web-admin** (Port 3000): Dashboard quản trị (Next.js)
- **web-client** (Port 3001): Ứng dụng client (Next.js)
## Cấu Hình Môi Trường
Biến môi trường được quản lý trong `.env.local`:
### Biến Bắt Buộc
```bash
# Xác thực (PHẢI giống nhau cho tất cả services)
JWT_SECRET=your-super-secret-jwt-key-min-32-characters
JWT_REFRESH_SECRET=your-super-secret-refresh-key-min-32-characters
# Database (Neon PostgreSQL)
DATABASE_URL=postgresql://user:pass@host.neon.tech/db?sslmode=require
```
### Biến Tùy Chọn
```bash
# Redis
REDIS_HOST=redis
REDIS_PORT=6379
# Observability
TRACING_ENABLED=false
JAEGER_ENDPOINT=http://jaeger:14268/api/traces
# CORS
CORS_ORIGIN=http://localhost:3000,http://localhost:3001
```
## Các Lệnh Thường Dùng
```bash
# Khởi động tất cả services
docker-compose up -d
# Khởi động service cụ thể
docker-compose up -d iam-service
# Dừng tất cả services
docker-compose down
# Dừng và xóa volumes
docker-compose down -v
# Xem logs (tất cả services)
docker-compose logs -f
# Xem logs (service cụ thể)
docker-compose logs -f iam-service
# Restart service
docker-compose restart iam-service
# Rebuild service
docker-compose up -d --build iam-service
# Kiểm tra trạng thái service
docker-compose ps
# Thực thi lệnh trong container
docker-compose exec iam-service sh
```
## Thêm Service Mới
1. **Thêm service vào docker-compose.yml**:
```yaml
services:
my-new-service:
build:
context: ../..
dockerfile: services/my-new-service/Dockerfile
container_name: my-new-service-local
env_file:
- .env.local
environment:
- PORT=5002
- SERVICE_NAME=my-new-service
- DATABASE_URL=${DATABASE_URL}
- REDIS_HOST=${REDIS_HOST}
- JWT_SECRET=${JWT_SECRET}
ports:
- "5002:5002"
depends_on:
redis:
condition: service_healthy
traefik:
condition: service_started
networks:
- microservices-network
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.my-new-service.rule=PathPrefix(`/api/v1/my-new-service`)"
- "traefik.http.services.my-new-service.loadbalancer.server.port=5002"
```
2. **Khởi động service**:
```bash
docker-compose up -d my-new-service
```
3. **Truy cập service**:
- Qua Traefik: http://localhost/api/v1/my-new-service
- Trực tiếp: http://localhost:5002
## Cấu Hình Traefik
Traefik được cấu hình qua:
- **Static config**: `infra/traefik/traefik.yml`
- **Dynamic config**: `infra/traefik/dynamic/`
- **Service discovery**: Docker labels trong file này
Services tự động được discover bởi Traefik sử dụng Docker labels. Không cần cấu hình route thủ công.
## Khắc Phục Sự Cố
### Port Đã Được Sử Dụng
```bash
# Tìm process đang dùng port
lsof -i :80
lsof -i :5001
# Kill process
kill -9 <PID>
```
### Service Không Khởi Động
```bash
# Kiểm tra logs
docker-compose logs service-name
# Rebuild không dùng cache
docker-compose build --no-cache service-name
docker-compose up -d service-name
```
### Vấn Đề Kết Nối Database
```bash
# Xác minh DATABASE_URL trong .env.local
cat .env.local | grep DATABASE_URL
# Test connection từ service
docker-compose exec iam-service sh
```
### Vấn Đề Kết Nối Redis
```bash
# Kiểm tra Redis đang chạy
docker-compose ps redis
# Test Redis connection
docker-compose exec redis redis-cli ping
# Nên trả về: PONG
```
### Traefik Không Định Tuyến
```bash
# Kiểm tra Traefik dashboard
open http://localhost:8080
# Xác minh service có labels đúng
docker-compose config | grep -A 5 "labels:"
# Kiểm tra Traefik logs
docker-compose logs traefik
```
## Kiến Trúc Network
```
┌─────────────────────────────────────────────────────────────┐
│ Client │
└───────────────────────────┬─────────────────────────────────┘
┌───────────────┐
│ Traefik │ :80, :8080
│ API Gateway │
└───────┬───────┘
┌───────────────────┼───────────────────┐
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ iam-service │ │ web-admin │ │ web-client │
│ :5001 │ │ :3000 │ │ :3001 │
└──────┬───────┘ └──────────────┘ └──────────────┘
├─────────────┐
│ │
▼ ▼
┌──────────┐ ┌─────────────┐
│ Redis │ │ PostgreSQL │
│ :6379 │ │ (Neon) │
└──────────┘ └─────────────┘
```
## Tài Liệu Tham Khảo
- [Cấu Hình Traefik](../../infra/traefik/)
- [Service Template](../../services/_template/)
- [Hướng Dẫn Phát Triển](development.md)
- [Hướng Dẫn Neon Database](neon-database.md)