Proxy inverse de Traefik est l'une de mes meilleures trouvailles de 2018 qui a amené mon serveur domestique au niveau supérieur à certains égards. Il y a quelques semaines à peine, j'ai publié mon guide du serveur multimédia Docker à l'aide de Docker Compose et explique comment il peut simplifier la configuration et le portage d'applications de serveur domestique. En fait, après avoir configuré mes applications sur Ubuntu 16.04, passer à 18.04 ne me prenait qu’une heure environ: installation épurée d’Ubuntu 18.04, Docker et Docker composent l’installation et recréent les applications de mon serveur domestique à partir de mon fichier de composition. Tous les paramètres de l'application ont été transférés et j'ai rapidement retrouvé mon activité sur un nouveau serveur.
Après la publication de mon guide du serveur multimédia Docker, l’une des questions les plus fréquemment posées était la suivante: comment configurer le proxy inverse? Si vous ne savez pas ce qu'est le proxy inverse, je vous recommande fortement de lire ceci. Tutoriel Traefik et envisagez de mettre en place un proxy inverse pour votre serveur domestique basé sur Docker. En résumé, le proxy inverse Traefik simplifiera considérablement la mise en œuvre de SSL grâce aux certificats automatiques Let’s Encrypt. En outre, vos applications de menu fixe seront accessibles via une URL facilement accessible. Vous n'aurez pas à exposer vos ports d'applications à Internet (risque de sécurité) ni à vous souvenir des numéros de port. Traefik peut même utiliser un proxy pour les applications non-Docker sur le système hôte.
Changelog:
- 31 août 2018 – ajouté
rules.toml
exemple pour les applications non dockerisées. Ajoutéerules.toml
ettraefik.toml
à GitHub. Ajout d'étiquettes d'en-tête de sécurité pour les conteneurs.
Cela semble passionnément compliqué? Ne vous inquiétez pas, je vous expliquerai en détail toutes les étapes nécessaires à la configuration de Traefik for Docker Media Server.
Exigences
Avant de poursuivre, certaines conditions doivent être remplies:
- Home Server – Bien que guide soit basé sur Ubuntu, la configuration du proxy inverse Traefik pour Docker devrait fonctionner avec tout système d'exploitation Linux
- Serveur multimédia Docker – Vous devez déjà avoir une configuration de serveur multimédia Docker. Si vous êtes un débutant, je vous recommande fortement de lire mon guide de base, car nous en tirerons certaines parties.
- Transfert de port – Traefik Reverse Proxy utilise les ports 80 et 443. Ces ports doivent être transférés sur votre routeur vers le serveur avec l'instance de docker Traefik.
Proxy inverse Primer
Avant de commencer avec cette Traefik Docker Compose tutoriel, je vais vous donner un bref aperçu du proxy inverse pour les débutants.
Qu'est-ce que le proxy inverse?
Un proxy inverse est un serveur intermédiaire situé entre des serveurs / applications principaux (Radarr, Sonarr, SABnzbd, etc.) et des clients (vous et d'autres services qui tentent d'accéder à vos applications depuis Internet). Un client interagit uniquement avec le proxy inverse et ce dernier communique avec les applications dorsales pour fournir / récupérer des informations. Un serveur proxy inverse se trouve généralement derrière un pare-feu (routeur ou passerelle Internet) et dirige les clients vers les applications appropriées sans que les clients n'aient à connaître l'adresse IP ou le port de celles-ci.
Guides recommandés:
Avantages du proxy inverse
Pour les entreprises et les grands sites Web, les proxys inversés peuvent offrir un équilibrage de la charge et une accélération Web parmi plusieurs autres avantages. Mais pour une utilisation à domicile, les principaux avantages sont la sécurité, la confidentialité et la commodité. Voyons cela avec un exemple. Disons que Radarr est accessible à l’adresse suivante:
http://example.com:7868
Un serveur proxy inverse peut rendre Radarr disponible sur:
https://radarr.example.com OU https://example.com/radarr
- Configurer HTTPS / SSL pour certaines applications (par exemple, Radarr / Sonarr) est extrêmement difficile. Le proxy inverse simplifie considérablement cette opération et améliore votre confidentialité et votre sécurité. En fait, le proxy inverse est le moyen recommandé pour ajouter un accès HTTPS à Radarr et Sonar, entre autres.
- Les proxys inversés peuvent automatiser la configuration de certificats SSL gratuits à partir de Let’s Encrypt. Ils peuvent même les renouveler automatiquement à leur échéance.
- Vous n'êtes pas obligé d'exposer ou de transférer des ports sur votre routeur. L'exposition de ports à Internet peut présenter un risque pour la sécurité si l'application n'est pas suffisamment protégée ou comporte une faille de sécurité.
- Les proxys inversés peuvent également faciliter la mise en œuvre de l'authentification d'accès HTTP, ajoutant ainsi une couche de sécurité.
- En combinant Docker avec un proxy inverse, vous pouvez exécuter plusieurs applications nécessitant le même numéro de port (par exemple, PiHole et un serveur Web – les deux nécessitent le port 80).
- Pour les applications Smart Home, si vous souhaitez ajouter la prise en charge de Google Assistant à Home Assistant, votre serveur doit être accessible de manière externe avec SSL et le nom d'hôte. Le proxy inverse peut aussi aider ici.
Options pour le proxy inverse
Maintenant que nous connaissons les avantages de la mise en œuvre d’un proxy inverse performant pour votre serveur domestique, voyons quelles options sont disponibles pour votre serveur Docker. Nous allons examiner brièvement trois procurations inverses différentes: Nginx Proxy, HAProxy et Traefik.
Proxy Traefik vs Nginx
Le proxy inverse de Nginx est l’une des plus anciennes options disponibles à cette fin. Cependant, configurer et gérer un serveur Nginx n’est pas une tâche confortable pour la plupart des gens. J'utilise Nginx et ce site est propulsé par Nginx. Mais pour les applications de menu fixe, dans mon option, il n’existe aucune comparaison entre Traefik et Nginx. Traefik rend les choses si faciles.
Le proxy Nginx de JWilder simplifie le proxy Nginx pour les conteneurs Docker. Combiné à Nginx Proxy Companion, l’implémentation d’un proxy inverse docker avec Let’s Encrypt SSL devient beaucoup plus simple. Je l'ai essayé mais Traefik est beaucoup plus simple à mon avis.
Traefik vs HAProxy
HAProxy est également devenu très populaire récemment. Beaucoup de gros sites Web utilisent HAproxy. Là encore, je pense que HAProxy est beaucoup plus complexe à utiliser à la maison que Traefik. HAProxy n'est certainement pas un mauvais produit. En fait, plusieurs personnes ne jurent que par elle. Je dis simplement que si votre objectif est de mettre en place un proxy inverse pour Docker, alors Traefik, selon mon expérience, est une meilleure option.
Qu'est-ce que le proxy inverse Traefik?
Commençons ce Dtutoriel sur ocker traefik en vous donnant une introduction rapide à Traefik. Traefik (prononcé comme «trafic») est une application de proxy inverse minuscule et rapide, mais avec plusieurs fonctionnalités avancées. Il est développé par Containous. Pour les applications Docker, Traefik a une image officielle de docker qui s’intègre très facilement à Docker Compose pour créer des applications avec HTTPS, équilibrage de charge, métriques et autres avantages, en quelques minutes.
Traefik est incroyable, mais l’un de ses plus gros inconvénients est qu’il est relativement nouveau. Cela signifie qu'il n'y a pas beaucoup de tutoriels Traefik sur le marché. La documentation Traefik est disponible pour vous aider. Cependant, cela peut être difficile pour les débutants et ne fournit pas suffisamment d'explications sur certains sujets. L'objectif de cet article est de vous fournir toutes les informations nécessaires à la mise en œuvre du proxy inverse traefik pour votre serveur multimédia docker et de vous montrer également un exemple fonctionnel de Traefik Docker Compose.
Structure d'URL pour le proxy inverse Docker
Il existe deux manières d'implémenter le proxy Traefik pour Docker. La façon dont je vais faire cela utilise Traefik Docker Compose et des étiquettes. Avec Étiquettes
, Docker compose peut configurer automatiquement tous les conteneurs pour utiliser le proxy inverse Traefik HTTPS. Mais avant de commencer à configurer le proxy Traefik, nous devons prendre une décision importante.
L'un des moyens les plus courants de rendre les applications de votre serveur domestique accessibles sur Internet consiste à utiliser un service DNS dynamique. DuckDNS et Afraid sont deux services gratuits couramment utilisés à cette fin. Ils offrent un nom d'hôte tel que myhome.duckdns.org
pouvant pointer vers l’adresse IP WAN de votre maison. De cette façon, vous ne devrez pas vous souvenir de votre IP à la maison. De plus, si vos adresses IP changent, les services DNS dynamiques peuvent automatiquement se mettre à jour et pointer vers la nouvelle adresse IP. Le DNS dynamique est génial, mais votre seule option avec Traefik consiste à placer toutes vos applications dans un sous-répertoire (example.duckdns.org/app/) au lieu d'un sous-domaine / hôte séparé (app.example.duckdns.org).
Cependant, votre propre nom de domaine vous permettra de placer vos applications en tant que sous-répertoire ou hôte distinct. Vous pouvez même mélanger et assortir où certains sont disponibles en tant que example.com/app1
et d'autres sont disponibles en tant que app2.example.com
.
Traefik v1.6 et certificats Wildcard
L’exécution d’applications en tant que sous-répertoire / chemin au lieu de sous-domaine distinct est qu’un seul certificat de chiffrement fonctionnera pour toutes vos applications car il n’existe qu’un seul domaine et chaque application n’est qu’un chemin de sous-répertoire. Cela signifie moins de certificats SSL à Traefik à récupérer et à gérer. Ce problème est devenu sans conséquence lorsque Traefik 1.6 a été introduit en mai 2018 avec la prise en charge du certificat Let’s Encrypt Wildcard. Avec cela, tout ce dont vous avez besoin est un certificat * .example.com
et toutes vos applications utilisant un proxy pour séparer les noms d'hôtes peuvent utiliser le même certificat.
Le seul inconvénient des certificats Wildcard réside dans le fait que la vérification de Let’s Encrypt ACME est effectuée via un challenge DNS. Une condition essentielle est que votre DNS soit géré par un fournisseur DNS pris en charge. DNS Challenge nécessite l'ajout d'un enregistrement TXT à vos enregistrements DNS.
DNS dynamique ou votre propre nom de domaine?
Je vous recommande vivement d’obtenir votre propre nom de domaine qui pointe vers l’IP WAN de votre maison. Il en coûterait 12 $ par an pour un nom de domaine privé via Google Domains. Je recommande ceci pour plusieurs raisons:
- Lors de mes tests, je ne pouvais jamais obtenir des conteneurs de menu fixe (par exemple, Home Assistant, UniFi Controller, NextCloud et Plex) pour fonctionner en tant que sous-répertoire (même sur mon propre nom de domaine privé) derrière le proxy inverse de Traefik. Dans de telles situations, il vous restera à créer plusieurs sous-domaines DNS dynamiques pour tous vos services. La plupart des services DNS dynamiques gratuits limitent le nombre de sous-domaines que vous pouvez créer.
- DNS peur n'est pas l'un des fournisseurs pris en charge pour les certificats génériques. Bien que DuckDNS soit répertorié comme étant pris en charge, il n’a pas encore été testé. Lors de mes tests, je ne pouvais obtenir ni défi HTTP ni défi DNS pour travailler sur DuckDNS. De plus, DuckDNS semble ajouter une chaîne de requête à la fin de l'URL, ce qui interfère avec le fonctionnement de Radarr et Sonarr. Le seul service DNS dynamique gratuit qui a fonctionné pour moi était le défi HTTP via Afraid.org (sous-répertoires uniquement).
Ma configuration utilise mon propre nom de domaine, toutes mes applications en tant qu'hôtes distincts et Traefik 1.6 avec des certificats Wildcard. Mon fournisseur DNS est Cloudflare, qui a été testé et vérifié pour fonctionner avec les certificats génériques Traefik Let Encrypt. Si vous avez votre propre nom de domaine et que votre fournisseur DNS n'est pas répertorié comme étant pris en charge, je vous recommande de déplacer votre DNS vers Cloudflare, qui est incroyablement rapide et gratuit.
Sur Cloudflare, vous devez pointer votre domaine racine (example.com) sur votre IP WAN. Ajoutez ensuite un CNAME générique (* .example.com) ou des sous-domaines individuels, pointant tous sur votre domaine racine (@ pour hôte).
Configurer et configurer Traefik sur Docker
Ce didacticiel Docker Traefik est principalement basé sur un domaine privé avec DNS dans Cloudflare. Mais je vais également vous donner des instructions si vous souhaitez utiliser un DNS Dyanmic via Afraid.org (gardez à l’esprit que vous ne pouvez utiliser que des sous-répertoires pour vos applications). Je vais partager mon exemple Traefik Docker Compose pour les deux applications. Alors commençons.
Préparer la configuration de Traefik
Commençons par préparer le conteneur Traefik Docker. Nous allons utiliser la même structure de dossiers que celle décrite dans mon guide du serveur multimédia Docker. Toutes les applications seront situées sous $ {USERDIR} / docker /
dossier dans leur propre dossier.
Créer un nom d'utilisateur et un mot de passe pour l'authentification HTTP
Nous devrons utiliser l'authentification HTTP pour certaines applications (par exemple, l'interface de surveillance Traefik). Pour cela, nous devons créer un .htpasswd
fichier avec les identifiants de connexion. Encore une fois, si vous avez suivi mon guide du serveur multimédia Docker, nous allons mettre ce fichier dans $ {USERDIR} / docker / shared
dossier. Utilisez ce générateur HTPASSWD pour créer un nom d’utilisateur et un mot de passe et les ajouter à la liste. $ {USERDIR} /docker/shared/.htpasswd
fichier comme indiqué ci-dessous:
nom d'utilisateur: mystrongpassword
Remplacer / Configurer:
Nom d'utilisateur
: avec votre nom d'utilisateur HTTP.mystrongpassword
: avec votre mot de passe HTTP haché généré en utilisant le lien ci-dessus.
Enregistrez le fichier et quittez.
Mettre à jour les variables environnementales
Si vous avez suivi le guide de base de mon menu fixe, vous devez déjà disposer des variables d'environnement suivantes:
PUID = 1000 PGID = 140 TZ = "America / New_York" USERDIR = "/ home / USER" MYSQL_ROOT_PASSWORD = "mot de passe"
Nous allons en ajouter de nouveaux. modifier / etc / environment
et ajoutez les nouveaux suivants à la liste existante:
HTTP_USERNAME = nom d'utilisateur HTTP_PASSWORD = mystrongpassword DOMAINNAME = exemple.com [email protected] CLOUDFLARE_API_KEY = XXXXXXXXXXXX
Remplacer / Configurer:
Nom d'utilisateur
: avec votre nom d'utilisateur HTTP généré à l'étape précédente.mystrongpassword
: avec votre mot de passe HTTP haché généré à l'étape précédente.exemple.com
: Votre nom de domaine DNS privé ou dynamique.[email protected]
: Email de votre compte cloudflare. Ceci n'est requis que si vous utilisez le challenge DNS pour les certificats Wildcard Traefik Letsencrypt.XXXXXXXXXXXX
: Clé API de votre compte cloudflare. Encore une fois, cela n’est requis que pour DNS Challenge pour exécuter des applications sous des sous-domaines.
Si vous utilisez l'un des autres fournisseurs DNS à la place de Cloudflare, veillez à inclure les paramètres de configuration requis dans le fichier de variables d'environnement.
Préparer des dossiers et des fichiers Traefik
Ensuite, nous devons créer de nouveaux dossiers pour Traefik et ACME. Avec le $ {USERDIR}
variable d’environnement définie ci-dessus, exécutez les commandes suivantes:
mkdir $ {USERDIR} / docker / traefik mkdir $ {USERDIR} / docker / traefik / acme
Docker ne peut pas créer de fichiers manquants (uniquement des répertoires). Nous devrons donc créer un fichier vide pour le conteneur Traefik docker. Alors, créez acme.json
fichier en utilisant la commande suivante:
touchez $ {USERDIR} /docker/traefik/acme/acme.json
Ensuite, définissez la bonne persmission pour acme.json
fichier en utilisant la commande suivante:
chmod 600 $ {USERDIR} /docker/traefik/acme/acme.json
Enfin, nous passons à la création du fichier de configuration Traefik (traefik.toml
), qui varient selon que vous voulez des sous-répertoires ou des sous-domaines pour vos applications.
Traefik avec applications comme sous-domaines
Si vous avez votre propre nom de domaine et que vous souhaitez utiliser des sous-domaines pour chaque application et utiliser le certificat Let’s Encrypt Wildcard, créez-le. $ {USERDIR} /docker/traefik/traefik.toml
avec le contenu suivant en elle.
#debug = true logLevel = "ERROR" #DEBUG, INFO, WARN, ERROR, FATAL, PANIC InsecureSkipVerify = true defaultEntryPoints = ["https", "http"] Interface WEB de Traefik - une page Web avec une vue d'ensemble des configurations frontend et backend sera affichée [api] entryPoint = "traefik" tableau de bord = true adresse = ": 8080" usersFile = "/shared/.htpasswd" # Force HTTPS [entryPoints] [entryPoints.http] adresse = ": 80" [entryPoints.http.redirect] entryPoint = "https" [entryPoints.https] adresse = ": 443" [entryPoints.https.tls] [file] regarder = true filename = "/etc/traefik/rules.toml" # Chiffrons la configuration [acme] email = "[email protected]"#un email id fonctionnera storage = "/ etc / traefik / acme / acme.json" entryPoint = "https" acmeLogging = true onDemand = false #create certificate lors de la création du conteneur [acme.dnsChallenge] provider = "cloudflare" delayBeforeCheck = 0 [[acme.domains]]main = "EXAMPLE.COM" [[acme.domains]]main = "* .EXAMPLE.COM" # Connexion au système hôte docker (docker.sock) [docker] point de terminaison = "unix: ///var/run/docker.sock" domain = "EXAMPLE.COM" regarder = true # Ceci cachera tous les conteneurs de menu fixe qui n'ont pas explicitement # set label pour "enable" exposéebydefault = false
Remplacer / Configurer:
[email protected]
: avec votre email.EXAMPLE.COM
: avec votre nom de domaine privé.InsecureSkipVerify = true
: Je devais ajouter au début pour permettre à certaines applications (par exemple, le contrôleur UniFi) d'être accessibles via Traefik.provider = "cloudflare"
: Passez à votre fournisseur DNS pour le défi DNS.exposéebydefault = false
: Cela vous obligera à utilisertraefik.enable = true
label in docker compose pour mettre les applications derrière traefik.
Sauvegarder et quitter.
Traefik avec des applications en tant que sous-répertoires
Si vous utilisez Afraid DDNS (les sous-répertoires sont votre seule option) ou si vous souhaitez créer des sous-répertoires pour vos applications sur votre propre domaine privé, ~ / docker / traefik / traefik.toml
avec le contenu suivant en elle. Dans mes tests, DDNS de Afraid’s crabdance.com a fonctionné parfaitement.
logLevel = "WARN" #DEBUG, INFO, WARN, ERREUR, FATAL, PANIC defaultEntryPoints = ["http", "https"] Interface WEB de Traefik - une page Web avec une vue d'ensemble des configurations frontend et backend sera affichée [web] adresse = ": 8080" [web.auth.basic] usersFile = "/shared/.htpasswd" # Force HTTPS [entryPoints] [entryPoints.http] adresse = ": 80" [entryPoints.http.redirect] entryPoint = "https" [entryPoints.https] adresse = ": 443" [entryPoints.https.tls] [file] regarder = true filename = "/etc/traefik/rules.toml" # Chiffrons la configuration [acme] email = "[email protected]"#un email id fonctionnera storage = "/ etc / traefik / acme / acme.json" entryPoint = "https" acmeLogging = true onDemand = false #create certificate lors de la création du conteneur onHostRule = true # Utilisez un challenge HTTP-01 plutôt que le challenge TLS-SNI-01 [acme.httpChallenge] entryPoint = "http" # Connexion au système hôte docker (docker.sock) [docker] point de terminaison = "unix: ///var/run/docker.sock" domain = "EXAMPLE.COM" regarder = true # Ceci cachera tous les conteneurs de menu fixe qui n'ont pas explicitement # set label pour "enable" exposéebydefault = false
Remplacer / Configurer:
[email protected]
: avec votre email.EXAMPLE.COM
: avec votre nom de domaine privé.InsecureSkipVerify = true
: Je devais ajouter au début pour permettre à certaines applications (par exemple, le contrôleur UniFi) d'être accessibles via Traefik.exposéebydefault = false
: Cela vous obligera à utilisertraefik.enable = true
label in docker compose pour mettre les applications derrière traefik.
Sauvegarder et quitter.
Traefik Reverse Proxy avec LE pour Docker Media Server
Étant donné que toutes les applications répertoriées ci-dessous ont déjà été introduites dans mon guide de serveur multimédia docker, je ne vais pas décrire ce qu'elles font ici. Je vais juste me concentrer sur la fourniture de Exemples de docker Traefik que vous devez utiliser pour rendre vos applications disponibles via un proxy inverse.
Créer des réseaux de proxy
Dans le guide de base de Docker, nous n’avions pas à créer de réseaux supplémentaires. Cependant, pour que les conteneurs Docker soient disponibles via le proxy inverse de Traefik, nous devrons créer plusieurs réseaux. L’un sera le réseau interne de docker (nous appellerons cela défaut) et l’autre sera un réseau externe à utiliser par le proxy Traefik (nous appellerons cela traefik_proxy).
Tout d’abord, créez un réseau de dockers Traefik appelé traefik_proxy
en utilisant la commande suivante:
réseau docker créer traefik_proxy
Ensuite, ajoutez le bloc de code suivant à la fin de votre docker-compose.yml
fichier. Il est recommandé de conserver le blocage des réseaux à la fin du fichier docker-compose. Comme nous continuons à ajouter du contenu à la docker-compose.yml
fichier, assurez-vous de les ajouter au-dessus du bloc réseaux.
réseaux: traefik_proxy: externe: nom: traefik_proxy défaut: conducteur: pont
Dans le docker Traefik, composez des exemples de blocs de code ci-dessous, $ {$ USERDIR}
, $ {PUID}
, $ {PGID}
, $ {TZ}
, $ {DOMAINNAME}
, $ {CLOUDFLARE_EMAIL}
, $ {CLOUDFLARE_API_KEY}
, $ {HTTP_USERNAME}
, $ {HTTP_PASSWORD}
, etc. seront automatiquement renseignés par le fichier de composition à partir du fichier d’environnement créé / édité précédemment. Si vous n'avez pas défini de variables d'environnement, vous pouvez les remplacer par les valeurs réelles dans les blocs de code ci-dessous.
Configurer Traefik avec Docker Compose
Tout d’abord, nous devons créer le conteneur de docker Traefik. Traefik propose des images officielles à partir desquelles vous pouvez construire vos conteneurs. Notez que si vous utilisez des certificats de domaine privé et de domaine générique, vous avez besoin de la version 1.6 ou supérieure. Nous allons tirer la dernière image disponible (1.6.2 à ce stade).
Traefik dispose également d’une interface Web de surveillance (illustrée ci-dessus) qui vous permet de vérifier l’état des conteneurs et les informations relatives au serveur / au client. Voici le code à ajouter (copier / coller) dans le fichier docker-compose (faites attention aux espaces vides au début de chaque ligne):
traefik: nom d'hôte: traefik image: traefik: dernier nom du conteneur: traefik redémarrer: toujours nom de domaine: $ {DOMAINNAME} réseaux: - défaut - traefik_proxy ports: - "80:80" - "443: 443" # - "XXXX: 8080" environnement: - CLOUDFLARE_EMAIL = $ {CLOUDFLARE_EMAIL} - CLOUDFLARE_API_KEY = $ {CLOUDFLARE_API_KEY} Étiquettes: - "traefik.enable = true" - "traefik.backend = traefik" - "traefik.frontend.rule = Hôte: traefik. $ {DOMAINNAME}" # - "traefik.frontend.rule = Hôte: $ {DOMAINNAME}; PathPrefixStrip: / traefik" - "traefik.port = 8080" - "traefik.docker.network = traefik_proxy" - "traefik.frontend.headers.SSLRedirect = true" - "traefik.frontend.headers.STSSeconds = 315360000" - "traefik.frontend.headers.browserXSSFilter = true" - "traefik.frontend.headers.contentTypeNosniff = true" - "traefik.frontend.headers.forceSTSHeader = true" - "traefik.frontend.headers.SSLHost = example.com" - "traefik.frontend.headers.STSIncludeSubdomains = true" - "traefik.frontend.headers.STSPreload = true" - "traefik.frontend.headers.frameDeny = true" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - $ {USERDIR} / docker / traefik: / etc / traefik - $ {USERDIR} / docker / shared: / shared
Remplacer / Configurer:
XXXX
– le numéro de port sur lequel vous souhaitez que le Webui de surveillance Traefik soit disponible à l'adresse. Il pourrait s'agir du même port que le conteneur: 8080 (doit être libre). Ce paramètre est facultatif, par exemple uniquement si vous souhaitez pouvoir accéder à l'interface Web à l'aide de nom d'hôte: XXXX depuis le réseau interne. La redirection de port pour un accès à partir d’Internet est un risque de sécurité redondant. Si vous souhaitez toujours l'utiliser, supprimez la mise en commentaire du commentaire.#
au début de la ligne.traefik.frontend.rule
– Il y a deux règles frontales. Le premier (non commenté) est destiné à l’accès aux sous-domaines. Le second (commenté avec un#
devant) est pour l’accès au sous-répertoire sur un domaine privé ou un DNS dynamique. Vous n’avez besoin que de l’un d’eux en fonction de votre situation.
Après avoir sauvegardé le docker-compose.yml
fichier, exécutez la commande suivante pour démarrer le conteneur et vérifier si l'application est accessible:
docker-compose -f $ {USERDIR} /docker/docker-compose.yml up -d
Traefik doit immédiatement essayer de récupérer les nouveaux certificats SSL auprès de Let’s Encrypt. Vous pouvez suivre la progression en entrant cette commande immédiatement après l’émission de la précédente:
docker-compose logs -tf --tail = "50" traefik
presse Ctrl + C pour quitter. Si vous avez correctement configuré vos fichiers de configuration Traefik, vous devriez voir une sortie semblable à celle ci-dessous. Il montre qu’un certificat SSL a été récupéré et mis en œuvre avec succès pour mydomain.crabdance.com
, qui est un DNS dynamique de Afraid.org.
Traefik WebUI devrait être disponible à https://traefik.example.com ou https://example.com/traefik/ (une barre oblique à la fin est nécessaire) selon l'option choisie. L’interface Web sera protégée à l’aide des informations d’authentification HTTP fournies dans le fichier de configuration de Traefik (traefik.toml
).
Tous traefik mandatés seront acheminés à travers ce conteneur.
Exemples de composition Traefik Docker
Comme indiqué précédemment, Traefik est l’un des moyens les plus simples de mettre en œuvre un proxy inverse. Pour les conteneurs Docker, il est encore plus facile de spécifier les étiquettes de docker Traefik dans le fichier de composition. Modifions donc les blocs de code de composition de docker pour que les applications utilisent le proxy Traefik. Les descriptions des applications ci-dessous ont été fournies dans mon précédent guide du serveur multimédia docker. Donc, je ne les inclut pas ici. Je n’inclus pas non plus le docker compose des extraits de code pour les conteneurs WatchTower et MariaDB. Ces deux conteneurs ne seront pas derrière un proxy. Vous pouvez donc les copier-coller "tels quels" à partir du guide de base.
En outre, je laisse également de côté certaines applications: nzbget, couchpotato et sickrage. Si vous avez besoin de docker Traefik composer des extraits pour ceux s'il vous plaît faites le moi savoir dans les commentaires.
Quelques points clés:
- La plupart des applications ont un
XXXX
dans le menu fixe composez des extraits ci-dessous. Il s’agit du numéro de port sur lequel vous souhaitez que WebUI soit disponible. Il peut s'agir du même port que le port à l'intérieur du conteneur tant qu'il est libre sur la machine hôte. Ce paramètre est facultatif, par exemple uniquement si vous souhaitez pouvoir accéder à l'interface Web à l'aide de nom d'hôte: XXXX depuis le réseau interne. La redirection de port pour un accès à partir d’Internet est un risque de sécurité redondant. Si vous souhaitez toujours l'utiliser, supprimez la mise en commentaire du commentaire.#
au début des 2 lignes de ports. traefik.frontend.rule
– Les extraits ci-dessous peuvent avoir deux règles frontales. Le premier (non commenté) est destiné à l’accès aux sous-domaines. La seconde (commentée avec un # devant) concerne l’accès aux sous-répertoires du domaine privé ou du DNS dynamique. Vous n’avez besoin que de l’un d’eux en fonction de votre situation.
Applications Frontend
Portainer – UI Web pour les conteneurs
Portainer est une interface Web permettant de gérer les conteneurs Docker. Pour remplacer Portainer derrière Traefik, voici le code à ajouter (copier / coller) dans le fichier docker-compose (faites attention aux espaces vides au début de chaque ligne):
Portainer: image: portainer / portainer conteneur_nom: portainer redémarrer: toujours commande: -H unix: ///var/run/docker.sock # ports: # - "XXXX: 9000" volumes: - /var/run/docker.sock:/var/run/docker.sock - $ {USERDIR} / docker / portainer / data: / data - $ {USERDIR} / docker / shared: / shared environnement: - TZ = $ {TZ} réseaux: - traefik_proxy Étiquettes: - "traefik.enable = true" - "traefik.backend = portainer" - "traefik.frontend.rule = Hôte: portainer. $ {DOMAINNAME}" # - "traefik.frontend.rule = Hôte: $ {DOMAINNAME}; PathPrefixStrip: / portainer" - "traefik.port = 9000" - "traefik.docker.network = traefik_proxy" - "traefik.frontend.headers.SSLRedirect = true" - "traefik.frontend.headers.STSSeconds = 315360000" - "traefik.frontend.headers.browserXSSFilter = true" - "traefik.frontend.headers.contentTypeNosniff = true" - "traefik.frontend.headers.forceSTSHeader = true" - "traefik.frontend.headers.SSLHost = example.com" - "traefik.frontend.headers.STSIncludeSubdomains = true" - "traefik.frontend.headers.STSPreload = true" - "traefik.frontend.headers.frameDeny = true"
Remplacer / Configurer:
XXXX
– Il pourrait s'agir du même port que le conteneur: 9000 (doit être libre). Ce paramètre est facultatif. Passez en revue les autres points clés énumérés ci-dessus.
Enregistrez et exécutez le docker-compose.yml
et vérifiez les journaux pour les erreurs:
docker-compose -f $ {USERDIR} /docker/docker-compose.yml up -d; docker-compose logs -tf --tail = "50" portainer
Si vous ne voyez aucun message d'erreur, appuyez sur Ctrl C pour quitter. Portainer WebUI devrait être disponible à l'adresse https://portainer.example.com ou https://example.com/portainer/ (une barre oblique à la fin est nécessaire) selon l'option choisie.
Organizr – Interface Web unifiée HTPC / serveur domestique
Organizr est une interface Web permettant de regrouper toutes vos applications HTPC / Home Server. Pour proxy Organizr derrière Traefik, voici le code à ajouter (copier / coller) au fichier docker-compose (faites attention aux espaces vides au début de chaque ligne):
organisateur: nom_cipient: organiseur redémarrer: toujours image: lsi decoration / organizr volumes: - $ {USERDIR} / docker / organizr: / config - $ {USERDIR} / docker / shared: / shared # ports: # - "XXXX: 80" environnement: - PUID = $ {PUID} - PGID = $ {PGID} - TZ = $ {TZ} réseaux: - traefik_proxy Étiquettes: - "traefik.enable = true" - "traefik.backend = organizr" - "traefik.frontend.rule = Hôte: organizr. $ {DOMAINNAME}" # - "traefik.frontend.rule = Hôte: $ {DOMAINNAME}; PathPrefixStrip: / organizr" - "traefik.port = 80" - "traefik.docker.network = traefik_proxy" - "traefik.frontend.headers.SSLRedirect = true" - "traefik.frontend.headers.STSSeconds = 315360000" - "traefik.frontend.headers.browserXSSFilter = true" - "traefik.frontend.headers.contentTypeNosniff = true" - "traefik.frontend.headers.forceSTSHeader = true" - "traefik.frontend.headers.SSLHost = example.com" - "traefik.frontend.headers.STSIncludeSubdomains = true" - "traefik.frontend.headers.STSPreload = true" - "traefik.frontend.headers.frameDeny = true"
Remplacer / Configurer:
XXXX
– Vous ne pouvez pas utiliser le port 80 car Traefik l'utilise. Ce paramètre est facultatif. Passez en revue les autres points clés énumérés ci-dessus.
Enregistrez et exécutez le docker-compose.yml
et vérifiez les journaux pour les erreurs:
docker-compose -f $ {USERDIR} /docker/docker-compose.yml up -d; docker-compose logs -tf --tail = "50" organisr
Si vous ne voyez aucun message d'erreur, appuyez sur Ctrl C pour quitter. Organizr WebUI devrait être disponible à https://organizr.example.com ou https://example.com/organizr/ (une barre oblique à la fin est nécessaire) selon l'option choisie.
phpMyAdmin – WebUI pour gérer MariaDB
phpMyAdmin est une interface Web de gestion de bases de données MySQL / MariaDB. Pour proxy phpMyAdmin derrière Traefik, voici le code à ajouter (copier-coller) dans le fichier docker-compose (faites attention aux espaces vides au début de chaque ligne):
phpmyadmin: nom d'hôte: phpmyadmin nom_cipient: phpmyadmin image: phpmyadmin / phpmyadmin redémarrer: toujours liens: - mariadb: db # ports: # - XXXX: 80 environnement: - PMA_HOST = mariadb - MYSQL_ROOT_PASSWORD = $ {MYSQL_ROOT_PASSWORD} réseaux: - traefik_proxy - défaut Étiquettes: - "traefik.enable = true" - "traefik.backend = pma" - "traefik.frontend.rule = Hôte: pma. $ {DOMAINNAME}" - "traefik.port = 80" - "traefik.docker.network = traefik_proxy" - "traefik.frontend.headers.SSLRedirect = true" - "traefik.frontend.headers.STSSeconds = 315360000" - "traefik.frontend.headers.browserXSSFilter = true" - "traefik.frontend.headers.contentTypeNosniff = true" - "traefik.frontend.headers.forceSTSHeader = true" - "traefik.frontend.headers.SSLHost = example.com" - "traefik.frontend.headers.STSIncludeSubdomains = true" - "traefik.frontend.headers.STSPreload = true" - "traefik.frontend.headers.frameDeny = true"
Remplacer / Configurer:
MYSQL_ROOT_PASSWORD
– Rempli automatiquement à partir du fichier d’environnement créé précédemment.XXXX
– Vous ne pouvez pas utiliser le port 80 car Traefik l'utilise. Ce paramètre est facultatif. Passez en revue les autres points clés énumérés ci-dessus.
Enregistrez et exécutez le docker-compose.yml
et vérifiez les journaux pour les erreurs:
docker-compose -f $ {USERDIR} /docker/docker-compose.yml up -d; docker-compose logs -tf --tail = "50" phpmyadmin
Si vous ne voyez aucun message d'erreur, appuyez sur Ctrl C pour quitter. phpMyAdmin WebUI devrait être disponible sur https://pma.example.com ou https://example.com/pma/ (une barre oblique à la fin est nécessaire) selon l'option choisie.
Apps Smart Home
Assistant à domicile – Smart Home Hub
Home Assistant (HASS) est un logiciel de domotique basé sur python et open source impressionnant, intégrant plus de 1000 plates-formes. HASS est l'une des applications pour lesquelles je ne pouvais pas travailler en tant que sous-répertoire. Vous devrez donc utiliser un sous-domaine. Dans le cas d'un DNS dynamique, vous devrez créer un sous-domaine distinct.[[Lis: Qu'est-ce qu'une maison intelligente et que peut faire la domotique intelligente pour vous?]
Pour proxy Home Assistant derrière Traefik, voici le code à ajouter (copier / coller) au fichier docker-compose (faites attention aux espaces vides au début de chaque ligne):
homéassistant: conteneur_nom: homeassistant redémarrer: toujours image: homéistante / assistante à domicile dispositifs: - / dev / ttyUSB0: / dev / ttyUSB0 - / dev / ttyUSB1: / dev / ttyUSB1 - / dev / ttyACM0: / dev / ttyACM0 volumes: - $ {USERDIR} / docker / homeassistant: / config - / etc / localtime: / etc / localtime: ro - $ {USERDIR} / docker / shared: / shared # ports: # - "XXXX: 8123" privilégié: vrai environnement: - PUID = $ {PUID} - PGID = $ {PGID} - TZ = $ {TZ} réseaux: - traefik_proxy - défaut Étiquettes: - "traefik.enable = true" - "traefik.backend = homeassistant" - "traefik.frontend.rule = Hôte: hass. $ {DOMAINNAME}" - "traefik.port = 8123" - "traefik.docker.network = traefik_proxy" - "traefik.frontend.headers.SSLRedirect = true" - "traefik.frontend.headers.STSSeconds = 315360000" - "traefik.frontend.headers.browserXSSFilter = true" - "traefik.frontend.headers.contentTypeNosniff = true" - "traefik.frontend.headers.forceSTSHeader = true" - "traefik.frontend.headers.SSLHost=example.com" - "traefik.frontend.headers.STSIncludeSubdomains=true" - "traefik.frontend.headers.STSPreload=true" - "traefik.frontend.headers.frameDeny=true"
Replace/Configure:
XXXX
– It could be the same port as the container: 8123 (must be free). This setting is optional. Review other key points listed above.- Devices List – This list will make USB devices available to home assistant inside the docker container. If you have a USB Z-wave stick then you will need to find out its device address. Typically, it should be
/dev/ttyACM0
but you can find out the correct address using one of the following commands:ls -ltr /dev/tty*|tail -n 1 ls /dev
Save and run the docker-compose.yml
and check the logs for any errors:
docker-compose -f ${USERDIR}/docker/docker-compose.yml up -d ; docker-compose logs -tf --tail="50" homeassistant
If you see no error messages, press Ctrl C to exit. HASS WebUI should be available at https://hass.example.com. The first time you start Home Assistant, it can take several minutes to an hour to boot up as it compiles and creates several files during the process. Alternatively, you may follow the real-time logs for homeassistant
container to see when the first startup completes. Subsequent startups should be faster.
Downloaders
I left out NZBget under downloaders. If you need the Traefik Docker Compose example for that, please let me know in the comments section.
VPN Guides
Windows, Android, Ubuntu
Kodi OpenVPN
OSMC on RPi
♦ Hide your browsing (no logs), Anonymize Streaming and Downloads
♦ Circumvent Geo/Country Restrictions and access worldwide content
♦ Works on Windows, Mac, Linux, Android, iOS, Router, and more
♦ Money back guarantee – Sign Up Now
Transmission with VPN – Bittorrent Downloader
This container is a Transmission bittorrent client with VPN autokill switch. So download only happens when VPN is active. The example below shows an example for IPVanish VPN, which works great. To proxy Transmission behind Traefik, here is the code to add (copy-paste) in the docker-compose file (pay attention to blank spaces at the beginning of each line):
transmission-vpn: container_name: transmission-vpn image: haugene/transmission-openvpn cap_add: - NET_ADMIN devices: - /dev/net/tun restart: always # ports: # - "XXXX:9091" dns: - 1.1.1.1 - 1.0.0.1 volumes: - /etc/localtime:/etc/localtime:ro - ${USERDIR}/docker/transmission-vpn:/data - ${USERDIR}/docker/shared:/shared - ${USERDIR}/Downloads:/data/watch - ${USERDIR}/Downloads/completed:/data/completed - ${USERDIR}/Downloads/incomplete:/data/incomplete environment: - OPENVPN_PROVIDER=IPVANISH - OPENVPN_USERNAME=ipvanish_username - OPENVPN_PASSWORD=ipvanish_password - OPENVPN_CONFIG="YYYYYYYYYYY" - OPENVPN_OPTS=--inactive 3600 --ping 10 --ping-exit 60 - LOCAL_NETWORK=192.168.1.0/24 - PUID=${PUID} - PGID=${PGID} - TZ=${TZ} - TRANSMISSION_RPC_AUTHENTICATION_REQUIRED=true - TRANSMISSION_RPC_HOST_WHITELIST="127.0.0.1,192.168.*.*" - TRANSMISSION_RPC_PASSWORD=webui_password - TRANSMISSION_RPC_USERNAME=webui_username - TRANSMISSION_UMASK=002 - TRANSMISSION_RATIO_LIMIT=1.00 - TRANSMISSION_RATIO_LIMIT_ENABLED=true networks: - traefik_proxy labels: - "traefik.enable=true" - "traefik.backend=transmission-vpn" # - "traefik.frontend.rule=Host:${DOMAINNAME}; PathPrefix: /transmission" - "traefik.frontend.rule=Host:transmission.${DOMAINNAME}" - "traefik.port=9091" - "traefik.docker.network=traefik_proxy" - "traefik.frontend.headers.SSLRedirect=true" - "traefik.frontend.headers.STSSeconds=315360000" - "traefik.frontend.headers.browserXSSFilter=true" - "traefik.frontend.headers.contentTypeNosniff=true" - "traefik.frontend.headers.forceSTSHeader=true" - "traefik.frontend.headers.SSLHost=example.com" - "traefik.frontend.headers.STSIncludeSubdomains=true" - "traefik.frontend.headers.STSPreload=true" - "traefik.frontend.headers.frameDeny=true"
Any settings changes you will make through the web interface will not stick. Therefore, you will have to pass transmission settings as environmental variables. Whole list of variables is available here. I have added a few important ones already in the docker compose code above.
Replace/Configure:
XXXX
– It could be the same port as the container: 9091 (must be free). This setting is optional. Review other key points listed above.OPENVPN_PROVIDER
– Desired VPN Provider. I have shown IPVanish. Check here for other provider names.OPENVPN_USERNAME
– VPN provider username.OPENVPN_PASSWORD
– VPN provider password.OPENVPN_CONFIG
– Optional (you may remove this line). If you like a specific VPN server you may add it here. For example,ipvanish-CA-Montreal-yul-c04
au lieu deYYYYYYYYYYY
.LOCAL_NETWORK
– This is important. Since Transmission traffic goes through VPN, you won’t be able to access the web UI unless local network is specified correctly. Typically, it is 192.168.1.0/24 or 192.168.0.0/24. With your network listed here you should be able to access WebUI from your home network.TRANSMISSION_RPC_HOST_WHITELIST
– Specify the hosts from which you can connect to Transmission WebUI. This typically includes server on which Transmission is running (127.0.0.1) and your local network IPs (192.168.*.*).TRANSMISSION_RPC_PASSWORD
– Desired Transmission WebUI password.TRANSMISSION_RPC_USERNAME
– Desired Transmission WebUI username.TRANSMISSION_UMASK
– Recommended is 022. But for home use I prefer 002 to avoid permission issues.
Save and run the docker-compose.yml
and check the logs for any errors:
docker-compose -f ${USERDIR}/docker/docker-compose.yml up -d ; docker-compose logs -tf --tail="50" transmission-vpn
If you see no error messages, press Ctrl C to exit. Transmission WebUI should be available at https://transmission.example.com ou https://example.com/transmission/web/ (forward slash at the end is needed) depending on what option you chose. You can check the real-time logs using docker-compose logs transmission-vpn
for errors.
One additional advantage of putting Transmission VPN behind Traefik proxy is that Traefik makes the WebUI accessible outside your home network.
VPN Guides
Windows, Android, Ubuntu
Kodi OpenVPN
OSMC on RPi
♦ Hide your browsing (no logs), Anonymize Streaming and Downloads
♦ Circumvent Geo/Country Restrictions and access worldwide content
♦ Works on Windows, Mac, Linux, Android, iOS, Router, and more
♦ Money back guarantee – Sign Up Now
qBittorrent without VPN – Bittorrent Downloader (Alternative)
This container is a qBittorrent client. Note that this does not have a VPN built in. You can skip it if you went with Transmission VPN option above. To proxy qBittorrent behind Traefik, here is the code to add (copy-paste) in the docker-compose file (pay attention to blank spaces at the beginning of each line):
qbittorrent: image: "linuxserver/qbittorrent" container_name: "qbittorrent" volumes: - ${USERDIR}/docker/qbittorrent:/config - ${USERDIR}/Downloads/completed:/downloads - ${USERDIR}/docker/shared:/shared ports: # - "XXXX:8080" - "6881:6881" - "6881:6881/udp" restart: always environment: - PUID=${PUID} - PGID=${PGID} - TZ=${TZ} - UMASK_SET=002 networks: - traefik_proxy labels: - "traefik.enable=true" - "traefik.backend=qbittorrent" # - "traefik.frontend.rule=Host:${DOMAINNAME}; PathPrefixStrip: /qbittorrent" - "traefik.frontend.rule=Host:qbit.${DOMAINNAME}" - "traefik.port=XXXX" - "traefik.docker.network=traefik_proxy" - "traefik.frontend.headers.SSLRedirect=true" - "traefik.frontend.headers.STSSeconds=315360000" - "traefik.frontend.headers.browserXSSFilter=true" - "traefik.frontend.headers.contentTypeNosniff=true" - "traefik.frontend.headers.forceSTSHeader=true" - "traefik.frontend.headers.SSLHost=example.com" - "traefik.frontend.headers.STSIncludeSubdomains=true" - "traefik.frontend.headers.STSPreload=true" - "traefik.frontend.headers.frameDeny=true"
Replace/Configure:
${USERDIR}/Downloads/completed
– Path where to save downloaded files.${USERDIR}
is filled automatically from the environment file we created previously.XXXX
– It could be the same port as the container: 8080 (must be free). This setting is optional. Review other key points listed above.UMASK_SET
– 022 is recommended. But I prefer 002 to avoid permission issues.
Save and run the docker-compose.yml
and check the logs for any errors:
docker-compose -f ${USERDIR}/docker/docker-compose.yml up -d ; docker-compose logs -tf --tail="50" qbittorrent
If you see no error messages, press Ctrl C to exit. qBittorrent WebUI should be available at https://qbittorrent.example.com ou https://example.com/qbittorrent/ (forward slash at the end is needed) depending on what option you chose.
SABnzbd – Usenet (NZB) Downloader
SABnzbd is a Usenet downloader. To proxy SABnzbd behind Traefik, here is the code to add (copy-paste) in the docker-compose file (pay attention to blank spaces at the beginning of each line):
sabnzbd: image: "linuxserver/sabnzbd" container_name: "sabnzbd" volumes: - ${USERDIR}/docker/sabnzbd:/config - ${USERDIR}/Downloads/completed:/downloads - ${USERDIR}/Downloads/incomplete:/incomplete-downloads - ${USERDIR}/docker/shared:/shared # ports: # - "XXXX:8080" restart: always environment: - PUID=${PUID} - PGID=${PGID} - TZ=${TZ} networks: - traefik_proxy labels: - "traefik.enable=true" - "traefik.backend=sabnzbd" - "traefik.frontend.rule=Host:sabnzbd.${DOMAINNAME}" # - "traefik.frontend.rule=Host:${DOMAINNAME}; PathPrefix: /sabnzbd" - "traefik.port=8080" - "traefik.docker.network=traefik_proxy" - "traefik.frontend.headers.SSLRedirect=true" - "traefik.frontend.headers.STSSeconds=315360000" - "traefik.frontend.headers.browserXSSFilter=true" - "traefik.frontend.headers.contentTypeNosniff=true" - "traefik.frontend.headers.forceSTSHeader=true" - "traefik.frontend.headers.SSLHost=example.com" - "traefik.frontend.headers.STSIncludeSubdomains=true" - "traefik.frontend.headers.STSPreload=true" - "traefik.frontend.headers.frameDeny=true"
Replace/Configure:
${USERDIR}/Downloads/completed
– Path where to save downloaded files.${USERDIR}
is filled automatically from the environment file we created previously.${USERDIR}/Downloads/incomplete
– Path where to save currently downloading files.${USERDIR}
is filled automatically from the environment file we created previously.XXXX
– It could be the same port as the container: 8080 (must be free). This setting is optional. Review other key points listed above.- Additional Configuration – If you had SABnzbd’s internal HTTPS enabled in your previous setup and are reusing the config file, then disable SABnzbd’s internal HTTPS option from SABnzbd settings page . To do this you may have to edit SABnzbd’s configuration
${USERDIR}/docker/sabnzbd/sabnzbd.ini
Et mettreenable_https
to 0 instead of 1.
Save and run the docker-compose.yml
and check the logs for any errors:
docker-compose -f ${USERDIR}/docker/docker-compose.yml up -d ; docker-compose logs -tf --tail="50" sabnzbd
If you see no error messages, press Ctrl C to exit. SABnzbd WebUI should be available at https://sabnzbd.example.com ou https://example.com/sabnzbd/ (forward slash at the end is needed) depending on what option you chose.
Usenet is Better Than Torrents:
For apps like SickBeard, SickRage, Sonarr, and CouchPotato, Usenet is better than Torrents. Unlimited plans from Newshosting (US Servers), Eweka (EU Servers), or UsenetServer, which offer >3000 days retention, SSL for privacy, and VPN for anonymity, are better for HD content.
Personal Video Recorders
I left out CouchPotato and Sickrage for PVRs. I switched to Radarr and Sonarr and I like them better. If you need the Traefik Docker Compose example for CouchPotato and SickRage, please let me know in the comments section.
Radarr – Movie Download and Management
Radarr is an automated movie downloader. To proxy Radarr behind Traefik, here is the code to add (copy-paste) in the docker-compose file (pay attention to blank spaces at the beginning of each line):
radarr: image: "linuxserver/radarr" container_name: "radarr" volumes: - ${USERDIR}/docker/radarr:/config - ${USERDIR}/Downloads/completed:/downloads - ${USERDIR}/media/movies:/movies - "/etc/localtime:/etc/localtime:ro" - ${USERDIR}/docker/shared:/shared # ports: # - "XXXX:7878" restart: always environment: - PUID=${PUID} - PGID=${PGID} - TZ=${TZ} networks: - traefik_proxy labels: - "traefik.enable=true" - "traefik.backend=radarr" # - "traefik.frontend.rule=Host:${DOMAINNAME}; PathPrefix: /radarr" - "traefik.frontend.rule=Host:radarr.${DOMAINNAME}" - "traefik.port=7878" - "traefik.docker.network=traefik_proxy" - "traefik.frontend.headers.SSLRedirect=true" - "traefik.frontend.headers.STSSeconds=315360000" - "traefik.frontend.headers.browserXSSFilter=true" - "traefik.frontend.headers.contentTypeNosniff=true" - "traefik.frontend.headers.forceSTSHeader=true" - "traefik.frontend.headers.SSLHost=example.com" - "traefik.frontend.headers.STSIncludeSubdomains=true" - "traefik.frontend.headers.STSPreload=true" - "traefik.frontend.headers.frameDeny=true"
Replace/Configure:
${USERDIR}/Downloads/completed
– Path where to save downloaded files.${USERDIR}
is filled automatically from the environment file we created previously.${USERDIR}/media/movies
– Path where to your movie library.${USERDIR}
is filled automatically from the environment file we created previously.XXXX
– It could be the same port as the container: 7878 (must be free). This setting is optional. Review other key points listed above.- Additional Configuration – If you are using the subdirectory option then set
url_base
à radarr in Radarr’s settings Général tab after starting the container.
Save and run the docker-compose.yml
and check the logs for any errors:
docker-compose -f ${USERDIR}/docker/docker-compose.yml up -d ; docker-compose logs -tf --tail="50" radarr
If you see no error messages, press Ctrl C to exit. Radarr WebUI should be available at https://radarr.example.com ou https://example.com/radarr/ (forward slash at the end is needed) depending on what option you chose.
Sonarr – TV Show Download and Management
Sonarr is an automated TV Show episode downloader. To proxy Sonarr behind Traefik, here is the code to add (copy-paste) in the docker-compose file (pay attention to blank spaces at the beginning of each line):
Usenet is Better Than Torrents:
For apps like SickBeard, SickRage, Sonarr, and CouchPotato, Usenet is better than Torrents. Unlimited plans from Newshosting (US Servers), Eweka (EU Servers), or UsenetServer, which offer >3000 days retention, SSL for privacy, and VPN for anonymity, are better for HD content.
sonarr: image: "linuxserver/sonarr" container_name: "sonarr" volumes: - ${USERDIR}/docker/sonarr:/config - ${USERDIR}/Downloads/completed:/downloads - ${USERDIR}/media/tvshows:/tv - "/etc/localtime:/etc/localtime:ro" - ${USERDIR}/docker/shared:/shared # ports: # - "XXXX:8989" restart: always environment: - PUID=${PUID} - PGID=${PGID} - TZ=${TZ} networks: - traefik_proxy labels: - "traefik.enable=true" - "traefik.backend=sonarr" # - "traefik.frontend.rule=Host:${DOMAINNAME}; PathPrefix: /sonarr" - "traefik.frontend.rule=Host:sonarr.${DOMAINNAME}" - "traefik.port=8989" - "traefik.docker.network=traefik_proxy" - "traefik.frontend.headers.SSLRedirect=true" - "traefik.frontend.headers.STSSeconds=315360000" - "traefik.frontend.headers.browserXSSFilter=true" - "traefik.frontend.headers.contentTypeNosniff=true" - "traefik.frontend.headers.forceSTSHeader=true" - "traefik.frontend.headers.SSLHost=example.com" - "traefik.frontend.headers.STSIncludeSubdomains=true" - "traefik.frontend.headers.STSPreload=true" - "traefik.frontend.headers.frameDeny=true"
Replace/Configure:
${USERDIR}/Downloads/completed
– Path where to save downloaded files.${USERDIR}
is filled automatically from the environment file we created previously.${USERDIR}/media/tvshows
– Path where to your movie library.${USERDIR}
is filled automatically from the environment file we created previously.XXXX
– It could be the same port as the container: 8989 (must be free). This setting is optional. Review other key points listed above.- Additional Configuration – If you are using the subdirectory option then set
url_base
à sonarr in Sonarr’s settings Général tab after starting the container.
Save and run the docker-compose.yml
and check the logs for any errors:
docker-compose -f ${USERDIR}/docker/docker-compose.yml up -d ; docker-compose logs -tf --tail="50" sonarr
If you see no error messages, press Ctrl C to exit. Sonarr WebUI should be available at https://sonarr.example.com ou https://example.com/sonarr/ (forward slash at the end is needed) depending on what option you chose.
Usenet is Better Than Torrents:
For apps like SickBeard, SickRage, Sonarr, and CouchPotato, Usenet is better than Torrents. Unlimited plans from Newshosting (US Servers), Eweka (EU Servers), or UsenetServer, which offer >3000 days retention, SSL for privacy, and VPN for anonymity, are better for HD content.
Media Server Apps
Plex Media Server
Plex Media Server is the most commonly used option for streaming your media to various devices inside and outside your home. This page has an example Traefik Docker compose example that, according to the author of the post, works for Plex as a subdirectory. However, I could not get it to work as a subdirectory. So I am providing the subdomain example. In the case of dynamic DNS, you will need to create separate subdomain (eg. myplexserver.crabdance.com). To proxy Plex behind Traefik, here is the code to add (copy-paste) in the docker-compose file (pay attention to blank spaces at the beginning of each line):
plexms: container_name: plexms restart: always image: plexinc/pms-docker volumes: - ${USERDIR}/docker/plexms:/config - ${USERDIR}/Downloads/plex_tmp:/transcode - /media/media:/media - ${USERDIR}/docker/shared:/shared ports: - "32400:32400/tcp" - "3005:3005/tcp" - "8324:8324/tcp" - "32469:32469/tcp" - "1900:1900/udp" - "32410:32410/udp" - "32412:32412/udp" - "32413:32413/udp" - "32414:32414/udp" environment: - TZ=${TZ} - HOSTNAME="Docker Plex" - PLEX_CLAIM="claim-YYYYYYYYY" - PLEX_UID=${PUID} - PLEX_GID=${PGID} - ADVERTISE_IP="http://SERVER-IP:32400/" networks: - traefik_proxy labels: - "traefik.enable=true" - "traefik.backend=plexms" - "traefik.frontend.rule=Host:plex.${DOMAINNAME}" - "traefik.port=32400" - "traefik.protocol=http" - "traefik.docker.network=traefik_proxy" - "traefik.frontend.headers.SSLRedirect=true" - "traefik.frontend.headers.STSSeconds=315360000" - "traefik.frontend.headers.browserXSSFilter=true" - "traefik.frontend.headers.contentTypeNosniff=true" - "traefik.frontend.headers.forceSTSHeader=true" - "traefik.frontend.headers.SSLHost=example.com" - "traefik.frontend.headers.STSIncludeSubdomains=true" - "traefik.frontend.headers.STSPreload=true" - "traefik.frontend.headers.frameDeny=true"
Replace/Configure:
${USERDIR}/Downloads/plex_tmp
– Path temporary dolder for transcoding.${USERDIR}
is filled automatically from the environment file we created previously./media/media
– Path where to your media library.HOSTNAME
– Name your plex server.PLEX_CLAIM
– Your Plex access claim code from here. The word “claim” in front of the code must be in lower case.ADVERTISE_IP
– IP Address of your server (eg. 192.168.1.100) – you can get this from your router admin page or runifconfig
in terminal.32400
– port number on which you Plex media server will be available. I suggest leaving this as is. Port forwarding for access from internet is a security risk and redundant since you can access Plex using the URL below.
Save and run the docker-compose.yml
and check the logs for any errors:
docker-compose -f ${USERDIR}/docker/docker-compose.yml up -d ; docker-compose logs -tf --tail="50" plexms
If you see no error messages, press Ctrl C to exit. Plex WebUI should be available at https://plex.example.com. First time you access Plex media server, ensure that you are connected to your home network. If you have streaming issues then take a look at our solutions for Plex buffering issues.
Best Plex Client Devices:
- NVIDIA SHIELD TV Pro Home Media Server – $299.99
- Amazon Fire TV Streaming Media Player – $89.99
- Roku Premiere+ 4K UHD – $83.99
- CanaKit Raspberry Pi 3 Complete Starter Kit – $69.99
- Xbox One 500 GB Console – $264.99
Tautulli (aka PlexPy) – Monitoring Plex Usage
Tautulli (previously known as PlexPy) is a Plex usage monitoring app. To proxy Tautulli behind Traefik, here is the code to add (copy-paste) in the docker-compose file (pay attention to blank spaces at the beginning of each line):
tautulli: container_name: tautulli restart: always image: linuxserver/tautulli volumes: - ${USERDIR}/docker/tautulli/config:/config - ${USERDIR}/docker/tautulli/logs:/logs:ro - ${USERDIR}/docker/shared:/shared # ports: # - "XXXX:8181" environment: - PUID=${PUID} - PGID=${PGID} - TZ=${TZ} networks: - traefik_proxy labels: - "traefik.enable=true" - "traefik.backend=tautulli" - "traefik.frontend.rule=Host:tautulli.${DOMAINNAME}" # - "traefik.frontend.rule=Host:${DOMAINNAME}; PathPrefix: /tautulli" - "traefik.port=8181" - "traefik.docker.network=traefik_proxy" - "traefik.frontend.headers.SSLRedirect=true" - "traefik.frontend.headers.STSSeconds=315360000" - "traefik.frontend.headers.browserXSSFilter=true" - "traefik.frontend.headers.contentTypeNosniff=true" - "traefik.frontend.headers.forceSTSHeader=true" - "traefik.frontend.headers.SSLHost=example.com" - "traefik.frontend.headers.STSIncludeSubdomains=true" - "traefik.frontend.headers.STSPreload=true" - "traefik.frontend.headers.frameDeny=true"
Replace/Configure:
XXXX
– It could be the same port as the container: 8181 (must be free). This setting is optional. Review other key points listed above.- Additional Configuration – If you are using the subdirectory option then set
HTTP Root
à tautulli in Tautulli’s settings Web Interface tab after starting the container.
Save and run the docker-compose.yml
and check the logs for any errors:
docker-compose -f ${USERDIR}/docker/docker-compose.yml up -d ; docker-compose logs -tf --tail="50" tautulli
If you see no error messages, press Ctrl C to exit. Tautulli WebUI should be available at https://tautulli.example.com ou https://example.com/tautulli/ (forward slash at the end is needed) depending on what option you chose.
Ombi – Accept Requests for your Media Server
Ombi allows Plex users to request media to the owner of the media server or even automatically download them. To reverse proxy Ombi behind Traefik, here is the code to add (copy-paste) in the docker-compose file (pay attention to blank spaces at the beginning of each line):
ombi: container_name: ombi restart: always image: linuxserver/ombi volumes: - ${USERDIR}/docker/ombi:/config - ${USERDIR}/docker/shared:/shared # ports: # - "XXXX:3579" environment: - PUID=${PUID} - PGID=${PGID} - TZ=${TZ} networks: - traefik_proxy labels: - "traefik.enable=true" - "traefik.backend=ombi" - "traefik.frontend.rule=Host:ombi.${DOMAINNAME}" # - "traefik.frontend.rule=Host:${DOMAINNAME}; PathPrefix: /ombi" - "traefik.port=3579" - "traefik.docker.network=traefik_proxy" - "traefik.frontend.headers.SSLRedirect=true" - "traefik.frontend.headers.STSSeconds=315360000" - "traefik.frontend.headers.browserXSSFilter=true" - "traefik.frontend.headers.contentTypeNosniff=true" - "traefik.frontend.headers.forceSTSHeader=true" - "traefik.frontend.headers.SSLHost=example.com" - "traefik.frontend.headers.STSIncludeSubdomains=true" - "traefik.frontend.headers.STSPreload=true" - "traefik.frontend.headers.frameDeny=true"
Replace/Configure:
XXXX
– It could be the same port as the container: 3579 (must be free). This setting is optional. Review other key points listed above.- Additional Configuration – If you are using the subdirectory option then set
Base Url
à ombi in Ombi’s settings Ombi tab after starting the container.
Save and run the docker-compose.yml
and check the logs for any errors:
docker-compose -f ${USERDIR}/docker/docker-compose.yml up -d ; docker-compose logs -tf --tail="50" ombi
If you see no error messages, press Ctrl C to exit. Ombi WebUI should be available at https://ombi.example.com ou https://example.com/ombi/ (forward slash at the end is needed) depending on what option you chose.
Searchers
NZBHydra – NZB Meta Search
NZB Hydra allows you to search NZB files and add them to your NZB client for downloading. To proxy NZB Hydra behind Traefik, here is the code to add (copy-paste) in the docker-compose file (pay attention to blank spaces at the beginning of each line):
hydra: image: "linuxserver/hydra" container_name: "hydra" volumes: - ${USERDIR}/docker/hydra:/config - ${USERDIR}/Downloads:/downloads - ${USERDIR}/docker/shared:/shared # ports: # - "XXXX:5075" restart: always environment: - PUID=${PUID} - PGID=${PGID} - TZ=${TZ} networks: - traefik_proxy labels: - "traefik.enable=true" - "traefik.backend=hydra" - "traefik.frontend.rule=Host:hydra.${DOMAINNAME}" # - "traefik.frontend.rule=Host:${DOMAINNAME}; PathPrefix: /hydra" - "traefik.port=5075" - "traefik.docker.network=traefik_proxy" - "traefik.frontend.headers.SSLRedirect=true" - "traefik.frontend.headers.STSSeconds=315360000" - "traefik.frontend.headers.browserXSSFilter=true" - "traefik.frontend.headers.contentTypeNosniff=true" - "traefik.frontend.headers.forceSTSHeader=true" - "traefik.frontend.headers.SSLHost=example.com" - "traefik.frontend.headers.STSIncludeSubdomains=true" - "traefik.frontend.headers.STSPreload=true" - "traefik.frontend.headers.frameDeny=true"
Replace/Configure:
${USERDIR}/Downloads
– Path where to save downloaded files.${USERDIR}
is filled automatically from the environment file we created previously.XXXX
– It could be the same port as the container: 5075 (must be free). This setting is optional. Review other key points listed above.- Additional Configuration – If you are using the subdirectory option then set
URL Base
à hydre in Hydra’s settings Main tab after starting the container.
Save and run the docker-compose.yml
and check the logs for any errors:
docker-compose -f ${USERDIR}/docker/docker-compose.yml up -d ; docker-compose logs -tf --tail="50" hydra
If you see no error messages, press Ctrl C to exit. NZB Hydra WebUI should be available at https://hydra.example.com ou https://example.com/hydra/ (forward slash at the end is needed) depending on what option you chose.
Jackett – Torrent Proxy
Jackett serves as a proxy for several torrent indexes and extends the sources available for apps such as Sonarr and Radarr. To proxy Jackett behind Traefik, here is the code to add (copy-paste) in the docker-compose file (pay attention to blank spaces at the beginning of each line):
jackett: image: "linuxserver/jackett" container_name: "jackett" volumes: - ${USERDIR}/docker/jackett:/config - ${USERDIR}/Downloads/completed:/downloads - "/etc/localtime:/etc/localtime:ro" - ${USERDIR}/docker/shared:/shared # ports: # - "XXXX:9117" restart: always environment: - PUID=${PUID} - PGID=${PGID} - TZ=${TZ} networks: - traefik_proxy labels: - "traefik.enable=true" - "traefik.backend=jackett" - "traefik.frontend.rule=Host:jackett.${DOMAINNAME}" # - "traefik.frontend.rule=Host:${DOMAINNAME}; PathPrefix: /jackett" - "traefik.port=9117" - "traefik.docker.network=traefik_proxy" - "traefik.frontend.headers.SSLRedirect=true" - "traefik.frontend.headers.STSSeconds=315360000" - "traefik.frontend.headers.browserXSSFilter=true" - "traefik.frontend.headers.contentTypeNosniff=true" - "traefik.frontend.headers.forceSTSHeader=true" - "traefik.frontend.headers.SSLHost=example.com" - "traefik.frontend.headers.STSIncludeSubdomains=true" - "traefik.frontend.headers.STSPreload=true" - "traefik.frontend.headers.frameDeny=true"
Replace/Configure:
${USERDIR}/Downloads
– Path where to save downloaded files.${USERDIR}
is filled automatically from the environment file we created previously.XXXX
– It could be the same port as the container: 9117 (must be free). This setting is optional. Review other key points listed above.- Additional Configuration – If you are using the subdirectory option then set
Base Path Override
à jackett in Jackett’s settings after starting the container.
Save and run the docker-compose.yml
and check the logs for any errors:
docker-compose -f ${USERDIR}/docker/docker-compose.yml up -d ; docker-compose logs -tf --tail="50" jackett
If you see no error messages, press Ctrl C to exit. Jackett WebUI should be available at https://jackett.example.com ou https://example.com/jackett/ (forward slash at the end is needed) depending on what option you chose.
Utilitaires
I leftout MariaDB here since it does not have to be proxied. You can reuse the compose code from my basic guide.
NextCloud – Your Own Cloud Storage
NextCloud gives you your personal/private cloud storage. NextCloud is one of the apps that I could not get to work as a subdirectory. So you will need to use a subdomain (eg. mynextcloud.crabdance.com). In the case of dynamic DNS, you will need to create separate subdomain. To proxy NextCloud behind Traefik reverse proxy, here is the code to add (copy-paste) in the docker-compose file (pay attention to blank spaces at the beginning of each line):
nextcloud: container_name: nextcloud restart: always image: linuxserver/nextcloud volumes: - ${USERDIR}/docker/nextcloud:/config - ${USERDIR}/shared_data:/data - ${USERDIR}/docker/shared:/shared # ports: # - "XXXX:443" environment: - PUID=${PUID} - PGID=${PGID} networks: - traefik_proxy labels: - "traefik.enable=true" - "traefik.backend=nextcloud" - "traefik.frontend.rule=Host:nextcloud.${DOMAINNAME}" - "traefik.port=443" - "traefik.protocol=https" - "traefik.docker.network=traefik_proxy" - "traefik.frontend.headers.SSLRedirect=true" - "traefik.frontend.headers.STSSeconds=315360000" - "traefik.frontend.headers.browserXSSFilter=true" - "traefik.frontend.headers.contentTypeNosniff=true" - "traefik.frontend.headers.forceSTSHeader=true" - "traefik.frontend.headers.SSLHost=example.com" - "traefik.frontend.headers.STSIncludeSubdomains=true" - "traefik.frontend.headers.STSPreload=true" - "traefik.frontend.headers.frameDeny=true"
Replace/Configure:
${USERDIR}/shared_data
– Path to data you want to share/sync.${USERDIR}
is filled automatically from the environment file we created previously.XXXX
– It cannot be 443 since Traefik is already using 443. This setting is optional. Review other key points listed above.
Save and run the docker-compose.yml
and check the logs for any errors:
docker-compose -f ${USERDIR}/docker/docker-compose.yml up -d ; docker-compose logs -tf --tail="50" nextcloud
If you see no error messages, press Ctrl C to exit. NextCloud WebUI should be available at https://nextcloud.example.com. Note that this setup does not include a backend database such as MySQL or MariaDB. Therefore, data will be stored as SQLite database. A backend database is recommended for better performance. This will be covered in a separate guide. Briefly, you can use phpMyAdmin to create a database, username, and password for NextCloud and provide that during setup.
Proxying Non-Docker Host System Apps
What about those apps that are not on docker but on your host system? I have a few of those (eg. Webmin). Traefik can also reverse proxy them and it is easy to implement. Unfortunately, that is outside the scope of this guide, which is already close to 8000 words. But if you cannot wait for my next guide then you may take a look at this Traefik documentation to figure that out. In essence, you will have to specify the [backends]
et [frontends]
for each app in the rules.toml
file inside ${USERDIR}/docker/traefik
folder. Traefik will auto detect and update its configurations.
For example, here is the rules.toml
file for proxying my Raspberry Pi Pihole setup behind Traefik Proxy:
# Putting non-docker apps behind traefik proxy. This example shows pihole. [backends] [backends.backend-pihole] [backends.backend-pihole.servers] [backends.backend-pihole.servers.server-pihole-ext] url = "http://192.168.100.26" weight = 0 [frontends] [frontends.frontend-pihole] backend = "backend-pihole" passHostHeader = true # basicAuth = [ # HTTP Authentication # "xxx:yyyyyyyyyyyy", # ] [frontends.frontend-pihole.routes] [frontends.frontend-pihole.routes.route-pihole-ext] rule = "Host:pi.example.com"
Dépannage
If you run into issues while following this Traefik docker guide, the best way is to follow the Traefik logs as described previously in this guide. In addition, you may also set your LogLevel à DEBUG dans ton traefik.toml
and recreate your Traefik container.
If you are not able to reach some of your proxied apps, then review troubleshooting section of my docker guide. In addition, ensure that you are using the forward slash at the end of the URLs (eg. https://example.com/app/). If you have additional issues, Traefik slack channel is an amazing source of help with several awesome people. I could not have completed my setup without help from @Giblet’s help.
Complete Traefik Docker Compose Example File
We are almost at the end of this Traefik tutorial. My entire docker compose file for Traefik is available here. In the end your docker-compose.yml
should look very similar. You can also copy-paste the entire contents of the file linked above as a starting point for your docker-compose.yml
file.
Starting, Stopping, and Autostarting Containers
Starting, Stopping, and Autostarting were all described in my basic docker server guide. Since all containers above are built with restart: always
clause, they will automatically start after a system boot. If for some reason you do not want this behavior you can set restart to “no”.
Traefik Docker Compose Guide – Final Thoughts
You may have exposed your ports to the internet after following my previous docker media server guide. As mentioned before, one of the main advantages of a reverse proxy is the ability to expose the app to the internet without exposing their ports. If you have successfully implemented reverse proxy for docker then at this point I strongly recommend disabling port forwards on your router (except 80 and 443 that Traefik needs). Your would still be able to access your apps using hostname:port from your home network.
Writing this guide was not easy. I had no idea about Traefik and most people on the internet didn’t since Traefik is still relatively new. It took nearly 2 months and several hundred trials to get this guide to work for both private domains and free dynamic DNS. So I hope this guide makes your life easier. As in my previous docker guide, everything in this guide can also be done using docker commands. But Docker compose makes it much more easier for newbies.
There are multiple ways to setup what I showed above. I did what I thought was the easiest way for newbies. I am sure there are better ways to do certain things. If you are aware of such things, please do not hesitate to share your thoughts in the comments below. Otherwise, I hope that this Traefik Docker-Compose tutorial guide helped you.