Ghost / MySQL .onion? ()

Aujourd'hui nous allons migrer la base de données de notre blog Ghost de SQLite vers MyQSL.
D'ordinaire, Le CLI de Ghost fait ça tout seul, cependant sur Debian lorsqu'on tente l'installation d'un Ghost en MySQL, ça plante. Tout ça à cause d'une chaussette perdue (ECONNREFUSED).

Prérequis

  • Avoir une installation effective de Ghost en SQLite
  • Avoir un serveur MySQL installé
  • Avoir configuré un utilisateur et une base de données MySQL +infos
  • Dans les exemples qui suivent, je mets entre chevrons les éléménts à remplacer selon votre cas : <user>, <database>, etc

Dans le présent tutoriel, j'utilise Ghost 1.22.4 sur Debian avec Percona.

Exportation / Sauvegardes

.json

La première chose à faire est de faire une exportation de son blog, directement dans l'admin https://<domaine>.<ext>/ghost/ : Ghost > Settings > Labs > Export

  • 0 - On clique sur Export pour obtenir un fichier .json qu'on téléchargera en local.

GhostMySQL_Export

Répertoire d'installation

On va maintenant arrêter le Ghost et mettre de côté les fichiers (images, themes; etc). On présuppose que notre installation a été faite dans le répertoire /home/<user>/<ghost>/.
<user> étant votre utilisateur et <ghost> votre répertoire d'installation.

  • 1 - On se place dans le répertoire d'installation - cd /home/<user>/<ghost>/
  • 2 - On arrête le Ghost - ghost stop
  • 3 - On déplace/renomme le répertoire en Ghost_OLD - mv -R /home/<user>/<ghost>/ /home/<user>/<ghost_OLD>/

Voilà. On passe à la suite.

Clean install

Commençons ! Il va falloir faire une clean install de ghost.

  • 1 - Retournons à la racine de notre home cd
  • 2 - Créons un nouveau répertoire (donnons-lui le nom de l'ancien répertoire) mkdir ghost
  • 3 - Entrons dans le répertoire cd ghost

On va maintenant lancer l'installation de ghost sans configurer immédiatemment Systemd.

Pourquoi ne pas configurer immédiatemment l'automatisation de notre blog avec Systemd? Parce qu'en installant notre blog avec MySQL, nous allons obtenir une erreur. Une erreur qui ne nous permettra pas d'avoir le bon nom de Service. On obtiendrait quelque chose comme ghost_localhost.service. Pas très sexy.

  • 4 - On installe sans Systemd (détails en aval) ghost install no-setup-systemd
  • 5 - On valide l'installation, même si on est sous Debian
System checks failed with message: 'Linux version is not Ubuntu 16'
Some features of Ghost-CLI may not work without additional configuration.
For local installs we recommend using `ghost install local` instead.
? Continue anyway? Yes
  • 6 - On indique l'url, les données de connexion MySQL
? Enter your blog URL: https://<domaine>.<ext>
? Enter your MySQL hostname: <localhost>
? Enter your MySQL username: <MySQL user>
? Enter your MySQL password: [hidden]
? Enter your Ghost database name: <MySQL database>
  • 7 - On ne créait pas de nouvel utilisateur MySQl, ni de configuration Nginx ( déjà fait)
? Do you wish to set up "ghost" mysql user? No
ℹ Setting up "ghost" mysql user [skipped]
? Do you wish to set up Nginx? No
ℹ Setting up Nginx [skipped]
Task ssl depends on the 'nginx' stage, which was skipped.
ℹ Setting up SSL [skipped]
ℹ Setting up Systemd [skipped]
  • 8 - Ghost va maintenant lancer la migration SQL. Echec.
Running sudo command: /home/<user>/<ghost>/current/node_modules/.bin/knex-migrator-migrate --init --mgpath /home/<user>/<ghost>/current
✖ Running database migrations
A ProcessError occurred.

Message: The database migration in Ghost encountered an error.
Help: https://docs.ghost.org/v1/docs/troubleshooting#section-general-update-error

Debug Information:
    OS: Debian, v8.10
    Node Version: v6.12.2
    Ghost-CLI Version: 1.7.1
    Environment: production
    Command: 'ghost install --no-setup-systemd'

Additional log info available in: /home/<user>/.ghost/logs/ghost-cli-debug-2018-04-25T16_51_17_398Z.log

Try running ghost doctor to check your system for known issues.

Please refer to https://docs.ghost.org/v1/docs/troubleshooting#section-cli-errors for troubleshooting.

DIEM PERDIDI !
Non, pas tout à fait.

Comme vous l'avez remarqué, lors de la migration MySQL et de la création des tables dans votre base de données fraîchement créée, il y a un échec de connexion. Dans le détail des logs ( /home/<user>/.ghost/logs/ghost-cli-debug-2018-04-25T16_51_17_398Z.log dans mon cas) on comprend vite que ghost n'est pas parvenu à se connecter à MySQL:

Debug Information:
    OS: Debian, v8.10
    Node Version: v6.12.2
    Ghost-CLI Version: 1.7.1
    Environment: production
    Command: 'ghost install --no-setup-systemd'
Message: The database migration in Ghost encountered an error.
Help: https://docs.ghost.org/v1/docs/troubleshooting#section-general-update-error
--------------- stderr ---------------
[2018-04-25 16:51:17] ERROR

NAME: RollbackError
CODE: ECONNREFUSED
MESSAGE: connect ECONNREFUSED 127.0.0.1:3306

Socket MySQL

connect ECONNREFUSED 127.0.0.1:3306

Cette erreur, on le doit au chemin menant au socket de connexion, celui proposé par défaut par Ghost ne correspondant pas au notre (sous Debian). Pas de panique, il suffit de l'indiquer dans le fichier de configuration de notre installation de ghost:

  • 1 - Ajout du Socket; on ouvre le fichier de configuration - nano config.production.json
  • 2 - On ajoute dans database le chemin vers le socket - "socketPath": "/var/run/mysqld/mysqld.sock"

De telle sorte qu'on obtienne ce qui suit :

"database": {
    "client": "mysql",
    "connection": {
      "host": "localhost",
      "user": "<MySQL user>",
      "password": "<password>",
      "database": "<MySQL database>",
      "socketPath": "/var/run/mysqld/mysqld.sock"
    }
  },
  • 3 - On créé les tables MySQL ghost setup migrate

Systemd

Nous y voilà.
La création d'un service Systemd afin de lancer notre ghost. Etant donné que vous aviez probablement déjà un service pour votre blog avant la migration, on va s'assurer de faire le ménage histoire d'avoir un service correctement nommé, qui ne prêtera pas à confusion.

Faisons le ménage dans les services systemctl en supprimant les anciens liens symboliques

  • 1 - Listons les liens symboliques vers nos anciens services ls /lib/systemd/system/
    Ceux-ci devraient ressemblés à <ghost_domaine-ext.service>

  • 2 - On supprime les liens symboliques sudo rm /lib/systemd/system/<ghost_domaine-ext.service>

  • 3 - On reload le démon de systemd sudo systemctl daemon-reload

  • 4 - On s'assure du (futur) nom du service : nano /home/<user>/ghost/.ghost-cli

Modifions la variable name et enregistrons :

  "cli-version": "1.7.1",
  "active-version": "1.22.4",
  "name": "<domaine-ext>"
}
  • 5 - Et enfin on créé le service Systemd ghost setup systemd

