https://github.com/falleng0d/media-server
Docker-based media server solution featuring automated downloading, management, and streaming of movies, TV shows, and Anime. Plex media streaming server, Automated TV/movie downloading (Sonarr/Radarr), Multi-indexer support (Prowlarr/Jackett), User request management (Jellyseerr), Anime collection management (Shoko)
https://github.com/falleng0d/media-server
Last synced: 4 months ago
JSON representation
Docker-based media server solution featuring automated downloading, management, and streaming of movies, TV shows, and Anime. Plex media streaming server, Automated TV/movie downloading (Sonarr/Radarr), Multi-indexer support (Prowlarr/Jackett), User request management (Jellyseerr), Anime collection management (Shoko)
- Host: GitHub
- URL: https://github.com/falleng0d/media-server
- Owner: falleng0d
- Created: 2025-08-24T11:06:14.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2026-02-22T18:11:34.000Z (4 months ago)
- Last Synced: 2026-02-22T23:15:44.212Z (4 months ago)
- Language: Jinja
- Size: 62.5 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Media Server Automation
## Setup Ansible (Host)
### Install
```bash
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
```
### Config
```bash
ansible-config init --disabled -t all > ansible.cfg
mv ansible.cfg /etc/ansible/ansible.cfg
cat /etc/ansible/ansible.cfg
```
# Execute Playbook
```bash
ansible-playbook -i hostname, -K playbook.yml
```
# Dry Run
```bash
ansible-playbook -i hostname, -K playbook.yml --check
```
# Test Connection
```bash
ansible -i hostname, -m ping all
```
# Services Overview
## Service Architecture
The stack consists of media management, indexing, and streaming services connected through Docker networks:
- **mediarr**: Main network for media automation services
- **transmission**: External network for torrent client connectivity
- **firefox**: Bridge network for Firefox container
## Services Overview
### 🎬 Media Streaming
#### Jellyfin
- **Purpose**: Media server for streaming movies, TV shows, and anime
- **Access**: `http://127.0.0.1:8080` (default Jellyfin port)
- **Image**: `jellyfin/jellyfin`
- **Configuration**: `/docker/jellyfin/etc` → `/etc/jellyfin`
- **Data Directories**:
- Cache: `/docker/jellyfin/var-cache` → `/var/cache/jellyfin`
- Library: `/docker/jellyfin/var-lib` → `/var/lib/jellyfin`
- Logs: `/docker/jellyfin/var-log` → `/var/log/jellyfin`
- **Media Access**: `media` volume → `/mnt/media`
- **Hardware Acceleration**: Intel GPU (`/dev/dri/renderD128`)
### 📺 Media Management
#### Sonarr (TV Shows)
- **Purpose**: Automated TV show downloading and management
- **Access**: `http://127.0.0.1:8989`
- **Image**: `lscr.io/linuxserver/sonarr:latest`
- **Configuration**: `/docker/sonarr` → `/config`
- **Media Access**:
- Library: `media` volume → `/mnt/media`
- Downloads: `completed` volume → `/mnt/downloads`
- **Networks**: `mediarr`, `transmission`
- **Dependencies**: Prowlarr, Jackett, Jellyfin
#### Radarr (Movies)
- **Purpose**: Automated movie downloading and management
- **Access**: `http://127.0.0.1:7878`
- **Image**: `lscr.io/linuxserver/radarr:latest`
- **Configuration**: `/docker/radarr` → `/config`
- **Media Access**:
- Library: `media` volume → `/mnt/media`
- Downloads: `completed` volume → `/mnt/downloads`
- **Networks**: `mediarr`, `transmission`
- **Dependencies**: Prowlarr, Jackett, Jellyfin
#### Bazarr (Subtitles)
- **Purpose**: Automated subtitle downloading for movies and TV shows
- **Access**: `http://127.0.0.1:6767`
- **Image**: `lscr.io/linuxserver/bazarr:latest`
- **Configuration**: `/docker/bazarr` → `/config`
- **Media Access**: `media` volume → `/mnt/media`
- **Networks**: `mediarr`
- **Dependencies**: Sonarr, Radarr
### 🔍 Indexers & Search
#### Prowlarr
- **Purpose**: Indexer manager for torrent and usenet sites
- **Access**: `http://127.0.0.1:9696`
- **Image**: `linuxserver/prowlarr:latest`
- **Configuration**: `/docker/prowlarr` → `/config`
- **Networks**: `mediarr`
- **Dependencies**: Flaresolverr
#### Jackett
- **Purpose**: Additional torrent indexer proxy
- **Access**: `http://127.0.0.1:9117`
- **Image**: `lscr.io/linuxserver/jackett:latest`
- **Configuration**: `/docker/jackett` → `/config`
- **Downloads**: `completed` volume → `/downloads`
- **Networks**: `mediarr`
- **Dependencies**: Flaresolverr
- **Environment**:
- Auto-update enabled
- Timezone: UTC
#### Flaresolverr
- **Purpose**: Cloudflare bypass proxy for indexers
- **Access**: Internal service (no web UI)
- **Image**: `ghcr.io/flaresolverr/flaresolverr:latest`
- **Networks**: `mediarr`
- **Environment Variables**:
- `LOG_LEVEL`: Configurable (default: info)
- `LOG_HTML`: Configurable (default: false)
- `CAPTCHA_SOLVER`: Configurable (default: none)
### 🎯 Request Management
#### Jellyseerr
- **Purpose**: Media request management for users
- **Access**: `http://127.0.0.1:5055`
- **Image**: `fallenbagel/jellyseerr:latest`
- **Configuration**: `/docker/jellyseerr` → `/app/config`
- **Networks**: `mediarr`
- **Dependencies**: Sonarr, Radarr
### 🎌 Anime Management
#### Shoko Server
- **Purpose**: Anime collection management and metadata
- **Access**: `http://127.0.0.1:8111`
- **Image**: `ghcr.io/shokoanime/server:latest`
- **Configuration**: `/docker/shoko` → `/home/shoko/.shoko`
- **Media Access**:
- Anime Library: `animes` volume → `/mnt/anime`
- Import Directory: `media` volume → `/mnt/import`
- **Networks**: `mediarr`
- **Memory**: 256MB shared memory
#### Plex
- **Note**: Plex is not running on Docker. It is installed directly on the host.
- **Purpose**: Media server for anime streaming
- **Access**: `http://127.0.0.1:32400`
- **Configuration**: `/var/lib/plexmediaserver/Library/Application Support/Plex Media Server/`
## Volume Mappings
### Named Volumes
- **media**: `${MEDIA_DRIVE}` → Main media storage
- **completed**: `${MEDIA_DRIVE}/completed` → Download completion directory
- **animes**: `${MEDIA_DRIVE}/Animes` → Anime-specific storage
- **movies**: `${MEDIA_DRIVE}/Movies` → Movie-specific storage
### Configuration Directories
All service configurations are stored under `/docker/[service-name]` on the host:
```
/docker/
├── bazarr/ # Bazarr configuration
├── jellyfin/ # Jellyfin configuration and data
│ ├── etc/ # Jellyfin config files
│ ├── var-cache/ # Jellyfin cache
│ ├── var-lib/ # Jellyfin library database
│ └── var-log/ # Jellyfin logs
├── jellyseerr/ # Jellyseerr configuration
├── jackett/ # Jackett configuration
├── prowlarr/ # Prowlarr configuration
├── radarr/ # Radarr configuration
├── shoko/ # Shoko Server configuration
└── sonarr/ # Sonarr configuration
```
## Network Architecture
- **mediarr**: Primary network for media services communication
- **transmission**: External network for torrent client integration
- **firefox**: Isolated network for browser container
## Service Dependencies
```
Jellyfin (Media Server)
├── Sonarr (TV) → Prowlarr, Jackett
├── Radarr (Movies) → Prowlarr, Jackett
└── Bazarr (Subtitles) → Sonarr, Radarr
Indexers
├── Prowlarr → Flaresolverr
└── Jackett → Flaresolverr
Request Management
└── Jellyseerr → Sonarr, Radarr
Anime Management
└── Shoko Server (Standalone)
```
## Environment Variables
The stack uses the following environment variable:
- **MEDIA_DRIVE**: Base path for media storage (used in volume definitions)
Additional environment variables for Flaresolverr:
- **LOG_LEVEL**: Logging verbosity (default: info)
- **LOG_HTML**: HTML logging (default: false)
- **CAPTCHA_SOLVER**: Captcha solving method (default: none)
## Backup Considerations
### Critical Configuration Directories
- `/docker/` - All service configurations
- Database files within each service's config directory
### Media Content
- `${MEDIA_DRIVE}` - All media files and downloads
- Consider the size and backup strategy for large media collections
## Maintenance Notes
- All services use `restart: unless-stopped` for automatic recovery
- Jackett has auto-update enabled
- Hardware acceleration is configured for Jellyfin (Intel GPU)
- Services are configured to run without explicit user mapping (using container defaults)