Auto-hébergement avec Docker : Guide complet du débutant pour les administrateurs système
Vous avez sans doute entendu parler de Docker. Vous avez peut-être même déjà téléchargé quelques images pour faire des essais. Mais c'est en utilisant Docker pour héberger vous-même vos propres services que réside sa véritable puissance. Dans ce guide, nous partirons de zéro pour créer une infrastructure entièrement auto-hébergée : applications web, bases de données, proxy inverse, le tout fonctionnant sur votre propre VPS et sous votre contrôle total.
Pourquoi l'auto-hébergement avec Docker ?
L'auto-hébergement consiste à gérer ses propres services au lieu de dépendre de solutions SaaS tierces. Docker facilite cette approche en encapsulant chaque application et ses dépendances dans des conteneurs isolés. Les avantages pour les administrateurs système sont concrets :
- Aucune dépendance vis-à-vis d'un fournisseur : vos données restent sur votre matériel.
- Maîtrise des coûts — un seul VPS peut exécuter des dizaines de services
- Reproductibilité — les conteneurs fonctionnent de la même manière partout
- Mises à jour et restaurations simplifiées : remplacez les balises d’image, pas les serveurs.
Prérequis
- Un VPS Linux (Ubuntu 22.04+ ou Debian 12 recommandés)
- accès root ou sudo
- Un nom de domaine (facultatif mais fortement recommandé)
- Confort de base avec le terminal
Étape 1 : Installer Docker Engine
N’utilisez jamais le paquet obsolète du dépôt par défaut de votre distribution. Installez toujours depuis le dépôt officiel de Docker :
curl -fsSL https://get.docker.com | sh
systemctl enable --now dockerVérifiez l'installation :
docker --version
docker run hello-worldÉtape 2 : Installer Docker Compose
Docker Compose permet de définir des applications multi-conteneurs dans un seul fichier YAML. Il est indispensable pour l'auto-hébergement.
apt install docker-compose-plugin
docker compose versionÉtape 3 : Comprendre les concepts fondamentaux
Images vs Conteneurs
Une image est un modèle (comme une image ISO). Un conteneur est une instance en cours d'exécution de cette image. Vous pouvez exécuter plusieurs conteneurs à partir de la même image.
Volumes
Les conteneurs sont éphémères : ils perdent leurs données lorsqu’ils sont arrêtés. Les volumes, quant à eux, conservent les données en dehors du conteneur.
docker volume create mydata
docker run -v mydata:/data nginxRéseaux
Les conteneurs communiquent via les réseaux Docker. Les services figurant dans le même fichier Compose peuvent se contacter par leur nom de service.
Étape 4 : Votre premier fichier docker-compose.yml
Hébergeons nous-mêmes Nextcloud (votre propre Google Drive). Créez un répertoire et rédigez votre fichier Compose :
mkdir -p /opt/nextcloud && cd /opt/nextcloud
cat > docker-compose.yml <<'EOF'
version: '3.8'
services:
db:
image: mariadb:11
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: nextcloud
MYSQL_USER: ncuser
MYSQL_PASSWORD: ncpass
volumes:
- db_data:/var/lib/mysql
app:
image: nextcloud:28
ports:
- "8080:80"
depends_on:
- db
environment:
MYSQL_HOST: db
MYSQL_DATABASE: nextcloud
MYSQL_USER: ncuser
MYSQL_PASSWORD: ncpass
volumes:
- nc_data:/var/www/html
volumes:
db_data:
nc_data:
EOF
docker compose up -dÉtape 5 : Ajouter un proxy inverse avec Traefik
Traefik est un proxy inverse moderne conçu pour les conteneurs. Il détecte automatiquement vos services et gère les certificats SSL via Let's Encrypt.
mkdir -p /opt/traefik && cd /opt/traefik
cat > docker-compose.yml <<'EOF'
version: '3.8'
services:
traefik:
image: traefik:v3
command:
- "--api.insecure=false"
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.le.acme.httpchallenge=true"
- "--certificatesresolvers.le.acme.email=you@example.com"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./acme.json:/acme.json
EOF
touch acme.json && chmod 600 acme.json
docker compose up -dÉtape 6 : Bonnes pratiques de sécurité pour Docker
- N'exécutez jamais de conteneurs en tant que root ; utilisez
user: "1000:1000"dans votre fichier Compose. - Versions d'images épinglées — éviter
:latesten production - Utilisez des systèmes de fichiers en lecture seule lorsque cela est possible :
read_only: true - Limitez les ressources — définissez des limites de mémoire et de processeur pour éviter que les conteneurs ne s’emballent.
- Analysez les images — utilisez
docker scoutou Trivy pour détecter les vulnérabilités
Étape 7 : Services populaires pour l’auto-hébergement
- Vaultwarden — Gestionnaire de mots de passe compatible Bitwarden
- Gitea — Serveur Git léger
- Uptime Kuma — Une surveillance de disponibilité élégante
- Jellyfin — Serveur multimédia open source
- Portainer — Interface web pour la gestion de Docker
Étape 8 : Maintenir toutes les informations à jour
Utilisez Watchtower pour mettre à jour automatiquement vos conteneurs lors de la publication de nouvelles images :
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower --schedule "0 3 * * *"Conclusion
Docker transforme un simple VPS en une plateforme d'hébergement complète. Grâce aux fichiers Compose, à Traefik pour le routage et à Let's Encrypt pour un certificat SSL gratuit, vous pouvez déployer un écosystème de services complet à un coût bien inférieur à celui des abonnements SaaS.
🐳 Envie d'aller plus loin ? Consultez nos guides sur Portainer, la configuration avancée de Traefik et le réseau Docker sur RootPilot . Partagez votre configuration d'auto-hébergement dans les commentaires : nous adorons découvrir les créations de la communauté !