yt-dlp-dags/docker-compose-ytdlp-ops.yaml
2025-08-06 18:02:44 +03:00

128 lines
4.5 KiB
YAML

services:
config-generator:
image: python:3.9-slim
container_name: ytdlp-ops-config-generator
working_dir: /app
volumes:
# Mount the current directory to access the template, .env, and script
- .:/app
env_file:
- ./.env
environment:
ENVOY_CLUSTER_TYPE: STRICT_DNS
# Pass worker count and base port to ensure Envoy config matches the workers
YTDLP_WORKERS: ${YTDLP_WORKERS:-3}
YTDLP_BASE_PORT: ${YTDLP_BASE_PORT:-9090}
# This command cleans up old runs, installs jinja2, and generates the config.
command: >
sh -c "rm -rf ./envoy.yaml &&
pip install --no-cache-dir -q jinja2 &&
python3 ./generate_envoy_config.py"
envoy:
image: envoyproxy/envoy:v1.29-latest
container_name: envoy-thrift-lb
restart: unless-stopped
volumes:
# Mount the generated config file from the host
- ./envoy.yaml:/etc/envoy/envoy.yaml:ro
ports:
# This is the single public port for all Thrift traffic
- "${ENVOY_PORT:-9080}:${ENVOY_PORT:-9080}"
networks:
- airflow_prod_proxynet
depends_on:
config-generator:
condition: service_completed_successfully
ytdlp-ops:
condition: service_started
camoufox:
build:
context: ./camoufox # Path relative to the docker-compose file
dockerfile: Dockerfile
args:
VNC_PASSWORD: ${VNC_PASSWORD:-supersecret} # Use environment variable or default
ports:
# Optionally expose the camoufox port to the host for debugging
- "12345:12345"
- "5900:5900" # Expose VNC port to the host
networks:
- airflow_prod_proxynet
command: [
"--ws-host", "0.0.0.0",
"--port", "12345",
"--ws-path", "mypath",
"--proxy-url", "socks5://${SOCKS5_SOCK_SERVER_IP:-89.253.221.173}:1084",
"--locale", "en-US",
"--extensions", "/app/extensions/google_sign_in_popup_blocker-1.0.2.xpi,/app/extensions/spoof_timezone-0.3.4.xpi,/app/extensions/youtube_ad_auto_skipper-0.6.0.xpi"
]
restart: unless-stopped
# Add healthcheck if desired
ytdlp-ops:
image: pangramia/ytdlp-ops-server:latest # Don't comment out or remove, build is performed externally
container_name: ytdlp-ops-workers # Renamed for clarity
depends_on:
- camoufox # Ensure camoufox starts first
# Ports are no longer exposed directly. Envoy will connect to them on the internal network.
env_file:
- ./.env # Path is relative to the compose file
volumes:
- context-data:/app/context-data
# Mount the plugin source code for live updates without rebuilding the image.
# Assumes the plugin source is in a 'bgutil-ytdlp-pot-provider' directory
# next to your docker-compose.yaml file.
#- ./bgutil-ytdlp-pot-provider:/app/bgutil-ytdlp-pot-provider
networks:
- airflow_prod_proxynet
command:
- "--script-dir"
- "/app"
- "--context-dir"
- "/app/context-data"
# Use environment variables for port and worker count
- "--port"
- "${YTDLP_BASE_PORT:-9090}"
- "--workers"
- "${YTDLP_WORKERS:-3}"
- "--clients"
- "web,ios,android,mweb"
- "--proxies"
#- "socks5://sslocal-rust-1081:1081,socks5://sslocal-rust-1082:1082,socks5://sslocal-rust-1083:1083,socks5://sslocal-rust-1084:1084,socks5://sslocal-rust-1085:1085"
- "socks5://${SOCKS5_SOCK_SERVER_IP:-89.253.221.173}:1084"
#
# Add the endpoint argument pointing to the camoufox service
- "--endpoint"
- "ws://camoufox:12345/mypath"
- "--probe"
# Add --camouflage-only if you don't want ytdlp-ops to manage the browser directly
- "--camouflage-only"
# Add flag to print full tokens in logs by default
- "--print-tokens"
# Add server identity and Redis connection details
- "--server-identity"
- "ytdlp-ops-airflow-service"
- "--redis-host"
- "${REDIS_HOST:-redis}"
- "--redis-port"
- "${REDIS_PORT:-6379}"
- "--redis-password"
- "${REDIS_PASSWORD}"
# Add account cooldown parameters (values are in minutes)
- "--account-active-duration-min"
- "${ACCOUNT_ACTIVE_DURATION_MIN:-30}"
- "--account-cooldown-duration-min"
- "${ACCOUNT_COOLDOWN_DURATION_MIN:-60}"
# Add flag to clean context directory on start
- "--clean-context-dir"
restart: unless-stopped
pull_policy: always
volumes:
context-data:
name: context-data
networks:
airflow_prod_proxynet: {}