# GitDataAI Docker Compose # Full stack deployment configuration services: # PostgreSQL Database postgres: image: postgres:16-alpine container_name: gitdata-postgres environment: POSTGRES_USER: ${POSTGRES_USER:-gitdata} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-gitdata123} POSTGRES_DB: ${POSTGRES_DB:-app} volumes: - postgres_data:/var/lib/postgresql/data ports: - "5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-gitdata}"] interval: 10s timeout: 5s retries: 5 restart: unless-stopped # Redis Cluster redis: image: redis:7-alpine container_name: gitdata-redis ports: - "6379:6379" volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 restart: unless-stopped # Qdrant Vector Database qdrant: image: qdrant/qdrant:latest container_name: gitdata-qdrant ports: - "6333:6333" volumes: - qdrant_data:/qdrant/storage restart: unless-stopped # NATS Message Queue nats: image: nats:alpine container_name: gitdata-nats ports: - "4222:4222" - "8222:8222" command: "--jetstream" restart: unless-stopped # MinIO S3 Storage minio: image: minio/minio:latest container_name: gitdata-minio command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER:-admin} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-mysecret123} ports: - "9000:9000" - "9001:9001" volumes: - minio_data:/data restart: unless-stopped # Database Migration migrate: build: context: .. dockerfile: docker/migrate.Dockerfile container_name: gitdata-migrate environment: DATABASE_URL: postgres://${POSTGRES_USER:-gitdata}:${POSTGRES_PASSWORD:-gitdata123}@postgres:5432/${POSTGRES_DB:-app} depends_on: postgres: condition: service_healthy restart: "no" # GitData Main API Service gitdata: build: context: .. dockerfile: docker/gitdata.Dockerfile container_name: gitdata-api environment: APP_DATABASE_URL: postgres://${POSTGRES_USER:-gitdata}:${POSTGRES_PASSWORD:-gitdata123}@postgres:5432/${POSTGRES_DB:-app} APP_REDIS_URLS: redis://redis:6379 APP_QDRANT_URL: http://qdrant:6333/ NATS_URL: nats://nats:4222 APP_STORAGE_S3_ENDPOINT_URL: http://minio:9000 APP_STORAGE_S3_ACCESS_KEY_ID: ${MINIO_ROOT_USER:-admin} APP_STORAGE_S3_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD:-mysecret123} ports: - "8080:8080" - "5023:5023" - "5030:5030" - "5022:5022" volumes: - gitdata_repos:/app/data/repos - gitdata_files:/app/data/files - gitdata_avatar:/app/data/avatar depends_on: postgres: condition: service_healthy redis: condition: service_healthy qdrant: condition: service_started nats: condition: service_started minio: condition: service_started migrate: condition: service_completed_successfully restart: unless-stopped # Email Service email: build: context: .. dockerfile: docker/email.Dockerfile container_name: gitdata-email environment: APP_DATABASE_URL: postgres://${POSTGRES_USER:-gitdata}:${POSTGRES_PASSWORD:-gitdata123}@postgres:5432/${POSTGRES_DB:-app} APP_REDIS_URLS: redis://redis:6379 NATS_URL: nats://nats:4222 depends_on: postgres: condition: service_healthy redis: condition: service_healthy nats: condition: service_started restart: unless-stopped # GitPod Service gitpod: build: context: .. dockerfile: docker/gitpod.Dockerfile container_name: gitdata-gitpod environment: APP_DATABASE_URL: postgres://${POSTGRES_USER:-gitdata}:${POSTGRES_PASSWORD:-gitdata123}@postgres:5432/${POSTGRES_DB:-app} APP_REDIS_URLS: redis://redis:6379 ports: - "5082:5082" volumes: - gitdata_repos:/app/data/repos depends_on: postgres: condition: service_healthy redis: condition: service_healthy restart: unless-stopped # GitSync Service gitsync: build: context: .. dockerfile: docker/gitsync.Dockerfile container_name: gitdata-gitsync environment: APP_DATABASE_URL: postgres://${POSTGRES_USER:-gitdata}:${POSTGRES_PASSWORD:-gitdata123}@postgres:5432/${POSTGRES_DB:-app} APP_REDIS_URLS: redis://redis:6379 ports: - "5083:5083" volumes: - gitdata_repos:/app/data/repos depends_on: postgres: condition: service_healthy redis: condition: service_healthy restart: unless-stopped # Web Frontend web: build: context: .. dockerfile: docker/web.Dockerfile container_name: gitdata-web ports: - "80:80" depends_on: - gitdata restart: unless-stopped volumes: postgres_data: redis_data: qdrant_data: minio_data: gitdata_repos: gitdata_files: gitdata_avatar: