/docker-traefik

Docker media and home server stack with Docker Compose, Traefik, Swarm Mode, Google OAuth2/Authelia, and LetsEncrypt

Primary LanguageShellMIT LicenseMIT

Description

This is the updated docker-compose repo of all the media and home server apps described in the following guides on our website:

Supporting Articles:

Obsolete Posts:

The following posts have been combined and updated for Traefik v2 (linked above):

A Note on Traefik 1 vs Traefik 2?

Update (April 19, 2020): I have switched from Traefik v1 to Traefik v2, which is now my default. Therefore, the setup for Traefik v1 will only receive minor updates (if any). If you are new, follow instructions for Traefik v2.

Traefik 2 (CURRENT - GENERIC LINUX)

  • docker-compose-t2.yml
  • docker-compose-t2-vpn.yml
  • docker-compose-t2-obsolete.yml (Apps that I do not use anymore)
  • docker-compose-t2-web.yml (Docker stack on Virtual Private Server that Runs Wordpress and Other Websites)

Traefik 2 (CURRENT - SYNOLOGY)

  • docker-compose-t2-synology.yml (Apps that I run on Synology NAS using Docker Compose)
  • Almost any app from the Traefik v2 docker-compose files listed above can be copy-pasted to the Synology Docker-Compose. I run a few on Synology and the rest on my Intel NUC Linux home server.

Traefik 1 (NOT ACTIVELY MAINTAINED)

  • docker-compose-t1.yml
  • docker-compose-t1-vpn.yml
  • docker-compose-t1-obsolete.yml (Apps that I do not use anymore)

Traefik 1 - Docker Swarm Mode (NOT ACTIVELY MAINTAINED)

  • docker-compose-t1-swarm.yml

MY SETUP

  • MAIN - Ryzen 7 3800x Proxmox Server with Ubuntu 20.04
  • NUC - Intel NUC Home Server with Pop OS (future Proxmox)
  • SYNOLOGY - Synology DS918+ NAS
  • WEB - Digital Ocean Virtual Private Server with Ubuntu 20.04
  • OBSOLETE - Not used anymore

What apps are included in this stack?

The apps I use are scattered around in five different docker-compose files (on five hosts listed above). Some apps are used in more than one host and some on only one.

FRONTENDS

  • Traefik - Reverse Proxy
  • Docker Socket Proxy - Secure Proxy for Docker API
  • Traefik Custom Error Pages (OBSOLETE)
  • OAuth - Google OAuth 2 Forward Authentication
  • Authelia - Private Forward Authentication
  • Portainer - Container Management
  • Organizr - Unified Frontend
  • Heimdall - Unified Frontend Alternative
  • Autoindex - Plain text Index to All Files

SMART HOME

  • Home Assistant Core - Home Automation
  • HA-Dockermon - Manage Docker containers in Home Assistant (OBSOLETE)
  • Mosquitto - MQTT Broker
  • MotionEye - Video Surveillance
  • ZoneMinder - Video Surveillance (OBSOLETE)
  • MiFlora - MiFlora MQTT Daemon (MiFlora Plant Sensors) (OBSOLETE)

DATABASE

  • MariaDB - MySQL Database
  • phpMyAdmin - Database management
  • InfluxDB - Database for sensor data
  • Postgres - Database (OBSOLETE)
  • Grafana - Graphical data visualization for InfluxDB data
  • Varken - Monitor Plex, Sonarr, Radarr, and Other Data (OBSOLETE)
  • Redis - Key value store
  • Redis Commander - Redis management

DOWNLOADERS

  • jDownloader - Download management
  • TransmissionBT with VPN - Torrent Downloader with IPVanish VPN.
  • SABnzbd - Binary newsgrabber, NZB downloader
  • qBittorrent with VPN - Torrent downloader (OBSOLETE)

INDEXERS

  • NZBHydra2 - NZB meta search
  • Jackett - Torrent proxy

PVRS

  • Lidarr - Music Management
  • Radarr - Movie management
  • Sonarr - TV Shows management
  • LazyLibrarian - Books Management
  • Readarr - Books Management

MEDIA SERVER

  • AirSonic - Music Server
  • Calibre - Ebook/Audiobook Server
  • Calibre-Web - Ebook/Audiobook Reader
  • Plex - Media Server
  • Emby - Media Server (OBSOLETE)
  • Jellyfin - Media Server
  • Ombi - Media Requests (OBSOLETE)
  • Tautulli - Previously PlexPy. Plex statistics and monitoring
  • Plex-Sync - For Syncing watched status between plex servers
  • PhotoShow - Personal Photo Gallery and viewer
  • TellyTv- IPTV proxy for Plex (OBSOLETE)
  • xTeve- IPTV proxy for Plex (OBSOLETE)

