🛠️ Tutos · 12 min de lecture

Héberger son site web soi-même en 2026 : guide complet (VPS, Docker, HTTPS)

Guide technique 2026 pour héberger son site sur VPS : choix d'offre, config Docker, HTTPS Let's Encrypt, sécurité et coûts réels. Comparez auto-hébergement et cloud.

S Par Équipe Selfhostr · tests indépendants
ⓘ Cet article peut contenir des liens affiliés (sans surcoût pour toi, ça soutient nos tests). Voir la disclosure.

Héberger son propre site web en 2026 n’est plus réservé aux experts en sysadmin ou aux geeks disposant d’une connexion fibre symétrique. Avec la maturité des outils de conteneurisation, la démocratisation des certificats SSL gratuits et la baisse des coûts des infrastructures cloud, la barrière à l’entrée a considérablement baissé. Pourtant, la tentation du “clic-et-ca-va” des plateformes SaaS (Wix, Shopify, WordPress.com) reste forte.

Ce guide ne vise pas à vous convaincre de devenir un administrateur système à temps plein, mais à vous fournir une feuille de route technique précise pour reprendre le contrôle de vos données, de votre bande passante et de vos coûts à long terme. Nous allons déconstruire le processus d’installation d’un site (statique, WordPress ou application web) sur un VPS (Virtual Private Server), en mettant l’accent sur la robustesse, la sécurité et la reproductibilité via Docker.

Avant de plonger dans les commandes terminal, il est crucial de comprendre l’arène dans laquelle vous vous engagez. L’auto-hébergement physique chez soi et l’auto-hébergement sur VPS sont deux paradigmes distincts, avec des compromis techniques et financiers très différents.

Auto-hébergement vs VPS : Le duel technique

La première décision à prendre est matérielle. Avez-vous un PC allumé 24h/24 dans votre salon ou allez-vous louer un serveur distant ?

L’auto-hébergement physique (Home Lab)

C’est l’option “à l’ancienne”. Vous utilisez un vieux PC portable, un Raspberry Pi ou un mini-PC comme serveur.

Le VPS (Virtual Private Server)

Un VPS est une machine virtuelle dédiée louée chez un hébergeur (Hetzner, OVH, DigitalOcean, AWS Lightsail).

Pour la suite de ce tutoriel, nous partirons du principe que vous avez opté pour un VPS. C’est le moyen le plus fiable de garantir que votre site reste en ligne, rapide et sécurisé sans avoir à gérer le bruit de votre ventilateur à 3h du matin.

Étape 1 : Choisir la bonne offre VPS

Le marché des VPS en 2026 est saturé, mais la qualité varie. Évitez les hébergeurs généralistes grand public qui vendent du “cloud” à prix cassés mais avec des performances disque I/O médiocres. Privilégiez les hébergeurs spécialisés dans l’infrastructure.

Benchmarks et coûts réels

Voici une analyse comparative basée sur les besoins moyens d’un site web moderne en 2026.

CritèreEntrée de gamme (Blog/Statique)Milieu de gamme (WordPress/DB)Haute Performance (App/API)
CPU1 vCPU (ex: AMD EPYC)2 vCPU4+ vCPU
RAM1 Go - 2 Go4 Go8 Go+
Stockage20 Go NVMe SSD50 Go NVMe SSD100 Go+ NVMe
Bande passante1-2 TB/mois2-5 TB/moisIllimité ou très élevé
Coût mensuel~3€ - 5€~8€ - 15€~20€ - 40€
Hébergeurs typesHetzner Cloud, DigitalOceanHetzner, OVH, LinodeAWS, GCP, DigitalOcean

Analyse technique : Pour un site WordPress avec une base de données locale, 1 Go de RAM est souvent trop juste si vous ne faites pas de tuning agressif. Le moteur MySQL/MariaDB consomme beaucoup de mémoire. 4 Go est le plancher confortable pour éviter le swap (qui tue les performances disque). Pour un site statique (Hugo, Jekyll) ou une app Node.js légère, 1 Go suffit largement.

Notre recommandation : Commencez petit. Il est toujours possible de monter en puissance (scale-up) sur la plupart des plateformes cloud modernes sans migrer vos données. Choisissez un hébergeur qui permet la migration facile des disques ou des snapshots.

Étape 2 : Sécurisation initiale du serveur

Une fois votre VPS provisionné, vous recevez une adresse IP et un mot de passe root par email. Ne vous connectez pas directement avec root via mot de passe pour la suite. La première chose à faire est de renforcer l’accès SSH.

  1. Créer un utilisateur dédié :

    adduser monuser
    usermod -aG sudo monuser
  2. Configurer les clés SSH : Générez une clé SSH sur votre machine locale (ssh-keygen) et copiez-la sur le serveur (ssh-copy-id monuser@IP_DU_VPS).

  3. Désactiver le login root et par mot de passe : Éditez /etc/ssh/sshd_config :

    PermitRootLogin no
    PasswordAuthentication no

    Redémarrez le service SSH (systemctl restart sshd).

  4. Configurer le pare-feu (UFW) : Activez le firewall et n’autorisez que le trafic nécessaire.

    sudo ufw allow OpenSSH
    sudo ufw allow 80/tcp   # HTTP
    sudo ufw allow 443/tcp  # HTTPS
    sudo ufw enable

Ces étapes éliminent 90% des attaques automatisées (brute force) dont souffrent les serveurs exposés publiquement.

Étape 3 : Installation de Docker et Docker Compose

Oubliez l’installation manuelle de Nginx, PHP, MySQL ou Node.js sur le système de fichiers. En 2026, la norme est l’isolation par conteneur. Docker permet de déployer votre stack web de manière reproductible, propre et facile à mettre à jour.

Installation de Docker

La méthode la plus sûre est d’utiliser le script d’installation officiel ou les paquets du dépôt Docker.

# Mise à jour du système
sudo apt update && sudo apt upgrade -y

# Installation des dépendances
sudo apt install ca-certificates curl gnupg

# Ajout de la clé GPG officielle
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Ajout du dépôt
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Installation
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Vérifiez l’installation :

sudo docker run hello-world
sudo docker compose version

Structure du projet

Créez un répertoire pour votre site. Par exemple, pour un site WordPress ou une app statique, la structure de fichiers sera cruciale pour la maintenance.

/home/monuser/web-app/
├── docker-compose.yml
├── .env
├── nginx/
│   └── nginx.conf
├── app/
│   └── (votre code source ici)
└── data/
    └── (pour les bases de données ou uploads)

Étape 4 : Déploiement d’un site (Cas concrets)

Cas A : Site Statique (HTML/CSS/JS ou générateur)

C’est le cas le plus simple et le plus performant. Vous n’avez besoin que d’un conteneur Nginx servant des fichiers statiques.

Créez un fichier docker-compose.yml :

version: '3.8'

services:
  web:
    image: nginx:alpine
    container_name: mon_site_statique
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./app:/usr/share/nginx/html:ro
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./certs:/etc/nginx/certs
    depends_on:
      - certbot

  certbot:
    image: certbot/certbot
    container_name: certbot
    volumes:
      - ./certs:/etc/letsencrypt
      - ./webroot:/var/www/certbot
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"

Note : Cette approche simplifiée utilise un volume partagé pour les certificats. Pour une production robuste, il est préférable d’utiliser un reverse proxy dédié (voir ci-dessous).

Cas B : WordPress avec Docker

WordPress est plus complexe car il nécessite une base de données. Utilisons MariaDB et PHP-FPM via Nginx.

version: '3.8'

services:
  db:
    image: mariadb:10.6
    container_name: wp_db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS}
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wp_user
      MYSQL_PASSWORD: ${DB_PASS}
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - wp_network

  wordpress:
    image: wordpress:php8.2-fpm
    container_name: wp_app
    restart: always
    depends_on:
      - db
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wp_user
      WORDPRESS_DB_PASSWORD: ${DB_PASS}
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wp_data:/var/www/html
      - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
    networks:
      - wp_network

  nginx:
    image: nginx:alpine
    container_name: wp_nginx
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - wp_data:/var/www/html
      - ./certs:/etc/nginx/certs
    depends_on:
      - wordpress
    networks:
      - wp_network

volumes:
  db_data:
  wp_data:

networks:
  wp_network:

Dans ce scénario, vous devez configurer un fichier nginx.conf dans le dossier nginx/conf.d/ pour proxy_pass vers le conteneur PHP-FPM (wordpress:9000). C’est la méthode standard pour exécuter PHP dans Docker.

Étape 5 : HTTPS et Certificats Let’s Encrypt

Avoir un site en HTTP en 2026 est inacceptable. Les navigateurs marquent les sites non sécurisés comme “Non sécurisé”, ce qui affecte le SEO et la confiance des utilisateurs.

La méthode la plus fiable n’est pas de générer les certificats dans chaque conteneur, mais d’utiliser un Reverse Proxy ou un outil externe qui gère le renouvellement automatique.

Approche recommandée : Traefik ou Nginx Proxy Manager

Pour garder les choses simples et sans dépendance externe lourde, nous allons utiliser une configuration Nginx standard couplée à Certbot, mais de manière sécurisée.

Cependant, la meilleure pratique actuelle est d’utiliser Cloudflare Tunnel (si vous utilisez Cloudflare) ou de configurer Certbot en mode standalone ou webroot.

Voici comment obtenir un certificat SSL valide pour votre domaine monsite.com :

  1. Installez Certbot sur l’hôte (pas dans un conteneur pour simplifier la gestion des ports 80/443) :

    sudo apt install certbot
  2. Arrêtez Nginx si vous l’avez installé manuellement, ou assurez-vous qu’il n’écoute pas encore sur 80/443.

  3. Obtenez le certificat :

    sudo certbot certonly --standalone -d monsite.com -d www.monsite.com
  4. Configurez Nginx (dans votre conteneur ou hôte) pour servir les fichiers du dossier /etc/letsencrypt/live/monsite.com/.

  5. Automatisation du renouvellement : Les certificats expirent tous les 90 jours. Créez une tâche cron sur le serveur :

    sudo crontab -e
    # Ajoutez cette ligne pour vérifier tous les jours à minuit
    0 0 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl restart nginx"

Si vous utilisez Docker, le moyen le plus propre est d’utiliser l’image certbot/certbot dans un conteneur dédié qui monte les volumes de certificats, comme montré dans l’exemple statique plus haut.

Étape 6 : Sauvegardes et Récupération

Un serveur sans sauvegarde est un serveur en attente de catastrophe. En auto-hébergement, vous êtes votre propre équipe de reprise après sinistre.

Stratégie 3-2-1

Mise en œuvre technique

Pour un VPS, les données critiques sont :

  1. Les fichiers de votre application (app/, wp-content/uploads).
  2. La base de données.
  3. Les configurations (docker-compose.yml, configs Nginx, clés SSH).

Script de sauvegarde simple (backup.sh) :

#!/bin/bash
DATE=$(date +%Y-%m-%d)
BACKUP_DIR="/home/monuser/backups"
REMOTE_DIR="user@remote-server:/backups"

# 1. Sauvegarde de la base de données (exemple MySQL)
docker exec wp_db mysqldump -u root -p${DB_ROOT_PASS} wordpress > $BACKUP_DIR/db_$DATE.sql

# 2. Archive des fichiers
tar -czf $BACKUP_DIR/files_$DATE.tar.gz /home/monuser/web-app/app

# 3. Upload vers un stockage distant (SCP ou Rclone vers S3/Backblaze)
scp $BACKUP_DIR/* $REMOTE_DIR/

# 4. Nettoyage local (garder seulement 7 jours)
find $BACKUP_DIR -type f -mtime +7 -delete

Rendez ce script exécutable et planifiez-le via crontab (par exemple, tous les jours à 2h du matin). L’envoi vers un stockage objet (S3 compatible) est fortement recommandé car il est immuable et peu coûteux.

Quel choix selon ton profil ?

Nous avons vu les étapes techniques. Mais la technologie n’est qu’un moyen. Voici comment choisir votre approche en fonction de votre réalité.

Profil 1 : Le Débutant Curieux

Profil 2 : Le Développeur / Freelance

Profil 3 : L’Entreprise / Site Critique

FAQ : Questions fréquentes

Puis-je migrer de WordPress.com vers mon propre VPS ?

Oui, mais attention à la complexité. WordPress.com (SaaS) gère les mises à jour, la sécurité et le caching. Sur votre VPS, vous devez tout faire vous-même. Utilisez l’outil d’export/import natif de WordPress pour récupérer vos articles et médias. Pensez à configurer un cache performant (Redis ou Varnish) et un CDN (Cloudflare) pour compenser la perte de performance du SaaS.

Combien de temps prend la mise en place initiale ?

Si vous êtes débutant, comptez 4 à 8 heures pour la première installation, incluant la compréhension de Docker, la configuration SSL et la sécurisation SSH. Une fois la base posée, déployer un nouveau site prend 15 minutes. La courbe d’apprentissage est raide au début, puis plate.

Docker est-il obligatoire ?

Non, mais c’est vivement recommandé. Vous pourriez installer Nginx et PHP directement sur l’OS (apt install nginx php-fpm). Cependant, cela crée un “snowflake server” (un serveur unique et difficile à reproduire). Si le serveur plante, vous devez tout réinstaller manuellement. Avec Docker, vous restaurez votre serveur en recréant les conteneurs à partir d’un fichier docker-compose.yml. C’est une question de reproductibilité et de propreté.

Que faire si mon VPS est hacké ?

La prévention est clé (mise à jour OS, fail2ban, clés SSH). Si le pire arrive, n’essayez pas de “nettoyer” le serveur. Repartez d’une image propre (snapshot), restaurez vos données depuis la dernière sauvegarde connue comme saine, et reconstruisez l’infrastructure. La réinstallation est souvent plus rapide et plus sûre que la détoxification d’un système compromis.

Conclusion

Héberger son site web soi-même en 2026 est un exercice technique gratifiant qui offre un contrôle total sur vos données et vos coûts. Le passage par un VPS et Docker représente le standard actuel pour allier performance, sécurité et simplicité de maintenance.

Ne sous-estimez pas la phase de sécurisation initiale et de mise en place des sauvegardes. Ce sont ces deux piliers qui distinguent un hobbyiste désorganisé d’un professionnel de l’auto-hébergement. Commencez petit, documentez vos procédures, et n’hésitez pas à itérer. Votre infrastructure est votre code ; traitez-la avec la même rigueur.

Tags : VPSDockerSelf-hostingDevOps

Sur le même sujet

🛠️ Tutos

Héberger Nextcloud sur un VPS en 2026 : guide complet (Docker, HTTPS, performances, sauvegardes)

Guide technique 2026 pour déployer Nextcloud sur VPS via Docker. Dimensionnement, optimisation PostgreSQL/Redis, HTTPS et stratégie de backup fiable.

Lire
🛠️ Tutos

Héberger un serveur Minecraft en 2026 : VPS vs hébergeur dédié (guide complet)

Guide 2026 pour héberger un serveur Minecraft stable : comparaison VPS vs hébergeur dédié, dimensionnement CPU/RAM, installation Paper/Spigot et coûts réels pour 2026.

Lire
🛠️ Tutos

Héberger n8n sur un VPS en 2026 : guide self-hosted complet (Docker, HTTPS, sauvegardes)

Guide technique 2026 pour self-host n8n sur VPS : Docker Compose, HTTPS, sécurisation et coûts. Comparez le cloud vs on-premise pour automatiser sans abonnement.

Lire