Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

Was fehlt?

Es liegt in der Natur der Sache: Ein Wiki ist niemals fertig. Wir geben uns große Mühe, mit der Entwicklung Schritt zu halten; lassen Supportanfragen direkt in neue Artikel einfließen … aber auch wir sind nicht perfekt. Wenn du hier nicht fündig wirst: Nicht schmollen - Bescheid sagen! Unter hallo@uberspace.de steht dir unser Team gerne bereit. Hand drauf!

cool:hoodie
Alle Anleitungen in diesem Wiki beziehen sich auf Uberspace 6. Die Dokumentation für U7 findest du im neuen Manual.

Mit Hoodie kannst du komplette Webapps in kürzester Zeit bauen, ohne dir Gedanken um das Backend und Datenbanken machen zu müssen. Die Entwickler beschreiben Hoodie als Offline First and noBackend architecture for frontend-only web apps on the web and on iOS. Mit ein paar Handgriffen kannst du Hoodie auch auf deinem Uberspace zum Laufen bringen:

Vorarbeit

Da wir im Laufe der Installation einige Dateien ändern und anlegen müssen, setzen wir hier mal ein paar Variablen. Das hat den Vorteil, dass du über weniger Fallstricke stolpern kannst und außerdem musst du weniger Dateien editieren - sparst also auch noch Zeit.

Projektname

Nennen wir die App hier im Beispiel mal hoodieApp. Den Namen kannst du natürlich anpassen wie du magst.

[mareike@neon ~]$ HOODIE_PROJECT="hoodieApp"

Ports

Wir brauchen zwei freie Ports, einen für das Admin-Interface und einen für die eigentliche App. Die Ports sind später nach außen nicht erreichbar und werden nur für die Installation benötigt. Mit den folgenden Befehlen kannst du dir zwei Ports generieren lassen, der Aufruf prüft praktischerweise auch gleich, ob die Ports noch frei sind:

[mareike@neon ~]$ HOODIE_WWW_PORT=$(( $RANDOM % 4535 + 61000)); netstat -tulpen | grep $HOODIE_WWW_PORT && echo "versuch's nochmal"
[mareike@neon ~]$ HOODIE_ADMIN_PORT=$(( $RANDOM % 4535 + 61000)); netstat -tulpen | grep $HOODIE_ADMIN_PORT && echo "versuch's nochmal"

… wenn hier keine Ausgabe versuch's nochmal erscheint, passt alles. Wenn versuch's nochmal kommt - versuch's noch mal :-)

Passwort

… und wir brauchen noch ein Passwort für den CouchDB-Benutzer, das generieren wir einfach auch noch, wo wir schon mal dabei sind:

[mareike@neon ~]$ HOODIE_PASS=$(apg -n 1)

Ausgabe

Alles generiert? Wunderbar. Jetzt musst du dir nur noch notieren, was du denn da überhaupt generiert hast :-) Also Zettel und Stift (oder Zwischenablage und Editor) und los!

[mareike@neon ~]$ clear && echo "Username: admin" && echo "Passwort: $HOODIE_PASS" && echo "www-Port: $HOODIE_WWW_PORT" && echo "admin-Port: $HOODIE_ADMIN_PORT" && echo "Service: $HOODIE_PROJECT"

Dabei sollte dann etwas wie …

Username: admin
Passwort: <deinPasswort>
www-Port: <deinWWWPort>
admin-Port: <deinAdminPort>
Service: <deinAppName>
[mareike@neon ~]$ 

… heraus kommen.

daemontools einrichten

Damit Hoodie persistent läuft und nach einem Absturz oder Serverneustart (oder, oder, oder …) wieder sauber gestartet wird, bietet es sich an, die daemontools zu nutzen. Wenn du noch keine anderen Dienste benutzt, musst du zuerst das uberspace-setup-svscan-Script ausführen:

[mareike@neon ~]$ uberspace-setup-svscan
Creating the /etc/run-svscan-mareike/run script
Symlinking /etc/run-svscan-mareike to /service/svscan-mareike to start the service
Waiting for the service to start ... 1 2 3 4 started!
 
Congratulations - your personal ~/service directory is now ready to use!

… das sieht doch gut aus!

CouchDB einrichten

Als nächstes richten wir die CouchDB ein, in der Hoodie alle Daten speichert. Auch dafür haben wir ein handliches Script, was uns die Arbeit erleichtert:

[mareike@neon ~]$ uberspace-setup-couchdb 
Creating the ~/couchdb database directory
Creating the ~/etc/run-couchdb/run service run script
Creating the ~/etc/run-couchdb/log/run logging run script
Symlinking ~/etc/run-couchdb to ~/service/couchdb to start the service
Waiting for the service to start ... 1 2
Congratulations - You can now reach your dedicated CouchDB installation!
Please note that your CouchDB uses the NON-standard port number <deinPort>.
 