MEDIA FILE MANAGEMENT

  • Bazarr - Subtitle Management
  • Picard - Music Library Tagging and Management
  • Handbrake - Video Conversion, Transcoding, and Compression
  • MKVToolNix - Video Editing, Remuxing (changing media container while keeping original source quality)
  • MakeMKV - Video Editing (Ripping from Disks)
  • FileBot - File renamer
  • Tiny Media Manager - Media Files Management

UTILITIES

  • Firefox - Web Broswer
  • Glances - System Information
  • APCUPSD - APC UPS Management
  • Guacamole - Remote desktop, SSH, on Telnet on any HTML5 Browser
  • Guacamole Daemon - Needed for Guacamole
  • Dozzle - Docker logs viewer
  • qDirStat - Directory Statistics
  • StatPing - Status Page & Monitoring Server
  • SmokePing - Network Latency Monitoring (OBSOLETE)
  • VS Code Server - Code Editor
  • Logarr - Log Management (OBSOLETE)
  • Monitorr - Webfront to display the status of any webapp or service (OBSOLETE)
  • Cloud Commander - Web File Manager (OBSOLETE)
  • Cloud9 - Cloud IDE (OBSOLETE)
  • SMTP To Telegram - Sends all incoming Email messages to Telegram (OBSOLETE)
  • UniFi Controller - Controller for Ubiquiti UniFi Network Gear
  • Rclone - Mount Cloud/Google Drive (OBSOLETE)
  • MergerFS - Merge local and remote file systems (OBSOLETE)

WEB

  • Nginx - Web Server
  • php7 - PHP-FPM

MAINTENANCE

  • Watchtower - Automatic Docker Container Updates (OBSOLETE)
  • Docker-GC - Automatic Docker Garbage Collection
  • Traefik Certificate Dumper - Extract Traefik SSL Certs
  • Cloudflare DDNS - Dynamic IP Updater
  • Cloudflare Companion - Automatic CNAME creation for services

Usage

--------- ANYTHING THAT HAS "example" IN THE NAME WILL HAVE TO BE RENAMED APPROPRIATELY ---------

Installation

First, install Docker and Docker Compose, as described in our Docker Media Server guide.

  1. Clone the repo.
  2. Configure Traefik Docker-Compose snippet and CLI arguments.
  • Edit domain name.
  • DNS Challenge (for LetsEncrypt verification) is enabled by default for cloudflare. Use the Traefik Reverse Proxy guide for help with this.
  • For other providers other than cloudflare, check here.
  1. (Optional) Enable or use HTTP Basic Authentication by renaming shared\.htpasswd.example to shared\.htpasswd in the folder and adding username and hashed password to it.
  2. Configure environmental variables (.env file)
  • Rename the included .env.example to .env.
  • Edit variables in .env file.
  • All variables (ie. ${XXX}) in docker-compose.yml come from .env file stored in the same place as docker-compose.yml.
  • Ensure good permissions for the .env file (recommended: 640).
  1. Edit docker-compose-t2.yml to include only the services you want or add additional services to it. Be sure to read the comments for each app and create any required files. You can copy snippets between any of the various docker-compose files in the repo.
  2. Start and stop your docker stack as described in our Docker Media Server guide.
  3. (Optional) Put non-docker apps behind Traefik proxy by creating traefik rules based on the examples provided.

Starting and Stopping

I use bash_aliases to simplify starting and stopping containers/stack. Included in the repo is an example of bash_aliases I use (replace USER with your Linux username). Here are some example alias commands:

  • dc1up or dc2up - Create network and start Docker Traefik 1 or 2 stack
  • dc1down or dc2down - Stop Docker Traefik 1 or 2 stack
  • dcup1 or dcup2 - Start Docker Traefik 1 or 2 stack
  • dcup1v or dcup2v - Start Docker Trafik 1 or 2 VPN stack
  • dcdown1 or dcdown2 - Stop Docker Traefik 1 or 2 stack
  • dcdown1v or dcdown2v - Stop Docker Traefik 1 or 2 VPN stack
  • dcrec1 or dcrec2 - Start or recreate a specific service
  • dcstop1 or dcstop2 - Stop a specific service
  • dcrestart1 or dcrestart2 - Restart a specific service
  • dclogs1 or dclogs1v or dclogs2 or dclogs2v - See real-time logs for the corresponding stack or service
  • dcpull1 or dcpull1v or dcpull2 or dcpull2v - Pull new images for the corresponding stack or service

Did this Repo help you?

Please consider buying us a coffee (or two) as a token of appreciation.