2.2 KiB
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. Beim Deploy per systemd einmalig ausführen, danach nur wenn der Snapshot aktualisiert wurde.
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). pbt.servicenach/etc/systemd/system/pbt.servicekopieren, DB-URL und Secret-Key darin anpassen.- Aktivieren:
Die App lauscht dann intern auf
systemctl daemon-reload systemctl enable --now pbt systemctl status pbt127.0.0.1:8000.
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.