version: '3.8' services: tt-booking: build: context: . dockerfile: Dockerfile container_name: lcc-tt-booking ports: - '3036:3000' env_file: - .env.production environment: - NODE_ENV=production - DATABASE_URL=/app/data/sqlite.db - NEXTAUTH_URL=https://lcc-tt-booking.mikicvi.com - PORT=3000 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 start_period: 60s networks: - lcc-network # Automated backup service backup: image: alpine:latest container_name: lcc-backup volumes: - ./data:/data:ro - ./backups:/backups environment: - TZ=Europe/Dublin 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 30 days find /backups -name 'sqlite-*.db' -mtime +30 -delete 2>/dev/null || true echo \"Backup completed, sleeping for 24 hours\" sleep 86400 done" restart: unless-stopped depends_on: - tt-booking networks: - lcc-network # Log rotation service logrotate: image: alpine:latest container_name: lcc-logrotate volumes: - ./logs:/logs command: > sh -c " apk add --no-cache logrotate && echo '/logs/*.log { daily missingok rotate 30 compress delaycompress notifempty }' > /etc/logrotate.d/app && while true; do logrotate /etc/logrotate.d/app sleep 86400 done" restart: unless-stopped networks: - lcc-network networks: lcc-network: driver: bridge volumes: lcc-data: driver: local lcc-backups: driver: local