Traefik Reverse Proxy avec LetsEncrypt pour Docker Media Server

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ée rules.toml et traefik.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:

  1. 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
  2. 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.
  3. 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.

Schéma du proxy inverse

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:

  1. Nom d'utilisateur: avec votre nom d'utilisateur HTTP.
  2. 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:

  1. Nom d'utilisateur: avec votre nom d'utilisateur HTTP généré à l'étape précédente.
  2. mystrongpassword: avec votre mot de passe HTTP haché généré à l'étape précédente.
  3. exemple.com: Votre nom de domaine DNS privé ou dynamique.
  4. [email protected]: Email de votre compte cloudflare. Ceci n'est requis que si vous utilisez le challenge DNS pour les certificats Wildcard Traefik Letsencrypt.
  5. 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.

Cryptons la liste des fournisseurs DNS de Traefik Wildcard

Encryptage de la liste des fournisseurs DNS Traefik Wildcard

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:

  1. [email protected]: avec votre email.
  2. EXAMPLE.COM: avec votre nom de domaine privé.
  3. InsecureSkipVerify = true: Je devais ajouter au début pour permettre à certaines applications (par exemple, le contrôleur UniFi) d'être accessibles via Traefik.
  4. provider = "cloudflare": Passez à votre fournisseur DNS pour le défi DNS.
  5. exposéebydefault = false: Cela vous obligera à utiliser traefik.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:

  1. [email protected]: avec votre email.
  2. EXAMPLE.COM: avec votre nom de domaine privé.
  3. InsecureSkipVerify = true: Je devais ajouter au début pour permettre à certaines applications (par exemple, le contrôleur UniFi) d'être accessibles via Traefik.
  4. exposéebydefault = false: Cela vous obligera à utiliser traefik.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).

Interface Web Traefik avec Let's Encrypt SSL

Interface Web Traefik avec Let’s Encrypt Wildcard SSL

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:

  1. 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.
  2. 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 Docker compose des exemples de journaux - SSL pour mysubdomain.crabdance.com (Afraid.org Dynamic DNS)

Traefik Logs – SSL pour mysubdomain.crabdance.com (DNS dynamique 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).

Traefik encryptons le certificat pour le sous-domaine DNS dynamique gratuit via Afraid.org

Traefik Let Encrypt Certificate pour le sous-domaine DNS dynamique gratuit via Afraid.org

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:

  1. 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.
  2. 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:

  1. 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:

  1. 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:

  1. MYSQL_ROOT_PASSWORD – Rempli automatiquement à partir du fichier d’environnement créé précédemment.
  2. 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:

  1. XXXX – It could be the same port as the container: 8123 (must be free). This setting is optional. Review other key points listed above.
  2. 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:

  1. XXXX – It could be the same port as the container: 9091 (must be free). This setting is optional. Review other key points listed above.
  2. OPENVPN_PROVIDER – Desired VPN Provider. I have shown IPVanish. Check here for other provider names.
  3. OPENVPN_USERNAME – VPN provider username.
  4. OPENVPN_PASSWORD – VPN provider password.
  5. 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 de YYYYYYYYYYY.
  6. 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.
  7. 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.*.*).
  8. TRANSMISSION_RPC_PASSWORD – Desired Transmission WebUI password.
  9. TRANSMISSION_RPC_USERNAME – Desired Transmission WebUI username.
  10. 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:

  1. ${USERDIR}/Downloads/completed – Path where to save downloaded files. ${USERDIR} is filled automatically from the environment file we created previously.
  2. XXXX – It could be the same port as the container: 8080 (must be free). This setting is optional. Review other key points listed above.
  3. 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:

  1. ${USERDIR}/Downloads/completed – Path where to save downloaded files. ${USERDIR} is filled automatically from the environment file we created previously.
  2. ${USERDIR}/Downloads/incomplete – Path where to save currently downloading files. ${USERDIR} is filled automatically from the environment file we created previously.
  3. XXXX – It could be the same port as the container: 8080 (must be free). This setting is optional. Review other key points listed above.
  4. 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 mettre enable_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:

  1. ${USERDIR}/Downloads/completed – Path where to save downloaded files. ${USERDIR} is filled automatically from the environment file we created previously.
  2. ${USERDIR}/media/movies – Path where to your movie library. ${USERDIR} is filled automatically from the environment file we created previously.
  3. XXXX – It could be the same port as the container: 7878 (must be free). This setting is optional. Review other key points listed above.
  4. 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:

  1. ${USERDIR}/Downloads/completed – Path where to save downloaded files. ${USERDIR} is filled automatically from the environment file we created previously.
  2. ${USERDIR}/media/tvshows – Path where to your movie library. ${USERDIR} is filled automatically from the environment file we created previously.
  3. XXXX – It could be the same port as the container: 8989 (must be free). This setting is optional. Review other key points listed above.
  4. 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:

  1. ${USERDIR}/Downloads/plex_tmp – Path temporary dolder for transcoding. ${USERDIR} is filled automatically from the environment file we created previously.
  2. /media/media – Path where to your media library.
  3. HOSTNAME – Name your plex server.
  4. PLEX_CLAIM – Your Plex access claim code from here. The word “claim” in front of the code must be in lower case.
  5. ADVERTISE_IP – IP Address of your server (eg. 192.168.1.100) – you can get this from your router admin page or run ifconfig in terminal.
  6. 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:
  1. NVIDIA SHIELD TV Pro Home Media Server – $299.99 editors pick
  2. Amazon Fire TV Streaming Media Player – $89.99
  3. Roku Premiere+ 4K UHD – $83.99
  4. CanaKit Raspberry Pi 3 Complete Starter Kit – $69.99
  5. 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:

  1. XXXX – It could be the same port as the container: 8181 (must be free). This setting is optional. Review other key points listed above.
  2. 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:

  1. XXXX – It could be the same port as the container: 3579 (must be free). This setting is optional. Review other key points listed above.
  2. 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:

  1. ${USERDIR}/Downloads – Path where to save downloaded files. ${USERDIR} is filled automatically from the environment file we created previously.
  2. XXXX – It could be the same port as the container: 5075 (must be free). This setting is optional. Review other key points listed above.
  3. 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:

  1. ${USERDIR}/Downloads – Path where to save downloaded files. ${USERDIR} is filled automatically from the environment file we created previously.
  2. XXXX – It could be the same port as the container: 9117 (must be free). This setting is optional. Review other key points listed above.
  3. 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:

  1. ${USERDIR}/shared_data – Path to data you want to share/sync. ${USERDIR} is filled automatically from the environment file we created previously.
  2. 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.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *