Files
docker-stacks/stacks/invidious/docker-compose.yml
knight 9f61b06592 Update invidious stack to use companion approach
- Replace inv_sig_helper with invidious-companion for better YouTube API handling
- Add healthcheck for main container
- Add resource limits for all containers
- Add SQL init scripts for fresh database setup
- Update README with invidious secrets documentation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 12:52:19 -05:00

111 lines
3.0 KiB
YAML

services:
invidious:
image: quay.io/invidious/invidious:latest
container_name: invidious
restart: unless-stopped
environment:
INVIDIOUS_CONFIG: |
db:
dbname: invidious
user: kemal
password: ${INVIDIOUS_DB_PASSWORD}
host: invidious-db
port: 5432
check_tables: true
invidious_companion:
- private_url: "http://invidious-companion:8282/companion"
public_url: "https://inv.${DOMAIN}"
invidious_companion_key: "${INVIDIOUS_COMPANION_KEY}"
external_port: 443
domain: inv.${DOMAIN}
https_only: true
hmac_key: "${INVIDIOUS_HMAC_KEY}"
hsts: false
log_level: Info
healthcheck:
test: wget -nv --tries=1 --spider http://127.0.0.1:3000/api/v1/trending || exit 1
interval: 30s
timeout: 5s
retries: 2
logging:
options:
max-size: "1G"
max-file: "4"
depends_on:
- invidious-db
deploy:
resources:
limits:
cpus: '1'
memory: 2G
labels:
- "traefik.enable=true"
- "traefik.http.services.invidious.loadbalancer.server.port=3000"
- "traefik.http.routers.invidious.entrypoints=https"
- "traefik.http.routers.invidious.rule=Host(`inv.${DOMAIN}`)"
- "traefik.http.routers.invidious.tls.certresolver=http"
networks:
- web
- default
invidious-companion:
image: quay.io/invidious/invidious-companion:latest
container_name: invidious-companion
restart: unless-stopped
environment:
- SERVER_SECRET_KEY=${INVIDIOUS_COMPANION_KEY}
- SERVER_BASE_URL=https://inv.${DOMAIN}/companion
logging:
options:
max-size: "1G"
max-file: "4"
cap_drop:
- ALL
read_only: true
volumes:
- companion-cache:/var/tmp/youtubei.js:rw
security_opt:
- no-new-privileges:true
deploy:
resources:
limits:
cpus: '0.5'
memory: 1G
labels:
- "traefik.enable=true"
- "traefik.http.services.invidious-companion.loadbalancer.server.port=8282"
- "traefik.http.routers.invidious-companion.entrypoints=https"
- "traefik.http.routers.invidious-companion.rule=Host(`inv.${DOMAIN}`) && PathPrefix(`/companion`)"
- "traefik.http.routers.invidious-companion.tls.certresolver=http"
networks:
- web
- default
invidious-db:
image: postgres:14
container_name: invidious-db
restart: unless-stopped
volumes:
- postgres-data:/var/lib/postgresql/data
- ./config/sql:/config/sql
- ./docker/init-invidious-db.sh:/docker-entrypoint-initdb.d/init-invidious-db.sh
environment:
POSTGRES_DB: invidious
POSTGRES_USER: kemal
POSTGRES_PASSWORD: ${INVIDIOUS_DB_PASSWORD}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
deploy:
resources:
limits:
cpus: '0.5'
memory: 1G
volumes:
postgres-data:
companion-cache:
networks:
web:
external: true