version: '3.8' # NOTE: This setup uses Neon PostgreSQL database # Setup Neon database URL in .env.local file # See infra/databases/neon/README.md for setup instructions services: redis: image: redis:7-alpine container_name: redis-cache-local command: redis-server /etc/redis/redis.conf ports: - "6379:6379" volumes: - redis_data:/data - ../../infra/databases/redis/redis.conf:/etc/redis/redis.conf healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 5 networks: - microservices-network auth-service: build: context: ../.. dockerfile: services/auth-service/Dockerfile container_name: auth-service-local env_file: - .env.local environment: - NODE_ENV=development - PORT=5001 # DATABASE_URL should be set in .env.local (Neon database URL) - REDIS_HOST=redis - REDIS_PORT=6379 - JWT_SECRET=${JWT_SECRET:-dev-jwt-secret-change-in-production} - JWT_EXPIRES_IN=15m - JWT_REFRESH_SECRET=${JWT_REFRESH_SECRET:-dev-refresh-secret-change-in-production} - JWT_REFRESH_EXPIRES_IN=7d - CORS_ORIGIN=http://localhost:3000,http://localhost:3001 - LOG_LEVEL=debug - SERVICE_NAME=auth-service ports: - "5001:5001" depends_on: redis: condition: service_healthy networks: - microservices-network web-admin: build: context: ../.. dockerfile: apps/web-admin/Dockerfile container_name: web-admin-local environment: - NODE_ENV=development - NEXT_PUBLIC_API_URL=http://localhost/api/v1 ports: - "3000:3000" depends_on: - auth-service networks: - microservices-network labels: - "traefik.enable=true" - "traefik.http.routers.web-admin.rule=Host(`admin.localhost`)" - "traefik.http.routers.web-admin.entrypoints=web" - "traefik.http.services.web-admin.loadbalancer.server.port=3000" web-client: build: context: ../.. dockerfile: apps/web-client/Dockerfile container_name: web-client-local environment: - NODE_ENV=development - NEXT_PUBLIC_API_URL=http://localhost/api/v1 ports: - "3001:3000" depends_on: - auth-service networks: - microservices-network labels: - "traefik.enable=true" - "traefik.http.routers.web-client.rule=Host(`localhost`)" - "traefik.http.routers.web-client.entrypoints=web" - "traefik.http.services.web-client.loadbalancer.server.port=3000" traefik: image: traefik:v2.10 container_name: traefik-local command: - "--api.insecure=true" - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" - "--log.level=INFO" ports: - "80:80" - "8080:8080" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - ../../infra/traefik:/etc/traefik networks: - microservices-network labels: - "traefik.enable=true" - "traefik.http.routers.traefik.rule=Host(`traefik.localhost`)" - "traefik.http.routers.traefik.entrypoints=web" volumes: redis_data: networks: microservices-network: driver: bridge