mirror of
https://github.com/xpltdco/media-rip.git
synced 2026-04-03 02:53:58 -06:00
Full-featured self-hosted yt-dlp web frontend:
- Python 3.12+ / FastAPI backend with async SQLite, SSE transport, session isolation
- Vue 3 / TypeScript / Pinia frontend with real-time progress, theme picker
- 3 built-in themes (cyberpunk/dark/light) + drop-in custom theme system
- Admin auth (bcrypt), purge system, cookie upload, file serving
- Docker multi-stage build, GitHub Actions CI/CD
- 179 backend tests, 29 frontend tests (208 total)
Slices: S01 (Foundation), S02 (SSE+Sessions), S03 (Frontend),
S04 (Admin+Auth), S05 (Themes), S06 (Docker+CI)
51 lines
1.4 KiB
YAML
51 lines
1.4 KiB
YAML
# media.rip() — Secure Deployment with Caddy (Auto-TLS)
|
|
#
|
|
# Usage:
|
|
# 1. Copy this file to docker-compose.yml
|
|
# 2. Copy .env.example to .env and fill in your domain + admin password
|
|
# 3. docker compose up -d
|
|
#
|
|
# Caddy automatically obtains and renews TLS certificates from Let's Encrypt.
|
|
# The admin panel is protected behind HTTPS with Basic auth.
|
|
|
|
services:
|
|
mediarip:
|
|
image: ghcr.io/jlightner/media-rip:latest
|
|
volumes:
|
|
- ./downloads:/downloads
|
|
- ./themes:/themes
|
|
- mediarip-data:/data
|
|
environment:
|
|
- MEDIARIP__SESSION__MODE=isolated
|
|
- MEDIARIP__ADMIN__ENABLED=true
|
|
- MEDIARIP__ADMIN__USERNAME=${ADMIN_USERNAME:-admin}
|
|
- MEDIARIP__ADMIN__PASSWORD_HASH=${ADMIN_PASSWORD_HASH}
|
|
- MEDIARIP__PURGE__ENABLED=true
|
|
- MEDIARIP__PURGE__MAX_AGE_HOURS=168
|
|
restart: unless-stopped
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:8000/api/health"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
# Not exposed directly — Caddy handles external traffic
|
|
expose:
|
|
- "8000"
|
|
|
|
caddy:
|
|
image: caddy:2-alpine
|
|
ports:
|
|
- "80:80"
|
|
- "443:443"
|
|
volumes:
|
|
- ./Caddyfile:/etc/caddy/Caddyfile:ro
|
|
- caddy-data:/data
|
|
- caddy-config:/config
|
|
restart: unless-stopped
|
|
depends_on:
|
|
- mediarip
|
|
|
|
volumes:
|
|
mediarip-data:
|
|
caddy-data:
|
|
caddy-config:
|