Installer DuckDNS avec Docker

Guide d'installation de DuckDNS.

Installer DuckDNS avec Docker
duckdns dns 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

Pour déployer DuckDNS, vous devez disposer d'une machine virtuelle fonctionnant sous Ubuntu Server.

Création de la machine virtuelle :

Virtualisation avec Proxmox VE : Si vous partez de zéro, suivez mon guide détaillé pour virtualiser Ubuntu sur Proxmox VE avec des réglages optimisés.

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

Automatisation avec Cloud-Init : Pour gagner du temps lors de la configuration, utilisez un template Cloud-Init. Cela permet d'automatiser et de simplifier l'initialisation de vos machines virtuelles. Retrouvez les instructions dans ce guide.

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

Installation des outils nécessaires :

Docker et Docker Compose : Une fois la machine virtuelle prête, installez Docker et Docker Compose, indispensables pour gérer et orchestrer vos conteneurs. Ce guide vous accompagnera dans l'installation.

Installer Docker
Guide d’installation de Docker.

Exposition de l'application :

Proxy inverse avec Traefik : Pour exposer vos applications sur Internet de manière sécurisée, configurez un proxy inverse. Traefik est une solution recommandée. Suivez ce guide pour l'installation.

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.

networks:
# Traefik network
  web:
    name: web
    driver: bridge

services:

  traefik:
    container_name: traefik
    image: traefik:v2
    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.