# Hướng Dẫn Deployment

## Thiết Lập Database (Neon)

Tất cả môi trường sử dụng **Neon PostgreSQL**. Thiết lập một lần trước khi deploy:

1. Tạo Neon project tại https://neon.tech
2. Tạo branches: `main` (dev), `staging`, `production`
3. Lấy connection strings cho mỗi branch
4. Cấu hình trong environment variables (xem bên dưới)

Xem [Hướng Dẫn Thiết Lập Neon](../../infra/databases/neon/README.md) để biết chi tiết.

## Local Deployment

```bash
# Setup Neon database URL
cp deployments/local/env.local.example deployments/local/.env.local
# Chỉnh sửa .env.local và thêm Neon DATABASE_URL của bạn

# Khởi động services (không cần PostgreSQL container)
cd deployments/local
docker-compose up -d
```

## Staging Deployment

### Yêu Cầu
- Quyền truy cập Kubernetes cluster
- kubectl đã cấu hình
- KUBECONFIG đã set
- Neon staging branch đã tạo
- GitHub Secrets đã cấu hình:
  - `NEON_DATABASE_URL_STAGING`
  - `KUBECONFIG_STAGING`

### Thiết Lập Secrets

```bash
# Tạo Kubernetes secret
kubectl create secret generic iam-service-secrets \
  --from-literal=database-url='postgresql://user:pass@ep-xxx.region.neon.tech/dbname?sslmode=require&pgbouncer=true' \
  --from-literal=jwt-secret='your-staging-jwt-secret' \
  --from-literal=jwt-refresh-secret='your-staging-refresh-secret' \
  -n staging
```

### Deploy

```bash
./scripts/deploy/deploy-staging.sh
```

Hoặc thủ công:
```bash
kubectl apply -f deployments/staging/kubernetes/
```

**Lưu ý**: Migrations chạy tự động trong CI/CD trước khi deployment.

## Production Deployment

### Yêu Cầu
- Production Kubernetes cluster
- kubectl đã cấu hình với production context
- Neon production branch đã tạo
- GitHub Secrets đã cấu hình:
  - `NEON_DATABASE_URL_PRODUCTION`
  - `KUBECONFIG_PRODUCTION`

### Thiết Lập Secrets

```bash
# Tạo Kubernetes secret
kubectl create secret generic iam-service-secrets \
  --from-literal=database-url='postgresql://user:pass@ep-xxx.region.neon.tech/dbname?sslmode=require&pgbouncer=true' \
  --from-literal=jwt-secret='your-production-jwt-secret' \
  --from-literal=jwt-refresh-secret='your-production-refresh-secret' \
  -n production
```

### Deploy

```bash
./scripts/deploy/deploy-prod.sh
```

**Lưu ý**: Migrations chạy tự động trong CI/CD trước khi deployment (cần approval).

### Rollback

```bash
kubectl rollout undo deployment/iam-service -n production
```

## Health Checks

- Liveness: `GET /health/live`
- Readiness: `GET /health/ready`
- Health: `GET /health`

## Monitoring

- Prometheus: http://prometheus:9090
- Grafana: http://grafana:3000
- Traefik Dashboard: http://traefik:8080
