# docker-compose.prod.yml - Production configuration version: '3.8' services: backend: image: photo-sharing-backend:latest build: context: ./backend dockerfile: Dockerfile restart: unless-stopped environment: - NODE_ENV=production - PORT=3000 - JWT_SECRET=${JWT_SECRET} - ADMIN_URL=${ADMIN_URL} - FRONTEND_URL=${FRONTEND_URL} - SMTP_HOST=${SMTP_HOST} - SMTP_PORT=${SMTP_PORT} - SMTP_SECURE=${SMTP_SECURE} - SMTP_USER=${SMTP_USER} - SMTP_PASS=${SMTP_PASS} - EMAIL_FROM=${EMAIL_FROM} - UMAMI_URL=${UMAMI_URL} - UMAMI_WEBSITE_ID=${UMAMI_WEBSITE_ID} volumes: - ./storage:/app/storage - ./data:/app/data - ./logs:/app/logs networks: - photo-sharing frontend: image: photo-sharing-frontend:latest build: context: ./frontend dockerfile: Dockerfile restart: unless-stopped depends_on: - backend networks: - photo-sharing nginx: image: nginx:alpine restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf - ./nginx/sites-enabled:/etc/nginx/sites-enabled - ./certbot/conf:/etc/letsencrypt - ./certbot/www:/var/www/certbot depends_on: - frontend - backend networks: - photo-sharing command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'" certbot: image: certbot/certbot restart: unless-stopped volumes: - ./certbot/conf:/etc/letsencrypt - ./certbot/www:/var/www/certbot entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'" db: image: postgres:14-alpine restart: unless-stopped environment: - POSTGRES_USER=${DB_USER:-photoapp} - POSTGRES_PASSWORD=${DB_PASSWORD} - POSTGRES_DB=${DB_NAME:-photo_sharing} volumes: - postgres_data:/var/lib/postgresql/data networks: - photo-sharing umami: image: ghcr.io/umami-software/umami:postgresql-latest restart: unless-stopped environment: DATABASE_URL: postgresql://${DB_USER:-photoapp}:${DB_PASSWORD}@db:5432/umami DATABASE_TYPE: postgresql HASH_SALT: ${UMAMI_HASH_SALT} depends_on: - db networks: - photo-sharing networks: photo-sharing: driver: bridge volumes: postgres_data: