Inhaltsverzeichnis
- Projektziel
- Onlinedemo
- Voraussetzungen für den Betrieb
- Download des Systems
- Bereitstellung des Docker-Containers
- Parameter definieren
- Den Container in das Traefik-System einbinden
Projektziel
Wenn eine lose Gruppe von Personen wie z. B. bei Klassentreffen, Vereinstreffen usw. sich zu einer gemeinsame Veranstaltung verabreden, wäre es für den Organisator dieser Veranstaltung praktisch, mit einem Blick zu erkennen, wie viele Personen denn nun an dem Termin teilnehmen werden. Diese Information soll das kleine Portal ktserver liefern. kt kommt übrigens von dem Word Klassentreffen, weil dies die erste Anwendung in der Praxis war. Das Portal bietet jeden potentiellen Teilnehmer die Möglichkeit, sich anzumelden. Dabei werden nur Einmal-Kennwörter verwendet, die bei jeder Anmeldung neu generiert und an die E-Mail-Adresse des Teilnehmers gesendet wird. Für Teilnehmer ohne E-Mail-Adresse ist eine Sonderlösung vorhanden. Näheres dazu im Anwenderhandbuch. Die Anwendung wurde in der Programmiersprache Go erstellt. Es werden nur die unbedingt notwendigen Daten erfasst und nur Personen mit Status „Organisator“ können eine Teilnehmerliste sehen. Alle anderen Teilnehmer können nur den eigenen Status pro Veranstaltung pflegen und erhalten nur die Gesamtzahl der Teilnehmer pro Veranstaltung. Da die Anwendung leicht auf einem Raspberry Pi betrieben werden kann, steht der digitalen Souveränität hier nichts mehr im Wege. Sollte es zum Missbrauch des Portals kommen, ist es durch die Verwendung von Traefik ganz einfach möglich, das Verzeichnis durch ein, nur dem Teilnehmerkreis bekannten, Kennwort zusätzlich zu schützen.
Onlinedemo
Sie finden eine Onlinedemo unter
https://gttest.lang-dieter.de/
Zugangsdaten für Adminzugang:
Login: Organisator
E-Mail: kttest@lang-dieter.de
Anmeldecode: 12345678
Voraussetzungen für den Betrieb
Eine eigene Domain und die Möglichkeit, diese auf einem privaten Raspberry Pi zu leiten. Wenn Sie das Tool auf einem gemieteten Webserver betreiben möchten, benötigen Sie dort root-Zugriff, um die ausführbare Datei einrichten zu dürfen. Das Programm bringt seinen eigenen Webserver mit und wir benötigen daher keinen Apache, Nginx oder anderen Webserver auf der Hardware oder im Container. Die Datenbank MariaDB erstellen wir uns als Docker-Container auf dem Server.
Eine Beschreibung, wie ein Raspberry Pi zur Bereistellung im Internet vorbereitet wird, finden Sie in meinem Beitrag
https://www.lang-dieter.de/wp/posts/raspberry-traefik-webserver/
Download des Systems
Den kompletten Docker-Container inklusive der benötigten Programmdatei habe ich in folgender ZIP-Datei zusammengestellt:
Bereitstellung des Docker-Containers
Gehen wir davon aus, dass unser System seine Container im Verzeichnis /srv/containers/ speichert.
Erstellen wir uns also ein neues Verzeichnis für den neuen Container:
mkdir -p /srv/containers/ktserver
und kopieren den entpackten Inhalt der heruntergeladenen Zip-Datei in das neu ertellte Zielverzeichnis..
# Wechsel in das Home-Verzeichnis
cd ~
#Download der Zip-Datei
wget https://lang-dieter.de/uploads/2026/04/ktserver.zip
# Entpacken in das Home-Verzeichnis
unzip ktserver.zip
# Kopieren des Inhaltes in das gewünschte Verzeichnis
cp ktserver/* /srv/containers/ktserver -R
cp ktserver/.env /srv/containers/ktserver/
# Falls keine weiteren Instanzen errichet werden sollen
# kann der Inhalt im Homeverzeichnis wieder gelöscht werden
rm ktserver -rf
rm ktserver.zip
# Setzen der Zugriffsrechte im Zielverzeichnis
sudo chown pi:root /srv/containers/ktserver/ -R
Dann sollten wir folgende Struktur erhalten:
tree -L4 /srv/containers/kttestserver/
/srv/containers/kttestserver/
├── app
│ ├── ktserver-amd64
│ ├── ktserver-amd64.exe
│ ├── ktserver-arm64
│ ├── log
│ ├── static
│ │ ├── css
│ │ │ └── style.css
│ │ └── pdf
│ │ └── Anwenderhandbuch.pdf
│ └── templates
│ ├── error.html
│ ├── index.html
│ ├── liste.html
│ └── login.html
├── docker-compose.yaml
├── .env
├── init.sql
└── servername.conf
Das Unterverzeichnis app enthalt die ausführbare Datei für verschiedene Prozessoren. Darunter mit log ein Verzeichnis für log-Dateien und im Unterverzeichnis static weitere 2 Unterverzeichnisse css für Style-Angaben und pdf für PDF-Dateien, die in der Anwendung heruntergeladen werden können.
Im Unterverzeichnis templates sind die HTML-Dateien für die Programmoberfläche hinterlegt.
Die init.sql enthält generierte Testdaten zum Aufbau einer Testdatei. Sie wird im Normalbetrieb nicht benötigt. Der Aufruf wird in der docker-compose.yaml gesteuert. Die Datei servername.conf wird im Container von PHP-MyAdmin verwendet, um einen Warnhinweis vom Apache-Webserver zu beheben.
Parameter definieren
In der .env-Datei im Verzeichnis /srv/containers/ktserver/ können einige Parameter konfiguriert werden:
- WWW_DOMAIN_APP
Domainname, unter der die App erreichbar sein soll. z. B. kt.Deine Domain.de - WWW_DOMAIN_PMA
Domainname, unter der die Weboberfläche von PHP-Myadmin erreicht werden kann. z.B. ktpma.Diene Domain.de - APP-GRUPPENNAME
Bezeichnung der Gruppe, das Programm verwendet. Erscheint im Anmeldefenster der App. - APP-DUMMYMAIL
Diese Angabe erscheint als Beispieltext für die Eingabe im E-Mail-Feld in Anmeldefenster.. Diese Dummymail dient dazu, die formale E-Mail-Prüfung des Anmeldeformulars zu bestehen. Wenn diese Dumy-Angabe verwendet wird, werden keine echten Mails mit dem Einmalkennwort übermittelt. Stattdessen gilt ein Einmalkennwort, das vom Tagesdatum abgeleitet wird. Sie ist für Personen gedacht, die keinen Zugriff auf ein E-Mail-Postfach haben. - APP_SMTP_EMAIL
E-Mail des Postfaches, dass programmgesteuerte E-Mails versendet. - APP_SMTP_PASSWORD
Kennwort des Absende-Postfaches - APP_SMTP_HOST
Hostname des Mailservers des Absender-Mailservers - APP_SMTP_PORT
Port des Mailservers für Postversand - APP_PORT
Port, auf dem die Anwendung auf dem Host erreichbar ist - APP_MARIADB_PORT
Port, auf dem der MariaDB-Server hört - APP_CONTAINERNAME
Benennung des Contianers im Docker-System - APP_LOGLEVEL
Loglevel für das Logging-System der App
Mögliche Werte:
APP_LOGLEVEL=“–loglevel=info“
APP_LOGLEVEL=“–loglevel=debug
wenn in der Programmierumgebung für Testzwecke der ktserver nicht im Container starten soll
APP_LOGLEVEL2=“–nostart=true“ - DB_MARIADB_ROOT_PASSWORD
Password für den User root des Datenbanksevers - DB_MARIADB_DATABASE
Bezeichnung der Datenbank - DB_MARIADB_USER=ktuser
- DB_MARIADB_PASSWORD=KTQAQsRDLs6BE0EzriTR
- DB_MARIADB_HOST
Hostname des Datenbank-Containers - DB_MARIADB_PORT
Portangabe des Datenbank-Containers falls 3307 schon belegt ist. - PMA_CONTAINERNAME
Name des Containers mit PHP-MyAdmin - MyAD_PMA_ARBITRARY
wenn 0 kein Wechsel der Datenbank bei der Anmeldung möglich - MYADMIN_PORT
Port unter dem die Weboberfläche erreichbar ist - ABSOLUTE_PATH=${PWD}
Damit alle includierten Docker-Scripte von Traefik funktionieren.
Deshalb muss immer in das Traefik-Verzeichnis gewechselt werden, um Docker Compose aufzurufen. - TZ=Europe/Berlin
Zeitzone innerhalb der einzelnen Container - BINARY_NAME
Binary, das im Container gestarter werden soll:
auf einem Host (PC) mit 64-Bit-Prozessor
BINARY_NAME=ktserver-amd64
auf einem Host (Raspberry Pi) mit ARM-Prozessor
BINARY_NAME=ktserver-arm64
Den Container in das Traefik-System einbinden
Damit alle Container „auf einen Rutsch“ gestartet oder beendet werden können, müssen wir die neu erstellte docker-compose-Datei in der docker-compose-Datei von Traefik inkludieren.
Wir öffnen die Datei /srv/containers/traefik/docker-compose.yaml und fügen die neu erstellte Datei am Ende hinzu:
geany /srv/containers/traefik/docker-compose.yaml

Nun können wir das Gesamtsystem neu starten:
# In das Traefik-Verzeichnis gehen
cd /srv/containers/traefik/
# Die neu erstellte Datei auf Fehler testen
docker compose ../ktserver/docker-compose.yaml config
# Traefik herunterfahren
docker compose down
# Traefik komplett neu starten als Dienst im Hintergrund
docker compose up -d&
# Log-Datei unseers neuen Dienstes anzeigen lassen
tail -f /srv/containers/ktserver/app/log/app.log
Im Browser sollte der Aufruf der mittels der Variablen WWW_DOMAIN_APP festgelegten Adresse problemlos funktionieren.
Nun können sich Ihre Teammitglieder bequem in der von Ihnen bereitgestellten App zu den anstehenden Veranstaltungsterminen an- oder abmelden.