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.
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.
Si vous voulez gagner du temps, utilisez un template cloud-init.
Ensuite, suivez ce guide pour installer Docker, Docker Compose et préparer vos variables d'environnement.
Enfin, pour exposer l'application sur l'internet public, il vous faudra déployer 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).
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.