Kanban-Board Wekan bei uberspace installieren

uberspace bietet alle Voraussetzungen (node.js / MongoDB), die zum Betrieb des Open Source Kanban Boards Wekan erforderlich sind. Wekan ist eine selbst gehostete Alternative zum relativ bekannten Trello.

Um Wekan allerdings zu installieren und konfigurieren sind einige Schritte erforderlich und Punkte zu beachten, die ich nachfolgend beschreibe.

Port öffnen

Da Wekan mit Websockets arbeitet, muss zunächst ein Port geöffnet werden, der anschließend von außen erreichbar ist. Dies geschieht über folgenden Befehl:

[my_username@my_hostname ~]$ uberspace-add-port -p tcp --firewall
?  All good! Opened port 63112, tcp protocol(s).
[my_username@my_hostname ~]$ uberspace-list-ports --open
tcp 63112

In diesem Fall wurde Port 63112 geöffnet. Diese Port-Nummer bitte gut merken, sie wird später noch benötigt.

Dienste einrichten

Damit Prozesse bei uberspace als Dienst eingerichtet werden können, muss einmalig folgender Befehl ausgeführt werden, der die notwendigen Voraussetzungen schafft:

test -d ~/service || uberspace-setup-svscan

Die einzelnen Dienste werden zu einem späteren Zeitpunkt eingerichtet.

node.js einrichten

Im nächsten Schritt wird node.js eingerichtet. Wekan benötigt node.js in der Version 0.10.40. Glücklicherweise bietet uberspace node.js in verschiedenen Versionen an. Zunächst wird geprüft, ob die Standard-Version passt:

[my_username@my_hostname ~]$ node -v
v0.10.43

Die Standardversion ist v.0.10.43 – passt daher also nicht. Um zu prüfen, welche Versionen verfügbar sind und wo diese liegen, hilft folgender Befehl:

[my_username@my_hostname ~]$ ls -ld /package/host/localhost/nodejs-*
lrwxrwxrwx. 1 packagesync packagesync   35 10. Feb 2015  /package/host/localhost/nodejs-0 -> /package/host/localhost/nodejs-0.10
lrwxrwxrwx. 1 packagesync packagesync   38 10. Jul 2015  /package/host/localhost/nodejs-0.1 -> /package/host/localhost/nodejs-0.10.40
lrwxrwxrwx. 1 root        root          38 17. Mai 13:27 /package/host/localhost/nodejs-0.10 -> /package/host/localhost/nodejs-0.10.43
drwxr-xr-x. 6 packagesync packagesync 4096 28. Jan 2015  /package/host/localhost/nodejs-0.10.36
drwxr-xr-x. 6 packagesync packagesync 4096 10. Jul 2015  /package/host/localhost/nodejs-0.10.40
drwxr-xr-x. 6 packagesync packagesync 4096  4. Dez 2015  /package/host/localhost/nodejs-0.10.41
drwxr-xr-x. 6 packagesync packagesync 4096  4. Mär 18:18 /package/host/localhost/nodejs-0.10.43
lrwxrwxrwx. 1 root        root          38 17. Mai 13:27 /package/host/localhost/nodejs-0.12 -> /package/host/localhost/nodejs-0.12.11
drwxr-xr-x. 6 packagesync packagesync 4096  8. Feb 2015  /package/host/localhost/nodejs-0.12.0
drwxr-xr-x. 6 packagesync packagesync 4096  4. Mär 18:18 /package/host/localhost/nodejs-0.12.11
drwxr-xr-x. 6 packagesync packagesync 4096 27. Apr 2015  /package/host/localhost/nodejs-0.12.2
drwxr-xr-x. 6 packagesync packagesync 4096 10. Jun 2015  /package/host/localhost/nodejs-0.12.4
drwxr-xr-x. 6 packagesync packagesync 4096  8. Jul 2015  /package/host/localhost/nodejs-0.12.6
drwxr-xr-x. 6 packagesync packagesync 4096 10. Jul 2015  /package/host/localhost/nodejs-0.12.7
drwxr-xr-x. 6 packagesync packagesync 4096  4. Dez 2015  /package/host/localhost/nodejs-0.12.9
lrwxrwxrwx. 1 packagesync packagesync   37  8. Feb 2015  /package/host/localhost/nodejs-0.8 -> /package/host/localhost/nodejs-0.8.25
drwxr-xr-x. 6 packagesync packagesync 4096  5. Sep 2013  /package/host/localhost/nodejs-0.8.25
lrwxrwxrwx. 1 root        root          36 17. Mai 13:27 /package/host/localhost/nodejs-4 -> /package/host/localhost/nodejs-4.4.4
drwxr-xr-x. 6 packagesync packagesync 4096 13. Okt 2015  /package/host/localhost/nodejs-4.2.0
drwxr-xr-x. 6 packagesync packagesync 4096 26. Okt 2015  /package/host/localhost/nodejs-4.2.1
drwxr-xr-x. 6 packagesync packagesync 4096 30. Nov 2015  /package/host/localhost/nodejs-4.2.2
drwxr-xr-x. 6 packagesync packagesync 4096  4. Dez 2015  /package/host/localhost/nodejs-4.2.3
drwxr-xr-x. 6 packagesync packagesync 4096  3. Mär 11:05 /package/host/localhost/nodejs-4.3.1
drwxr-xr-x. 6 packagesync packagesync 4096  3. Mär 12:40 /package/host/localhost/nodejs-4.3.2
drwxr-xr-x. 6 packagesync packagesync 4096 17. Mai 12:34 /package/host/localhost/nodejs-4.4.4
lrwxrwxrwx. 1 root        root          36  3. Mär 12:49 /package/host/localhost/nodejs-5 -> /package/host/localhost/nodejs-5.7.1
drwxr-xr-x. 6 packagesync packagesync 4096 30. Nov 2015  /package/host/localhost/nodejs-5.1.0
drwxr-xr-x. 6 packagesync packagesync 4096  4. Dez 2015  /package/host/localhost/nodejs-5.1.1
drwxr-xr-x. 6 packagesync packagesync 4096  3. Mär 11:05 /package/host/localhost/nodejs-5.7.0
drwxr-xr-x. 6 packagesync packagesync 4096  3. Mär 12:41 /package/host/localhost/nodejs-5.7.1
lrwxrwxrwx. 1 root        root          36 17. Mai 13:27 /package/host/localhost/nodejs-6 -> /package/host/localhost/nodejs-6.1.0
drwxr-xr-x. 6 packagesync packagesync 4096 17. Mai 12:34 /package/host/localhost/nodejs-6.1.0
[my_username@my_hostname ~]$ 

