services: postgres: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_USER: futurework POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-futurework_dev_2024} POSTGRES_DB: future_work ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U futurework -d future_work"] interval: 5s timeout: 5s retries: 20 api: build: context: . dockerfile: workmesh-business/server/Dockerfile restart: unless-stopped environment: DATABASE_URL: postgresql://futurework:${POSTGRES_PASSWORD:-futurework_dev_2024}@postgres:5432/future_work?schema=public JWT_SECRET: ${JWT_SECRET:-replace-this-before-public-deployment} PORT: 3001 DEMO_ALLOW_ALL_ORIGINS: ${DEMO_ALLOW_ALL_ORIGINS:-true} PERSONAL_REGISTRATION_API_KEY: ${PERSONAL_REGISTRATION_API_KEY:-personal-register-api-2026} ENTERPRISE_REGISTRATION_API_KEY: ${ENTERPRISE_REGISTRATION_API_KEY:-enterprise-register-api-2026} ports: - "3001:3001" healthcheck: test: ["CMD-SHELL", "node -e \"fetch('http://localhost:3001/api/v1/health').then(r => process.exit(r.ok ? 0 : 1)).catch(() => process.exit(1))\""] interval: 10s timeout: 5s retries: 20 depends_on: postgres: condition: service_healthy enterprise: build: context: . dockerfile: workmesh-business/Dockerfile restart: unless-stopped ports: - "3000:80" personal: build: context: . dockerfile: workmesh-app/portal/Dockerfile restart: unless-stopped ports: - "5173:80" personal-mobile: build: context: . dockerfile: workmesh-app/app/Dockerfile restart: unless-stopped ports: - "5174:80" governance: build: context: . dockerfile: workmesh-governance/Dockerfile restart: unless-stopped ports: - "8000:80" volumes: postgres_data: