Files
vrbattles-api/docker-compose.prod.yml
2026-01-20 05:41:25 +00:00

94 lines
2.8 KiB
YAML

# =============================================================================
# VRBattles API - Production Docker Compose for Dokploy
# =============================================================================
#
# Dokploy Setup Instructions:
# 1. Create a new "Compose" project in Dokploy
# 2. Connect to your Git repository
# 3. Set "Compose Path" to: docker-compose.prod.yml
# 4. Add environment variables in Dokploy UI (see .env.example)
# 5. Deploy!
#
# Required Environment Variables in Dokploy:
# - DATABASE_URL (or use the db service below)
# - JWT_SECRET (generate with: openssl rand -base64 32)
# - FRONTEND_URL
# - POSTGRES_PASSWORD (if using db service)
#
# =============================================================================
services:
api:
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
environment:
- DATABASE_URL=${DATABASE_URL:-postgres://postgres:${POSTGRES_PASSWORD}@db:5432/vrbattles}
- JWT_SECRET=${JWT_SECRET}
- JWT_EXPIRATION_HOURS=${JWT_EXPIRATION_HOURS:-24}
- HOST=0.0.0.0
- PORT=3000
- ENVIRONMENT=production
- RUST_LOG=${RUST_LOG:-vrbattles_api=info,tower_http=info}
- FRONTEND_URL=${FRONTEND_URL:-http://localhost:3000}
- BASE_URL=${BASE_URL:-http://localhost:3000}
- UPLOAD_PATH=/app/uploads
# Optional S3 config
- S3_BUCKET=${S3_BUCKET:-}
- S3_REGION=${S3_REGION:-}
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-}
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-}
# Optional Email config
- SMTP_HOST=${SMTP_HOST:-}
- SMTP_PORT=${SMTP_PORT:-}
- SMTP_USERNAME=${SMTP_USERNAME:-}
- SMTP_PASSWORD=${SMTP_PASSWORD:-}
- FROM_EMAIL=${FROM_EMAIL:-}
volumes:
# Persist uploaded files
- uploads_data:/app/uploads
depends_on:
db:
condition: service_healthy
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
- vrbattles-network
db:
image: postgres:16-alpine
environment:
- POSTGRES_USER=${POSTGRES_USER:-postgres}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required}
- POSTGRES_DB=${POSTGRES_DB:-vrbattles}
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postgres}"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
networks:
- vrbattles-network
# Uncomment if you need external access to the database
# ports:
# - "5432:5432"
volumes:
postgres_data:
driver: local
uploads_data:
driver: local
networks:
vrbattles-network:
driver: bridge