96829d0d0f
gates / gates (push) Successful in 3s
- family_gate / family_gate_except / min_controller format (README, REUSE); gate family-gate + decoys - templates/grimmory (v3.5.0, exceptions OPDS/Kobo/KOReader/Komga) + onboarding/grimmory.md - templates/metube (2026.09.29, no exceptions; ladder .28 -> .29) + onboarding/metube.md; fixture MeTube - volume-persistence gate: routed port read from the label NAME (R-801, red-proofed); APP_EXERCISE (R-788) - box_walk: family_cookie; no cached "not gated" while an app has no router Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
60 lines
2.1 KiB
YAML
60 lines
2.1 KiB
YAML
# MeTube - Videoletöltő (yt-dlp webes felülete): videók és hanganyagok letöltése a meghajtódra
|
|
# Domain: ${SUBDOMAIN}.${DOMAIN}
|
|
# Database: none (its queue and history are files in the state volume)
|
|
# RAM: ~150M idle, more while downloading (mem_limit: 768M) | Pi-compatible: Yes (amd64, arm64)
|
|
#
|
|
# MeTube has NO login of its own, by design. On Felhom it is published ONLY behind the family gate (`family_gate: true`,
|
|
# controller >= 0.287.0, `09` §3 decisions 63/64): a stranger reaches nothing, a family member signs in with their own
|
|
# name and password. No exceptions — every path, the websocket included, passes the gate.
|
|
#
|
|
# Environment variables:
|
|
# DOMAIN - Your domain (e.g., demo-felhom.eu)
|
|
# HDD_PATH - The drive the downloads go to
|
|
#
|
|
# Folders: the downloads in ${USERDATA_PATH}/media/metube (the household sees them in the file browser); the queue and
|
|
# history in the named volume metube_state (NVMe). ALLOW_PRIVATE_ADDRESSES stays false (upstream default): MeTube will
|
|
# not fetch from the household's own network.
|
|
|
|
services:
|
|
metube:
|
|
image: ghcr.io/alexta69/metube:2026.09.29
|
|
container_name: metube
|
|
restart: unless-stopped
|
|
environment:
|
|
- TZ=Europe/Budapest
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- DOWNLOAD_DIR=/downloads
|
|
- STATE_DIR=/state
|
|
- MAX_CONCURRENT_DOWNLOADS=2
|
|
- ALLOW_PRIVATE_ADDRESSES=false
|
|
volumes:
|
|
- ${USERDATA_PATH}/media/metube:/downloads
|
|
- metube_state:/state
|
|
networks:
|
|
- traefik-public
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
memory: 768M
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-fsS", "http://127.0.0.1:8081/"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
start_period: 30s
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.metube.rule=Host(`${SUBDOMAIN}.${DOMAIN}`)"
|
|
- "traefik.http.routers.metube.entrypoints=websecure"
|
|
- "traefik.http.routers.metube.tls=true"
|
|
- "traefik.http.routers.metube.tls.certresolver=letsencrypt"
|
|
- "traefik.http.services.metube.loadbalancer.server.port=8081"
|
|
|
|
volumes:
|
|
metube_state:
|
|
|
|
networks:
|
|
traefik-public:
|
|
external: true
|