Hostname: localhost
 Portnum: <deinPort>
Username: mareike_couchadmin
Password: <deinPasswort>
 
Settings: /home/mareike/couchdb.ini
 Logfile: /home/mareike/couchdb/couch.log

Soweit, so gut. Da wir den Port später noch brauchen, legen wir uns auch den in eine Variable:

[mareike@neon ~]$ COUCHDB_PORT=$(cat /home/$USER/couchdb.ini | grep port | cut -d" " -f3)

An Vorarbeit hätten wir dann hier alles erledigt. Weiter geht's mit …

Hoodie einrichten

Aber bevor wir etwas einrichten können, müssen wir erst mal …

Hoodie runterladen

Nichts leichter als das - npm, der Node Package Manager hilft weiter und erledigt die Arbeit für uns:

node.js

Falls du mit deinem Uberspace noch nicht mit npm gearbeitet hast, musst du wie auf der nodejs-Seite beschrieben eine .npmrc-Datei anlegen:

[mareike@neon ~]$ cat > ~/.npmrc <<__EOF__
prefix = $HOME
umask = 077
__EOF__

Erledigt? Gut. Dann kommen wir zur eigentlich Installation:

Installation mit npm

Und die ist wirklich einfach:

[mareike@neon ~]$ npm install -g hoodie-cli

Das war's schon. Nun steht dir hoodie auf deinem Uberspace zur Verfügung.

Hoodie-App anlegen

Als nächstes legen wir ein Projekt an, da wir ganz am Anfang die Variable $HOODIE_PROJECT gesetzt haben, brauchen wir uns hier um nichts weiter kümmern:

[mareike@neon ~]$ hoodie new $HOODIE_PROJECT

