version: '3.8' services: postgres: image: postgres:17-alpine container_name: smokesignal_postgres environment: POSTGRES_DB: smokesignal_dev POSTGRES_USER: smokesignal POSTGRES_PASSWORD: smokesignal_dev_password POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C" ports: - "5436:5432" # Using 5433 to avoid conflicts with system PostgreSQL volumes: - postgres_data:/var/lib/postgresql/data - ./init-db.sql:/docker-entrypoint-initdb.d/init-db.sql:ro healthcheck: test: ["CMD-SHELL", "pg_isready -U smokesignal -d smokesignal_dev"] interval: 5s timeout: 5s retries: 5 restart: unless-stopped minio: image: minio/minio:latest container_name: smokesignal_minio command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: smokesignal_minio MINIO_ROOT_PASSWORD: smokesignal_dev_secret ports: - "9000:9000" # MinIO API - "9001:9001" # MinIO Console volumes: - minio_data:/data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 restart: unless-stopped createbuckets: image: minio/mc depends_on: - minio entrypoint: > /bin/sh -c " /usr/bin/mc mc alias set local http://localhost:9000 smokesignal_minio smokesignal_dev_secret; /usr/bin/mc mb myminio/smokesignal-badges; /usr/bin/mc policy set public myminio/smokesignal-badges; exit 0; " redis: image: redis:7-alpine container_name: smokesignal_redis ports: - "6379:6379" volumes: - redis_data:/data command: redis-server --appendonly yes healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 5 restart: unless-stopped volumes: minio_data: driver: local postgres_data: driver: local pgadmin_data: driver: local redis_data: driver: local networks: default: name: smokesignal_network