version: '3.8' services: mc-panel: image: registry.nevetime.ru/mc-panel:${IMAGE_TAG:-latest} container_name: mc-panel-prod restart: unless-stopped ports: - "8000:8000" environment: - PORT=8000 - WORKERS=4 - PYTHONPATH=/app - DEBUG=false - LOG_LEVEL=WARNING env_file: - .env.production volumes: - mc_servers_prod:/app/backend/servers - mc_data_prod:/app/backend/data - mc_logs_prod:/app/logs # Backup volume - mc_backups_prod:/app/backups networks: - mc-panel-prod healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/"] interval: 30s timeout: 10s retries: 5 start_period: 120s deploy: resources: limits: memory: 2G cpus: '2.0' reservations: memory: 1G cpus: '1.0' labels: - "traefik.enable=true" - "traefik.http.routers.mc-panel.rule=Host(`mc-panel.nevetime.ru`)" - "traefik.http.routers.mc-panel.tls=true" - "traefik.http.routers.mc-panel.tls.certresolver=letsencrypt" - "traefik.http.middlewares.mc-panel-auth.basicauth.users=admin:$$2y$$10$$..." # Backup service backup: image: alpine:latest container_name: mc-panel-backup restart: unless-stopped volumes: - mc_servers_prod:/data/servers:ro - mc_data_prod:/data/app:ro - mc_backups_prod:/backups environment: - BACKUP_SCHEDULE=0 2 * * * # Daily at 2 AM - BACKUP_RETENTION=7 # Keep 7 days command: | sh -c ' apk add --no-cache dcron tar gzip echo "$$BACKUP_SCHEDULE cd /data && tar -czf /backups/mc-panel-\$$(date +%Y%m%d-%H%M%S).tar.gz servers app" | crontab - crond -f ' networks: - mc-panel-prod volumes: mc_servers_prod: driver: local mc_data_prod: driver: local mc_logs_prod: driver: local mc_backups_prod: driver: local networks: mc-panel-prod: driver: bridge