This project sets up a comprehensive home media server stack using Docker Compose. It includes various services for media management, streaming, downloading, and network management.
- Docker and Docker Compose installed on your system
- A server or NAS with sufficient storage and processing power
- Basic understanding of Docker and networking concepts
-
Clone this repository to your local machine or server.
-
Create the necessary directories:
mkdir -p /srv/media/config /srv/media/data mkdir -p /srv/media/config/{caddy,prowlarr,sonarr,radarr,qbittorrent,jellyfin,filebrowser,audiobookshelf,readarr,boinc,scrutiny,blocky} mkdir -p /srv/media/data/public/{TV,Movies,Anime,Books,Audiobooks,Podcasts}
-
Copy the
.env.example
file to.env
and update the variables according to your environment:cp .env.example .env
Edit the
.env
file and adjust the values as needed. -
Create the external network for Caddy:
docker network create caddy-public
-
Deploy the stack:
docker-compose up -d
The stack includes the following services:
- Caddy: Reverse proxy and automatic HTTPS
- Prowlarr: Indexer manager
- Sonarr: TV show management
- Radarr: Movie management
- qBittorrent: Torrent client
- Jellyfin: Media streaming server
- FileBrowser: Web-based file manager
- Audiobookshelf: Audiobook and podcast server
- Readarr: Book and audiobook management
- BOINC: Distributed computing platform
- Scrutiny: Hard drive monitoring
- Blocky: DNS server with ad-blocking capabilities
- Watchtower: Automatic Docker container updates
Most services can be configured through their web interfaces. Default ports and paths are defined in the docker-compose.yml
file.
- The Caddy service requires access to a Tailscale network. Make sure Tailscale is properly set up on your server.
- Jellyfin is configured to use hardware acceleration. Ensure your system supports this feature.
- The BOINC service is set to run only on the "ledokun" node. Adjust this constraint if needed.
- Scrutiny is configured to monitor specific drives. Update the devices section in the
docker-compose.yml
file to match your system's drives.
The stack uses two networks:
caddy-public
: Used by most services for inter-container communicationcaddy-host
: Used by Caddy to access the host network
The Watchtower service is configured to automatically update all containers daily at 4:00 AM. You can also manually update containers using Docker Compose:
docker-compose pull
docker-compose up -d
-
If you encounter permission issues, ensure the PUID and PGID in the
.env
file match your user's ID and group ID. -
Check the logs of individual services for more detailed error messages:
docker-compose logs [service_name]
Feel free to open issues or submit pull requests if you have suggestions for improvements or encounter any problems.
This project is open-source and available under the MIT License.