Auto-hébergement avec Docker : Guide complet du débutant pour les administrateurs système

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 docker

Vé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 nginx

Ré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 :latest en 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 scout ou 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é !