Taiga
Taiga installieren
Taiga ist eine Software für die agile Projektverwaltung. Es werden Scrum- und einfache Kanban-Projekte unterstützt. Weitere Komponenten sind ein Issue-Tracker und ein Wiki pro Projekt. User Stories können optional zu Epics zugeordnet werden.
Bei Hostsharing kann Taiga im Managed Webspace mit dem Apache Passenger Modul betrieben werden. Es wird eine PostgreSQL Datenbank benötigt.
Diese Installationsanleitung beschreibt ein minimales Setup und verzichtet auf die Komponenten "taiga-events" und "taiga-protected".
Vorbereitung in HSAdmin
Mit Hilfe von HSAdmin werden angelegt:
- ein User mit der Shell '/bin/bash', im Beispiel "xyz00-taiga"
- beim User wird eine Domain aufgeschaltet, mein Beispiel ist: "projekte.hs-example.de"
- ein PostgreSQL-User und eine PostgreSQL-Datenbank, beide heißen hier: "xyz00_taiga"
Installation des Backend
Das Backend ist eine Python-/Django-Anwendung. Die Sourcen werden aus dem Git-Repository bei Github ausgecheckt:
cd ~ git clone https://github.com/kaleidos-ventures/taiga-back cd taiga-back git checkout stable
Dann wird im Projekt-Verzeichnis ein Python.Virtualenv angelegt:
cd ~/taiga-back python3 -m venv .venv --prompt taiga-back source .venv/bin/activate (taiga-back) pip install --upgrade pip wheel (taiga-back) pip install -r requirements.txt (taiga-back) pip install git+https://github.com/kaleidos-ventures/taiga-contrib-protected.git@6.0.0#egg=taiga-contrib-protected
Es folgt die Konfiguration der Django-Anwendung
cd ~/taiga-back cp settings/config.py.prod.example settings/config.py nano settings/config.py
Folgende Einstellungen müssen angepasst werden:
In der Struktur "DATABASES" wird die angelegte PostgreSQL-Datenbank eingetragen.
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'xyz00_taiga', 'USER': 'xyz00_taiga', 'PASSWORD': 'das-passwort-von-xyz00_taiga', 'HOST': '127.0.0.1', 'PORT': '5432', } }
Für die Variablen "SITES" und TAIGA_URL muss die richtige Domain eingetragen werden, als "SECRET_KEY" wird ein zufällige Zeichenkette eingetragen.
SECRET_KEY = "xxxxxxxxxxxxxxxxxxxxxxx" TAIGA_URL = "https://projekte.hs-example.de" SITES = { "api": {"domain": "hs-example.jalin.de", "scheme": "https", "name": "api"}, "front": {"domain": "hs-example.jalin.de", "scheme": "https", "name": "front"} }
Im Bereich "MEDIA AND STATIC" werden die bisher auskommentierten Variablen "MEDIA_ROOT" und "STATIC_ROOT" definiert.
# MEDIA_ROOT = '/home/taiga/media' MEDIA_ROOT = '/home/pacs/xyz00/users/taiga/data/media' MEDIA_URL = f"{ TAIGA_URL }/media/" DEFAULT_FILE_STORAGE = "taiga_contrib_protected.storage.ProtectedFileSystemStorage" THUMBNAIL_DEFAULT_STORAGE = DEFAULT_FILE_STORAGE # STATIC_ROOT = '/home/taiga/static' STATIC_ROOT = '/home/pacs/xyz00/users/taiga/data/static' STATIC_URL = f"{ TAIGA_URL }/static/"
Für das Versenden von E-Mail ist der Bereich "EMAIL" anzupassen.
DEFAULT_FROM_EMAIL = 'noreply@projekte.hs-example.de' EMAIL_USE_TLS = True EMAIL_HOST = '127.0.0.1' EMAIL_PORT = 4587 EMAIL_HOST_USER = 'xyz00-taiga' EMAIL_HOST_PASSWORD = 'passwort-von-xyz00-taiga'
Alle Zeilen, die mit "EVENTS_PUSH" oder "CELERY" beginnen, können auskommentiert werden, lediglich
CELERY_ENABLED = False
sollte gesetzt werden.
Zum Schluss ist bei mir konfiguriert:
PUBLIC_REGISTER_ENABLED = True USER_EMAIL_ALLOWED_DOMAINS = "hs-example.de"
und
ENABLE_TELEMETRY = False
Falls man aber auch Benutzer von anderen E-Mail Domains erlauben möchte, muss man diese in USER_EMAIL_ALLOWED_DOMAINS
hinzufügen, oder wenn man gar keine Beschränkung möchte, diese Zeile ganz auskommentieren. Das macht zum Beispiel Sinn, wenn PUBLIC_REGISTER_ENABLED
abgeschaltet ist.
Nun werden mit den folgenden Kommandos die Datenverzeichnisse angelegt
cd ~ mkdir data mkdir data/static mkdir data/media
Und die initialen Daten in die Datenbank geladen
cd ~/taiga-back source .venv/bin/activate (taiga-back) DJANGO_SETTINGS_MODULE=settings.config python manage.py migrate --noinput (taiga-back) CELERY_ENABLED=False DJANGO_SETTINGS_MODULE=settings.config python manage.py createsuperuser (taiga-back) DJANGO_SETTINGS_MODULE=settings.config python manage.py loaddata initial_project_templates (taiga-back) DJANGO_SETTINGS_MODULE=settings.config python manage.py compilemessages (taiga-back) DJANGO_SETTINGS_MODULE=settings.config python manage.py collectstatic --noinput
An dieser Stelle können wir den Server testweise starten
DJANGO_SETTINGS_MODULE=settings.config python manage.py runserver
Und in einer anderen Shell die API abfragen. Das Kommando
curl http://localhost:8000/api/v1/
liefert eine JSON-Datenstruktur mit der API-Definition. Den Server kann man mit "Ctrl-C" wieder beenden.
Nun wird die Anwendung im Apache Webserver konfiguriert. Im Domain-Verzeichnis "~/doms/projekte.hs-example.de/" wird eine Datei ".htaccess" mit der Passenger-Konfiguration abgelegt:
PassengerFriendlyErrorPages off PassengerPython /home/pacs/xyz00/users/taiga/taiga-back/.venv/bin/python3 SetEnv PYTHONPATH /home/pacs/xyz00/users/taiga/taiga-back SetEnv DJANGO_SETTINGS_MODULE settings.config
Die Verzeichnisse "subs/www", "subs-ssl/www" und "htdocs-ssl" werden gelöscht. In "app-ssl" wird eine Datei "passenger_wsgi.py" mit folgendem Inhalt abgelegt:
from taiga.wsgi import application
An dieser Stelle sollte sich die Backend-API auch im Browser unter der URL "https://projekte.hs-example.de/api/v1/" aufrufen lassen. Unter "https://projekte.hs-example.de/admin/" ist eine Anmeldung mit dem angelegten Admin-Account im Django-Backend möglich.
Einrichtung der Benachrichtigungen per E-Mail
Es kann ein Cronjob eingerichtet werden, der alle paar Minuten prüft, ob Benachrichtigungen per E-Mail hinausgeschickt werden sollen.
EDITOR=nano crontab -e
Füge diese Zeile am Ende der Datei ein:
*/2 * * * * cd $HOME/taiga-back && .venv/bin/python3 manage.py send_notifications --settings=settings.config
In Nano wird mit Strg-X beendet und mit y das Speichern bestätigt.
Die Absenderadresse wird übrigens am besten in der Datei taiga-back/settings/config.py
in der Variable DEFAULT_FROM_EMAIL
eingetragen.
Installation des Frontend
Auschecken von Github:
cd ~ git clone https://github.com/kaleidos-ventures/taiga-front-dist.git taiga-front-dist cd ~/taiga-front-dist git checkout stable
Konfiguration
cd ~/taiga-front-dist/dist cp conf.example.json conf.json
In "conf.json" muss der Wert "api" angepasst werden, ggf. kann die Default-Sprache auf "de" geändert werden.
"api": "https://projekte.jalin.de/api/v1/", "defaultLanguage": "de",
Im Domainverzeichnis werden zum Abschluss Links für die statischen Inhalte gesetzt:
cd ~/doms/projekte.hs-example.de/ ln -s $HOME/taiga-front-dist/dist htdocs-ssl cd htdocs-ssl ln -s $HOME/data/media media ln -s $HOME/data/static static
Zum Schluss wird in diesem Verzeichnis "htdocs-ssl" noch eine Datei ".htaccess" mit dem folgenden Inhalt angelegt:
DirectoryIndex disabled RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} !^/api(.*) RewriteCond %{REQUEST_URI} !^/admin(.*) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.*) /index.html
Theme anpassen
Falls ein paar Sachen über CSS abgeschaltet oder anders dargestellt werden sollen, gibt es die Möglichkeit, eine eigene CSS einzubinden. Dazu muss in der Datei ~/taiga-front-dist/dist/index.html
folgende Zeile eingefügt werden (diese Zeile muss nach einem Update von Taiga wieder erneut eingetragen werden):
<link rel="stylesheet" href="/v-1618228552362/styles/mytheme.css">
Die Datei taiga-front-dist/dist/v-1618228552362/styles/mytheme.css
kann z.B. folgenden Inhalt haben:
/* disable the search bar, and the empty highlighted project div on the discover page, before login */ section.discover tg-discover-search-bar, div.empty-highlighted-project { display: None; } /* hide the "New Project Button" */ .navbar-dropdown a.create-project-btn, .project-list-wrapper .create-project-btn { display: None; }
Weitere Optionen zur Einrichtung
Falls die Registrierung von neuen Benutzern nicht jedem offen stehen sollte, müssen 2 Änderungen vorgenommen werden:
- in der Datei
taiga-back/settings/config.py
mussPUBLIC_REGISTER_ENABLED = False
eingetragen werden. - in der Datei
taiga-front-dist/dist/conf.json
muss"publicRegisterEnabled": false,
eingetragen werden. - siehe auch https://docs.taiga.io/setup-faqs.html#disable-registration
Taiga mit Ansible installieren
Alternativ lässt sich Taiga auch mit einem Ansible Skript bei Hostsharing installieren. Damit lassen sich die Installationsschritte automatisiert durchführen.
Die Quellen für das Ansible Skript können hier eingesehen werden: https://github.com/tpokorra/Hostsharing-Ansible-Taiga/
Dort ist auch eine README Datei mit einer Anleitung.