# Production Environment This directory contains the production Docker Compose configuration for running all Banatie services in containers. ## Services - **API Service** (port 3000) - REST API for image generation - **Landing Page** (port 3001) - Public website - **PostgreSQL** (port 5460→5432) - Database - **MinIO** (ports 9000-9001) - Object storage with S3 compatibility ## Quick Start ### 1. Setup Secrets ```bash cp secrets.env.example secrets.env # Edit secrets.env with real values ``` Required secrets: - `GEMINI_API_KEY` - Your Google Gemini API key ### 2. Start Services ```bash # From prod-env directory docker compose up -d ``` ### 3. Check Status ```bash docker compose ps docker compose logs -f app # API logs docker compose logs -f landing # Landing logs ``` ### 4. Stop Services ```bash docker compose down ``` ## Deployment to VPS ### Initial Setup ```bash # On VPS cd /path/to/banatie-service git pull cd prod-env cp secrets.env.example secrets.env # Edit secrets.env with production values docker compose up -d --build ``` ### Updates ```bash # On VPS cd /path/to/banatie-service/prod-env git pull docker compose up -d --build ``` ## Environment Variables Configuration is split into two files: - **`.env`** - Base configuration (committed to git) - Service endpoints (Docker internal: `postgres:5432`, `minio:9000`) - Database credentials (development values) - Storage configuration - Application settings - **`secrets.env`** - Sensitive secrets (NOT committed) - API keys (Gemini) - Production passwords (if different) - Testing keys (optional) ## Port Mappings | Service | Host Port | Container Port | Description | |------------|-----------|----------------|-----------------------| | API | 3000 | 3000 | REST API | | Landing | 3001 | 3000 | Landing page | | PostgreSQL | 5460 | 5432 | Database | | MinIO API | 9000 | 9000 | S3-compatible storage | | MinIO UI | 9001 | 9001 | Web console | ## Data Persistence All data is stored in the parent `data/` directory: ``` ../data/ ├── postgres/ # Database files ├── storage/ # MinIO storage (4 drives for SNMD) ├── results/ # Generated images └── uploads/ # Uploaded files ``` ## Accessing Services - **API**: http://localhost:3000 - **Landing**: http://localhost:3001 - **MinIO Console**: http://localhost:9001 - Username: `banatie_admin` - Password: (from MINIO_ROOT_PASSWORD in .env) ## Database Access Connect to PostgreSQL from host: ```bash psql -h localhost -p 5460 -U banatie_user -d banatie_db ``` From another Docker container (same network): ```bash psql -h postgres -p 5432 -U banatie_user -d banatie_db ``` ## Troubleshooting ### Check service health ```bash docker compose ps ``` ### View logs ```bash docker compose logs -f # All services docker compose logs -f app # API only docker compose logs -f postgres # Database only ``` ### Restart specific service ```bash docker compose restart app ``` ### Rebuild after code changes ```bash docker compose up -d --build ``` ### Reset everything ```bash docker compose down -v # ⚠️ This deletes volumes! ``` ## Production Considerations 1. **Secrets Management** - Never commit `secrets.env` - Use strong passwords in production - Rotate API keys regularly 2. **Database Backups** - Set up automated backups of `data/postgres/` - Test restore procedures 3. **Resource Limits** - Add memory/CPU limits to docker-compose.yml if needed - Monitor with `docker stats` 4. **SSL/TLS** - Use reverse proxy (nginx/traefik) for HTTPS - Enable MinIO SSL for production 5. **Monitoring** - Set up health check endpoints - Configure alerts for service failures ## Development vs Production This configuration is for **production** (all services in Docker). For **development** (local API, Docker infrastructure): - Use `apps/api-service/docker-compose.yml` - Run `pnpm dev` from api-service directory - Connects to Docker services via `localhost:5460` and `localhost:9000`