Installer DuckDNS avec Docker

Au sommaire :

  • 1-Qu'est-ce que DuckDNS ?
  • 2-Prérequis
  • 3-Réserver un nom de domaine
  • 4-Déploiement

1-Qu'est-ce que DuckDNS ?

DuckDNS est un DNS hébergé chez le service Amazon VPC qui va vous permettre d'obtenir jusqu'à 5 noms de domaine gratuitement.

Point très intéressant, c'est un DNS dynamique (DDNS). C'est à dire que si vous êtes comme moi possesseur d'une Livebox, le conteneur DuckDNS se chargera de mettre à jour votre adresse IP publique si elle devait changée entre temps, ce qui évite de perdre l’accès à vos applications exposés.

GitHub - linuxserver/docker-duckdns
Contribute to linuxserver/docker-duckdns development by creating an account on GitHub.

2-Prérequis

Il vous faudra une machine virtuelle sous Ubuntu Server 22.04 LTS.

Voici le guide pour ceux qui veulent repartir de zéro.

Virtualiser Ubuntu Server 22.04 LTS sur Proxmox VE
Guide d’installation de Ubuntu Server 22.04 LTS sur Proxmox VE avec mes meilleurs réglages.

Si vous voulez gagner du temps, utilisez un template cloud-init.

Initialiser vos machines virtuelles avec Cloud-init sur Proxmox VE
Guide d’installation de Cloud-Init qui va vous permettre d’automatiser vos déploiements

Ensuite, suivez ce guide pour installer Docker, Docker Compose et préparer vos variables d'environnement.

Installer Docker
Guide d’installation de Docker.

Enfin, pour exposer l'application sur l'internet public, il vous faudra déployer Traefik.

Installer Traefik avec Docker
Guide d’installation de Traefik.

3-Réserver un nom de domaine

C'est un conteneur très simple à mettre en place. Il vous tout d'abord aller sur le site ci-dessous et vous connecter avec un compte (Gmail, Github, Reddit, Twitter, Persona).

Duck DNS
Duck DNS free dynamic DNS hosted on Amazon VPC

Pour chaque compte crée, vous avez droit à 5 noms de domaines sans payer un centime.

Lorsque ce sera fait, allez dans "domains" et indiquez un nom de domaine disponible.

Pour l'exemple, ce sera "balekbalek" qui est disponible.

Une fois le nom de domaine reservé, passons à la suite.

4-Déploiement

Commencez par créer un dossier "docker" à la racine du dossier utilisateur"

mkdir -p ~/docker

Créez un fichier nommé "compose.yml"

touch ~/docker/compose.yml

Ouvrez le fichier "compose.yml" et copiez cette configuration.

Si vous avez suivi le guide de Traefik, il vous faudra ajouter les labels adéquat pour pouvoir exposer l'application sur l'internet public.

On évite la partie Authelia car on souhaite juste exposer l'application et accéder avec le nom de domaine réservé et vu qu'on est en challenge HTTP, pas besoin d'ajouter la ligne "DUCKDNS_TOKEN" au conteneur Traefik.

N'oubliez pas de récupérer le token de votre compte et de l'ajouter à la variable "TOKEN" du conteneur.

Enfin, ajoutez l'application que vous souhaitez. Pour l'exemple j'en est mis un très simple, Librespeed qui sert à tester votre bande passante.

version: "3.9"

networks:
  web:

services:

  traefik:
    container_name: traefik
    image: traefik:latest
    restart: always
    network:
      web:
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ${APPDATA}/traefik/logs:/logs
      - ${APPDATA}/traefik/traefik.yml:/traefik.yml
      - ${APPDATA}/traefik/dynamic.yml:/dynamic.yml
      - ${APPDATA}/traefik/letsencrypt/acme.json:/acme.json
    labels:
      - traefik.enable=true
      - traefik.http.routers.traefik-dash.entrypoints=websecure
      - traefik.http.routers.traefik-dash.rule=Host(`traefik.<votredomaine>.ovh`)
      - traefik.http.routers.traefik-dash.service=api@internal
      - "traefik.http.routers.traefik.middlewares=middlewares-basic-auth@file"

  duckdns:
    image: lscr.io/linuxserver/duckdns:latest
    container_name: duckdns
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ} #optional
      - SUBDOMAINS=<votre_sous_domaine>
      - TOKEN=<votre_token>
      - LOG_FILE=true #optional
    volumes:
      - ${APPDATA}/duckdns:/config
    restart: unless-stopped
    
  librespeed:
    image: lscr.io/linuxserver/librespeed:latest
    container_name: librespeed
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
    volumes:
      - ${APPDATA}/librespeed:/config
    networks:
      - web
#    ports:
#      - 80:80
    labels:
      - traefik.enable=true
      - traefik.http.routers.librespeed.entrypoints=websecure
      - traefik.http.routers.librespeed.tls.certresolver=letsencrypt
      - traefik.http.routers.librespeed.rule=Host(`<votre_sous_domaine>.duckdns.org`)
      - traefik.http.routers.librespeed.service=librespeed-svc
      - traefik.http.services.librespeed-svc.loadbalancer.server.port=80

Comme d'habitude, suivez la partie 6 du guide de Traefik pour ouvrir les ports de votre box internet.

Déployez la stack avec la commande suivante.

docker compose up -d

Vous devriez accéder à l'application avec le certificat SSL qui va avec.