Installer Ghost avec Docker

Guide d'installation du CMS Ghost sous Docker.

Installer Ghost avec Docker
ghost cms docker

Au sommaire :

  • 1-Qu'est-ce que Ghost ?
  • 2-Prérequis
  • 3-Déploiement
  • 4-Configuration
  • 5-Exposer son instance avec Traefik

1-Qu'est-ce que Ghost ?

Ghost est un CMS (Content Management System), un moteur de blog libre et open-source écrit en JavaScript et distribué sous licence MIT.

C'est le CMS que j'utilise pour mes blog car il est épuré, très économe en ressources et très facile à déployer.

Il y a Tech2Rue évidemment qui me permet de partager mes modestes connaissances en informatique au plus grand nombre mais aussi RetroHack plus axé sur la modification de consoles rétro et l'émulation (autre pendant de la virtualisation).

Bref, Ghost me rend de grand services au quotidien et c'est peu de le dire.

Pour ceux qui ont des connaissances en informatique, n'oubliez pas que internet est un espace de partage donc après avoir suivi ce guide et déployé votre première instance, commencez à rédiger vos premiers tutoriels.

Vous êtes prêts ? YIIIIHIIIII!!!!!

2-Prérequis

Pour déployer Ghost, vous devez disposer d'une machine virtuelle fonctionnant sous Ubuntu Server.

Création de la machine virtuelle :

Virtualisation avec Proxmox VE : Si vous partez de zéro, suivez mon guide détaillé pour virtualiser Ubuntu sur Proxmox VE avec des réglages optimisés.

Virtualiser Ubuntu Server sur Proxmox VE
Guide d’installation de Ubuntu Server sur Proxmox VE avec mes meilleurs réglages.

Automatisation avec Cloud-Init : Pour gagner du temps lors de la configuration, utilisez un template Cloud-Init. Cela permet d'automatiser et de simplifier l'initialisation de vos machines virtuelles. Retrouvez les instructions dans ce guide.

Initialiser vos machines virtuelles avec Cloud-init sur Proxmox VE
Guide d’installation de Cloud-Init qui va vous permettre d’automatiser vos déploiements

Installation des outils nécessaires :

Docker et Docker Compose : Une fois la machine virtuelle prête, installez Docker et Docker Compose, indispensables pour gérer et orchestrer vos conteneurs. Ce guide vous accompagnera dans l'installation.

Installer Docker
Guide d’installation de Docker.

Exposition de l'application :

Proxy inverse avec Traefik : Pour exposer vos applications sur Internet de manière sécurisée, configurez un proxy inverse. Traefik est une solution recommandée. Suivez ce guide pour l'installation.

Installer Traefik avec Docker
Guide d’installation de Traefik.

3-Déploiement

Commencez par créer un dossier "docker" à la racine du dossier utilisateur"

mkdir -p ~/docker

Créez un fichier nommé "compose.yml"

touch ~/docker/compose.yml

Ouvrez le fichier "compose.yml" et copiez cette configuration.

networks:
# default network
  default:
    driver: bridge

services:
      
  ghost:
    image: ghost
    container_name: ghost
    hostname: ghost
    restart: unless-stopped
    ports:
      - 2368:2368
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - ${APPDATA}/ghost:/var/lib/ghost/content
    environment:
      NODE_ENV: production
      url: <votre_nom_de_domaine>
      database__client: sqlite3
      database__connection__filename: "content/data/ghost.db"
      database__useNullAsDefault: true
      database__debug: false
  • image : l'image officielle de Ghost dans sa dernière version
  • container_name : le nom du conteneur
  • hostname : le nom d'hôte à l'intérieur du conteneur
  • restart : unless-stopped
  • ports : 2368
  • volumes : accés en lecture à l'horloge et au fuseau horaire du serveur et création d'un dossier pour l'application
  • environment : on indique que le blog est en mode production, l'url du blog, le type de base de données (sqlite3 pour plus de simplicité), le chemin de la base de données, useNullAsDefautlt activé (optionnel, seulement pour SQLite) et mode débug désactivé
  • labels : le blog passera bien sûr par Traefik en HTTPS avec comme nom de domaine celui que vous souhaitez. Puis vous créez un service et vous indiquez le numéro du port ainsi que l'autorité de certification