.d$b.  .d$b.  .d$$$$$$b.    .d$$$$$$b.  .d$$$$$$b.  .d$b..d$$$$$$$$b.
$$$$$..$$$$$.$$$$$$$$$$$b .$$$$$$$$$$$b $$$$$$$$$$b $$$$$$$$$$$$$$$P'
$$$$$$$$$$$$d$$$$$$$$$$$$bd$$$$$$$$$$$$b$$$$$$$$$$$b$$$$$$$$$$$$$$$b.
$$$$$$$$$$$$Q$$$$$$$$$$$$PQ$$$$$$$$$$$$P$$$$$$$$$$$P$$$$$$$$$$$$$$$P'
$$$$$´`$$$$$'$$$$$$$$$$$$''$$$$$$$$$$$$'$$$$$$$$$$P $$$$$$$$$$$$$$$b.
'Q$P'  'Q$P'  'Q$$$$$$P'    'Q$$$$$$P'  'Q$$$$$$$P  'Q$P''Q$$$$$$$$P'

Version: 0.6.0 (node v0.10.30, npm 1.5.0-alpha-4, platform: linux)

[hoodie] Fetching template via npm. This may take some time.

Zeit für einen Kaffee oder Tee.

Hoodie konfigurieren

Hoodie hätte gerne den Usernamen admin in der CouchDB - das passt also leider nicht mit dem Usernamen, den unser uberspace-setup-couchdb-Script angelegt hat. Aber kein Problem, du hast ja deine eigene couchdb.ini-Datei und kannst dir dort auch neue Admin-User anlegen. Dazu stoppen wir erst mal den CouchDB-Service:

[mareike@neon ~]$ svc -d ~/service/couchdb

Und nun kannst du die ~/couchdb.ini anpassen. Das geht z.B. mit:

[mareike@neon ~]$ sed -i "/\[admins\]/a admin = $HOODIE_PASS" ~/couchdb.ini

Der Befehl sucht nach der Zeile [admins] und fügt direkt darunter eine neue Zeile ein: admin = $HOODIE_PASS, wieder zahlen sich die Variablen vom Anfang aus.

Außerdem mag hoodie die Option require_valid_user nicht, also setzen wir den auch noch von true auf false (wir haben ja eh schon einen Admin-User, die Sicherheit ist also gewährleistet). Auch das geht am schnellsten mit sed:

[mareike@neon ~]$ sed -i "s/require_valid_user = true/require_valid_user = false/g" ~/couchdb.ini

Nachdem du die Konfiguration angepasst hast, kannst du den Service wieder starten…

[mareike@neon ~]$ svc -u ~/service/couchdb 

… und zur Sicherheit mal einen Blick in das Log werfen:

[mareike@neon ~]$ tail ~/service/couchdb/log/main/current | tai64nlocal
2014-08-05 18:01:49.109147500 Apache CouchDB 1.5.0 (LogLevel=info) is starting.
2014-08-05 18:01:49.251196500 Apache CouchDB has started. Time to relax.
2014-08-05 18:01:49.251450500 [info] [<0.31.0>] Apache CouchDB has started on http://127.0.0.1:<deinPort>/

Na das sieht doch gut aus.

Service einrichten

Nachdem wir anfangs mit uberspace-setup-svscan die daemontools installiert haben, können wir nun einen Daemon für die eben erstellte Hoodie-App einrichten. Das geht z.B. so:

[mareike@neon ~]$ mkdir ~/etc/run-$HOODIE_PROJECT

Herzstück eines jeden Daemons ist die run-Datei, die sollte folgendermaßen aussehen. Auch hier greifen uns die Variablen, die wir ganz am Anfang gesetzt haben, unter die Arme (den folgenden Absatz kannst du einfach so per copy und paste übernehmen):

[mareike@neon ~]$ cat <<__EOF__ > ~/etc/run-$HOODIE_PROJECT/run
#!/bin/sh
 
export HOME="/home/$USER/$HOODIE_PROJECT"
cd \$HOME
 
export COUCH_URL="http://127.0.0.1:$COUCHDB_PORT"
export HOODIE_ADMIN_USER="admin"
export HOODIE_ADMIN_PASS="$HOODIE_PASS"
export HOODIE_WWW_PORT="$HOODIE_WWW_PORT"
export HOODIE_ADMIN_PORT="$HOODIE_ADMIN_PORT"
 
# Include the user-specific profile
. $HOME/.bash_profile
 
# Now let's go!
 
exec node \$HOME/node_modules/hoodie-server/bin/start --custom-ports \$HOODIE_WWW_PORT,\$HOODIE_ADMIN_PORT,9999 2>&1
__EOF__

Die Datei braucht noch die korrekten Rechte und wir kümmern uns gleich mal um das Logging:

[mareike@neon ~]$ chmod +x ~/etc/run-$HOODIE_PROJECT/run
[mareike@neon ~]$ mkdir ~/etc/run-$HOODIE_PROJECT/log

Auch das Logging braucht eine run-Datei …

[mareike@neon ~]$ cat <<__EOF__ > ~/etc/run-$HOODIE_PROJECT/log/run
#!/bin/sh
exec multilog t ./main
__EOF__

… und die korrekten Rechte:

[mareike@neon ~]$ chmod +x ~/etc/run-$HOODIE_PROJECT/log/run

Nachdem alles soweit eingerichtet ist, kannst du den Daemon nun in dein service-Verzeichnis linken und damit aktivieren:

[mareike@neon ~]$ ln -s ~/etc/run-$HOODIE_PROJECT ~/service/$HOODIE_PROJECT

… und mal in die Logs gucken:

[mareike@neon ~]$ tail ~/service/$HOODIE_PROJECT/log/main/current | tai64nlocal
2014-08-05 18:16:50.913686500 Initializing...
2014-08-05 18:16:50.917305500 Using remote CouchDB: http://127.0.0.1:<deinCouchDBPort>
2014-08-05 18:16:50.938513500 Waiting for CouchDB [-*----] SUCCESS 
2014-08-05 18:16:51.422584500 WWW:    http://127.0.0.1:<deinWWWPort>
2014-08-05 18:16:51.422842500 Admin:  http://127.0.0.1:<deinAdminPort>
2014-08-05 18:16:51.481292500 Starting Plugin: 'hoodie-plugin-appconfig'
2014-08-05 18:16:51.482575500 Starting Plugin: 'hoodie-plugin-email'
2014-08-05 18:16:51.483772500 Starting Plugin: 'hoodie-plugin-users'
2014-08-05 18:16:51.499821500 All plugins started.

Das sieht doch gut aus! Damit ist der Teil der Arbeit, den du erledigen kannst, abgeschlossen. Fehlt nur noch eins:

Den Dienst nach außen erreichbar machen

Im Gegensatz zu anderen nodejs-Anwendungen geht das nicht einfach mit einer RewriteRule mit Proxy über den Apache, da Hoodie encoded slashes benutzt. Wir müssen deinen Dienst also direkt an unser HTTP(S)-Frontend, Pound, anbinden und den Apachen damit umgehen. Dazu schicke uns eine Mail an hallo@uberspace.de mit folgenden Informationen:

  • Dein Username (das sollte eigentlich klar sein :-))
  • Dein WWW-Port (den solltest du dir ja notiert haben)
  • Dein Admin-Port (auch den solltest du dir notiert haben)
  • 1. URL für das Admin-Interface
  • 2. URL für das WWW-Interface

Beide URLs müssen natürlich auf deinen Uberspace aufgeschaltet sein, schaue im Zweifelsfall noch mal nach.

Wie geht es weiter?

Unser Part bei der Sache ist, wie du Hoodie bei Uberspace zum Laufen bekommst, also sozusagen der administrative Teil. Dein eigener Job ist es nun, Hoodie-Applikationen zu entwickeln - da legen wir dir die offizielle Dokumentation ans Herz. Viel Erfolg!

cool/hoodie.txt · Zuletzt geändert: 2014/08/13 17:29 von uber