Die gewünschte Version 0.10.40 ist verfügbar und liegt unter /package/host/localhost/nodejs-0.10.40, weshalb man diese Version als Wunschversion konfigurieren muss:

echo 'export PATH=/package/host/localhost/nodejs-0.10.40/bin:$PATH' >> ~/.bash_profile

Anschließend die Umgebung aktualisieren:

source ~/.bash_profile

Nun sollte bei der Überprüfung der Version die gewünschte Version angezeigt werden:

[my_username@my_hostname ~]$ node -v
v0.10.40

MongoDB konfigurieren

Nun wird die MongoDB-Datenbank konfiguriert. Dazu zunächst folgenden Befehl ausführen:

[my_username@my_hostname ~]$ uberspace-setup-mongodb 
Creating the ~/mongodb database directory
Creating the ~/etc/run-mongodb/run service run script
Creating the ~/etc/run-mongodb/log/run logging run script
Symlinking ~/etc/run-mongodb to ~/service/mongodb to start the service
Waiting for the service to start ..... started!
Waiting for journal preallocation to finish to create administrative user ..
Congratulations - You can now reach your dedicated MongoDB installation!
Please note that your MongoDB uses the NON-standard port number 21183.
This allows running multiple instances of MongoDB on the same machine for different users.

Hostname: localhost
Portnum#: 21183
Username: my_username_mongoadmin
Password: my_password

To connect on the shell, you can use:

mongo admin --port 21183 -u my_username_mongoadmin -p

Die Zugangsdaten (Hostname, Portnummer, Username und Passwort) unbedingt notieren. Diese werden noch benötigt.

Wekan installieren

Zunächst wird ein entsprechendes Verzeichnis angelegt:

cd ~
mkdir wekan
cd wekan

Dann wird Wekan heruntergeladen (ggf. die Version anpassen):

