Installer Ghost avec Docker

Au sommaire :

  • 1-Qu'est-ce que Ghost ?
  • 2-Prérequis
  • 3-Déploiement
  • 4-Configuration

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

Il vous faudra une machine virtuelle sous Ubuntu Server 22.04 LTS.

Voici le guide pour ceux qui veulent repartir de zéro.

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

Si vous voulez gagner du temps, utilisez un template cloud-init.

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

Ensuite, suivez ce guide pour installer Docker, Docker Compose et préparer vos variables d'environnement.

Installer Docker
Guide d’installation de Docker.

Enfin, pour exposer l'application sur l'internet public, il vous faudra déployer Traefik.

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.

version: "3.9"

networks:
  web:

services:

  traefik:
    container_name: traefik
    image: traefik:latest
    restart: always
    network:
      web:
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ${APPDATA}/traefik/logs:/logs
      - ${APPDATA}/traefik/traefik.yml:/traefik.yml
      - ${APPDATA}/traefik/dynamic.yml:/dynamic.yml
      - ${APPDATA}/traefik/letsencrypt/acme.json:/acme.json
    labels:
      - traefik.enable=true
      - traefik.http.routers.traefik-dash.entrypoints=websecure
      - traefik.http.routers.traefik-dash.rule=Host(`traefik.<votredomaine>.ovh`)
      - traefik.http.routers.traefik-dash.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.votrenomdedomaine`)
      - traefik.http.routers.ghost.service=ghost-svc
      - traefik.http.services.ghost-svc.loadbalancer.server.port=2368
      - traefik.http.routers.ghost.tls.certresolver=letsencrypt
  • 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 ou le nom de domaine, 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.

On explorera davantage lorsque j'aurai customisé mon instance dans les moindres détails.

See yaaa!!!!!!!!!!