services: 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: 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: image: qdrant/qdrant:latest container_name: gitdata-qdrant ports: - "6333:6333" volumes: - qdrant_data:/qdrant/storage restart: unless-stopped nats: image: nats:alpine container_name: gitdata-nats ports: - "4222:4222" - "8222:8222" command: "--jetstream" restart: unless-stopped 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 gitdata: image: ${IMAGE_REGISTRY:-harbor.gitdata.me/app/}gitdata-gitdata:${IMAGE_TAG:-latest} 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} APP_STORAGE_S3_BUCKET: ${APP_STORAGE_S3_BUCKET:-gitdata} APP_SESSION_SECRET: ${APP_SESSION_SECRET:-supersecretdevkey123} APP_GIT_RPC_ADDR: gitpod APP_GIT_RPC_PORT: "50051" ports: - "8080:8080" 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 restart: unless-stopped email: image: ${IMAGE_REGISTRY:-harbor.gitdata.me/app/}gitdata-email:${IMAGE_TAG:-latest} 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 APP_SMTP_HOST: ${APP_SMTP_HOST:-mailhog} APP_SMTP_PORT: ${APP_SMTP_PORT:-1025} APP_SMTP_USERNAME: ${APP_SMTP_USERNAME:-dev} APP_SMTP_PASSWORD: ${APP_SMTP_PASSWORD:-dev} APP_SMTP_FROM: ${APP_SMTP_FROM:-Gitdata } depends_on: postgres: condition: service_healthy redis: condition: service_healthy nats: condition: service_started restart: unless-stopped gitpod: image: ${IMAGE_REGISTRY:-harbor.gitdata.me/app/}gitdata-gitpod:${IMAGE_TAG:-latest} 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 APP_GIT_HTTP_PORT: "8080" APP_GIT_RPC_PORT: "50051" APP_SSH_PORT: "2222" ports: - "2222:2222" - "8081:8080" - "50051:50051" volumes: - gitdata_repos:/app/data/repos depends_on: postgres: condition: service_healthy redis: condition: service_healthy restart: unless-stopped gitsync: image: ${IMAGE_REGISTRY:-harbor.gitdata.me/app/}gitdata-gitsync:${IMAGE_TAG:-latest} 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 APP_GITSYNC_HEALTH_PORT: "8081" ports: - "8082:8081" volumes: - gitdata_repos:/app/data/repos depends_on: postgres: condition: service_healthy redis: condition: service_healthy restart: unless-stopped web: image: ${IMAGE_REGISTRY:-harbor.gitdata.me/app/}gitdata-web:${IMAGE_TAG:-latest} 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: