services: # Public website served via nginx website: image: nginx:1.28-alpine container_name: way-cms-website ports: - "8080:80" volumes: - ${WEBSITE_DIR:-./website}:/usr/share/nginx/html:ro - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro restart: unless-stopped networks: - way-cms-network # CMS admin interface - using Docker Hub image # Note: Set DOCKER_USERNAME env var or replace 'drumsergio' with your Docker Hub username # Set CMS_VERSION env var to use another version (defaults to 2.0.23) # Image tags have no "v" prefix. Example: CMS_VERSION=2.0.20 cms: image: ${DOCKER_USERNAME:-drumsergio}/way-cms:${CMS_VERSION:-2.0.23} container_name: way-cms-admin ports: - "5001:5000" volumes: # Single-tenant: website files - ${WEBSITE_DIR:-./website}:/var/www/html:rw # Backups directory - ./.way-cms-backups:/.way-cms-backups # Multi-tenant: SQLite database and settings - ./.way-cms-data:/.way-cms-data # Multi-tenant: all projects (only used when MULTI_TENANT=true) - ${PROJECTS_DIR:-./projects}:/var/www/projects:rw environment: # ============== Single-Tenant Mode (Default) ============== # Base directory for website files - CMS_BASE_DIR=/var/www/html # Authentication (use either CMS_PASSWORD or CMS_PASSWORD_HASH) - CMS_USERNAME=${CMS_USERNAME:-admin} - CMS_PASSWORD=${CMS_PASSWORD:-admin} - CMS_PASSWORD_HASH=${CMS_PASSWORD_HASH:-} # ============== Multi-Tenant Mode ============== # Set MULTI_TENANT=true to enable multi-tenant mode - MULTI_TENANT=${MULTI_TENANT:-false} # Multi-tenant directories (only used when MULTI_TENANT=true) - DATA_DIR=${DATA_DIR:-/.way-cms-data} - PROJECTS_BASE_DIR=${PROJECTS_BASE_DIR:-/var/www/projects} # Initial admin user (required for first run in multi-tenant mode) - ADMIN_EMAIL=${ADMIN_EMAIL:-} - ADMIN_PASSWORD=${ADMIN_PASSWORD:-} # Email configuration for magic links (multi-tenant) - SMTP_HOST=${SMTP_HOST:-} - SMTP_PORT=${SMTP_PORT:-587} - SMTP_USER=${SMTP_USER:-} - SMTP_PASSWORD=${SMTP_PASSWORD:-} - SMTP_FROM=${SMTP_FROM:-} - SMTP_FROM_NAME=${SMTP_FROM_NAME:-Way-CMS} - SMTP_USE_TLS=${SMTP_USE_TLS:-true} - MAGIC_LINK_EXPIRY_HOURS=${MAGIC_LINK_EXPIRY_HOURS:-24} - APP_URL=${APP_URL:-http://localhost:5001} # ============== Common Settings ============== # Security - SECRET_KEY=${SECRET_KEY:-change-me-in-production-please} - READ_ONLY_MODE=${READ_ONLY_MODE:-false} # Session configuration (in minutes, default 24 hours) - SESSION_TIMEOUT_MINUTES=${SESSION_TIMEOUT_MINUTES:-1440} # Website display settings (single-tenant only) - WEBSITE_URL=${WEBSITE_URL:-} - WEBSITE_NAME=${WEBSITE_NAME:-} # Automatic backups (enabled by default) - AUTO_BACKUP_ENABLED=${AUTO_BACKUP_ENABLED:-true} # Flask configuration - PORT=5000 - FLASK_APP=app.py restart: unless-stopped networks: - way-cms-network depends_on: - website networks: way-cms-network: driver: bridge volumes: website-data: driver: local