GNU/Linux >> Tutoriels Linux >  >> Linux

Guide complet de l'auto-hébergement de Ghost CMS avec Docker

Ghost est un système de gestion de contenu open source qui convient à un blog, une newsletter ou un site Web d'adhésion.

Il est ultra-rapide et optimisé pour le référencement. Nous l'aimons ici au Linux Handbook. Notre site Web utilise Ghost, bien sûr.

Maintenant, vous pouvez opter pour une instance Ghost gérée par les créateurs de Ghost lui-même. Cela vous coûterait cher mais vous n'aurez pas à déployer d'efforts pour déployer Ghost, le mettre à jour et le maintenir. Et bien sûr, cela aide au développement du projet Ghost.

Si vous voulez éviter de dépenser beaucoup ou prendre les choses en main avec une approche "faites-le vous-même", vous pouvez auto-héberger Ghost sur votre serveur.

Dans ce tutoriel, je vais vous montrer les étapes pour déployer Ghost avec Docker.

Ghost auto-hébergé avec Docker

Voici la chose. Certains fournisseurs de serveurs cloud comme DigitalOcean proposent également un déploiement Ghost en un clic. Cela pourrait être la solution de facilité si vous ne voulez pas les problèmes liés à l'installation et à la configuration initiales de Ghost.

Cela mis à part, voyons ce dont vous avez besoin pour déployer Ghost avec Docker sur un serveur Linux.

Exigences

Outre la familiarité avec les commandes Linux, connaître les bases de Docker Compose sera également utile ici.

  • Un serveur Linux. Vous pouvez utiliser un serveur physique, une machine virtuelle ou des serveurs cloud. Vous pouvez vous inscrire auprès de notre partenaire Linode et obtenir 100 $ de crédits gratuits.
  • Docker et Docker Compose installés sur votre serveur.
  • Accès au DNS de votre domaine sur lequel vous souhaitez déployer Ghost.
  • Configuration du proxy inverse Nginx avec redirection www/non-www et limites de téléchargement autorisées.

Étape 0 :préparez la configuration initiale

Vous devez avoir Docker et Docker Compose installés sur votre système. Vous pouvez vous référer à ces tutoriels pour obtenir des instructions pour Ubuntu.

En dehors de cela, vous devez également avoir configuré le proxy inverse Ngnix. Ceci est utile si vous souhaitez installer plus d'un Ghost ou un autre service Web sur le même serveur.

Maintenant, j'ai couvert ce sujet en détail dans le tutoriel lié ci-dessous, donc je ne vais pas répéter les mêmes étapes ici. Cependant, vous devez avoir cette configuration sur votre système.

Suivez ce tutoriel jusqu'à l'étape 4 :

Étape 1 :Préparer le déploiement de Ghost

J'utilise ici la méthode de proxy inverse Jwilder car elle prend en compte les certificats SSL, la redirection www/non-www et les limites de téléchargement autorisées.

La gestion des certificats SSL est déjà décrite dans le lien partagé ci-dessus dans la section des exigences. De plus, je décrirai comment activer la redirection www/non-www et augmenter les limites de téléchargement autorisées.

Redirection WWW/non-WWW

En fonction de vos préférences de référencement, vous souhaiterez peut-être définir la redirection de www vers non-www ou vice versa. Par exemple, si votre blog est hébergé sur domain.com, les utilisateurs visitant www.domain.com doivent y être redirigés (comme fonctionne le domaine de GitHub).

De même, si vous l'hébergez sur www.domain.com, les utilisateurs visitant domain.com doivent être redirigés (comme fonctionne le domaine de Linode).

WWW vers non-WWW

Créez un fichier nommé www.domain.com dans le répertoire de composition du menu fixe nginx avec le contenu suivant et enregistrez-le :

rewrite ^/(.*)$ https://domain.com/$1 permanent;
Non-WWW à WWW

Créez un fichier nommé domain.com dans le répertoire de composition du menu fixe nginx avec le contenu suivant et enregistrez-le :

rewrite ^/(.*)$ https://www.domain.com/$1 permanent;

Maintenant, supposons que vous vouliez utiliser la redirection WWW vers non-WWW. Tout ce que vous avez à faire est de lier le montage du fichier dans la section des volumes de votre configuration de service Nginx :

      - ./www.domain.com:/etc/nginx/vhost.d/www.domain.com

Augmenter les limites de téléchargement autorisées

Les téléchargements d'images peuvent être affectés par la taille de téléchargement maximale par défaut de 50 Mo. Pour définir une limite de téléchargement maximale et éviter les problèmes lors du téléchargement d'images sur Docker, par exemple pour 1 Go, créez un fichier nommé client_max_upload_size.conf et enregistrez-le avec le contenu suivant :

client_max_body_size 1G;

Plus tard, vous devrez le monter comme décrit avec le fichier précédent :

      - ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf

Exécutez docker-compose up -d depuis le répertoire Nginx pour mettre à jour votre configuration Nginx.

Tout d'abord, la configuration du déploiement de Ghost se compose essentiellement de deux composants principaux :

  • Backend de la base de données MariaDB
  • Ghost lui-même en tant qu'interface Web

Puisque vous déployez Ghost avec Docker, tous les composants ci-dessus sont configurés comme leurs propres conteneurs respectifs.

Pour le service de base de données, j'utiliserai un réseau interne appelé ghost car il ne doit être visible que pour le service Ghost.

networks:
  - ghost

Mais pour le service Ghost, bien sûr, le même net réseau utilisé sur la configuration du proxy inverse doit être spécifié avec le ghost réseau, et alors seulement il serait possible de le faire fonctionner avec le conteneur Nginx Docker.

networks:
  - net
  - ghost

Considérez maintenant comment ils sont configurés individuellement avec Docker Compose :

Pour MariaDB, j'utilise l'image officielle MariaDB 10.5.3 qui est disponible sur Docker Hub :

    ghostdb:
        image: mariadb:10.5.3
        volumes:
            - ghostdb:/var/lib/mysql
        restart: on-failure
        env_file:
            - ./mariadb.env
        networks:
            - ghost

Ici, j'utilise un volume appelé ghostdb pour stocker les données de la base de données dans /var/lib/mysql . J'ai également défini les variables d'environnement pertinentes dans le env_file appelé mariadb.env :

MYSQL_RANDOM_ROOT_PASSWORD=1
MYSQL_USER=mariadbuser
MYSQL_PASSWORD=mariadbpassword
MYSQL_DATABASE=ghost

Pour le service Ghost lui-même, au lieu d'utiliser un latest tag, je préfère spécifiquement utiliser le numéro de version marqué sur Docker Hub lancé par les développeurs comme une version stable. Ici, à l'heure où j'écris, c'est 4.5.0 :

    ghost:
        image: ghost:4.5.0
        volumes:
            - ghost:/var/lib/ghost/content
            - ./config.json:/var/lib/ghost/config.production.json
        env_file:
            - ./ghost-mariadb.env
        restart: on-failure
        depends_on: ghostdb
        networks:
            - net
            - ghost

Le lien monté config.json Le fichier se compose des paramètres SMTP (Mailgun) et de la rotation des journaux essentiels (focalisés sur les erreurs) :

{
  "url": "http://localhost:2368",
  "server": {
    "port": 2368,
    "host": "0.0.0.0"
  },
  "mail": {
    "transport": "SMTP",
    "options": {
        "service": "Mailgun",
        "host": "smtp.eu.mailgun.org",
        "port": 465,
        "secureConnection": true,
        "auth": {
            "user": "replace-me-with-a-mailgun-configured-email-address",
            "pass": "replace-me-with-the-relevant-mailgun-apikey-of-50-characters"
        }
    }
  },
  "logging": {
    "path": "content/logs/",
    "level": "error",
    "rotation": {
      "enabled": true,
      "count": 10,
      "period": "1d"
  },
    "transports": [
      "file",
      "stdout"
    ]
  },
  "process": "systemd",
  "paths": {
    "contentPath": "/var/lib/ghost/content"
  }
}

S'il doit utiliser MySQL/MariaDB, le service Ghost doit s'appuyer sur ghostdb service pour qu'il soit opérationnel. Cela ne peut être assuré que lorsque vous avez monté la liaison ghost-mariadb.env fichier (affiché dans la section volumes du service de base de données Ghost) avec la configuration de base de données correcte selon mariadb.env dans le service de base de données, qui serait :database__client , database__connection__host , database__connection__user , database__connection__password et database__connection__database .

Je vais également attribuer chacune des variables d'environnement VIRTUAL_HOST et LETSENCRYPT_HOST à la fois domain.com ainsi que www.domain.com respectivement, afin de s'assurer que les deux existent. Cela garantit absolument que les redirections et les certificats SSL fonctionnent sans problème. Je veux que mon URL principale soit sans www donc je l'ai définie comme url=https://domain.com . Étant donné que vous utiliserez cette configuration pour une utilisation au niveau de la production, le NODE_ENV variable est définie sur le mode de production. Ces détails doivent également être ajoutés.

Par conséquent, le fichier d'environnement complet (ghost-mariadb.env ) pour le service Ghost serait :

VIRTUAL_HOST=domain.com,www.domain.com
LETSENCRYPT_HOST=domain.com,www.domain.com
url=https://domain.com
NODE_ENV=production

database__client=mysql
database__connection__host=ghostdb
database__connection__user=mariadbuser
database__connection__password=mariadbpassword
database__connection__database=ghost

Des incohérences dans les données ci-dessus pourraient faire basculer par erreur Ghost vers SQLite. Vous ne voulez pas ça. Assurez-vous donc que tous les paramètres ci-dessus correspondent correctement au service de base de données discuté pour mariadb.env ci-dessus.

Chacun des services de base de données aura ses propres volumes Docker respectifs pour stocker les données utilisateur et de contenu. Je vais les créer en tant que volumes externes :

docker volume create ghostdb
docker volume create ghost

Vous devez maintenant inclure un  volumes section dans le fichier de composition docker avec les détails suivants :

volumes:
  ghost:
    external: true
  ghostdb:
    external: true

Vous disposez maintenant des composants nécessaires au déploiement de Ghost.

Étape 2 :Déployer Ghost

Le fichier  docker-compose devrait maintenant être prêt. Il est temps d'utiliser ce fichier.

Créez le répertoire de composition du docker Ghost sur votre serveur :

mkdir ghost

Allez dans le répertoire pour éditer les fichiers nécessaires :

cd ghost

Créez maintenant le fichier docker-compose suivant basé sur nos discussions jusqu'à présent :

version: '3.7'
services:
    ghostdb:
       image: mariadb:10.5.3
       volumes:
          - ghostdb:/var/lib/mysql
       restart: on-failure
       env_file:
          - ./mariadb.env
       networks:
          - ghost

    ghost:
      image: ghost:4.5.0
      volumes:
        - ghost:/var/lib/ghost/content
        - ./config.json:/var/lib/ghost/config.production.json
      env_file:
        - ./ghost-mariadb.env
      restart: on-failure
      depends_on: 
        - ghostdb
      networks:
        - net
        - ghost
volumes:
  ghost:
    external: true
  ghostdb:
    external: true

networks:
  net:
    external: true
  ghost:
    internal: true

N'oubliez pas non plus de créer les autres fichiers de configuration comme indiqué ci-dessus :config.json , mariadb.env et ghost-mariadb.env dans le même répertoire.

Démarrez l'instance Ghost :

docker-compose up -d

Accédez au domaine Ghost spécifié dans la configuration à l'aide de l'URL de votre domaine spécifié.

Étape 3 :Configurer votre compte Ghost Admin

Notez que pour configurer votre compte administrateur, vous devez vous rendre sur domain.com/ghost et suivez les instructions à l'écran jusqu'à ce que vous ayez revendiqué votre site en tant qu'administrateur fantôme.

Pour revérifier, confirmez que vous utilisez bien MySQL/MariaDB et non SQLite. Accédez à votre icône d'utilisateur en bas à gauche :

Vous pouvez maintenant être sûr que vous utilisez réellement le conteneur de base de données séparé qui s'affichera sous la forme mysql que vous utilisiez une image Docker MySQL ou MariaDB :

Vous pouvez également voir que les trois autres paramètres :Version, Environnement et Courrier, sont définis comme prévu en fonction de nos étapes mentionnées ci-dessus. Alors c'est tout! Vous avez déployé avec succès Ghost en tant qu'instance auto-hébergée sur votre serveur !

Conseils pour maintenir votre instance Ghost auto-hébergée

Voici quelques conseils qui vous aideront à maintenir votre instance Ghost.

Surveiller les journaux fantômes en temps réel

Si vous souhaitez vérifier les journaux du conteneur pendant son déploiement en temps réel, vous pouvez exécuter :

docker logs -f ghost_ghost_1

Sauvegarder et restaurer des volumes fantômes sans temps d'arrêt

En utilisant une approche cloud + locale, vous pouvez sauvegarder et restaurer vos volumes fantômes sans temps d'arrêt.

Mettre à jour les conteneurs fantômes sans temps d'arrêt

Avec le --scale flag sur Docker Compose, vous pouvez créer un nouveau conteneur basé sur la dernière version de Ghost. Lorsque c'est fait, vous pouvez supprimer l'ancien. Cela se traduit par zéro temps d'arrêt.

Vous pouvez lire quelques conseils supplémentaires dans l'article ci-dessous.

Vous pouvez également déployer et gérer des thèmes fantômes à l'aide d'actions GitHub pour simplifier votre travail.

Si vous rencontrez un bug, avez des problèmes ou avez une suggestion, faites-le moi savoir en laissant un commentaire ci-dessous.


Linux
  1. Comment installer WordPress avec Docker, un guide facile à suivre

  2. Guide complet du débutant sur la journalisation Docker

  3. 7 conseils utiles pour auto-héberger une instance Ghost avec Docker

  4. Guide complet de l'auto-hébergement de Rocket.Chat avec Docker

  5. Comment mettre à jour le conteneur Docker sans aucun temps d'arrêt

Guide complet de commande Sed [expliqué avec des exemples pratiques]

Guide complet de l'auto-hébergement Plausible [Alternative Google Analytics respectueuse de la vie privée]

Un guide complet pour installer Tomcat sur Linux

Pare-feu Ubuntu UFW - Un guide complet

Installer Docker sur Ubuntu - Un guide étape par étape

Commandes du répertoire Linux :un guide complet