1000 FAQ, 500 Anleitungen und Lernvideos. Hier gibt es nur Lösungen!
Ghost auf einer Infomaniak-Hosting installieren
Dieser Leitfaden begleitet Sie bei der Installation von Ghost auf Infomaniak, einer idealen Plattform für Blogs (regelmäßiges Schreiben, redaktionelles Format) und inhaltszentrierte Publikationswebsites wie Substack oder Medium.
Basierend auf Node.js und unter Verwendung von Markdown für die Erstellung, zeichnet sich Ghost durch seine Leichtigkeit aus, während WordPress, obwohl flexibler und universeller, schwerfälliger ist.
Für zusätzliche Hilfe kontaktieren Sie einen Partner oder starten Sie kostenlos eine Ausschreibung — erfahren Sie auch mehr über die Rolle des Hosters.
Voraussetzungen
- Ein leeres Node.js-Website auf einer Infomaniak Webhosting installiert haben.
- Erstellen Sie einen SSH-Zugang.
- Erstellen Sie eine Datenbank.
- Über einen gültigen und funktionierenden E-Mail-Account verfügen (insbesondere die Funktion „Passwort vergessen“).
Ghost-Installation
Dazu:
- Melden Sie sich per SSH auf dem Server an (Hilfe benötigt?).
- Navigieren Sie in das Verzeichnis der Website, indem Sie den Befehl „cd pfad-zur-website“ ausführen (z.B.
cd sites/ghost.domain.xyz
). Geben Sie den folgenden Befehl ein:
npx -p ghost-cli ghost install --check-empty=false
und geben Sie die angeforderten Informationen ein (Datenbank-Hostname, Webseite-URL, etc.).
Bearbeiten Sie die Datei
config.production.json
, um die Port- und Host-Einstellungen zu aktualisieren:"server": { "port": 3000, "host": "0.0.0.0" },
Geben Sie auch die Informationen zur E-Mail-Konfiguration an:
"mail": { "transport": "SMTP", "options": { "service": "Infomaniak", "host": "mail.infomaniak.com", "port": 465, "auth": { "user": "<<email_username>>", "pass": "<<email_password>>" } }, "from": "<<email_address>>" },
Node.js-Konfiguration
Um die Anwendung auszuführen, gehen Sie zum Node.js-Dashboard:
- Klicken Sie hier, um auf die Verwaltung Ihres Produkts im Infomaniak Manager zuzugreifen (Brauchen Sie Hilfe?).
- Klicken Sie direkt auf den Name, der dem betreffenden Produkt zugeordnet ist.
- Klicken Sie auf Verwalten unter Erweiterte Einstellungen:
- Klicken Sie auf die Registerkarte Node.js, um auf die Einstellungen zuzugreifen:
In das Feld Ausführungsbefehl geben Sie ein:
npx -p ghost-cli ghost run
- Klicken Sie auf die Schaltfläche Speichern unten auf der Seite.
- Auf der Hauptseite klicken Sie auf die Schaltfläche Start oder Neustart.
- Beobachten Sie die Protokolle, die die Erstellung der Datenbank und den Start der Anwendung zeigen:
- Besuchen Sie anschließend die URL Ihrer Website, um zu starten.
Benutzerkonfiguration / E-Mail
Um den ersten Benutzer zu erstellen, fügen Sie /ghost
zur URL Ihrer Website hinzu (z.B. https://ghost.domain.xyz/ghost
) und folgen Sie dem Assistenten.
Sie können auch die "Supportadresse des Mitgliederportals" konfigurieren: Wenn neue Mitglieder sich anmelden möchten, sendet das Portal die Bestätigung der Doppel-Opt-In von einer bestimmten Adresse. Standardmäßig handelt es sich dabei um die „noreply“-Adresse Ihres Domains. Um sie zu aktualisieren, navigieren Sie zu „Einstellungen“, „Mitgliedschaft“, „Portal-Einstellungen“, „Anpassen“ und „Konto-Seite“:
Eine technische Inkompatibilität zwischen Ghost und MariaDB beheben
Es gibt ein Kompatibilitätsproblem zwischen Ghost und der MariaDB-Datenbank. Daraus resultiert dieser Fehler:
[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)
Einige von Ghost generierte SQL-Abfragen, die gemeinsame Tabellenausdrücke (CTE) in skalaren Unterabfragen verwenden, verursachen HTTP 400
Fehler, wenn sie auf MariaDB ausgeführt werden. Diese Abfragen sind in MySQL 8 gültig, das CTE in skalaren Unterabfragen unterstützt, aber nicht in MariaDB bis zur Version 10.6.
Ein Patch ist verfügbar, um das Verhalten von Ghost anzupassen und diese Fehler zu vermeiden (siehe den offiziellen Leitfaden).
Um diesen Patch zu verwenden, geben Sie diesen Befehl ein:
cd current
curl -L https://gist.githubusercontent.com/reneluria/8cbbfbc001e542c77d6d5887fbafe5d3/raw/65e0ce31753b4687d0eb67fc030734a35d3ffbad/ghost-post.patch | patch -p0