# Development Docker Compose - Unified local development setup # Start infrastructure: pnpm docker:up # Start all services: pnpm docker:up:all # Stop: pnpm docker:down services: # Shared PostgreSQL Database (multiple databases) postgres: image: postgres:16-alpine container_name: manacore-postgres restart: unless-stopped environment: POSTGRES_DB: manacore POSTGRES_USER: ${POSTGRES_USER:-manacore} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-devpassword} volumes: - postgres-data:/var/lib/postgresql/data - ./docker/init-db:/docker-entrypoint-initdb.d:ro ports: - "5432:5432" networks: - manacore-network healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-manacore}"] interval: 10s timeout: 5s retries: 5 # Redis cache redis: image: redis:7-alpine container_name: manacore-redis restart: unless-stopped command: redis-server --requirepass ${REDIS_PASSWORD:-devpassword} --maxmemory 256mb --maxmemory-policy allkeys-lru volumes: - redis-data:/data ports: - "6379:6379" networks: - manacore-network healthcheck: test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD:-devpassword}", "ping"] interval: 10s timeout: 5s retries: 5 # MinIO Object Storage (S3-compatible) minio: image: minio/minio:latest container_name: manacore-minio restart: unless-stopped command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minioadmin} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minioadmin} volumes: - minio-data:/data ports: - "9000:9000" # S3 API - "9001:9001" # Web Console networks: - manacore-network healthcheck: test: ["CMD", "mc", "ready", "local"] interval: 30s timeout: 20s retries: 3 # MinIO bucket initialization (runs once) minio-init: image: minio/mc:latest container_name: manacore-minio-init depends_on: minio: condition: service_healthy entrypoint: > /bin/sh -c " mc alias set myminio http://minio:9000 $${MINIO_ROOT_USER:-minioadmin} $${MINIO_ROOT_PASSWORD:-minioadmin}; mc mb --ignore-existing myminio/picture-storage; mc mb --ignore-existing myminio/chat-storage; mc mb --ignore-existing myminio/manadeck-storage; mc mb --ignore-existing myminio/nutriphi-storage; mc mb --ignore-existing myminio/presi-storage; mc mb --ignore-existing myminio/calendar-storage; mc mb --ignore-existing myminio/contacts-storage; mc mb --ignore-existing myminio/storage-storage; mc anonymous set download myminio/picture-storage; echo 'Buckets created successfully'; exit 0; " networks: - manacore-network # Mana Core Auth Service mana-core-auth: profiles: ["auth", "all"] build: context: . dockerfile: ./services/mana-core-auth/Dockerfile container_name: manacore-auth restart: unless-stopped environment: NODE_ENV: development PORT: 3001 DATABASE_URL: postgresql://${POSTGRES_USER:-manacore}:${POSTGRES_PASSWORD:-devpassword}@postgres:5432/manacore REDIS_HOST: redis REDIS_PORT: 6379 REDIS_PASSWORD: ${REDIS_PASSWORD:-devpassword} JWT_PUBLIC_KEY: ${JWT_PUBLIC_KEY} JWT_PRIVATE_KEY: ${JWT_PRIVATE_KEY} JWT_ACCESS_TOKEN_EXPIRY: ${JWT_ACCESS_TOKEN_EXPIRY:-15m} JWT_REFRESH_TOKEN_EXPIRY: ${JWT_REFRESH_TOKEN_EXPIRY:-7d} JWT_ISSUER: ${JWT_ISSUER:-manacore} JWT_AUDIENCE: ${JWT_AUDIENCE:-manacore} CORS_ORIGINS: ${CORS_ORIGINS:-http://localhost:3000,http://localhost:5173,http://localhost:8081} CREDITS_SIGNUP_BONUS: ${CREDITS_SIGNUP_BONUS:-150} CREDITS_DAILY_FREE: ${CREDITS_DAILY_FREE:-5} GOOGLE_GENAI_API_KEY: ${GOOGLE_GENAI_API_KEY} depends_on: postgres: condition: service_healthy redis: condition: service_healthy ports: - "3001:3001" networks: - manacore-network # Chat Backend Service chat-backend: profiles: ["chat", "all"] build: context: . dockerfile: ./apps/chat/apps/backend/Dockerfile container_name: chat-backend restart: unless-stopped environment: NODE_ENV: development PORT: 3002 DATABASE_URL: postgresql://${POSTGRES_USER:-manacore}:${POSTGRES_PASSWORD:-devpassword}@postgres:5432/chat DB_HOST: postgres DB_PORT: 5432 DB_USER: ${POSTGRES_USER:-manacore} DB_PASSWORD: ${POSTGRES_PASSWORD:-devpassword} DB_NAME: chat AZURE_OPENAI_ENDPOINT: ${AZURE_OPENAI_ENDPOINT} AZURE_OPENAI_API_KEY: ${AZURE_OPENAI_API_KEY} AZURE_OPENAI_API_VERSION: ${AZURE_OPENAI_API_VERSION:-2024-12-01-preview} MANA_CORE_AUTH_URL: http://mana-core-auth:3001 depends_on: postgres: condition: service_healthy ports: - "3002:3002" networks: - manacore-network networks: manacore-network: driver: bridge volumes: postgres-data: redis-data: minio-data: