version: '3.8' # The Scheduler # Purpose: System-wide maintenance orchestration - backups, doc mirroring, cleanup, task automation # Port: 8090 (API + UI) # Network: docker-dataplane # Image: git.schweitz.internal/jpmschweitzer/scheduler (internal registry) services: scheduler: image: git.schweitz.internal/jpmschweitzer/scheduler:latest container_name: scheduler restart: unless-stopped ports: - "8090:8090" environment: - APP_NAME=The Scheduler - DEBUG=true - HOST=0.0.0.0 - PORT=8090 - LOG_LEVEL=INFO - POSTGRES_HOST=postgres-shared - POSTGRES_PORT=5432 - POSTGRES_DB=scheduler - POSTGRES_USER=scheduler_user - POSTGRES_PASSWORD=${SCHEDULER_DB_PASSWORD} - REDIS_HOST=redis-shared - REDIS_PORT=6379 - REDIS_DB=3 - GITEA_URL=http://gitea:3000 - GITEA_USER=${GITEA_LIBRARY_USER} - GITEA_PASSWORD=${GITEA_LIBRARY_PASSWORD} - GITEA_SSH_HOST=gitea - GITEA_SSH_PORT=22 - GITEA_TOKEN=${GITEA_TOKEN} - BACKUP_RETENTION_DAILY=7 - BACKUP_RETENTION_WEEKLY=4 - BACKUP_RETENTION_MONTHLY=12 - DOCS_MIRROR_PATH=/docs-mirror - DOCS_CHECK_INTERVAL=21600 - SCHEDULER_API_KEY=${SCHEDULER_API_KEY} - PYTHONPATH=/app volumes: # Data volumes only - source code is baked into image - /home/jpmschweitzer/docker-data/scheduler/logs:/app/logs - /home/jpmschweitzer/docker-data/scheduler/task-data:/app/task-data - /home/jpmschweitzer/docker-data/scheduler/ssh:/root/.ssh:ro - /mnt/media/library/docs-mirror:/docs-mirror - /mnt/media/backups/library:/backups - /var/run/docker.sock:/var/run/docker.sock:ro - /home/jpmschweitzer/docker-data/postgres-shared:/postgres-data:ro # For config backups (read-only sources) - /home/jpmschweitzer/docker-data:/data/docker-data:ro - /home/jpmschweitzer/.config/code-server:/data/code-server-config:ro # For config backups (write destination) - /mnt/media/backups/docker-configs:/backups/docker-configs networks: - docker-dataplane deploy: resources: limits: cpus: '0.5' memory: 1G reservations: memory: 256M labels: - "com.centurylinklabs.watchtower.enable=true" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8090/health"] interval: 30s timeout: 10s retries: 3 start_period: 90s networks: docker-dataplane: external: true name: docker-dataplane