PBT – Öffi-Erfahrungen (pbt.zisco.at)
Lokal auf der LXC einrichten
cd /opt/pbt # oder wohin du die Dateien kopierst
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
export PBT_DATABASE_URL="postgresql://pbt_app:DEIN_PASSWORT@<postgres-ip-oder-hostname>/pbt"
export PBT_SECRET_KEY="ein-langer-zufaelliger-string"
python app.py # Testlauf auf Port 5000
Beim ersten Start legt die App die Tabellen (users, trips, stops) automatisch per
db.create_all() an – dafür braucht der User pbt_app CREATE-Rechte in der DB
(sollte durch GRANT ALL PRIVILEGES ON DATABASE pbt TO pbt_app; bereits gegeben sein).
Haltestellen-Lookup
Die Felder „Von" und „Nach" haben eine Autovervollständigung aus allen
österreichischen Haltestellen. Die Daten stammen aus OpenStreetMap
(© OpenStreetMap-Mitwirkende, ODbL) und liegen als Snapshot im Repo
(data/stops_at.csv.gz, ~37 000 Haltestellen).
Nach dem Anlegen der Tabellen den Snapshot in die DB laden:
flask import-stops # FLASK_APP=app.py bzw. im Projektverzeichnis
Der Import ist idempotent (Upsert) und braucht kein Internet. Im Produktivbetrieb
übernimmt das die Unit pbt-import-stops.service (wird bei jedem Deploy
angestoßen, s. u.).
Snapshot neu von OpenStreetMap holen (dauert 1–2 min, braucht Netzugang):
python scripts/fetch_stops.py # überschreibt data/stops_at.csv.gz
flask import-stops
Produktivbetrieb mit systemd + Gunicorn
- Projekt nach
/opt/pbtkopieren, virtuelle Umgebung dort anlegen (s. oben). - Secrets anlegen (nicht im Repo):
sudo install -d -m 750 -o root -g root /etc/pbt sudo cp /opt/pbt/pbt.env.example /etc/pbt/pbt.env sudo chmod 640 /etc/pbt/pbt.env sudo $EDITOR /etc/pbt/pbt.env # echte PBT_DATABASE_URL + PBT_SECRET_KEY - Beide Units installieren (lesen
/etc/pbt/pbt.env):Die App lauscht dann intern aufsudo cp /opt/pbt/pbt.service /opt/pbt/pbt-import-stops.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now pbt sudo systemctl start pbt-import-stops.service # Haltestellen laden systemctl status pbt127.0.0.1:8000. - Damit der Deploy-User (
deploy) beim CI-Deploy neu starten und den Haltestellen-Import anstoßen darf, in/etc/sudoers.d/pbt-deploy:Der Import selbst läuft alsdeploy ALL=(root) NOPASSWD: /usr/bin/systemctl restart pbt, /usr/bin/systemctl start pbt-import-stops.servicewww-dataund bekommt die DB-URL aus/etc/pbt/pbt.env– die Credentials liegen nie beim Deploy-User.
Caddy-Eintrag
In der Caddy-LXC in der Caddyfile ergänzen:
pbt.zisco.at {
reverse_proxy 10.10.10.24:8000
}
(IP durch die tatsächliche Adresse der pbt-LXC ersetzen.) Danach:
systemctl reload caddy
Caddy holt sich das TLS-Zertifikat für pbt.zisco.at automatisch über Let's Encrypt,
sofern die Domain öffentlich auf die Caddy-LXC zeigt.