version: '3.8' services: # PostgreSQL 16 postgres: image: postgres:16-alpine environment: POSTGRES_USER: evermore POSTGRES_PASSWORD: evermore_dev POSTGRES_DB: evermore ports: - '5432:5432' volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ['CMD-SHELL', 'pg_isready -U evermore'] interval: 5s timeout: 5s retries: 5 # Redis 7 redis: image: redis:7-alpine ports: - '6379:6379' healthcheck: test: ['CMD', 'redis-cli', 'ping'] interval: 5s timeout: 5s retries: 5 # OpenSearch 2.x opensearch: image: opensearchproject/opensearch:2.11.0 environment: discovery.type: single-node DISABLE_SECURITY_PLUGIN: 'true' OPENSEARCH_JAVA_OPTS: '-Xms512m -Xmx512m' ports: - '9200:9200' volumes: - osdata:/usr/share/opensearch/data healthcheck: test: ['CMD-SHELL', 'curl -s http://localhost:9200/_cluster/health | grep -q "green\|yellow"'] interval: 10s timeout: 10s retries: 10 # Client Portal (Next.js) client: build: context: . dockerfile: apps/client/Dockerfile target: dev ports: - '3000:3000' volumes: - ./apps/client:/app/apps/client - ./packages:/app/packages environment: DATABASE_URL: postgresql://evermore:evermore_dev@postgres:5432/evermore REDIS_URL: redis://redis:6379 OPENSEARCH_URL: http://opensearch:9200 depends_on: postgres: condition: service_healthy redis: condition: service_healthy # Vendor Portal (Next.js) vendor: build: context: . dockerfile: apps/vendor/Dockerfile target: dev ports: - '3001:3001' volumes: - ./apps/vendor:/app/apps/vendor - ./packages:/app/packages environment: DATABASE_URL: postgresql://evermore:evermore_dev@postgres:5432/evermore REDIS_URL: redis://redis:6379 OPENSEARCH_URL: http://opensearch:9200 depends_on: postgres: condition: service_healthy # Admin Portal (Next.js) admin: build: context: . dockerfile: apps/admin/Dockerfile target: dev ports: - '3002:3002' volumes: - ./apps/admin:/app/apps/admin - ./packages:/app/packages environment: DATABASE_URL: postgresql://evermore:evermore_dev@postgres:5432/evermore REDIS_URL: redis://redis:6379 depends_on: postgres: condition: service_healthy # BullMQ Worker worker: build: context: . dockerfile: apps/worker/Dockerfile environment: DATABASE_URL: postgresql://evermore:evermore_dev@postgres:5432/evermore REDIS_URL: redis://redis:6379 OPENSEARCH_URL: http://opensearch:9200 depends_on: postgres: condition: service_healthy redis: condition: service_healthy opensearch: condition: service_healthy volumes: pgdata: osdata: