So bringst Du das ETB auf Deinen eigenen Server. Der Großteil läuft über den Setup-Wizard — vorher musst Du nur die Voraussetzungen schaffen.
Voraussetzungen
- PHP 8.1+ (getestet bis 8.4) mit den Extensions:
pdo_mysql(Datenbank)imap(Mail-Postfach für Alarm-Mails)mbstring,fileinfo,curl,dom,gd
- MySQL 5.7+ oder MariaDB 10.3+
- Webserver mit Document-Root auf
public/und Rewrite-Modul (Apachemod_rewriteoder Nginx) - Cron alle 1–5 Minuten, um neue Alarm-Mails abzufragen
- IMAP-Postfach für die eingehenden Alarm-Mails der Leitstelle
- Optional: SMTP-Postfach für ausgehende App-Mails (Passwort-vergessen). Getrennt vom IMAP-Postfach oben — siehe den SMTP-Block in Konfiguration. Ohne SMTP bleibt die „Passwort vergessen"-Selbsthilfe inaktiv (Admin setzt Passwörter dann selbst).
- Optional: Telegram-Bot-Token, falls Du die App-Push-Benachrichtigung nutzen willst
- Optional: what3words-API-Schlüssel (kostenpflichtiger Plan) — nur wenn Du
den Kurz-Standort per what3words nutzen willst; als
W3W_API_KEYinconfig/.env(Vorlage inconfig/.env.example). Die kostenlose Kurz-Standort-Variante Plus Codes braucht nichts davon und wird offline berechnet. - Optional: PHP-Extension
zip— nur für den Excel-Export der Bevölkerungswarnung im Original-Formular einer Leitstelle. Fehlt sie, läuft alles andere unverändert; im Admin steht dann ein Hinweis, und es bleibt beim Standard-Dokument (PDF). Ohnezipbietet der Admin-Bereich auch die Gemeinde-Auswahl und das Einspielen einer neuen Formular-Version nicht an — beides liest das ETB aus der Formular-Datei.
Schritt 1: Code auf den Server bringen
git clone https://gitlab.com/brun-soft/das-etb.git /var/www/etb
cd /var/www/etb
ℹ️ Tipp: Lege das Repo so an, dass
git pullfür spätere Updates funktioniert. Schreibrechte für den Webserver-User braucht nurstorage/— der Rest darf read-only sein.
Schritt 2: Webserver konfigurieren
Document-Root muss auf public/ zeigen, nicht auf das Repo-Root. Sonst
wären die src/-Dateien direkt aus dem Web erreichbar.
Apache (/etc/apache2/sites-available/etb.conf):
<VirtualHost *:443>
ServerName etb.example.de
DocumentRoot /var/www/etb/public
<Directory /var/www/etb/public>
AllowOverride All
Require all granted
</Directory>
# SSL-Konfiguration nach deinem Setup …
</VirtualHost>
Nginx:
server {
listen 443 ssl http2;
server_name etb.example.de;
root /var/www/etb/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Schritt 3: .env anlegen
Das ETB liest Zugangsdaten aus config/.env. Eine Vorlage liegt unter
config/.env.example:
cp config/.env.example config/.env
Diese Datei legst Du jetzt nicht selbst mit allen Werten an — der Setup-Wizard tut das gleich für Dich. Wichtig ist nur, dass die Datei existiert und die DB-Zugangsdaten eingetragen sind, damit der Wizard sich überhaupt erst mit der Datenbank verbinden kann:
DB_HOST=localhost
DB_NAME=etb
DB_USER=etb
DB_PASS=geheim
DB_TABLE_PREFIX=etb_
⚠️ Achtung: Den Tabellen-Präfix solltest Du vor dem ersten Setup festlegen. Wer den Präfix nachträglich ändern will, muss in der Datenbank Tabellen umbenennen — der Wizard tut das nicht.
Zeitzone
Für deutsche Feuerwehren musst Du hier nichts tun — ohne Eintrag gilt
Europe/Berlin. Nur wenn Deine Wehr in einer anderen Zeitzone liegt,
trägst Du sie zusätzlich ein:
APP_TIMEZONE=Europe/Vienna
Der Wert gilt für alle Uhrzeiten im Tagebuch — angezeigte wie
gespeicherte: Anwendung und Datenbank werden gemeinsam darauf gesetzt.
Erlaubt sind nur echte Kennungen aus der Zeitzonen-Datenbank
(Europe/Berlin, Europe/Vienna, UTC); feste Offsets wie +02:00
werden abgelehnt, weil sie die Sommerzeit nicht kennen. Steht dort ein
unbekannter Wert, greift Europe/Berlin, und im PHP-Log steht ein Hinweis.
⚠️ Die Zeitzone gehört vor den ersten Einsatz festgelegt. Wer sie später ändert, verschiebt damit die Anzeige aller bereits erfassten Zeitstempel.
Ob es geklappt hat, siehst Du nach dem Setup jederzeit auf der Karte Zeitzone unter System-Status — sie muss synchron anzeigen.
Schritt 4: Im Browser öffnen
Rufe https://etb.example.de/ auf. Bei einer frischen Installation landest
Du automatisch auf dem Setup-Wizard. Folge der Anleitung in
Setup-Wizard.
Wenn etwas nicht klappt: Schau ins Webserver-Log und in logs/ im Repo.
Häufige Fehler sind in der FAQ zusammengefasst.
Was wird auf der Platte gespeichert?
config/.env— sensible Zugangsdaten (DB, Mail, Telegram). Niemals ins Repo committen.storage/uploads/— Bilder und Dokumente, die in Kommentaren hochgeladen werden.public/branding/— Dein hochgeladenes Logo und Favicon.logs/— Cron-Logs, Mail-Parser-Logs, Telegram-Webhook-Logs.storage/warnformular/— nur bei der Bevölkerungswarnung mit Kreis-Vorlage: eine selbst eingespielte Formular-Version der Leitstelle und die gespeicherte Gemeindegrenze. Beides ist jederzeit neu erzeugbar (erneut hochladen bzw. erneut holen) und übersteht ein Update, weilstorage/beim Deploy ausgespart bleibt.
Diese Verzeichnisse sicherst Du regelmäßig (siehe Backup & Updates).
Was als nächstes?
- Setup-Wizard — die geführte Erst-Einrichtung
- Cron & Mail-Verarbeitung — die Automatisierung scharf schalten
- Backup & Updates — Daten sichern und Versionen einspielen