# THIS FILE IS AUTO-GENERATED BY generate_envoy_config.py # DO NOT EDIT MANUALLY. # # It contains the service definitions for the camoufox instances # and adds the necessary dependencies to the main services. services: {% for proxy in camoufox_proxies %} {% set container_base_port = camoufox_port + loop.index0 * worker_count %} {% set host_base_port = container_base_port %} camoufox-{{ loop.index }}: build: context: ../camoufox dockerfile: Dockerfile args: VNC_PASSWORD: "{{ vnc_password }}" image: camoufox:latest container_name: ytdlp-ops-camoufox-{{ loop.index }}-1 restart: unless-stopped shm_size: '2gb' # Mitigates browser crashes due to shared memory limitations ports: - "{{ host_base_port }}-{{ host_base_port + worker_count - 1 }}:{{ container_base_port }}-{{ container_base_port + worker_count - 1 }}" environment: - DISPLAY=:99 - MOZ_HEADLESS_STACKSIZE=2097152 - CAMOUFOX_MAX_MEMORY_MB=2048 - CAMOUFOX_MAX_CONCURRENT_CONTEXTS=8 - CAMOUFOX_RESTART_THRESHOLD_MB=1500 volumes: - /tmp/.X11-unix:/tmp/.X11-unix:rw - camoufox-data-{{ loop.index }}:/app/context-data - camoufox-browser-cache:/root/.cache/ms-playwright # Persist browser binaries command: [ "--ws-host", "0.0.0.0", "--port", "{{ container_base_port }}", "--num-instances", "{{ worker_count }}", "--ws-path", "mypath", "--proxy-url", "{{ proxy.url }}", "--headless", "--monitor-resources", "--memory-restart-threshold", "1800", "--preferences", "layers.acceleration.disabled=true,dom.ipc.processCount=2,media.memory_cache_max_size=102400,browser.cache.memory.capacity=102400" ] deploy: resources: limits: memory: 2.5G logging: driver: "json-file" options: max-size: "100m" max-file: "3" networks: - proxynet {% endfor %} {% if camoufox_proxies %} # This service is a dependency anchor. The main services depend on it, # and it in turn depends on all camoufox instances. camoufox-group: image: alpine:latest command: ["echo", "Camoufox group ready."] restart: "no" depends_on: {% for proxy in camoufox_proxies %} - camoufox-{{ loop.index }} {% endfor %} networks: - proxynet {% endif %} volumes: {% for proxy in camoufox_proxies %} camoufox-data-{{ loop.index }}: {% endfor %} {% if camoufox_proxies %} camoufox-browser-cache: {% endif %} networks: proxynet: name: airflow_proxynet external: true