Fast lookup for common commands and configurations.
home_media/
ent/ # Main media server stack (10 services)
docker-compose.yml
appdata/ # Config storage for all services
dockhand/ # Docker UI (optional, standalone)
tails/ # Utility services (optional)
appdata/
termix/ # Web terminal (optional, standalone)
.env # Your secrets (NEVER commit!)
.env.example # Template (safe to commit)
.gitignore # Prevent secret commits
README.md # Overview
SETUP.md # Detailed setup guide (770+ lines)
.github/
DEPLOYMENT.md # GitHub deployment instructions
| File | Purpose | Commit to Git? |
|---|---|---|
ent/docker-compose.yml |
Main stack definition | Yes |
.env |
Your secrets (auth keys, IPs) | No (in .gitignore) |
.env.example |
Template for users | Yes |
.gitignore |
Prevent secret commits | Yes |
README.md |
Overview | Yes |
SETUP.md |
Setup guide | Yes |
.github/DEPLOYMENT.md |
GitHub deployment | Yes |
cd ent/
docker-compose up -d# All services
docker-compose logs -f
# Specific service
docker-compose logs -f radarr
# Last 50 lines of specific service
docker-compose logs --tail=50 sonarr# Stop all (containers persist)
docker-compose stop
# Stop specific service
docker-compose stop radarr
# Full teardown (containers removed, volumes kept)
docker-compose down
# Full teardown INCLUDING volumes (caution!)
docker-compose down -v- Radarr:
http://localhost:7878 - Sonarr:
http://localhost:8989 - Lidarr:
http://localhost:8686 - Jellyfin:
http://localhost:8096 - Prowlarr:
http://localhost:9696 - qBittorrent:
http://localhost:8080 - Bazarr:
http://localhost:6767 - Termix:
http://localhost:8081 - Dockhand:
http://localhost:3000
Replace YOUR_HOSTNAME with your Tailscale hostname (e.g., my-server.tail12345.ts.net):
- Radarr:
https://radarr.YOUR_HOSTNAME - Sonarr:
https://sonarr.YOUR_HOSTNAME - etc.
# Radarr
curl -X GET "http://localhost:7878/api/v3/system/status" \
-H "X-Api-Key: YOUR_API_KEY"
# Sonarr
curl -X GET "http://localhost:8989/api/v3/system/status" \
-H "X-Api-Key: YOUR_API_KEY"
# Lidarr
curl -X GET "http://localhost:8686/api/v1/system/status" \
-H "X-Api-Key: YOUR_API_KEY"Via API:
curl -X POST "http://localhost:7878/api/v3/rootfolder" \
-H "Content-Type: application/json" \
-H "X-Api-Key: YOUR_API_KEY" \
-d '{"path": "/data/media/movies"}'- In Prowlarr: Settings > Apps > Add Radarr
- Name:
Radarr - Host:
radarr - Port:
7878 - API Key: (from Radarr > Settings > General)
- Base URL:
/radarr
Repeat for Sonarr (sonarr) and Lidarr (lidarr)
# Pull latest images
docker-compose pull
# Restart all services with new images
docker-compose up -d
# Verify all started
docker-compose ps# Backup all settings (includes secrets - store securely!)
tar -czf backup_$(date +%Y%m%d_%H%M%S).tar.gz \
ent/appdata \
.env
# Backup only application data (no secrets)
tar -czf backup_$(date +%Y%m%d_%H%M%S).tar.gz \
ent/appdata# Remove stopped containers
docker container prune
# Remove unused images
docker image prune
# Remove unused volumes
docker volume prune
# Full cleanup
docker system prune -a# Fix appdata ownership
sudo chown -R 1000:1000 ent/appdata
chmod -R 775 ent/appdata
# Fix media directory ownership
sudo chown -R 1000:1000 /data
chmod -R 755 /dataid
# Output: uid=1000(user) gid=1000(group) groups=1000(group)
# PUID=1000, PGID=1000Key variables in .env:
# System
PUID=1000
PGID=1000
TZ=America/Toronto
# Tailscale
TSDPROXY_AUTHKEY=tskey-auth-XXXXX
TSDPROXY_HOSTNAME=100.0.0.5
# Ports (optional, if not using Tailscale)
QBITTORRENT_WEBUI_PORT=8080
JELLYFIN_PORT=8096Services mount these paths:
| Service | Inside Container | Host Path |
|---|---|---|
| Radarr | /data/media |
/data/media |
| Sonarr | /data/media |
/data/media |
| Lidarr | /data/media |
/data/media |
| qBittorrent | /data/torrents |
/data/torrents |
| Jellyfin | /data/media |
/data/media (read-only) |
| All *arr | /config |
./appdata/{service} |
# All services
docker-compose ps
# Specific service with detailed info
docker inspect {container_name}
# Service logs
docker logs {container_name}# Inside a container, ping another
docker-compose exec radarr ping sonarr
# Check if port is open
docker-compose exec radarr nc -zv qbittorrent 8080# Restart one
docker-compose restart radarr
# Restart all
docker-compose restart
# Recreate (harder reset)
docker-compose up -d-
.envcontains your secrets (never commit) -
.envis in.gitignore - Tailscale auth key is in
.envonly - Default qBittorrent password changed
- Firewall blocks external access (only Tailscale)
- Backups are encrypted
-
.github/copilot-instructions.mdremoved from public repo
- Setup Issues: See SETUP.md
- Deployment: See .github/DEPLOYMENT.md
- Service Docs:
- Radarr: https://wiki.servarr.com/radarr
- Sonarr: https://wiki.servarr.com/sonarr
- Jellyfin: https://jellyfin.org/docs/
- Docker: https://docs.docker.com/compose/
Key configuration files inside containers:
/config/ # Service configuration
config.xml # Main config
logs.db # Recent logs
/data/media/ # Organized media
movies/ # Radarr manages
tv/ # Sonarr manages
music/ # Lidarr manages
/data/torrents/ # Download staging
movies/ # qBittorrent category
tv/
music/
All services on dedicated network: arr_network
Service-to-service communication (internal):
radarr:7878sonarr:8989lidarr:8686qbittorrent:8080prowlarr:9696
External access:
- Via Tailscale:
SERVICE_NAME.TAILSCALE_HOSTNAME - Local:
localhost:PORT
For detailed guides: See SETUP.md For deployment: See .github/DEPLOYMENT.md