Implements production-ready Docker setup with multi-stage builds and separate development/production configurations. New Files: - Dockerfile: Multi-stage build with Python 3.13 * Builder stage: Compiles dependencies with build tools * Runtime stage: Minimal image (~150-200MB) with non-root user * Health checks and security hardening - docker-compose.yml: Production config (pulls from Docker Hub) * Image: manticorum67/major-domo-discordapp:latest * Resource limits: 512MB RAM, 1 CPU * Volumes: /app/data (ro), /app/logs (rw) - docker-compose.dev.yml: Development config (builds locally) * Higher resource limits: 1GB RAM, 2 CPU * DEBUG log level by default - .dockerignore: Excludes unnecessary files from build context - build-and-push.sh: Interactive build/push script for Docker Hub - DOCKER.md: Comprehensive deployment guide (13K) - BUILD_AND_PUSH.md: Docker Hub build/push guide (7.7K) Configuration Updates: - config.py: Updated sheets_credentials_path to /app/data location - requirements.txt: Pinned all package versions for reproducibility - .env.example: Added Docker-specific configuration Key Features: - Multi-stage build for optimized image size - Non-root user (botuser, UID 1000) for security - Separate dev/prod compose files - Volume mounts for persistence (/app/data, /app/logs) - Health checks and automatic restarts - Resource limits and log rotation - Docker Hub integration for production deployments Docker Hub Repository: manticorum67/major-domo-discordapp 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
75 lines
1.7 KiB
YAML
75 lines
1.7 KiB
YAML
version: '3.8'
|
|
|
|
# ============================================
|
|
# Production Configuration
|
|
# ============================================
|
|
# This compose file pulls the pre-built image from Docker Hub
|
|
#
|
|
# Usage:
|
|
# docker-compose pull
|
|
# docker-compose up -d
|
|
#
|
|
# Docker Hub Repository: manticorum67/major-domo-discordapp
|
|
|
|
services:
|
|
discord-bot:
|
|
# Pull image from Docker Hub
|
|
image: manticorum67/major-domo-discordapp:latest
|
|
container_name: major-domo-discord-bot-v2
|
|
|
|
# Restart policy
|
|
restart: unless-stopped
|
|
|
|
# Environment variables from .env file
|
|
env_file:
|
|
- .env
|
|
|
|
# Production environment configuration
|
|
environment:
|
|
- LOG_LEVEL=${LOG_LEVEL:-INFO}
|
|
- ENVIRONMENT=production
|
|
- TESTING=${TESTING:-false}
|
|
- REDIS_URL=${REDIS_URL:-}
|
|
- REDIS_CACHE_TTL=${REDIS_CACHE_TTL:-300}
|
|
|
|
# Volume mounts
|
|
volumes:
|
|
# Google Sheets credentials (required)
|
|
- ${SHEETS_CREDENTIALS_HOST_PATH:-./data}:/app/data:ro
|
|
|
|
# Logs directory (persistent) - mounted to /app/logs where the application expects it
|
|
- ${LOGS_HOST_PATH:-./logs}:/app/logs:rw
|
|
|
|
# Network configuration
|
|
networks:
|
|
- major-domo-network
|
|
|
|
# Health check
|
|
healthcheck:
|
|
test: ["CMD", "python", "-c", "import sys; sys.exit(0)"]
|
|
interval: 60s
|
|
timeout: 10s
|
|
start-period: 30s
|
|
retries: 3
|
|
|
|
# Resource limits (production)
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
cpus: '1.0'
|
|
memory: 512M
|
|
reservations:
|
|
cpus: '0.25'
|
|
memory: 256M
|
|
|
|
# Logging configuration
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
|
|
networks:
|
|
major-domo-network:
|
|
driver: bridge
|