wget https://github.com/wekan/wekan/releases/download/v0.10.1/wekan-0.10.1.tar.gz

Nun muss Wekan entpackt werden:

tar xzvf wekan-0.10.1.tar.gz 

Anschließend liegt Wekan im Verzeichnis ~/wekan/bundle

Nun kommt ein etwas seltsamer Punkt. Die Abhängigkeiten müssen installiert werden. Dazu zunächst npm konfigurieren:

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

Anschließend ins Verzeichnis ~/wekan/bundle/programs/server wechseln, also:

cd ~/wekan/bundle/programs/server

Nun die Abhängigkeiten installieren:

npm install

Dieser führte bei mir aber zu einem Fehler wegen zu geringer Berechtigung. Stattdessen versuchte ich:

sudo npm install  

und nutze dabei mein Passwort. Auch das funktionierte nicht. Als ich dann jedoch im Anschluss erneut:

npm install

ausführte, wurden alle Abhängigkeiten erfolgreich installiert.

Hier würden mich Erfahrungen (bitte als Kommentar) interessieren, ob die Installation der Abhängigkeiten problemlos geklappt hat oder ob es hier ähnliche Probleme gab.

Dienst einrichten

Damit Wekan als Dienst eingerichtet wird, benötigen wir ein Startfile. Dazu im Wekan-Verzeichnis die Datei wekanservice anlegen:

nano ~/wekan/wekanservice

In diese Datei dann folgenden Inhalt einfügen:

#!/bin/sh


# These environment variables are sometimes needed by the running daemons
export USER=my_username  
export HOME=/home/$USER

# Include the user-specific profile
. $HOME/.bash_profile


export MONGO_URL='mongodb://my_username_mongoadmin:my_password@127.0.0.1:21183/wekan?authSource=admin'
export ROOT_URL='http://my_username.my_hostname.uberspace.de/'
export MAIL_URL='smtp://mail_user:mail_password@mail_host:25/'
export MAIL_FROM='sender@example.com'
export PORT=63112

exec node ~/wekan/bundle/main.js

Wichtig ist dabei, die MONGO_URL anzupassen und dort den korrekten Username, das entsprechende Passwort und den Port der MongoDB-Datenbank einzutragen. Außerdem muss die ROOT_URL, die MAIL_URL, MAIL_FROM und der PORT angepasst werden. Als Portnummer muss die nun „offene“ Portnummer eingetragen werden, die mit einem der ersten Schritte eingerichtet wurde (unter der Überschrift „Port öffnen“).

Anschließend muss die Datei als ausführbar markiert werden:

cd ~/wekan
chmod +x wekanservice

Und ein entsprechender Service eingerichtet werden:

uberspace-setup-service wekan ~/wekan/wekanservice

Dieser kann nun gestartet (svc -u ~/service/wekan), beendet (svc -d ~/service/wekan), neugeladen (svc -h ~/service/wekan) oder neugestartet (svc -du ~/service/wekan) werden.

Nachdem der Service angelegt wurde, startet er automatisch. Es geht ein paar Sekunden, in denen Wekan die erforderliche Datenbankstruktur und -daten anlegt, anschließend sollte Wekan laufen und der eigenen Adresse mit dem oben konfigurierten Port erreichbar sein. Sollte Wekan nicht funktionieren, kann man sich über diesen Befehl etwaige Fehlermeldungen anzeigen lassen:

tail -n 100 ~/service/wekan/log/main/current

Über Verbesserungsvorschläge, Hinweise und Ergänzungen als Kommentar würde ich mich freuen.

