created a complete Docker Compose setup for Audiojacker media stack.

This commit is contained in:
John Doe
2026-03-08 17:28:20 -04:00
parent 2f1529ecfa
commit 7797a79d7b
4 changed files with 702 additions and 0 deletions
+94
View File
@@ -0,0 +1,94 @@
# =============================================================================
# Audiojacker Environment Configuration - Example
# =============================================================================
# Copy this file to .env and fill in your actual values
# All sensitive credentials should be kept in .env (add to .gitignore!)
# =============================================================================
# -----------------------------------------------------------------------------
# BASE CONFIGURATION
# -----------------------------------------------------------------------------
# Base path for all media and configuration files
BASE_PATH=./audiojacker
# User/Group IDs for file permissions (run `id -u` and `id -g` to find yours)
PUID=1000
PGID=1000
# Timezone (use TZ database name: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)
TZ=America/New_York
# -----------------------------------------------------------------------------
# PROTONVPN CONFIGURATION (for gluetun)
# -----------------------------------------------------------------------------
# Get your OpenVPN credentials from: https://account.protonvpn.com/settings
# Note: These are NOT your ProtonVPN login credentials - they're separate OpenVPN credentials
PROTONVPN_USER=your_protonvpn_openvpn_username
PROTONVPN_PASSWORD=your_protonvpn_openvpn_password
# Preferred server countries (comma-separated, e.g., Netherlands,Switzerland,Iceland)
PROTONVPN_SERVERS=Netherlands
# -----------------------------------------------------------------------------
# QBITTORRENT CONFIGURATION
# -----------------------------------------------------------------------------
# Web UI port (default: 8080)
QBITTORRENT_PORT=8080
# -----------------------------------------------------------------------------
# LIDARR CONFIGURATION
# -----------------------------------------------------------------------------
# Web UI port (default: 8686)
LIDARR_PORT=8686
# API key will be auto-generated on first start, or set manually
# Find it in Lidarr Settings > General > Security
LIDARR_API_KEY=your_lidarr_api_key_here
# -----------------------------------------------------------------------------
# SOULSEEK / SLSKD CONFIGURATION
# -----------------------------------------------------------------------------
# Your Soulseek account credentials (create at https://www.slsknet.org)
SOULSEEK_USER=your_soulseek_username
SOULSEEK_PASS=your_soulseek_password
# slskd Web UI port (default: 5000)
SLSKD_PORT=5000
# slskd admin credentials for Web UI
SLSKD_ADMIN_USER=admin
SLSKD_ADMIN_PASS=admin
# -----------------------------------------------------------------------------
# SOULARR CONFIGURATION
# -----------------------------------------------------------------------------
# Web UI port (default: 8400)
SOULARR_PORT=8400
# -----------------------------------------------------------------------------
# YUBAL CONFIGURATION
# -----------------------------------------------------------------------------
# Web UI port (default: 8888)
YUBAL_PORT=8888
# -----------------------------------------------------------------------------
# TORBOX CONFIGURATION
# -----------------------------------------------------------------------------
# Get your API key from: https://torbox.app/settings
TORBOX_API_KEY=your_torbox_api_key
# -----------------------------------------------------------------------------
# AUDIOBOOKSHELF CONFIGURATION
# -----------------------------------------------------------------------------
# Web UI port (default: 13378)
AUDIOBOOKSHELF_PORT=13378
# -----------------------------------------------------------------------------
# KOEL CONFIGURATION
# -----------------------------------------------------------------------------
# Web UI port (default: 8000)
KOEL_PORT=8000
# Admin credentials for Koel
KOEL_ADMIN_EMAIL=admin@koel.dev
KOEL_ADMIN_PASS=KoelIsCool
+24
View File
@@ -0,0 +1,24 @@
# Environment files (contain sensitive credentials)
.env
*.env.local
# Configuration directories with sensitive data
config/
# IDE and editor files
.idea/
.vscode/
*.swp
*.swo
*~
# OS files
.DS_Store
Thumbs.db
# Docker volumes (if using local volumes)
docker-volumes/
# Logs
*.log
logs/
+292
View File
@@ -0,0 +1,292 @@
# Audiojacker - All-in-One Media Download & Streaming Stack
A comprehensive Docker Compose setup for automated media downloading and streaming with VPN protection.
## 🎯 Features
- **VPN Protection**: All download services route through ProtonVPN via gluetun
- **Torrent Downloads**: qBittorrent with Web UI
- **Music Management**: Lidarr for automated music collection management
- **Soulseek Integration**: slskd client + soularr for Lidarr integration
- **YouTube Downloads**: yubal for audio extraction
- **Torbox Integration**: Automated debrid downloading
- **Audiobook Streaming**: audiobookshelf server
- **Music Streaming**: Koel self-hosted music player
## 📋 Services Overview
| Service | Purpose | Port | Network |
|---------|---------|------|---------|
| gluetun | VPN Gateway | - | Bridge |
| qBittorrent | Torrent Client | 8080 | Via VPN |
| Lidarr | Music Manager | 8686 | Via VPN |
| slskd | Soulseek Client | 5000 | Via VPN |
| soularr | Lidarr-Soulseek Bridge | 8400 | Via VPN |
| yubal | YouTube Downloader | 8888 | Via VPN |
| torbox-auto-downloader | Torbox Integration | - | Via VPN |
| audiobookshelf | Audiobook Server | 13378 | Direct |
| koel | Music Streaming | 8000 | Direct |
## 🚀 Quick Start
### 1. Prerequisites
- Docker and Docker Compose installed
- ProtonVPN account (OpenVPN credentials)
- Soulseek account (for slskd)
- Torbox account (optional, for torbox-auto-downloader)
### 2. Clone/Create Directory Structure
```bash
# Create the base directory
sudo mkdir -p /mnt/fast-block/audiojacker/{downloads,audiobooks,music,config}
# Create subdirectories
sudo mkdir -p /mnt/fast-block/audiojacker/downloads/{torrents,soulseek,youtube,torbox,complete}
sudo mkdir -p /mnt/fast-block/audiojacker/music/{incoming,library}
```
### 3. Configure Environment
```bash
# Copy the example environment file
cp .env.example .env
# Edit with your credentials
nano .env
```
**Required credentials to fill in:**
| Variable | Where to get it |
|----------|-----------------|
| `PROTONVPN_USER` | [ProtonVPN Account](https://account.protonvpn.com/settings) → OpenVPN/IKEv2 username |
| `PROTONVPN_PASSWORD` | [ProtonVPN Account](https://account.protonvpn.com/settings) → OpenVPN/IKEv2 password |
| `SOULSEEK_USER` | [Soulseek](https://www.slsknet.org) account |
| `SOULSEEK_PASS` | [Soulseek](https://www.slsknet.org) password |
| `TORBOX_API_KEY` | [Torbox](https://torbox.app/settings) API key |
### 4. Set Permissions
```bash
# Set ownership (replace with your PUID:PGID)
sudo chown -R 1000:1000 /mnt/fast-block/audiojacker
# Set permissions
sudo chmod -R 755 /mnt/fast-block/audiojacker
```
### 5. Start the Stack
```bash
# Start all services
docker-compose up -d
# Check status
docker-compose ps
# View logs
docker-compose logs -f
```
### 6. Access Web Interfaces
| Service | URL | Default Credentials |
|---------|-----|---------------------|
| qBittorrent | http://localhost:8080 | `admin` / `adminadmin` |
| Lidarr | http://localhost:8686 | None (set on first access) |
| slskd | http://localhost:5000 | Set in .env (`SLSKD_ADMIN_USER/PASS`) |
| soularr | http://localhost:8400 | - |
| yubal | http://localhost:8888 | - |
| audiobookshelf | http://localhost:13378 | None (set on first access) |
| koel | http://localhost:8000 | Set in .env (`KOEL_ADMIN_EMAIL/PASS`) |
## 📁 Directory Structure
```
/mnt/fast-block/audiojacker/
├── downloads/
│ ├── torrents/ # qBittorrent downloads
│ ├── soulseek/ # slskd downloads
│ ├── youtube/ # yubal downloads
│ ├── torbox/ # Torbox downloads
│ └── complete/ # Completed downloads
├── audiobooks/ # Audiobook library
├── music/
│ ├── incoming/ # Music being processed
│ └── library/ # Organized music library
└── config/
├── gluetun/
├── qbittorrent/
├── lidarr/
├── slskd/
├── soularr/
├── yubal/
├── torbox/
├── audiobookshelf/
└── koel/
```
## ⚙️ Configuration
### ProtonVPN Setup
1. Log into [ProtonVPN](https://account.protonvpn.com/settings)
2. Go to **Downloads****OpenVPN configuration**
3. Note your **OpenVPN / IKEv2 username** and **password**
4. (Optional) Choose preferred server countries in `.env`
### Lidarr Setup
1. Access Lidarr at http://localhost:8686
2. Complete the setup wizard
3. Add your music library path: `/music/library`
4. Add download client: qBittorrent at `localhost:8080`
5. Get API key from **Settings****General****Security**
6. Update `.env` with `LIDARR_API_KEY`
7. Restart soularr: `docker-compose restart soularr`
### slskd Setup
1. Access slskd at http://localhost:5000
2. Login with credentials from `.env`
3. Configure share directories in **Shares** settings
4. Add `/music` as a share directory
### soularr Setup
soularr connects Lidarr with Soulseek for automated downloads:
1. Ensure Lidarr is configured and running
2. Ensure slskd is configured and running
3. soularr will automatically search Soulseek for Lidarr requests
### qBittorrent Setup
1. Access qBittorrent at http://localhost:8080
2. Login with `admin` / `adminadmin`
3. **Change password immediately** in **Tools****Options****Web UI**
4. Set download path to `/downloads`
5. Configure connection settings as needed
### audiobookshelf Setup
1. Access audiobookshelf at http://localhost:13378
2. Create admin account on first access
3. Add library pointing to `/audiobooks`
4. Configure metadata provider preferences
### Koel Setup
1. Access Koel at http://localhost:8000
2. Login with credentials from `.env`
3. Scan music library: `/music`
4. Configure settings as needed
## 🔧 Maintenance
### View Logs
```bash
# All services
docker-compose logs -f
# Specific service
docker-compose logs -f gluetun
docker-compose logs -f qbittorrent
```
### Restart Services
```bash
# Restart all
docker-compose restart
# Restart specific service
docker-compose restart gluetun
```
### Update Services
```bash
# Pull latest images
docker-compose pull
# Recreate containers with new images
docker-compose up -d
```
### Stop Services
```bash
# Stop all
docker-compose down
# Stop and remove volumes
docker-compose down -v
```
## 🐛 Troubleshooting
### VPN Not Connecting
```bash
# Check gluetun logs
docker-compose logs gluetun
# Common issues:
# - Wrong OpenVPN credentials
# - Server country not available
# - Network connectivity issues
```
### Services Can't Connect Through VPN
Ensure services are using `network_mode: service:gluetun` and gluetun is healthy:
```bash
# Check gluetun health
docker-compose ps gluetun
# Check VPN connection
docker-compose exec gluetun curl -s https://ipinfo.io
```
### Permission Issues
```bash
# Check current PUID/PGID
id
# Update .env with correct values
# Fix ownership
sudo chown -R $(id -u):$(id -g) /mnt/fast-block/audiojacker
```
### Port Conflicts
If default ports are in use, modify the port mappings in `.env`:
```bash
# Example: Change qBittorrent port
QBITTORRENT_PORT=18080
```
## 📚 Additional Resources
- [gluetun Wiki](https://github.com/qdm12/gluetun/wiki)
- [qBittorrent Documentation](https://github.com/linuxserver/docker-qbittorrent)
- [Lidarr Documentation](https://lidarr.audio/)
- [slskd Documentation](https://github.com/slskd/slskd)
- [soularr GitHub](https://github.com/guillevc/yubal)
- [audiobookshelf Documentation](https://www.audiobookshelf.org/)
- [Koel Documentation](https://koel.dev/)
## 📜 License
This configuration is provided as-is. Individual services have their own licenses.
## ⚠️ Disclaimer
This setup is for personal use with legally obtained content. Ensure compliance with copyright laws in your jurisdiction. The authors are not responsible for any misuse of this software.
+292
View File
@@ -0,0 +1,292 @@
version: "3.9"
# =============================================================================
# Audiojacker - All-in-One Media Download and Streaming Stack
# =============================================================================
# This compose file sets up a complete media management system with:
# - VPN-routed download services (via gluetun)
# - Direct-access media servers
# =============================================================================
# Shared environment variables for linuxserver.io containers
x-lsio-environment: &lsio-environment
PUID: ${PUID:-1000}
PGID: ${PGID:-1000}
TZ: ${TZ:-America/New_York}
# Common volume mounts for download services
x-download-volumes: &download-volumes
- ${BASE_PATH}/downloads:/downloads
- ${BASE_PATH}/config:/config
services:
# ===========================================================================
# VPN GATEWAY - gluetun
# ===========================================================================
# All download services route through this container for VPN protection
# Documentation: https://github.com/qdm12/gluetun
# ===========================================================================
gluetun:
image: qmcgaw/gluetun:latest
container_name: gluetun
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
environment:
<<: *lsio-environment
VPN_SERVICE_PROVIDER: protonvpn
VPN_TYPE: openvpn
OPENVPN_USER: ${PROTONVPN_USER}
OPENVPN_PASSWORD: ${PROTONVPN_PASSWORD}
SERVER_COUNTRIES: ${PROTONVPN_SERVERS:-Netherlands}
# Optional: Add more ProtonVPN options
# SERVER_CITIES: Amsterdam
# VPN_ENDPOINT_IP:
# VPN_ENDPOINT_PORT:
volumes:
- ${BASE_PATH}/config/gluetun:/gluetun
ports:
# qBittorrent Web UI (routed through VPN)
- ${QBITTORRENT_PORT:-8080}:8080
# Lidarr Web UI (routed through VPN)
- ${LIDARR_PORT:-8686}:8686
# slskd Web UI (routed through VPN)
- ${SLSKD_PORT:-5000}:5000
# slskd listen ports for Soulseek network
- 22398:22398/tcp
- 22398:22398/udp
- 22399:22399/tcp
- 22399:22399/udp
- 22400:22400/tcp
- 22400:22400/udp
# soularr Web UI (routed through VPN)
- ${SOULARR_PORT:-8400}:8400
# yubal Web UI (routed through VPN)
- ${YUBAL_PORT:-8888}:8888
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "https://ipinfo.io"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
networks:
- media_net
# ===========================================================================
# TORRENT CLIENT - qBittorrent
# ===========================================================================
# Web UI accessible at http://localhost:8080
# Default credentials: admin / adminadmin (change on first login)
# Documentation: https://hub.docker.com/r/linuxserver/qbittorrent
# ===========================================================================
qbittorrent:
image: linuxserver/qbittorrent:latest
container_name: qbittorrent
network_mode: service:gluetun
depends_on:
gluetun:
condition: service_healthy
environment:
<<: *lsio-environment
WEBUI_PORT: 8080
TORRENTING_PORT: 6881
volumes:
- ${BASE_PATH}/config/qbittorrent:/config
- ${BASE_PATH}/downloads/torrents:/downloads
restart: unless-stopped
# ===========================================================================
# MUSIC COLLECTION MANAGER - Lidarr
# ===========================================================================
# Web UI accessible at http://localhost:8686
# Documentation: https://lidarr.audio/
# ===========================================================================
lidarr:
image: linuxserver/lidarr:latest
container_name: lidarr
network_mode: service:gluetun
depends_on:
gluetun:
condition: service_healthy
environment:
<<: *lsio-environment
volumes:
- ${BASE_PATH}/config/lidarr:/config
- ${BASE_PATH}/music:/music
- ${BASE_PATH}/downloads:/downloads
restart: unless-stopped
# ===========================================================================
# SOULSEEK CLIENT - slskd
# ===========================================================================
# Web UI accessible at http://localhost:5000
# Documentation: https://github.com/slskd/slskd
# ===========================================================================
slskd:
image: slskd/slskd:latest
container_name: slskd
network_mode: service:gluetun
depends_on:
gluetun:
condition: service_healthy
environment:
<<: *lsio-environment
SLSKD_SLSK_USERNAME: ${SOULSEEK_USER}
SLSKD_SLSK_PASSWORD: ${SOULSEEK_PASS}
SLSKD_SLSK_LISTEN_PORT: 22398
SLSKD_REMOTE_CONFIGURATION: true
SLSKD_NO_AUTH: false
SLSKD_USERNAME: ${SLSKD_ADMIN_USER:-admin}
SLSKD_PASSWORD: ${SLSKD_ADMIN_PASS:-admin}
volumes:
- ${BASE_PATH}/config/slskd:/app/data
- ${BASE_PATH}/downloads/soulseek:/downloads
- ${BASE_PATH}/music:/music
restart: unless-stopped
# ===========================================================================
# LIDARR + SOULSEEK INTEGRATION - soularr
# ===========================================================================
# Connects Lidarr with Soulseek for automated music downloading
# Documentation: https://github.com/guillevc/yubal
# Note: soularr may need to be built from source or use alternative image
# ===========================================================================
soularr:
image: ghcr.io/guillevc/soularr:latest
container_name: soularr
network_mode: service:gluetun
depends_on:
gluetun:
condition: service_healthy
lidarr:
condition: service_started
slskd:
condition: service_started
environment:
<<: *lsio-environment
LIDARR_URL: http://localhost:8686
LIDARR_API_KEY: ${LIDARR_API_KEY}
SLSKD_URL: http://localhost:5000
SLSKD_API_KEY: ${SLSKD_API_KEY:-}
volumes:
- ${BASE_PATH}/config/soularr:/config
- ${BASE_PATH}/downloads/soulseek:/downloads
- ${BASE_PATH}/music:/music
restart: unless-stopped
# ===========================================================================
# YOUTUBE AUDIO DOWNLOADER - yubal
# ===========================================================================
# Web UI accessible at http://localhost:8888
# Documentation: https://github.com/guillevc/yubal
# ===========================================================================
yubal:
image: ghcr.io/guillevc/yubal:latest
container_name: yubal
network_mode: service:gluetun
depends_on:
gluetun:
condition: service_healthy
environment:
<<: *lsio-environment
volumes:
- ${BASE_PATH}/config/yubal:/config
- ${BASE_PATH}/downloads/youtube:/downloads
- ${BASE_PATH}/music:/music
restart: unless-stopped
# ===========================================================================
# TORBOX AUTO DOWNLOADER
# ===========================================================================
# Automated downloading from Torbox service
# Documentation: https://github.com/MrJoiny/torbox-auto-downloader
# ===========================================================================
torbox-auto-downloader:
image: ghcr.io/mrjoiny/torbox-auto-downloader:latest
container_name: torbox-auto-downloader
network_mode: service:gluetun
depends_on:
gluetun:
condition: service_healthy
environment:
<<: *lsio-environment
TORBOX_API_KEY: ${TORBOX_API_KEY}
# Add additional Torbox configuration as needed
volumes:
- ${BASE_PATH}/config/torbox:/config
- ${BASE_PATH}/downloads/torbox:/downloads
restart: unless-stopped
# ===========================================================================
# AUDIOBOOK SERVER - audiobookshelf
# ===========================================================================
# Web UI accessible at http://localhost:13378
# Documentation: https://github.com/advplyr/audiobookshelf
# ===========================================================================
audiobookshelf:
image: advplyr/audiobookshelf:latest
container_name: audiobookshelf
environment:
<<: *lsio-environment
ports:
- ${AUDIOBOOKSHELF_PORT:-13378}:80
volumes:
- ${BASE_PATH}/audiobooks:/audiobooks
- ${BASE_PATH}/config/audiobookshelf:/config
- ${BASE_PATH}/config/audiobookshelf/metadata:/metadata
restart: unless-stopped
networks:
- media_net
# ===========================================================================
# MUSIC STREAMING SERVER - koel
# ===========================================================================
# Web UI accessible at http://localhost:8000
# Default credentials: admin@koel.dev / KoelIsCool (change on first login)
# Documentation: https://github.com/koel/koel
# ===========================================================================
koel:
image: koel/koel:latest
container_name: koel
environment:
<<: *lsio-environment
DB_CONNECTION: sqlite
DB_DATABASE: /data/koel.db
ADMIN_EMAIL: ${KOEL_ADMIN_EMAIL:-admin@koel.dev}
ADMIN_PASSWORD: ${KOEL_ADMIN_PASS:-KoelIsCool}
# Optional: For streaming optimization
STREAMING_METHOD: php
ports:
- ${KOEL_PORT:-8000}:80
volumes:
- ${BASE_PATH}/music:/music
- ${BASE_PATH}/config/koel:/data
- ${BASE_PATH}/config/koel/covers:/var/www/html/public/img/covers
restart: unless-stopped
networks:
- media_net
# =============================================================================
# NETWORKS
# =============================================================================
networks:
media_net:
driver: bridge
name: media_net
# =============================================================================
# VOLUMES (optional - for persistent data if preferred over bind mounts)
# =============================================================================
# volumes:
# gluetun_data:
# qbittorrent_config:
# lidarr_config:
# slskd_data:
# soularr_config:
# yubal_config:
# torbox_config:
# audiobookshelf_config:
# audiobookshelf_metadata:
# koel_data: