Héberger Ghost® sur un VPS géré : votre publication, sur votre serveur

Héberger Ghost sur un VPS géré, c'est publier vos articles, réunir vos membres et envoyer vos newsletters depuis une machine à vous, que nos équipes tiennent à jour et supervisent jour et nuit. Ghost est un logiciel libre sous licence MIT. Ce guide suit sa documentation officielle : Ghost-CLI ou Docker Compose, MySQL, HTTPS, les e-mails, les sauvegardes et les mises à jour.

Simon Vasconcelos Lee Par Publié le 9 novembre 2026Lecture : 13 minutes

Tous les guides

L'essentiel

  1. La licence MIT de Ghost permet de l'utiliser librement en entreprise, en gardant sa mention de licence. Le nom et le logo relèvent à part de la politique de marque de Ghost Foundation.
  2. Le projet recommande Ghost-CLI sur Ubuntu, avec Nginx, Node.js 22, MySQL 8 et au moins 1 Go de mémoire. Sa méthode Docker Compose, en « preview », ajoute l'analytique web et ActivityPub auto-hébergé.
  3. MySQL 8 est la seule base prise en charge en production.
  4. Prévoyez deux circuits d'e-mails : un relais SMTP pour les e-mails transactionnels, indispensable, et Mailgun pour les newsletters, seul service d'envoi en masse pris en charge.
  5. Sauvegardez la base et le dossier content, puis mettez à jour avec ghost update ou docker compose pull : le projet publie des mises à jour chaque semaine.

Ce que fait Ghost

Ghost est une plateforme de publication professionnelle et libre, écrite pour Node.js. Elle réunit au même endroit ce qu'une publication indépendante assemble souvent à partir de plusieurs outils.

Selon la documentation, le produit a les mêmes fonctions en auto-hébergement. Ce qui l'entoure vous revient : l'envoi des newsletters, l'analytique web, un CDN et les sauvegardes complètes du site.

La licence MIT et la marque

Ghost est publié sous licence MIT. Elle autorise à utiliser, copier, modifier, fusionner, publier, distribuer, sous-licencier et vendre le logiciel, à une condition : garder la mention de copyright et le texte de la licence dans toute copie. Vous pouvez donc faire tourner Ghost en entreprise, l'adapter et y publier pour vos clients, sans licence à acheter.

La licence couvre le code. Le nom et le logo appartiennent à Ghost Foundation et relèvent de sa politique de marque : lisez-la si vous construisez une offre autour du logiciel. Ghost est une marque déposée de Ghost Foundation.

This publication is independent of and not affiliated with, authorized, sponsored, or approved by Ghost Foundation. En français : cette publication est indépendante de Ghost Foundation et n'est ni affiliée à elle, ni autorisée, ni parrainée, ni approuvée par elle.

Ghost-CLI ou Docker Compose : deux méthodes officielles

Le projet documente deux chemins pour la production. Ghost-CLI est l'installation qu'il recommande officiellement, et Docker Compose est une « preview », qu'il dit toute nouvelle. Il indique aussi avancer vers cet outillage Docker plutôt que de faire évoluer Ghost-CLI, et il fournit un assistant pour passer de l'un à l'autre.

PointGhost-CLIDocker Compose (preview)
SystèmeUbuntu 22.04, 24.04 ou 26.04Un serveur Linux avec Docker 20.10.13 ou plus récent
MémoireAu moins 1 GoLe projet cite en exemple un serveur de 2 Go et 1 processeur
Serveur web et HTTPSNginx et un certificat Let's Encrypt, installés par Ghost-CLICaddy, dans un conteneur, qui prend en charge TLS
Base de donnéesMySQL 8.0 ou 8.4 installé sur le serveurMySQL dans un conteneur
Analytique webNon compatibleDisponible, avec un compte Tinybird
Réseau social (ActivityPub)Le service hébergé par le projet, gratuit dans ses limites d'usageLe même service par défaut, ou le vôtre, auto-hébergé

Avant de commencer : le domaine et le serveur

Faites pointer le domaine vers le serveur avant l'installation : le certificat s'installe pendant la mise en place. Sur un VPS Simafri, les visiteurs arrivent sur les ports 80 et 443, sous le nom de domaine du serveur, avec des enregistrements A et AAAA. L'adresse du site s'écrit en entier, avec son protocole, comme https://example.com : une adresse IP provoque des erreurs.

Au-delà de la mémoire indiquée ci-dessus, le projet ne chiffre ni le disque ni la charge : la taille dépend de votre trafic, de vos images et de vos médias. Sur un VPS géré, décrivez-nous votre publication et nous vous recommandons la taille qui convient.

Installer Ghost avec Ghost-CLI sur Ubuntu

Ghost-CLI s'emploie avec un utilisateur qui n'est pas root, et dont le nom n'est pas ghost, car ce nom entre en conflit avec l'outil. Créez-le depuis le compte root, en remplaçant user par le nom choisi :

Terminal, en root
adduser <user>
usermod -aG sudo <user>
su - <user>

Nginx et MySQL

Mettez le système à jour, installez Nginx (1.9.5 au minimum pour SSL) et MySQL. La ligne ufw ouvre HTTP et HTTPS si ce pare-feu est actif :

Terminal
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nginx
sudo ufw allow 'Nginx Full'
sudo apt-get install mysql-server

Sur les versions récentes d'Ubuntu, le compte root de MySQL s'authentifie par socket, ce que Ghost ne prend pas en charge. Donnez-lui un mot de passe :

Terminal, puis console MySQL
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'caching_sha2_password' BY '<your-new-root-password>';
FLUSH PRIVILEGES;
exit

Node.js et Ghost-CLI

Ghost demande Node.js 22 : les versions 20, 21, 23 et suivantes ne sont pas prises en charge. Le projet demande de l'installer pour tout le système, de cette façon :

Terminal
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
NODE_MAJOR=22
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
sudo apt-get update
sudo apt-get install nodejs -y
sudo npm install ghost-cli@latest -g

Lancer l'installation

Ghost s'installe dans son propre dossier, avec un propriétaire et des droits précis. Remplacez sitename par le nom de votre choix :

Terminal
sudo mkdir -p /var/www/sitename
sudo chown <user>:<user> /var/www/sitename
sudo chmod 775 /var/www/sitename
cd /var/www/sitename
ghost install

La commande pose alors ses questions, et le projet recommande de répondre oui à chaque étape proposée :

Le site répond alors, et https://example.com/ghost vous invite à créer le compte du propriétaire. Si l'installation est interrompue, ghost setup reprend la configuration ; si elle échoue, ghost uninstall nettoie mieux que la suppression du dossier. ghost doctor vérifie le système à tout moment.

Installer Ghost avec Docker Compose (preview)

Le projet présente cette méthode comme une « preview » : elle est toute nouvelle à ses yeux. C'est elle qui permet d'auto-héberger l'analytique web et ActivityPub.

Sur un serveur où Docker est installé, récupérez l'outillage officiel dans /opt/ghost et copiez ses deux fichiers d'exemple :

Terminal
git clone https://github.com/TryGhost/ghost-docker.git /opt/ghost && cd /opt/ghost
cp .env.example .env
cp caddy/Caddyfile.example caddy/Caddyfile

Dans le fichier .env, renseignez ces valeurs :

Dans caddy/Caddyfile, décommentez le bloc qui correspond à votre cas : redirection de www vers le domaine nu, ou l'inverse, ou domaine d'administration séparé. Lancez ensuite Ghost, puis terminez la mise en place sur /ghost :

Terminal
docker compose pull
docker compose up -d

L'analytique web et ActivityPub

L'analytique demande un compte Tinybird, service externe. Depuis /opt/ghost, connectez-vous, déployez sa configuration et récupérez les jetons à coller dans .env, section « Tinybird configuration » :

Terminal
docker compose run --rm tinybird-login
docker compose run --rm tinybird-sync
docker compose run --rm tinybird-deploy
docker compose run --rm tinybird-login get-tokens

ActivityPub fonctionne d'emblée avec le service hébergé par le projet, gratuit dans des limites d'usage que publie sa documentation. Pour auto-héberger le vôtre, décommentez ACTIVITYPUB_TARGET=activitypub:8080. Activez ensuite dans .env le ou les profils voulus, puis relancez les conteneurs :

.env
COMPOSE_PROFILES=analytics,activitypub
Terminal
docker compose pull
docker compose up -d

Pour ActivityPub, le projet demande de recréer aussi Ghost et Caddy, avec docker compose up -d --force-recreate ghost caddy.

Passer de Ghost-CLI à Docker Compose

Après le clonage et la configuration, bash scripts/migrate.sh copie le dossier content, importe la base dans le conteneur MySQL et démarre Caddy à la place de Nginx. Il propose d'arrêter Nginx, ce qui met le site hors ligne : répondez non si d'autres sites tournent sur le serveur. Il ne supprime aucune donnée. bash recovery_instructions.sh rétablit le site d'origine si vous interrompez la migration.

HTTPS et domaine d'administration

L'administration de Ghost doit passer par HTTPS, et le projet recommande HTTPS pour tout le site : sans lui, identifiants et mots de passe circulent en clair. Avec Docker Compose, Caddy s'en charge. Avec Ghost-CLI, l'installation installe le certificat, et une commande le fait après coup :

Terminal, dans le dossier du site
ghost setup ssl

Pour changer l'adresse d'un site installé avec Ghost-CLI, ghost config url https://example.com met à jour la configuration, et ghost restart l'applique.

Le projet conseille aussi un domaine d'administration séparé, qui réduit la surface d'attaque. Le chemin reste /ghost/. Côté Ghost-CLI, il se déclare dans config.production.json :

config.production.json
"admin": {
  "url": "https://admin.example.com"
}

Côté Docker Compose, renseignez ADMIN_DOMAIN, décommentez son bloc dans le Caddyfile et lancez docker compose up -d --force-recreate ghost caddy. Ce domaine a besoin, lui aussi, de ses enregistrements A et AAAA.

MySQL 8, la base de production

MySQL 8 est la seule base que le projet prend en charge en production. Ghost-CLI s'installe avec MySQL 8.0 ou 8.4, et le fichier Compose fournit une image MySQL 8.0.

Les e-mails et les newsletters

Ghost distingue deux envois, qui ne passent pas par le même chemin. C'est le point le plus important à régler après l'installation.

EnvoiExemplesCe qui le porte
TransactionnelInvitations de l'équipe, mots de passe oubliés, inscriptions et liens de connexion des membres, code de connexion depuis un nouvel appareilLa configuration mail de Ghost, en SMTP
NewslettersLes articles envoyés à vos membresL'API de Mailgun, dont les clés se saisissent dans les réglages « Email newsletter »

Le relais SMTP, pour les e-mails transactionnels

La documentation classe cette configuration comme requise en production. Ghost envoie aussi un code par e-mail quand il détecte une connexion depuis un nouvel appareil : réglez ce relais avant d'inviter votre équipe.

Sur un VPS Simafri, l'envoi passe par un relais SMTP authentifié, sur le port 587 : l'adresse d'un compte de messagerie que vous avez déjà, ou Simafri Suite.

config.production.json (Ghost-CLI), puis ghost restart
"mail": {
  "transport": "SMTP",
  "from": "'Acme Support' <support@example.com>",
  "options": {
    "host": "smtp.example.com",
    "port": 587,
    "secure": false,
    "requireTLS": true,
    "auth": {
      "user": "support@example.com",
      "pass": "1234567890"
    }
  }
}
.env (Docker Compose), section SMTP Email
mail__transport=SMTP
mail__options__host=smtp.example.com
mail__options__port=587
mail__options__secure=false
mail__options__requireTLS=true
mail__options__auth__user=support@example.com
mail__options__auth__pass=1234567890
mail__from="'Acme Support' <support@example.com>"
Terminal, après un changement du fichier .env
docker compose up -d --force-recreate ghost

Mailgun, pour les newsletters

Le relais SMTP ne couvre pas les newsletters. Selon la documentation, l'envoi en masse ne se fait pas en SMTP et Mailgun est, à ce jour, le seul service d'envoi en masse que Ghost prend en charge. Vous créez votre compte Mailgun et saisissez ses clés d'API dans les réglages de Ghost.

