version: '3.8' services: postgres: image: postgres:18 environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} volumes: - postgres_data:/var/lib/postgresql/data - ./migrations:/docker-entrypoint-initdb.d:ro healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] interval: 5s timeout: 5s retries: 5 ports: - "5432:5432" redis: image: redis:8 ports: - "6379:6379" healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 5s retries: 5 minio: image: minio/minio:latest environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD} volumes: - minio_data:/data command: server /data --console-address ":9001" ports: - "9000:9000" - "9001:9001" healthcheck: test: ["CMD", "mc", "ready", "local"] interval: 5s timeout: 5s retries: 5 minio-init: image: minio/mc:latest depends_on: minio: condition: service_healthy entrypoint: > /bin/sh -c " /usr/bin/mc alias set myminio http://minio:9000 ${MINIO_ROOT_USER} ${MINIO_ROOT_PASSWORD} && /usr/bin/mc mb myminio/${MINIO_BUCKET:-media} --ignore-existing && /usr/bin/mc anonymous set public myminio/${MINIO_BUCKET:-media} " backend: build: context: ./backend dockerfile: Containerfile environment: - DATABASE_URL=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB} - REDIS_URL=${REDIS_URL:-redis://redis:6379} - MINIO_ENDPOINT=${MINIO_ENDPOINT:-http://minio:9000} - MINIO_ROOT_USER=${MINIO_ROOT_USER} - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD} - MINIO_BUCKET=${MINIO_BUCKET:-media} - JWT_SECRET=${JWT_SECRET:-changeme} ports: - "8080:8080" depends_on: postgres: condition: service_healthy redis: condition: service_healthy minio: condition: service_healthy web: build: context: ./web dockerfile: Containerfile environment: - BACKEND_URL=${BACKEND_URL:-http://backend:8080} ports: - "3000:3000" depends_on: - backend caddy: image: caddy:latest ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile - caddy_data:/data - caddy_config:/config depends_on: - backend - web volumes: postgres_data: minio_data: caddy_data: caddy_config: