# Sample Docker Compose for TT Booking # Copy this file and create a .env file with your settings services: tt-booking: image: your-registry/tt-booking:latest container_name: tt-booking ports: - "3000:3000" environment: - NEXTAUTH_URL=http://localhost:3000 - NEXTAUTH_SECRET=${NEXTAUTH_SECRET} - ADMIN_EMAIL=${ADMIN_EMAIL:-admin@tabletennis.com} - ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin123} # Optional email settings - EMAIL_USER=${EMAIL_USER} - EMAIL_PASSWORD=${EMAIL_PASSWORD} # Optional rate limiting - RATE_LIMIT_MAX=${RATE_LIMIT_MAX:-100} - RATE_LIMIT_WINDOW=${RATE_LIMIT_WINDOW:-900000} volumes: - ./data:/app/data - ./backups:/app/backups restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/api/health"] interval: 30s timeout: 10s retries: 3 # Optional: Automated backup service backup: image: alpine:latest container_name: tt-booking-backup volumes: - ./data:/data:ro - ./backups:/backups environment: - TZ=UTC command: > sh -c " apk add --no-cache tzdata && while true; do timestamp=$$(date +%Y%m%d-%H%M%S) echo \"Creating backup at $$timestamp\" cp /data/sqlite.db \"/backups/sqlite-$$timestamp.db\" 2>/dev/null || echo 'No database file found yet' # Keep backups for 7 days find /backups -name 'sqlite-*.db' -mtime +7 -delete 2>/dev/null || true echo \"Backup completed, sleeping for 24 hours\" sleep 86400 done" restart: unless-stopped depends_on: - tt-booking