Le blog est en place, il ne nous reste plus qu'à récupérer nos données et contenus.

GhostMySQL_Systemd

Démarrage et importation

Données

  • 1 - On démarre le blog en mode debug ghost run
  • 2 - Si tout va bien on accède à son blog et on le configure : https://<domaine>.<ext>/ghost/
  • 3 - TIPS : On supprime les articles par défaut un-à-un histoire de faire ça propre
  • 4 - On se rend dans l'onglet Ghost > Settings > Labs > Import et on séléctionne son fichier .json pour l'importer
  • 5 - On arrête la console de debug lancée avec Ghost run en tapant ctrl + c

Contenus

Voilà. Nous avons démarré notre blog, importé les données mais pas encore les contenus telles que les images, ou le théme.

  • 1 - Copions les images depuis l'ancien répertoire sudo cp -r /home/<user>/ghost_OLD/content/images /home/<user>/ghost/content
  • 2 - En étant dans le répertoire ghost, on applique les droits à l'user ghost sur les contenus : sudo chown -R ghost:ghost ./content
    Si vous aviez un thème personnalisé, procédez de même ou bien téléversez-le dans l'admin. Pensez à l'activer dans Ghost > Settings > Design

Redémarrage

  • Bon! Tout devrait s'être passé convenablement, lançons une dernière fois Ghost en mode debug histoire de s'assurer que tout fonctionne : ghost run
  • Rendons-nous sur notre blog, assurons-nous que les images et le thème soit en place et qu'il ne manque rien en consultons quelques articles. Tout est OK?
  • Arrêtons le ghost en tapant sur les touches ctrl + c et relançons avec la commande ghost start

C'est lancé ? Super ! Nous avons fait migrer notre blog sur une base de données MySQL sans encombre. :D

Sources et liens

Pour formater votre commentaire, vous pouvez utiliser le Markdown