Files
tt-booking/docker-compose.production.yml
T

92 lines
2.4 KiB
YAML

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