yt-dlp-dags/airflow/configs/docker-compose.camoufox.yaml.j2

83 lines
2.5 KiB
Django/Jinja

# 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