Installer DuckDNS avec Docker
Guide d'installation de DuckDNS.
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.
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.
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.
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.
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.
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).
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.