services: client: container_name: client hostname: client build: context: . dockerfile: Dockerfile.client env_file: - ./.env environment: - PRODUCTION=${PRODUCTION:-false} ports: - "3456:3000" restart: no volumes: - ./tests:/tests:ro - ./server:/server:ro # So the frontend can read the OpenAPI spec - ./client:/client:rw - ./dev-keys:/keys:ro # So the frontend entrypoint can check for SSL files - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro networks: - ai-voicebot-net python-3.12: container_name: python-3.12 hostname: python-3.12 build: context: . dockerfile: Dockerfile.python-3.12 restart: no volumes: - ./build:/build:rw server: container_name: server hostname: server build: context: . dockerfile: Dockerfile.server env_file: - ./.env environment: - PRODUCTION=${PRODUCTION:-false} - PYTHONPATH=/:/server restart: always ports: - "8001:8000" volumes: - ./tests:/tests:ro - ./shared:/shared:ro - ./server:/server:rw - ./server/.venv:/server/.venv:rw - ./server/entrypoint.sh:/entrypoint.sh:ro - ./client/build:/client/build:ro - ./dev-keys:/keys:ro - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro networks: - ai-voicebot-net voicebot: container_name: voicebot hostname: voicebot build: context: . dockerfile: Dockerfile.voicebot env_file: - ./.env environment: - PRODUCTION=${PRODUCTION:-false} - VOICEBOT_MODE=provider restart: unless-stopped devices: - /dev/dri:/dev/dri # For hardware video encoding/decoding (if supported) volumes: - ./tests:/tests:ro - ./cache:/root/.cache:rw - ./shared:/shared:ro - ./voicebot:/voicebot:rw - ./voicebot/.venv:/voicebot/.venv:rw - ./voicebot/entrypoint.sh:/entrypoint.sh:ro - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro # network_mode: host networks: - ai-voicebot-net networks: ai-voicebot-net: driver: bridge