Si vous n'envoyez pas vos articles par e-mail, vous n'avez besoin d'aucun compte Mailgun : ces réglages s'ignorent. Si vous préférez un autre outil de newsletter, le projet propose de synchroniser vos membres vers lui, par exemple avec Zapier ou ses guides d'intégration.

Sauvegarder et restaurer Ghost

Ghost propose trois niveaux de copie, et ils ne contiennent pas la même chose. Pour reconstruire un site à l'identique, le projet demande de sauvegarder directement la base et le dossier content.

MéthodeCe qu'elle contientPour quel usage
ghost backup (Ghost-CLI)Un zip : contenus en JSON, membres en CSV, thèmes, images, fichiers et médias, routes et redirectionsLa précaution avant une mise à jour
Export depuis l'administrationUn zip : contenus et réglages, membres, statistiques des articles, thèmes, routes et redirections, au choix. Ni commentaires, ni historique d'activité des membres, ni médiasLe déplacement du contenu vers un autre site
Base et dossier contentLa totalité des donnéesLa reprise après sinistre, ou une copie exacte

L'export se trouve dans « Settings », « Advanced », « Import/Export », onglet « Export », bouton « All data ». Pour la copie complète, avec Ghost-CLI, le compte MySQL et le nom de la base à reporter sont dans config.production.json :

Terminal, Ghost-CLI
mkdir -p ~/ghost-backups
mysqldump -u ghost_user -p ghost_production > ~/ghost-backups/ghost_backup.sql
cd /var/www/sitename
tar czf ~/ghost-backups/ghost_content_backup.tar.gz content/

Avec Docker Compose, l'outillage officiel garde le contenu dans data/ghost. Le dump reprend la forme donnée par l'image MySQL, et le mot de passe root est déjà dans le conteneur. Gardez aussi une copie de .env et du Caddyfile.

Terminal, Docker Compose
cd /opt/ghost
mkdir -p ~/ghost-backups
docker compose exec -T db sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" ghost' > ~/ghost-backups/ghost_backup.sql
tar czf ~/ghost-backups/ghost_content_backup.tar.gz data/ghost

Restaurer

Terminal, Ghost-CLI
cd /var/www/sitename
ghost stop
mysql -u ghost_user -p ghost_production < ~/ghost-backups/ghost_backup.sql
tar xzf ~/ghost-backups/ghost_content_backup.tar.gz
sudo chown -R ghost:ghost content
ghost restart
Terminal, Docker Compose
cd /opt/ghost
docker compose stop ghost
docker compose exec -T db sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" ghost' < ~/ghost-backups/ghost_backup.sql
tar xzf ~/ghost-backups/ghost_content_backup.tar.gz
docker compose start ghost

Copiez ces fichiers hors du serveur, avec rsync ou scp, et faites un essai de restauration sur une machine de test. Si vous repartez d'un export avec des membres payants, connectez le même compte Stripe avant d'importer vos membres.

Mettre à jour Ghost

Le projet publie des mises à jour chaque semaine et rappelle qu'un serveur web public doit rester à jour. Lisez les notes de version, puis lancez la commande de votre méthode.

Avec Ghost-CLI

Terminal, dans le dossier du site
ghost check-update
ghost backup
ghost update

Avec Docker Compose

Terminal
cd /opt/ghost
git pull
docker compose pull
docker compose up -d
docker image prune

La dernière ligne, facultative, retire les anciennes images. Laissez GHOST_VERSION commenté dans .env : fixer une version bloque ces commandes de mise à jour.

Renforcer et faire grandir votre instance

La documentation donne plusieurs réglages pour un serveur en production :

Pour la charge, le projet place un CDN et une couche de cache devant Ghost. Il précise que le clustering et le sharding ne sont pas pris en charge : une seule instance sert le site, et le cache absorbe le trafic.

Qui fait quoi sur un VPS géré

L'auto-hébergement demande de tenir le serveur en plus de l'application. Sur un VPS géré, nos équipes prennent le serveur en main et suivent votre instance de manière proactive ; Ghost reste votre logiciel, avec ses réglages et ses données.

