Ghost auf vServer mit Plesk einrichten

2017-01-26 // Tags:

Ich bin ja Fan von alternativen Blog-Plattformen. Auch wenn ich sehr auf Wordpress für meine Musikmagazine schwöre, habe ich für meinen privaten Blog schon diverse andere CMS ausprobiert. Von Jekyll als Static Site Generator über AnchorCMS zu Koken für meine Portfolio-Seite. Nun habe ich auf meinem neuen vServer auch die Möglichkeit NodeJS auszuführen. Und damit kann ich auch mal Ghost ausprobieren.

Grundlegend bin ich drei Anleitungen gefolgt:

Insgesamt war das Vorgehen aber etwas anders als bei den genannten Quellen…

Server-Setup

  • Virtueller Server von HostEurope
  • Betriebssystem Ubuntu 14.04 (weil Plesk für Ubuntu 16.04 nicht verfügbar war)
  • Plesk 12.5

NodeJS installation

Weil NodeJS von HostEurope nicht als Paket zur Verfügung gestellt wird, habe ich die Quellen manuell eintragen lassen. Dafür werden Root-Rechte auf dem vServer benötigt.

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs

Anschließend verifizieren, dass NodeJS installiert ist:

node -v

NodeJS in Plesk verfügbar machen

Für NodeJS benötigt Plesk einen Application-Server. Unter “Tools & Settings”, “Updates & Upgrades” kann man die entsprechende Komponente hinzufügen. Auf der nächsten Seite findet man im Unterpunkt “Web Hosting” den “Phusion Passenger Server”, den man zur Installation markiert und dann die Änderungen anwendet.

Damit der Apache das Phusion Passenger-Modul kennt, muss man in Plex unter “Tools & Settings”, “Apache Web Server” den Mod passenger aktivieren und die Änderungen speichern.

Domain und Benutzer in Plesk anlegen

Für die Installation von Ghost habe ich über Plesk einfach eine neue Subdomain angelegt. Das geschieht über die Oberfläche recht selbsterklärend und bedarf wohl keiner weiteren Worte von mir (;

Ghost installieren

Auf dem Server habe ich mich per SSH als Benutzer für die Subdomain angemeldet und in den Ordner der Subdomain gewechselt. In etwa so: /var/www/vhosts/<domain>/<subdomain>

Dort dann per Curl Ghost einfach runterladen und entpacken:

curl -L https://ghost.org/zip/ghost-latest.zip -o ghost.zip
unzip -uo ghost.zip -d ghost

Ich habe dann alle Dateien aus dem Verzeichnis ghost in das Wurzelverzeichnis der Subdomain verschoben und sowohl den Ordner ghost wie auch das Archiv ghost.zip wieder gelöscht.

Anschließend kann man Ghost im Hauptverzeichnis der Subdomain installieren:

npm install --production

Nun kopiert man die Datei config.example.js nach config.js und ändert die gewünschten Werte:

production: {
    url: 'http://<sub>.<domain>.de',
    mail: {},
    database: {
        client: 'sqlite3',
        connection: {
            filename: path.join(__dirname, '/content/data/ghost.db')
        },
        debug: false
    },
    server: {
        host: '0.0.0.0',
        port: '2368'
    }
},

Starten von Ghost

Normalerweise wird Ghost mit folgendem Befehl gestartet: npm start --production Doch das hat den Nachteil, dass Ghost auch wieder beendet wird, wenn man die Session verlässt. Um Ghost im Hintergrund als Dienst auszuführen, verwende ich das NodeJS Programm forever

npm install forever

Forever ist nun im Ordner <subdomain-root>/node_modules/forever/bin/forever als Program hinterlegt. Zum Starten von Ghost habe ich mir ein kleines Shellscript angelegt:

#!/bin/bash
NODE_ENV=production ./node_modules/forever/bin/forever start index.js

Analog dazu zum Stoppen von Ghost:

#!/bin/bash
NODE_ENV=production ./node_modules/forever/bin/forever stop index.js

Das Script noch mit chmod +x ausführbar gemacht und gestartet und Ghost läuft auf dem Server - allerdings lauscht es noch auf den Standard-Port 2368.

Ghost nach außen erreichbar machen

Damit der Apache Anfragen von außen auf Port 80 (Standard-HTTP-Port) auf den lokalen Port 2368 weiterleiten kann, muss das Modul proxy installiert und aktiviert sein. Zum Aktivieren geht man unter “Tools & Settings”, “Apache Webserver”, setzt ein Häkchen vor “proxy_http” und übernimmt die Änderungen.

Nun kann man in Plesk für die Subdomain “Einstellungen für Apache & nginx” vornehmen. Dort habe ich als “Zusätzliche Anweisungen für HTTP” folgenden ProxyPass hinterlegt:

<Location />
	ProxyPass http://127.0.0.1:2368/
	ProxyPassReverse http://127.0.0.1:2368/
</Location>

Nun kann werden alle Anfragen auf die Subdomain, die per HTTP auf den Standard-Port 80 gehen automatisch an Ghost weitergeleitet.

Optionale Schritte

Da Ghost alleine über NodeJS läuft, kann man für die Subdomain unter den “Hosting Einstellungen” die Unterstützung für PHP, Pearl, Python und FastCGI bedenkenlos deaktivieren.

Schon läuft Ghost und man kann über die Adresse http://<sub>.<domain>/ghost seinen Blog einrichten.

An anderer Stelle beschreibe ich, wie ich meine Daten von Wordpress zu Ghost migriert habe…