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é).
Installation de Ghost
Pour cela:
- Connectez-vous sur le serveur en SSH (besoin d'aide ?).
- Placez-vous dans le répertoire du site en exécutant la commande “cd chemin-vers-le-site” (par exemple
cd sites/ghost.domain.xyz
). Entrez la commande suivante:
npx -p ghost-cli ghost install --check-empty=false
et entrez les informations demandées (nom d'hôte de base de données, URL du site Web, etc.).
Modifiez le fichier
config.production.json
pour mettre à jour les paramètres du port et de l'hôte:"server": { "port": 3000, "host": "0.0.0.0" },
Spécifiez-y également les informations relatives à la messagerie:
"mail": { "transport": "SMTP", "options": { "service": "Infomaniak", "host": "mail.infomaniak.com", "port": 465, "auth": { "user": "<<email_username>>", "pass": "<<email_password>>" } }, "from": "<<email_address>>" },
Configuration Node.js
Pour exécuter l'application, rendez-vous sur le tableau de bord Node.js:
- 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:
npx -p ghost-cli ghost run
- Cliquez sur le bouton Enregistrer en bas de page.
- Sur la page principale, cliquez sur le bouton Start ou Restart.
- Observez les journaux montrant la création de la base de données et le démarrage de l'application:
- Rendez-vous ensuite sur l'URL de votre site pour démarrer.
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-05-26 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