Skip to content

gkmayn/jellyfinmediastack

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

30 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Jellyfin Media Stack

A complete Docker Compose stack for automated media management and streaming using Jellyfin and the *arr suite.

🌟 Features

  • Dedicated IP Addresses: Uses macvlan networking to assign each container its own IP address, avoiding port conflicts
  • Complete Media Automation: Integrated downloading, organizing, and streaming workflow
  • Easy Setup: Automated directory creation with included script
  • Modular Design: Each service runs in its own container for easy management

πŸ“¦ Services Included

Service Description Default Port
Jellyfin Media server for streaming your content 8096
Sonarr TV show management and automation 8989
Radarr Movie management and automation 7878
Prowlarr Indexer manager for *arr apps 9696
qBittorrent Torrent client 8080
Requestrr Chatbot for Discord/Telegram media requests 4545

πŸ“‹ Prerequisites

  • Docker - Install Docker
  • Docker Compose - Install Docker Compose
  • Linux Server/Host - Ubuntu, Debian, or similar
  • Storage Space - Adequate storage for your media library
  • Network Knowledge - Understanding of your network's subnet and gateway

πŸš€ Installation

Step 1: Identify Your Network Adapter

First, identify your network adapter name using one of these commands:

ifconfig -a

OR

ip link show

OR

ip a

Look for your primary network interface (typically eth0, ens18, enp0s3, etc.)

Step 2: Create macvlan Network

Create a Docker macvlan network with your network configuration:

docker network create -d macvlan \
  --subnet=[YOUR_SUBNET] \
  --gateway=[YOUR_GATEWAY_IP] \
  -o parent=[YOUR_NETWORK_ADAPTER] \
  mediamacvlan

Example:

docker network create -d macvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 \
  -o parent=eth0 \
  mediamacvlan

Step 3: Set Up Directory Structure

Create a parent directory for the media stack:

mkdir ~/mediastack
cd ~/mediastack

Clone this repository:

git clone https://github.com/gkmayn/jellyfinmediastack.git .

Make the directory creation script executable:

chmod +x directory.sh

Run the script to create all necessary directories:

./directory.sh

The script will create the required directory structure and display the paths.

Step 4: Configure Docker Compose

Edit the docker-compose.yml file:

nano docker-compose.yml

Update the following:

  • IP Addresses: Assign static IPs to each container within your subnet
  • Volume Mappings: Verify the paths match those created by directory.sh
  • Timezone: Set your timezone (e.g., TZ=America/New_York)
  • PUID/PGID: Set to match your user (run id to find these values)

Step 5: Deploy the Stack

Start all containers:

sudo docker-compose up -d

Verify containers are running:

sudo docker-compose ps

πŸ”§ Configuration

Initial Setup Order

  1. Prowlarr - Configure indexers first
  2. Sonarr/Radarr - Connect to Prowlarr for indexers
  3. qBittorrent - Set download paths
  4. Sonarr/Radarr - Configure qBittorrent as download client
  5. Jellyfin - Add media libraries
  6. Requestrr - Connect to Sonarr/Radarr

Accessing Services

If you assigned IPs starting from 192.168.1.100:

  • Jellyfin: http://192.168.1.100:8096
  • Sonarr: http://192.168.1.101:8989
  • Radarr: http://192.168.1.102:7878
  • Prowlarr: http://192.168.1.103:9696
  • qBittorrent: http://192.168.1.104:8080
  • Requestrr: http://192.168.1.105:4545

(Adjust IPs based on your configuration)

πŸ“ Directory Structure

The directory.sh script creates the following structure:

mediastack/
β”œβ”€β”€ config/
β”‚   β”œβ”€β”€ jellyfin/
β”‚   β”œβ”€β”€ sonarr/
β”‚   β”œβ”€β”€ radarr/
β”‚   β”œβ”€β”€ prowlarr/
β”‚   β”œβ”€β”€ qbittorrent/
β”‚   └── requestrr/
β”œβ”€β”€ media/
β”‚   β”œβ”€β”€ movies/
β”‚   β”œβ”€β”€ tv/
β”‚   └── downloads/
└── docker-compose.yml

πŸ› οΈ Management

Start the stack

sudo docker-compose up -d

Stop the stack

sudo docker-compose down

View logs

sudo docker-compose logs -f [service_name]

Restart a specific service

sudo docker-compose restart [service_name]

Update containers

sudo docker-compose pull
sudo docker-compose up -d

πŸ› Troubleshooting

Container can't access network

  • Verify macvlan network exists: docker network ls
  • Check IP addresses don't conflict with existing devices
  • Ensure subnet and gateway are correct

Permission denied errors

  • Check PUID/PGID in docker-compose.yml
  • Verify directory permissions: ls -la
  • May need to run: sudo chown -R $USER:$USER ./config ./media

Can't access services

  • Verify containers are running: docker-compose ps
  • Check firewall rules
  • Ensure IPs are accessible from your network

Containers keep restarting

  • Check logs: docker-compose logs [service_name]
  • Verify volume paths exist
  • Check for port conflicts

πŸ“ Notes

  • Volumes: This setup creates volumes outside the compose file for better control over storage and permissions
  • Network Isolation: Each container gets its own IP, making it easier to manage firewall rules and avoid port conflicts
  • Customization: You can add or remove services by editing the docker-compose.yml file

🀝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

πŸ“„ License

This project is open source and available under the MIT License.

πŸ™ Acknowledgments

  • Jellyfin - The free software media system
  • Sonarr - Smart PVR for newsgroup and bittorrent users
  • Radarr - Movie collection manager
  • Prowlarr - Indexer manager/proxy
  • qBittorrent - Open-source BitTorrent client

πŸ“§ Support

If you have questions or need help:

  • Open an Issue
  • Check existing issues for solutions
  • Review the documentation for each service

⚠️ Disclaimer: This stack is for managing your personal media library. Ensure you comply with all applicable laws and terms of service when downloading content.

Releases

No releases published

Packages

 
 
 

Contributors

Languages