# docker-compose.yml version: '3.8' # Define all services that make up Aurganize services: # PostgreSQL 14 - Primary database postgres: image: postgres:14-alpine container_name: aurganize-postgres restart: always environment: # Superuser credentials (for initialization only) POSTGRES_USER: postgres POSTGRES_PASSWORD: "dev_pass_aurganize@v6.2" POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --lc-collate=en_US.UTF-8 --lc-ctype=en_US.UTF-8" ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data - ./init-scripts:/docker-entrypoint-initdb.d healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s timeout: 5s retries: 5 networks: - aurganize-network # Redis 7 - Caching and session storage redis: image: redis:7-alpine container_name: aurganize-redis restart: unless-stopped command: redis-server --appendonly yes ports: - "6379:6379" volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 networks: - aurganize-network # NATS with JetStream - Event bus nats: image: nats:latest container_name: aurganize-nats restart: unless-stopped command: ["-js", "-m", "8222"] ports: - "4222:4222" # Client connections - "8222:8222" # HTTP monitoring volumes: - nats_data:/data healthcheck: test: ["CMD", "wget", "--spider", "-q", "http://localhost:8222/healthz"] interval: 10s timeout: 5s retries: 5 networks: - aurganize-network # MinIO - S3-compatible object storage minio: image: minio/minio:latest container_name: aurganize-minio restart: unless-stopped command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin ports: - "9000:9000" # API - "9001:9001" # Web Console volumes: - minio_data:/data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 10s timeout: 5s retries: 5 networks: - aurganize-network # Backend - Go API server backend: build: context: ./../../backend dockerfile: Dockerfile.dev container_name: aurganize-backend restart: unless-stopped environment: # Application config ENV: development PORT: 8080 # Database connection DB_HOST: postgres DB_PORT: 5432 DB_USER: aurganize DB_PASSWORD: dev_password_change_in_prod DB_NAME: aurganize DB_SSL_MODE: disable # Redis connection REDIS_HOST: redis REDIS_PORT: 6379 REDIS_PASSWORD: "" # NATS connection NATS_URL: nats://nats:4222 # MinIO connection MINIO_ENDPOINT: minio:9000 MINIO_ACCESS_KEY: minioadmin MINIO_SECRET_KEY: minioadmin MINIO_USE_SSL: false # JWT secrets (development only) JWT_SECRET: dev-secret-change-in-production # CORS settings CORS_ORIGINS: http://localhost:3000 ports: - "8080:8080" volumes: # Mount source code for hot reload - ./backend:/app # Exclude node_modules and vendor - /app/vendor - /app/bin depends_on: postgres: condition: service_healthy redis: condition: service_healthy nats: condition: service_healthy minio: condition: service_healthy healthcheck: test: ["CMD", "wget", "--spider", "-q", "http://localhost:8080/health"] interval: 10s timeout: 5s retries: 5 networks: - aurganize-network # Frontend - React application # TODO # Named volumes for data persistence volumes: postgres_data: driver: local redis_data: driver: local nats_data: driver: local minio_data: driver: local # Custom network for service isolation networks: aurganize-network: driver: bridge