# 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 proxy_port = _get_port_from_proxy_url(proxy.url) | int %} {% set container_base_port = camoufox_port + loop.index0 * worker_count %} {% set host_base_port = container_base_port %} camoufox-{{ proxy_port }}-{{ loop.index }}: build: context: ../camoufox dockerfile: Dockerfile args: VNC_PASSWORD: "{{ vnc_password }}" image: camoufox:latest container_name: ytdlp-ops-camoufox-{{ proxy_port }}-{{ 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-{{ proxy_port }}-{{ 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 %} volumes: {% for proxy in camoufox_proxies %} {% set proxy_port = _get_port_from_proxy_url(proxy.url) | int %} camoufox-data-{{ proxy_port }}-{{ loop.index }}: {% endfor %} {% if camoufox_proxies %} camoufox-browser-cache: {% endif %} networks: proxynet: name: airflow_proxynet external: true