Téléchargez l'image et déployez le conteneur.

docker compose pull && docker compose create

Puis démarrez le conteneur.

docker start ghost

Accédez à votre blog via l'adresse IP locale, vous devriez tomber sur la page d'accueil.

4-Configuration

Pour configurer le blog, ajoutez "/ghost" à la suite de l'adresse IP/nom de domaine.

  • Site title : le nom du blog qui sera affiché en page d'accueil
  • Full name : votre pseudo
  • Email address : votre adresse mail
  • Password : votre mot de passe

Dés que vous avez fini, cliquez sur "Create account & start publishing".

En bas à gauche, cliquez sur l'icône du rouage pour accédez aux réglages du blog.

General

Cliquez sur "General" :

  • Title & description : changez le titre de la page d'accueil et la description si besoin
  • Site timezone : sélectionnez votre fuseau horaire
  • Publication language : mettez "fr"

Si vous êtes présent sur les réseaux sociaux, n'oubliez pas d'aller dans "SITE META SETTINGS".

Staff

Si vous souhaitez qu'une autre personne rédige pour le blog, c'est par ici pour créé un compte.

Intégration

Pour ajouter de nouvelles fonctionnalités comme un espace commentaire, analyser le trafic de votre blog et j'en passe.

Membership

Pas encore testé mais si vous souhaitez monétiser votre blog, Ghost vous propose de connecté ce dernier à votre compte Stripe (concurrent de Paypal).

Design

Ensuite cliquez sur "Design" et "Change theme". Vous allez pouvoir choisir le thème qui vous correspond ou bien charger un thème téléchargé sur le marketplace.

Voici le lien du marketplace qui propose davantage de choix.

Ghost Themes - The Marketplace
Discover beautiful professional themes for the Ghost publishing platform. Custom templates for magazines, blogs, news websites, content marketing & more!

Pour rédiger votre premier article, cliquez sur "Posts" et "New Post"

Comme vous pouvez le voir, c'est simple à déployer et surtout économe en ressources comme vous pouvez le constater avec l'image ci-dessous.

5-Exposer son instance avec Traefik

networks:
# default network
  default:
    driver: bridge
# Traefik network
  web:
    name: web
    driver: bridge

services:

  traefik:
    container_name: traefik
    image: traefik:v2
    restart: always
    networks:
      - web
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ${APPDATA}/traefik/traefik.yml:/traefik.yml
      - ${APPDATA}/traefik/dynamic.yml:/dynamic.yml
      - ${APPDATA}/traefik/letsencrypt/acme.json:/acme.json
      - ${APPDATA}/traefik/shared:/shared
    labels:
      - traefik.enable=true
      - traefik.http.routers.traefik.entrypoints=websecure
      - traefik.http.routers.traefik.rule=Host(`traefik.<domain_name>`)
      - traefik.http.routers.traefik.service=api@internal
      - "traefik.http.routers.traefik.middlewares=middlewares-basic-auth@file"
      
  ghost:
    image: ghost
    container_name: ghost
    hostname: ghost
    restart: unless-stopped
    network:
      - web
#    ports:
#      - 2368:2368
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - ${APPDATA}/ghost:/var/lib/ghost/content
    environment:
      NODE_ENV: production
      url: <url_du_blog>
      database__client: sqlite3
      database__connection__filename: "content/data/ghost.db"
      database__useNullAsDefault: true
      database__debug: false
    labels:
      - traefik.enable=true
      - traefik.http.routers.ghost.entrypoints=websecure
      - traefik.http.routers.ghost.rule=Host(`ghost.<domain_name>`)
      - traefik.http.routers.ghost.service=ghost-svc
      - traefik.http.services.ghost-svc.loadbalancer.server.port=2368
      - traefik.http.routers.ghost.tls.certresolver=letsencrypt