1 000 FAQ, 500 tutoriels et vidéos explicatives. Ici, il n'y a que des solutions !
Installer Ghost sur un hébergement Infomaniak
Ce guide vous accompagne dans l’installation sur Infomaniak de Ghost, une plateforme idéale pour les blogs (écriture régulière, format éditorial) et les sites de publication centrés sur le contenu, tels que Substack ou Medium.
Reposant sur Node.js et utilisant Markdown pour la rédaction, Ghost se distingue par sa légèreté, là où WordPress, bien que plus flexible et universel, reste plus lourd.
Pour de l'aide supplémentaire contactez un partenaire ou lancez gratuitement un appel d'offres — découvrez aussi le rôle de l'hébergeur.
Prérequis
- Avoir installé un site vierge de type Node.js sur un hébergement Web Infomaniak.
- Créer un accès SSH.
- Créer une base de données.
- Posséder une adresse mail valide et fonctionnelle (notamment les fonctionnalités de mot de passe oublié).
- Arrêter votre application Node.JS avant de faire les étapes suivantes !
Installation de Ghost
Pour cela:
- Connectez-vous sur le serveur en SSH (besoin d'aide ?).
Clonez et exécutez le script d'installation (exécutez ces commandes une par une):
git clone https://github.com/Infomaniak/hosting-tools.git cd hosting-tools/h3-ghost bash ./install.sh
Le script va maintenant :
- Vous poser quelques questions (comme l'URL de votre site, les informations de base de données, etc.)…
- Télécharger et configurer Ghost automatiquement…
- Prendre quelques minutes — soyez patient !
Répondez aux questions soigneusement en utilisant les détails de base de données que vous avez notés plus tôt. Ne fermez pas le terminal tant qu'il n'a pas fini !
Configurer votre hébergement (via le panneau Infomaniak)
Une fois que le script est terminé, allez dans votre Panneau de contrôle Infomaniak :
- Cliquez ici afin d'accéder à la gestion de votre produit sur le Manager Infomaniak (besoin d'aide ?).
- Cliquez directement sur le nom attribué au produit concerné.
- Cliquez sur Gérer sous Paramètres avancés:
- Cliquez sur l'onglet Node.js pour accéder aux réglages.
Dans le champ de commande d'exécution, entrez:
/srv/customer/node_modules/ghost-cli/bin/ghost run
- Vérifiez que le numéro de port est bien
3000
. - Case de commande de build : désactivez-la.
- Cliquez sur le bouton Enregistrer en bas de page:
- Sur la page principale, cliquez sur le bouton Start (ou Restart si déjà en cours d'exécution).
- Observez les journaux montrant la création de la base de données et le démarrage de l'application:
Terminé ! Accédez à votre blog Ghost
Rendez-vous ensuite sur l'URL de votre site pour démarrer:
- Ouvrez votre navigateur et allez Ă
https://votresite.com/ghost
(remplacezvotresite.com
par votre domaine actuel). - La première fois :
- Vous créerez un compte administrateur (votre identifiant pour le blog)…
- Ensuite, vous pourrez commencer à écrire des articles !
Configuration des utilisateurs / mail
Afin de créer le premier utilisateur, ajoutez /ghost
Ă l'URL de votre site (par exemple https://ghost.domain.xyz/ghost
) et suivez l'assistant.
Vous pouvez également configurer l'"adresse de support du portail des membres": lorsque de nouveaux membres souhaitent s'inscrire, le portail envoie la confirmation du double opt-in à partir d'une adresse spécifique. Par défaut, il s'agit de l'adresse “noreply” de votre domaine. Pour la mettre à jour, naviguez vers “Paramètres”, “Adhésion”, “Paramètres du portail”, “Personnaliser”, et “Page du compte”:
Résoudre une incompatibilité technique entre Ghost et MariaDB
Il existe un problème de compatibilité entre Ghost et la base de données MariaDB. Il en résulte ce type d'erreur:
[2025-01-01 12:54:28] ERROR "GET /ghost/api/admin/posts/6834625e35802b06f1496305/?formats=mobiledoc%2Clexical&include=tags%2Cauthors%2Cauthors.roles%2Cemail%2Ctiers%2Cnewsletter%2Ccount.conversions%2Ccount.clicks%2Csentiment%2Ccount.positive_feedback%2Ccount.negative_feedback" 400 27ms
Could not understand request.
Error ID:
8f2b0d90-3a30-11f0-a25f-fd9c83e1cf02
Error Code:
ER_BAD_FIELD_ERROR
----------------------------------------
Error: select `posts`.*, (with `k` as (select `member_id` from `members_subscription_created_events` where posts.id = members_subscription_created_events.attribution_id union select `member_id` from `members_created_events` where posts.id = members_created_events.attribution_id) select count(*) from `k`) as `count__conversions`, `posts`.*, (select count(distinct `members_click_events`.`member_id`) from `members_click_events` inner join `redirects` on `members_click_events`.`redirect_id` = `redirects`.`id` where posts.id = redirects.post_id) as `count__clicks`, `posts`.*, (select COALESCE(ROUND(AVG(score) * 100), 0) from `members_feedback` where posts.id = members_feedback.post_id) as `count__sentiment`, `posts`.*, (select count(*) from `members_feedback` where posts.id = members_feedback.post_id AND members_feedback.score = 0) as `count__negative_feedback`, `posts`.*, (select sum(`score`) from `members_feedback` where posts.id = members_feedback.post_id) as `count__positive_feedback` from `posts` where (`posts`.`type` = 'post' and `posts`.`status` in ('draft', 'published', 'scheduled', 'sent')) and `posts`.`id` = '2834125e33802b06e1433305' limit 1 - Unknown column 'posts.id' in 'where clause'
at Child.<anonymous> (/srv/customer/sites/ghost.domain.xyz/versions/5.120.2/core/server/models/base/plugins/crud.js:194:31)
at Packet.asError (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/packets/packet.js:740:17)
at Query.execute (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/commands/command.js:29:26)
at Connection.handlePacket (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/base/connection.js:475:34)
at PacketParser.onPacket (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/base/connection.js:93:12)
at PacketParser.executeStart (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/packet_parser.js:75:16)
at Socket.<anonymous> (/srv/customer/sites//versions/5.120.2/node_modules/mysql2/lib/base/connection.js:100:25)
at Socket.emit (node:events:518:28)
at addChunk (node:internal/streams/readable:561:12)
at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
at Readable.push (node:internal/streams/readable:392:5)
at TCP.onStreamRead (node:internal/stream_base_commons:189:23)
Certaines requêtes SQL générées par Ghost, utilisant des expressions de table communes (CTE) imbriquées dans des sous-requêtes scalaires, provoquent des erreurs HTTP 400
lorsqu'elles sont exécutées sur MariaDB. Ces requêtes sont valides en MySQL 8, qui prend en charge les CTE dans les sous-requêtes scalaires, mais pas en MariaDB jusqu'à la version 10.6.
Un correctif existe pour adapter le comportement de Ghost et éviter ces erreurs (prenez connaissance du guide officiel).
Pour utiliser ce patch, entrez cette commande:
cd current
curl -L https://gist.githubusercontent.com/reneluria/8cbbfbc001e542c77d6d5887fbafe5d3/raw/65e0ce31753b4687d0eb67fc030734a35d3ffbad/ghost-post.patch | patch -p0