# 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