Thibault Mocellin

Thibault Mocellin

Développeur Full-Stack freelance basé à Annecy 🇫🇷

Créer son blog avec Ghost, Docker et NGINX

Posted on June 21, 2017

Ghost est une plateforme entièrement open source pour la gestion et la publication de contenu. Elle permet notamment la gestion de rôles et utilisateurs pour collaborer à plusieurs, mais aussi la programmation de publication. Vous pouvez retrouver l’ensemble des fonctionnalités ici.

Dans cet article nous allons voir comment mettre en place son blog en HTTPS avec Ghost et Docker.

Pour y parvenir nous utiliserons docker-compose et notre stack sera composée des éléments suivants :

  • Ghost
  • MariaDB
  • NGINX
  • Let’s Encrypt

Nous utiliserons les images de Bitnami pour Ghost et MariaDB, ensuite concernant NGINX et Let’s Encrypt nous utiliserons nginx-proxy et docker-letsencrypt-nginx-proxy-companion comme nous avons pu le faire dans cet article ou celui ci.

Commençons par créer un dossier docker-ghost et ajoutons le fichier docker-compose.yml :

mkdir docker-ghost && cd docker-ghost
touch docker-compose.yml

Ensuite nous ajoutons les services nginx-proxy et ssl-companion

version: '2'
services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - '80:80'
      - '443:443'
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - /etc/nginx/vhost.d
      - /usr/share/nginx/html
      - /apps/web/ssl:/etc/nginx/certs:ro
  ssl-companion:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: ssl-companion
    volumes:
      - /apps/web/ssl:/etc/nginx/certs:rw
      - /var/run/docker.sock:/var/run/docker.sock:ro
    volumes_from:
      - nginx-proxy
    depends_on:
      - nginx-proxy

Puis le service mariadb :

mariadb:
  image: 'bitnami/mariadb:latest'
  environment:
    - MARIADB_ROOT_USER=YOUR_ROOT_USER
    - MARIADB_ROOT_PASSWORD=YOUR_PASSWORD
    - MARIADB_DATABASE=ghost
  volumes:
    - ./ghost_data/db_data:/bitnami/mariadb
  1. On définit l’image que l’on souhaite utiliser
  2. On définit l’utilisateur, le mot de passe et le nom de la base de données
  3. On crée un volume pour pouvoir récupérer les données si l’on souhaite faire un backup.

Pour finir on rajoute le service ghost :

ghost:
  image: bitnami/ghost:latest
  depends_on:
    - mariadb
  ports:
    - 2368
  volumes:
    - ./ghost_data/content_data:/bitnami/ghost
  environment:
    - VIRTUAL_HOST=blog.your_domain.fr
    - LETSENCRYPT_HOST=blog.your_domain.fr
    - LETSENCRYPT_EMAIL=contact@domain.fr
    - GHOST_HOST=blog.your_domain.fr
    - MARIADB_USER=YOUR_ROOT_USER
    - MARIADB_PASSWORD=YOUR_PASSWORD
  1. On définit l’image que l’on souhaite utiliser
  2. On mappe le port 2368 entre la machine hôte et le container
  3. On lie le service au service mariadb
  4. On définit le volume pour la sauvegarde
  5. On définit les variables d’environnement nécessaires à NGINX et Let’s Encrypt en définissant le domaine par lequel on souhaite accéder au service. Ensuite on définit le domaine pour ghost. Enfin on définit le nom d’utilisateur et le mot de passe pour se connecter à la base de données.

Vous pouvez consulter l’ensemble des variables d’environnement de ghost sur cette page.

Voici le fichier docker-compose.yml complet :

version: '2'
services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - '80:80'
      - '443:443'
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - /etc/nginx/vhost.d
      - /usr/share/nginx/html
      - /apps/web/ssl:/etc/nginx/certs:ro
  ssl-companion:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: ssl-companion
    volumes:
      - /apps/web/ssl:/etc/nginx/certs:rw
      - /var/run/docker.sock:/var/run/docker.sock:ro
    volumes_from:
      - nginx-proxy
    depends_on:
      - nginx-proxy
  mariadb:
    image: 'bitnami/mariadb:latest'
    environment:
      - MARIADB_ROOT_USER=YOUR_ROOT_USER
      - MARIADB_ROOT_PASSWORD=YOUR_PASSWORD
      - MARIADB_DATABASE=ghost
    volumes:
      - ./ghost_data/db_data:/bitnami/mariadb
  ghost:
    image: bitnami/ghost:latest
    depends_on:
      - mariadb
    ports:
      - 2368
    volumes:
      - ./ghost_data/content_data:/bitnami/ghost
    environment:
      - VIRTUAL_HOST=blog.your_domain.fr
      - LETSENCRYPT_HOST=blog.your_domain.fr
      - LETSENCRYPT_EMAIL=contact@domain.fr
      - GHOST_HOST=blog.your_domain.fr
      - MARIADB_USER=YOUR_ROOT_USER
      - MARIADB_PASSWORD=YOUR_PASSWORD

Récupérez le fichier docker-compose.yml directement depuis votre serveur, remplacez les variables d’environnement et démarrez les services :

docker-compose up -d

Ensuite rendez vous sur le domaine que vous avez saisie dans le fichier docker-compose.yml vous devriez voir cette page s’afficher :

ghost docker

Ensuite rendez-vous sur cette adresse votre-domaine/ghost. Maintenant vous allez devoir suivre les instructions pour configurer votre blog :

Créez un nouveau compte

ghost blog docker

Saisissez vos informations utilisateur et le nom de votre blog

ghost blog docker

Inviter d’autres personnes à collaborer avec vous. (étape facultative)

ghost invite friends

Et voila votre Blog Ghost est maintenant configuré et prêt à être utilisé.

ghost blog docker

Vous pouvez retrouver le fichier docker-compose.yml ici.