- 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.
107 lines
2.5 KiB
Markdown
107 lines
2.5 KiB
Markdown
# Deployment Guide
|
|
|
|
## Database Setup (Neon)
|
|
|
|
All environments use **Neon PostgreSQL**. Setup once before deployment:
|
|
|
|
1. Create Neon project at https://neon.tech
|
|
2. Create branches: `main` (dev), `staging`, `production`
|
|
3. Get connection strings for each branch
|
|
4. Configure in environment variables (see below)
|
|
|
|
See [Neon Setup Guide](../../infra/databases/neon/README.md) for details.
|
|
|
|
## Local Deployment
|
|
|
|
```bash
|
|
# Setup Neon database URL
|
|
cp deployments/local/env.local.example deployments/local/.env.local
|
|
# Edit .env.local and add your Neon DATABASE_URL
|
|
|
|
# Start services (no PostgreSQL container needed)
|
|
cd deployments/local
|
|
docker-compose up -d
|
|
```
|
|
|
|
## Staging Deployment
|
|
|
|
### Prerequisites
|
|
- Kubernetes cluster access
|
|
- kubectl configured
|
|
- KUBECONFIG set
|
|
- Neon staging branch created
|
|
- GitHub Secrets configured:
|
|
- `NEON_DATABASE_URL_STAGING`
|
|
- `KUBECONFIG_STAGING`
|
|
|
|
### Setup Secrets
|
|
|
|
```bash
|
|
# Create 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
|
|
```
|
|
|
|
Or manually:
|
|
```bash
|
|
kubectl apply -f deployments/staging/kubernetes/
|
|
```
|
|
|
|
**Note**: Migrations run automatically in CI/CD before deployment.
|
|
|
|
## Production Deployment
|
|
|
|
### Prerequisites
|
|
- Production Kubernetes cluster
|
|
- kubectl configured with production context
|
|
- Neon production branch created
|
|
- GitHub Secrets configured:
|
|
- `NEON_DATABASE_URL_PRODUCTION`
|
|
- `KUBECONFIG_PRODUCTION`
|
|
|
|
### Setup Secrets
|
|
|
|
```bash
|
|
# Create 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
|
|
```
|
|
|
|
**Note**: Migrations run automatically in CI/CD before deployment (with 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
|