Zurück

Kanboard-Dokumentation

Für das Projekt DH2018

Installation

Installation in einem Docker - Container

  1. Download folgender Dateien/Ordner aus dem Kanboard-Repository
    • Dockerfile
    • docker/
  2. docker build -t kanboard /path/to/dockerfile --build-arg VERSION=master
  3. docker run --name kanboard -p ServerPort:80 -p :443 -d kanboard
Erklärung für un-/genutzte Schalter
Schalter Erklärung
-t /Path/To/Dockerfile/ Pfad zur Dockerfile
--build-arg VERSION=<version> Gibt die zu nutzende Kanboard-Version an
-p SERVER:CONTAINER Portforwarding
-d Container wird im Hintergrund ausgeführt
--name <name> Containername
-v /Server/Folder/:/Container/Folder Bindet Ordner aus Serverstruktur in Containerstruktur ein

Installation ohne Docker

Noch nicht genauer bekannt, da mit Docker gearbeitet wurde! Eine Installationsanleitung für einen Apache-Webserver findet man hier.

Installation in der Infrastruktur via Docker

Im Ordner Kanboard-Docker ist ist das createContainer-Skript vorhanden. Dieses erstellt den Container anhand der vorhandenen Dockerfile und dem docker/-Ordner. Dadurch wird außerdem ein SSH-Service und ein thedockeruser im Container erstellt.

Besonderheiten am DH2018-Kanboard

SSH-Verbindung

Um Nutzer direkt in die Datenbank einzufügen gibt es zwei Möglichkeiten.

  1. Direkt hinzufügen, in dem man sich von Turing aus via docker exec -it kanboard /bin/bash anmeldet und via sqlite3 Insert-Statements ausführt.
  2. Via SSH einloggen und dort per sqlite3 Insert-Statements ausführen.

Für beide Möglichkeiten benötigt man auf jedenfall das Tool sqlite3, welches man in der Dockerfile hinzufügen muss. Um dann auch anderen Nutzern die Möglichkeit zu geben, auf Knuth ein Skript auszuführen, welches dann die jeweiligen Statements ausführt, muss man sich via SSH im Container anmelden. Um SSH zu installieren müssen folgende Dinge geändert werden:

  1. Hinzufügen von openSSH in der Installationsroutine im Dockerfile
  2. Hinzufügen eines s6supervise-Skriptes, welches den SSH-Daemon startet.
  3. Hinzufügen von SSH-Zertifikaten im Entry-Point-Skript
  4. Hinzufügen eines Users (thedockeruser) und setzen seines Passwortes
  5. SSH-Keys der berechtigten Nutzer von Knuth in den Docker-Container kopieren.

Sobald der SSH-Key des berechtigten Nutzers im Container hinterlegt wurde, kann das Skript ordnungsgemäß vom Nutzer ausgeführt werden.

Datenbank-Backup

Da es sich bei der im Projekt genutzten Installation um einen Docker-Container handelt, kann es jederzeit vorkommen, dass der Container neu aufgesetzt wird. Um danach keinen Datenverlust zu erleiden, wurden folgende Maßnahmen getroffen:

  1. Einbinden eines Ordners aus der Infrastruktur in den Container
  2. Erstellen eines regelmäßigen Cron-Jobs
    1. Kopieren der aktuellen db.sqlite-File in den eingebundenen Ordner

Um das Backup bei Neustart eines Containers wieder zu laden, kann dies entweder im Entrypoint-Skript eingebunden werden, oder aber im bereits existierenden Cron-Job.

Einladungs-Nachricht an einen Nutzer

Nach einfügen eines Nutzers in die Datenbank wird eine Nachricht mit den Credentials generiert und in das Postfach des jeweiligen Nutzers umgeleitet. Dabei wird die Nachricht im Skript erzeugt und wird nicht in das Dateisystem geschrieben und später verschoben.

Der Transfer in das Postfach erfolgt mittels: echo $msg > /home/$user/postfach/Kanboard-Einladung zur Gruppe $group

Hinzufügen von Nutzern

Das Skript bietet zwei Möglichkeiten, um Nutzer hinzuzufügen. Zum einen ist ein Gruppen-Modus vorhanden. Die Alternative dazu ist der Nutzer-Modus, um einen einzelnen Nutzer hinzuzufügen.

Schalter

-g <group> Sucht nach einer Gruppe in der vorhandenen Infrastruktur und erstellt für alle Nutzer dieser Gruppe Accounts.

-u <user> -a <0|1> -g <group> Mit dieser Schalterkombination wird ein Nutzer mit den jeweiligen Adminrechten erstellt und der angegebenen Gruppe hinzugefügt.

Ablauf

Das unten angezeigte Diagramm zeigt Skript-Ablauf. Aktivitätsdiagramm Aktivitätsdiagramm

Sonstiges

Verschlüsselung von Passwörtern

Kanboard nutzt die PHP-Interne Verschlüsselungsmethode password_hash($password, PASSWORD_BCRYPT) mit dem Verschlüsselungsalgorithmus bcrypt. Bcrypt gilt allerdings als gebrochen, da es mit einer ECB-Verschlüsselung und anschließender Komprimierung.