services: # ── PostgreSQL Database ────────────────────────────────── postgres: image: postgres:16-alpine container_name: selixes-postgres restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER:-selixes} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-selixespassword} POSTGRES_DB: ${POSTGRES_DB:-selixes_gateway} ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-selixes}"] interval: 5s timeout: 5s retries: 5 # ── Redis Cache ────────────────────────────────────────── redis: image: redis:7-alpine container_name: selixes-redis restart: unless-stopped ports: - "6379:6379" volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 5s retries: 5 # ── Selixes API Engine ─────────────────────────────────── api: build: context: . dockerfile: apps/api/Dockerfile container_name: selixes-api restart: unless-stopped env_file: - path: .env required: false environment: - DATABASE_URL=postgresql://${POSTGRES_USER:-selixes}:${POSTGRES_PASSWORD:-selixespassword}@postgres:5432/${POSTGRES_DB:-selixes_gateway}?schema=public - REDIS_HOST=redis - REDIS_PORT=6379 ports: - "4000:4000" depends_on: postgres: condition: service_healthy redis: condition: service_healthy # ── Selixes Web Dashboard ──────────────────────────────── web: build: context: . dockerfile: apps/web/Dockerfile args: NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY: ${NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY:-} NEXT_PUBLIC_API_URL: ${API_URL:-http://localhost:4000} NEXT_PUBLIC_GA_ID: ${NEXT_PUBLIC_GA_ID:-G-W88N8C3JG5} NEXT_PUBLIC_GOOGLE_SITE_VERIFICATION: ${NEXT_PUBLIC_GOOGLE_SITE_VERIFICATION:-} NEXT_PUBLIC_META_PIXEL_ID: ${NEXT_PUBLIC_META_PIXEL_ID:-} NEXT_PUBLIC_PLAUSIBLE_DOMAIN: ${NEXT_PUBLIC_PLAUSIBLE_DOMAIN:-selixes.com} container_name: selixes-web restart: unless-stopped env_file: - path: .env required: false environment: - NEXT_PUBLIC_API_URL=${API_URL:-http://localhost:4000} - NEXT_PUBLIC_GA_ID=${NEXT_PUBLIC_GA_ID:-G-W88N8C3JG5} ports: - "3000:3000" depends_on: api: condition: service_started volumes: postgres_data: redis_data: