Self‑hosting local avec Docker : une solution simple, rapide et ultra pratique

Vous avez entendu parler de self‑hosting : héberger vous‑même vos services (email, stockage, blogs, etc.) pour garder le contrôle total de vos données. Le défi majeur : la mise en place paraît toujours compliquée, les dépendances sont multiples, et les risques d’erreur s’accumulent. Heureusement, Docker vient changer la donne. En quelques lignes, vous pouvez lancer un serveur complet, le maintenir à jour, le sauvegarder, et le déployer partout où vous voulez.

Dans cet article, nous allons :

  1. Expliquer pourquoi Docker est le meilleur allié du self‑hosting local.
  2. Montrer les prérequis et installer Docker sur votre machine.
  3. Présenter Docker Compose, l’outil qui simplifie le déploiement multi‑conteneurs.
  4. Construire un exemple complet (Nginx, MySQL, Nextcloud) en local.
  5. Aborder la gestion, la mise à jour et la sauvegarde.
  6. Donner quelques bonnes pratiques de sécurité.

Prêt ? Allons-y !

1. Pourquoi Docker simplifie le self‑hosting local

Avant DockerAprès Docker
Gestion manuelle d’installations, bibliothèques, dépendances, conflits de versions.Images pré‑configurées (tout le nécessaire déjà présent).
Reproduction difficile d’un même environnement sur plusieurs machines.Consistance grâce à la même image sur n’importe quel hôte.
Mise à jour fastidieuse (tout le logiciel, pas seulement le service).Mise à jour fine : vous remplacez uniquement l’image qui a changé.
Sauvegarde et restauration compliquées (bases, configs, logs).Volumes Docker dédiés pour persister les données.

En d’autres termes, Docker vous permet de transformer une pile de logiciels en un conteneur unique que vous lancez, que vous arrêtez, que vous sauvegardez, le tout en quelques commandes.

2. Prérequis & installation de Docker

2.1 Matériel

  • Un ordinateur (desktop ou laptop) : Windows 10/11, macOS, ou une distribution Linux (Ubuntu, Debian, Fedora…).
  • 4 Go de RAM minimum (plus si vous prévoyez d’héberger plusieurs services lourds).
  • 20 Go d’espace disque libre (au moins 10 Go pour les images + 10 Go pour les données).

⚠️ Astuce : Si vous avez un Raspberry Pi (ou tout autre ARM), vous devrez choisir les images compatibles arm64.

2.2 Installer Docker Engine

Sur Ubuntu/Debian

sudo apt-get update
sudo apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
  https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

Sur Fedora/CentOS

sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
sudo dnf install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker

Sur Windows/macOS

Téléchargez et installez Docker Desktop depuis : https://www.docker.com/products/docker-desktop

2.3 Vérification

docker --version
# Docker version 26.0.0, build 6773dc3

3. Docker Compose : orchestrer plusieurs conteneurs

Docker Compose vous permet de décrire votre stack complète dans un fichier docker‑compose.yml. Vous lancez tout d’un coup, vous arrêtez tout d’un coup, vous avez même un dashboard (Docker Desktop) pour visualiser l’état.

Installation (si vous avez Docker Desktop, c’est déjà prêt). Sinon)

sudo apt-get install -y docker-compose

4. Exemple complet : Nextcloud + Nginx + MariaDB en local

Nous allons déployer un Nextcloud (stockage personnel), un MariaDB (base de données) et un Nginx (reverse‑proxy). Vous obtiendrez une instance Nextcloud disponible sur http://localhost:8080 .

4.1 Créez un répertoire de projet

mkdir nextcloud-local
cd nextcloud-local

4.2 Le fichier docker-compose.yml

version: "3.8"

services:
  db:
    image: mariadb:10.7
    container_name: nextcloud_db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: root_secret
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
      MYSQL_PASSWORD: nextcloud_secret
    volumes:
      - db_data:/var/lib/mysql

  app:
    image: nextcloud:25
    container_name: nextcloud_app
    restart: unless-stopped
    environment:
      MYSQL_HOST: db
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
      MYSQL_PASSWORD: nextcloud_secret
    depends_on:
      - db
    volumes:
      - nextcloud_data:/var/www/html
      - ./config:/var/www/html/config  # si vous avez des fichiers de config personnalisés

  nginx:
    image: nginx:1.25
    container_name: nextcloud_nginx
    restart: unless-stopped
    ports:
      - "8080:80"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d:ro
      - nextcloud_data:/usr/share/nginx/html:ro
    depends_on:
      - app

volumes:
  db_data:
  nextcloud_data:

Pourquoi pas directement Nginx dans le même conteneur que Nextcloud ?
Parce que vous avez souvent besoin de personnaliser les règles de reverse‑proxy (SSL, redirects, headers). Garder Nginx séparé rend la maintenance plus simple.

4.3 La configuration Nginx

Créez le répertoire nginx/conf.d :

mkdir -p nginx/conf.d

Ajoutez un fichier nextcloud.conf :

server {
    listen 80;
    server_name localhost;

    root /usr/share/nginx/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
        deny all;
    }

    location ~ ^/(?:\.|db_structure\.sql|README\.md|INSTALL\.md) {
        deny all;
    }

    location ~ \.php$ {
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

🚀 Remarque: Si vous voulez ajouter HTTPS local, utilisez certbot ou générez un certificat auto‑signé et remplacez la partie listen 80 par listen 443 ssl.

4.4 Démarrer la stack

docker compose up -d
  • -d = en arrière‑plan (détaché).
  • Docker télécharge automatiquement les images (MariaDB, Nextcloud, Nginx).

Vous pouvez vérifier les logs :

docker compose logs -f

4.5 Accéder à Nextcloud

Ouvrez votre navigateur à http://localhost:8080
Suivez l’assistant de configuration :

ÉtapeValeur
Nom d’utilisateur adminadmin
Mot de passe admin(choisissez)
Base de donnéesnextcloud
Utilisateur DBnextcloud
Mot de passe DBnextcloud_secret
Hôte DBdb

Voilà ! Vous avez un Nextcloud fonctionnel localement en quelques minutes.

5. Gestion quotidienne : mise à jour, sauvegarde et reprise

5.1 Mettre à jour les images

docker compose pull
docker compose up -d --remove-orphans

Astuce : Si vous voulez éviter une interruption, utilisez docker compose up -d pour remplacer uniquement les images modifiées.

5.2 Sauvegarde des volumes

docker run --rm -v nextcloud_data:/data -v $(pwd)/backup:/backup alpine tar -czf /backup/nextcloud_data_$(date +%F).tar.gz /data
docker run --rm -v db_data:/data -v $(pwd)/backup:/backup alpine tar -czf /backup/db_data_$(date +%F).tar.gz /data

Cette commande crée un archive tar.gz de chaque volume. Vous pouvez la stocker sur un disque externe ou le cloud.

5.3 Restauration

docker run --rm -v nextcloud_data:/data -v $(pwd)/backup:/backup alpine tar -xzf /backup/nextcloud_data_2025-08-01.tar.gz -C /data
docker run --rm -v db_data:/data -v $(pwd)/backup:/backup alpine tar -xzf /backup/db_data_2025-08-01.tar.gz -C /data

6. Bonnes pratiques de sécurité pour votre self‑hosting local

AstucePourquoi
Utiliser des volumes dédiés (pas /var/lib/docker/containers/*).Séparer les données des métadonnées de Docker évite les corruptions.
Limiter les ports exposés.Ne exposez que ce qui est nécessaire (ex. 8080 pour Nginx, 22 si vous voulez SSH).
Chiffrer le disque.Sur un ordinateur partagé, chiffrez les volumes (btrfs, LUKS, etc.).
Mettre à jour régulièrement Docker & Compose.Corrige les failles de sécurité connues.
Nettoyer les conteneurs inutilisés.docker system prune -a (attention aux données).
Utiliser un reverse‑proxy SSL.Même en local, vous pouvez utiliser Let’s Encrypt sur une IP publique ou un certificat auto‑signé.
Surveiller les logs.docker compose logs -f ou un outil comme Portainer, Grafana/Prometheus.

7. Aller au-delà : passer d’un local à un serveur distant

Une fois votre stack Dockerisée, le déploiement sur un serveur cloud devient trivial :

  1. Installez Docker & Docker Compose sur le VPS.
  2. Copiez votre docker-compose.yml et le dossier nginx/conf.d.
  3. Ajustez les variables d’environnement (par ex. MYSQL_ROOT_PASSWORD).
  4. Lancez docker compose up -d.
  5. Ajoutez un reverse‑proxy HTTP/HTTPS (certbot, Traefik, Caddy).

C’est la même configuration ! Pas de duplication d’efforts.

8. Conclusion

  • Docker transforme le self‑hosting local en un jeu d’enfant : un fichier docker‑compose.yml suffit à déployer, mettre à jour et sauvegarder tout votre stack.
  • La simplicité vient de la consistance des images et des volumes Docker, qui évitent les fameux “ça marchait sur ma machine, pas sur la mienne”.
  • Vous avez un environnement isolé, sécurisé, et très portable : votre configuration Docker fonctionne sur Windows, macOS, Linux, voire Raspberry Pi.
  • Même si vous êtes novice en DevOps, Docker Compose vous guide pas à pas, avec des commandes claires et un retour d’état en temps réel.

Alors, que vous soyez un passionné de l’open‑source, un développeur en quête d’un environnement de test, ou simplement curieux de garder vos données privées, lancez Docker, créez votre docker-compose.yml, et vivez le self‑hosting sans prise de tête ! 🚀


Cet article a été rédigé par une IA locale et relue par un humain :-). N’hésitez pas à réagir info@graphandweb.com.

Vous êtes sur l'article le plus récent.