SujetNos équipesVous
Le serveurMises à jour du système et de la sécurité, interventions sur le serveur comprisesLe moment qui convient à votre activité
La supervisionServeur suivi 24 h/24 et 7 j/7, avec intervention sans attendre votre appelVos contenus, vos membres et vos abonnements
GhostSuivi proactif : erreurs, lenteurs et espace disque repérés, correction recommandéeSon installation, ses mises à jour, ses réglages, son relais SMTP et son compte Mailgun, que vous appliquez, vous ou votre assistant IA
Les sauvegardesChaque nuit, chiffrées et gardées hors de la machine ; restauration compriseLa demande de restauration, quand vous en avez besoin
La migrationVotre serveur actuel migré, offertLe moment de la bascule

Si vous préférez que nos équipes interviennent dans l'application elle-même, cette prestation se facture à l'heure ou au forfait, avec un chiffrage communiqué avant l'intervention.

Un serveur tenu pour votre site sous Ghost

Avec un VPS géré Simafri, nos équipes tiennent à jour le serveur de votre instance Ghost, le surveillent jour et nuit et interviennent sans attendre votre appel ; elles suivent aussi votre instance de manière proactive et vous recommandent les corrections utiles, que vous appliquez, vous ou votre assistant IA. Les sauvegardes sont chiffrées chaque nuit et gardées hors de la machine, leur restauration est comprise, et la migration de votre serveur actuel est offerte.

Découvrir les VPS gérés

Questions fréquentes

Ghost est-il gratuit en auto-hébergement ?

Oui. Ghost est sous licence MIT : vous pouvez l'utiliser en entreprise et l'adapter, en gardant sa mention de licence. Restent les services autour de lui : le serveur, le relais d'e-mails, Mailgun si vous envoyez des newsletters, Tinybird si vous voulez son analytique.

Quelle configuration faut-il pour héberger Ghost ?

Le projet recommande Ubuntu 22.04, 24.04 ou 26.04, Nginx, Node.js 22, MySQL 8.0 ou 8.4, systemd, au moins 1 Go de mémoire, un domaine et un utilisateur qui n'est pas root. Pour Docker Compose, il cite en exemple un serveur de 2 Go et 1 processeur.

Faut-il installer Ghost avec Ghost-CLI ou avec Docker ?

Ghost-CLI est l'installation que le projet recommande pour la production. Docker Compose est une preview, seule à permettre l'analytique web et ActivityPub auto-hébergé, et le projet dit avancer vers cet outillage. Un assistant permet de passer de Ghost-CLI à Docker Compose.

Ghost fonctionne-t-il avec SQLite, MariaDB ou PostgreSQL ?

En production, MySQL 8 est la seule base prise en charge. Le projet recommande une réinstallation sur MySQL 8 depuis SQLite, et une migration vers MySQL 8 depuis MariaDB. Sa documentation ne prévoit pas PostgreSQL.

Peut-on envoyer les newsletters de Ghost en SMTP ?

Non. Le SMTP sert aux e-mails transactionnels : invitations, mots de passe, liens de connexion des membres. Les newsletters demandent l'API de Mailgun, seul service d'envoi en masse pris en charge. Sans envoi d'articles par e-mail, aucun compte Mailgun n'est nécessaire.

Comment sauvegarder un site Ghost auto-hébergé ?

Pour une reprise complète, sauvegardez la base MySQL avec mysqldump et le dossier content avec tar. La commande ghost backup produit un zip avant une mise à jour. L'export de l'administration laisse de côté les commentaires, l'historique d'activité des membres et les médias.

Comment mettre à jour Ghost ?

Avec Ghost-CLI, lancez ghost backup puis ghost update dans le dossier du site, et ghost update --rollback en cas de problème. Avec Docker Compose, lancez git pull, docker compose pull et docker compose up -d dans /opt/ghost.

Un VPS géré couvre-t-il Ghost ?

Un VPS géré couvre le serveur : système, sécurité, supervision et sauvegardes. Nos équipes suivent aussi votre instance de manière proactive et vous recommandent les corrections utiles, que vous appliquez. Une intervention dans l'application se facture à l'heure ou au forfait.

Contactez-nous