/ ghost

Ghost auf Uberspace U7

Seid gegrüßt Freunde,

es gibt schon zig Blog-Einträge und Tutorials, wie man Ghost auf Uberspace installieren kann. Und trotzdem mache ich auch ein Tutorial zu dem Thema, da ich bisher kein Tutorial gefunden habe, dass sich mit Ghost auf U7 befasst.
Während ich diesen Post verfasse, befindet sich U7 noch im Beta-Stadium und diese bietet noch kein Node.js von Haus aus (vgl. U7Beta-Blogeintrag).

So fangen wir mal an.

1. nvm installieren

Als Erstes wird nvm (Node Version Manager) installiert. Auf dem Github von nvm findet man immer die aktuellste Version von nvm und die dazugehörige Anleitung.

$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash

Damit nvm auch direkt gefunden wird, loggen wir uns entweder neu ein oder leichter: wir laden den Pfad in die aktuelle Sitzung mit

$ source ~/.bash_profile

Das Installtionsscript von nvm hat nämliche Einträge in die .bashrc geschrieben.
Nun solte nvm gefunden werden.

$ nvm --version
0.33.6

2. Node.js installieren

$ nvm install --lts

Dieser Befehl installiert die aktuellste LTS-Version von Node.js.

$ node --version
v8.9.0

Ab hier kann erstmal nach der Anleitung auf Uberspace vorgegangen werden.

3. knex-migrator installieren

$ npm install -g knex-migrator

4. Ghost herunterladen und installieren

$ curl -L https://ghost.org/zip/ghost-latest.zip -o ghost-latest.zip
$ unzip ghost-latest.zip -d ghost && cd ghost
$ npm install --production

5. Freien Port finden

Uberspace erlaubt die Nutzung von Ports zwischen 61000 und 65535 (vgl. Ports auf Uberspace)
Folgender Befehl generiert eine zufällige Zahl zwischen 61000 und 65535 und überprüft, ob dieser Port auf dem Server noch frei ist.

$ GHOSTPORT=$(( $RANDOM % 4535 + 61000)); netstat -tulpen | grep $GHOSTPORT && echo "versuch's nochmal"

Den gefunden freien Port kannst du dir mit

$ echo $GHOSTPORT

anzeigen lassen.

6. Ghost konfigurieren

Als nächstes wird die Konfigurationsdatei angepasst

$ nano ~/ghost/core/server/config/env/config.production.json

Die Datei sollte zum Schluss wie folgt aussehen.

{
    "url": "https://DEINEURL",
    "database": {
        "client": "mysql",
        "connection": {
            "host"     : "localhost",
            "user"     : "DEINUSERNAME",
            "password" : "DEINMYSQLPASSWORD",
            "database" : "DEINEMYSQLDATENBANK",
            "charset"  : "utf8"
        }
    },
    "server": {
        "host": "127.0.0.1",
        "port": "GHOSTPORT"
    },
    "auth": {
        "type": "password"
    },
    "paths": {
        "contentPath": "content/"
    },
    "logging": {
        "level": "info",
        "rotation": {
            "enabled": true
        },
        "transports": ["file", "stdout"]
    }
}

Die großgeschriebenen Wörter müssen angepasst werden. Das Passwort der Datenbank ist in der Datei ~/.my.cnf zu finden.
Mit

$ cat .my.cnf

kann sich er Inhalt angezeigt werden lassen. Nicht das Passwort von "[clientreadonly]" nehmen, sonst kann in die Datenbank nicht geschrieben werden und es wird beim Start ein Fehler erscheinen.

Als nächstes wird die Datenbank initialisiert:

$ NODE_ENV=production knex-migrator init

Falls man einen Fehler beim Anpassen der Konfigurationsdatei gemacht hat, dann wird es hierbei angezeigt.
Ansonsten wird es mit erfolgreicht beendet

INFO Finished database init! 

7. Ghost nach draußen erreichbar machen

$ cat <<__EOF__ >> ~/html/.htaccess
DirectoryIndex disabled
RewriteEngine On
RewriteRule ^(.*) http://localhost:$GHOSTPORT/\$1 [P]
__EOF__t

Hier darf der Eintrag DirectoryIndex disabled nicht fehlen, da ansonsten die Startseite von Ghost nicht gefunden wird.
Großer Dank geht da explizit an den Support von Uberspace, vorallem an Nico.

Das Verhalten ist einem neuen Feature in Apache 2.4 zu verdanken. Der schreibt Anfragen an / in /index.html (genau genommen auf den als DirectoryIndex eingestellte Dateinamen) um, wenn er sie als Proxy weiterreicht. Das lässt sich in der .htaccess mit einemn 'DirectoryIndex disabled' umgehen. --Nico von Uberspace

Mit dem Befehl

$ NODE_ENV=production node ~/ghost/index.js

kann Ghost gestartet werden und wir können unsere Seite aufrufen, um zu überprüfen, dass alles funktioniert. Am besten erstellen wir direkt unter DEINEURL/ghost unseren Admin-Account.

8. Ghost als Service einrichten

Mit U7 wurde supervisord eingeführt und deswegen muss der Service anders als zuvor eingerichtet werden (vgl. supervisord auf Uberspace).
Dazu erstellen wir eine neu Datei

$ nano ~/etc/services.d/ghost-daemon.ini

mit folgendem Inhalt:

[program:ghost-daemon]
command=/home/YOURNAME/.nvm/versions/node/v8.9.0/bin/node /home/YOURNAME/ghost/index.js
autorestart = true
environment = NODE_ENV="production"

Gegebenenfalls muss der Pfad zu node.js und dem Installationsordner von Ghost angepasst werden.
Als nächstes wird supervisord aufmerksam gemacht, dass wir einen neuen Service erstellt haben.

$ supervisorctl reread
my-daemon: available

$ supervisorctl update
my-daemon: added process group

Mit dem Befehl

$ supervisorctl status
ghost-daemon                     RUNNING   pid 20960, uptime 0:58:58

wird der aktuelle Status unserer Services ausgegeben.

Hiermit sollten wir vorerst fertig sein.
Großer Dank geht nochmal an Nico von Uberspace.

Hier zeige ich, wie man Ghost um Kommentare erweitert.

Viele Grüße
Arthur

Ghost auf Uberspace U7
Share this