Ghost / MySQL
Installons Ghost avec MySQL sous Debian, en contournant l'erreur ECONNREFUSED.
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.
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.
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 dansGhost > 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 commandeghost start
C'est lancé ? Super ! Nous avons fait migrer notre blog sur une base de données MySQL sans encombre. :D
Sources et liens
- Installation de Ghost - https://docs.ghost.org/docs/install
- ECONNREFUSED issue - https://github.com/TryGhost/Ghost/issues/8246