75 lines
2.2 KiB
Markdown
75 lines
2.2 KiB
Markdown
# PBT – Öffi-Erfahrungen (pbt.zisco.at)
|
||
|
||
## Lokal auf der LXC einrichten
|
||
|
||
```bash
|
||
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:
|
||
|
||
```bash
|
||
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):
|
||
|
||
```bash
|
||
python scripts/fetch_stops.py # überschreibt data/stops_at.csv.gz
|
||
flask import-stops
|
||
```
|
||
|
||
## Produktivbetrieb mit systemd + Gunicorn
|
||
|
||
1. Projekt nach `/opt/pbt` kopieren, virtuelle Umgebung dort anlegen (s. oben).
|
||
2. `pbt.service` nach `/etc/systemd/system/pbt.service` kopieren, DB-URL und
|
||
Secret-Key darin anpassen.
|
||
3. Aktivieren:
|
||
```bash
|
||
systemctl daemon-reload
|
||
systemctl enable --now pbt
|
||
systemctl status pbt
|
||
```
|
||
Die App lauscht dann intern auf `127.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:
|
||
|
||
```bash
|
||
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.
|