version: "3.8" services: db: image: postgres:16-alpine environment: POSTGRES_USER: wit POSTGRES_PASSWORD: wit POSTGRES_DB: wit ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U wit"] interval: 5s timeout: 5s retries: 5 networks: - wit-network # Redis for rate limiting and caching redis: image: redis:7-alpine container_name: wit-redis ports: - "6379:6379" volumes: - redis_data:/data command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru restart: unless-stopped healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 networks: - wit-network server: build: . ports: - "3000:3000" environment: DATABASE_URL: postgresql://wit:wit@db:5432/wit REDIS_URL: redis://redis:6379 PORT: 3000 HOST: 0.0.0.0 REPOS_PATH: /repos NODE_ENV: production # Docker sandbox support (users can also configure E2B or Daytona per-repo) DOCKER_SOCKET_PATH: /var/run/docker.sock volumes: - repos_data:/repos # Mount Docker socket for sandbox functionality - /var/run/docker.sock:/var/run/docker.sock depends_on: db: condition: service_healthy redis: condition: service_healthy networks: - wit-network # Web UI web: build: context: . dockerfile: apps/web/Dockerfile ports: - "5173:3000" environment: VITE_API_URL: http://server:3000 depends_on: - server networks: - wit-network # Admin Portal admin: build: context: . dockerfile: apps/admin/Dockerfile ports: - "3001:3001" environment: VITE_API_URL: http://server:3000 VITE_WEB_URL: http://web:3000 depends_on: - server networks: - wit-network # Redis Commander for debugging (optional, development only) redis-commander: image: rediscommander/redis-commander:latest container_name: wit-redis-commander environment: - REDIS_HOSTS=local:redis:6379 ports: - "8081:8081" depends_on: redis: condition: service_healthy profiles: - dev networks: - wit-network volumes: postgres_data: redis_data: repos_data: networks: wit-network: driver: bridge