services: # Redis service. simplecad_redis: image: redis:7-alpine container_name: simplecad_redis restart: unless-stopped ports: - "9736:9736" volumes: - simplecad_redis_data:/data/simplecad_redis - ./redis.conf:/usr/local/etc/redis/redis.conf:ro command: redis-server /usr/local/etc/redis/redis.conf networks: - simplecad_network healthcheck: test: ["CMD", "redis-cli", "-p", "9736", "ping"] interval: 10s timeout: 5s retries: 5 # API service. simplecad_api: build: context: .. dockerfile: docker/Dockerfile platform: linux/amd64 container_name: simplecad_api restart: unless-stopped ports: - "8000:8000" env_file: - ${CADDESIGNER_DOCKER_ENV_FILE:-.env} environment: - REDIS_HOST=simplecad_redis - REDIS_PORT=9736 - REDIS_DB=0 - LOG_LEVEL=WARNING volumes: - app_data:/app/data - app_logs:/app/logs - app_workspace:/app/workspace - ./provider.json:/app/config/provider.json:ro depends_on: simplecad_redis: condition: service_healthy command: ["python", "start_caddesigner_api.py", "--host", "0.0.0.0", "--port", "8000", "--working-dir", "/app/workspace"] networks: - simplecad_network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/health"] interval: 15s timeout: 5s retries: 5 start_period: 40s # Linux compatibility: allow the container to resolve the host machine domain. extra_hosts: - "host.docker.internal:host-gateway" # React Web UI service. simplecad_webui: build: context: .. dockerfile: docker/Dockerfile.frontend container_name: simplecad_webui restart: unless-stopped ports: - "7860:7860" environment: - CADDESIGNER_API_PROXY_TARGET=http://simplecad_api:8000 depends_on: simplecad_api: condition: service_healthy networks: - simplecad_network volumes: simplecad_redis_data: driver: local app_data: driver: local app_logs: driver: local app_workspace: driver: local networks: simplecad_network: driver: bridge