15 Gedanken zu “Kanban-Board Wekan bei uberspace installieren”

  1. Das ist suboptimal. Ich richte für solche Gelegenheiten immer eine Subdomain ein mit einer .htaccess in folgender Form:

    RewriteEngineOn
    RewriteCond %{HTTPS} !=on
    RewriteCond %{ENV:HTTPS} !=on
    RewriteRule .* https://${SERVER_NAME}%{REQUEST_URI} [R=301,L]
    RewriteRule (.*) http://localhost:PORT/$1 [P]

    Dann hast du eine Subdomain (am besten via Letsencrypt mit HTTPS) und musst keinen obskuren Port nach außen öffnen.

  2. Vielen Dank fuer die Anleitung!

    In der Datei wekanservice musste ich in der Zeile:

    export MAIL_URL=’smtp://mail_user:mail_password@mail_host:25/‘

    die Portnummer 25 in 587 aendern, damit es mit dem Mailserver von uberspace klappt.

  3. Im prinzip klappt alles super bei mir, bis ich die Seite aufrufen will.
    Wenn ich in der wekanservice die url

    export ROOT_URL=’http://www.p4w5.eu/‘

    setze, dann leifert der Server alle Dateien, wenn ich p4w5.eu/wekan besuche, außer css und js welche von p4w5.eu/ gefordert werden

    Wenn ich dann die

    export ROOT_URL=’http://www.p4w5.eu/wekan/‘

    setze kommt beim aufrufen mit Firefox immer die Meldung:

    File not found

    Firefox can’t find the file at http://p4w5.eu/wekan/.

    Check the file name for capitalization or other typing errors.
    Check to see if the file was moved, renamed or deleted.

    Jemand ne Ahnung was es sein kann?
    Ich leite p4w5.eu/wekan mit folgender .htaccess weiter:

    RewriteEngine On
    RewriteRule (.*) http://localhost:63975/$1 [P]

  4. Danke für die Anleitung erstmal!

    Komme aber leider am Punkt „npm konfigurieren“ bzw. „npm install“ nicht weiter. Habe ich das richtig verstanden:

    Ich erzeuge (zB mit nano) eine Konfigurationsdatei .npmrc in meinem home-Verzeichnis mit folgendem Inhalt:

    [my_username@my_hostname ~]$ cat > ~/.npmrc <<EOF
    prefix = $HOME
    umask = 077
    EOF

    Dabei ersetze ich my_ … mit meinen Werten.

    Dann wechsele ich in das Verzeichnis ~/wekan/bundle/programs/server
    und starte
    npm install

    Dann aber diese Rückmeldung:
    Error: ENOENT, stat ‚/home/planraum/wekan/bundle/programs/server/$HOME‘

    Hat jemand einen Tipp, was ich falsch verstanden habe bzw. mache, bzw. was ich anders machen muss?
    Vielen Dank schon mal!
    Ron

    • Eigentlich erledigt der cat-Befehl alles für dich, nano ist an dieser Stelle nicht erforderlich. cat fügt ans Ende der Datei den erforderlichen Inhalt ein, das my_username und my_hostname ist die Darstellung im Terminal (hier nicht relevant).

      Viele Grüße
      Sebastian

    • Sorry, etwas zu früh nachgefragt, habe jetzt cat verstanden.
      Lief dann auch sauber durch.

      Danke für die Anleitung nochmal!

      Ron

  5. Hallo,

    vielen Dank erstmal auch von mir für die Prima Anleitung! Habe mir vom Server allerdings die aktuelle Version gezogen, die benötigt dann aber die node.js-Version 4.8.4. Läuft aber prima!

    Allerdings hätte ich noch eine Frage: Gibt es denn trotz Websockets eine Möglichkeit Wekan per SSL abzusichern?

    Vielen Dank schonmal!

    Grüße, Max

    • Hallo Max,

      sorry, aber ich nutze Wekan (und auch andere node.js-Anwendungen) nicht mehr, daher kann ich die Frage leider nicht beantworten.

      Viele Grüße
      Sebastian

  6. Ich danke ebenfalls für diese Anleitung, die mich direkt zum gewünschten Ergebnis brachte. Habe allerdings Version 0.54 installiert und node.js 4.8.4 verwendet. Verwundert war ich über den fehlenden Adminzugang bzw. die fehlende Möglichkeit, die Registrierung zu deaktivieren, was bis heute nicht verfügbar ist. Oder kennt einer der hier kommentierenden Nutzer einen Weg dies umzusetzen?

    Sebastian, warum verwendest du node.js-Anwendungen nicht mehr? Verwendest du eine andere Software, um WeKan zu ersetzen?

    • Ich bin kein großer Freund von node.js, aber das ist meine persönliche Meinung. Es wirkt auf mich immer ein wenig ‚gebastelt‘. Wekan nutze ich nicht mehr, da wir mittlerweile zur Nutzung von Microsoft Teams (aufgrund der besseren Integration in das MS Ökosystem) übergegangen sind.

Schreibe einen Kommentar