153 lines
5.3 KiB
Markdown
153 lines
5.3 KiB
Markdown
# eventlens
|
|
|
|
`eventlens` ist ein selbst gehostetes MVP zum Beobachten von Kuenstlern und Events in Hamburg oder ganz Deutschland.
|
|
|
|
## Funktionen
|
|
|
|
- Watchlist fuer Kuenstler oder Events
|
|
- Regionen `hamburg` und `germany`
|
|
- Geplanter Event-Abgleich ueber mehrere Quellen
|
|
- E-Mail-Benachrichtigung bei neu gefundenen Terminen
|
|
- Markierung, ob Tickets gekauft wurden
|
|
- Erinnerung etwa eine Woche vor dem Termin
|
|
- Webfrontend ohne separaten Build-Step
|
|
- Docker-Deployment hinter NGINX
|
|
|
|
## Projektstruktur
|
|
|
|
- `backend/`: FastAPI-Anwendung
|
|
- `deploy/nginx/eventlens.conf`: Beispiel fuer Reverse Proxy
|
|
- `docker-compose.yml`: App- und Datenbank-Container
|
|
|
|
## Start
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
docker compose up -d --build
|
|
```
|
|
|
|
Danach ist das Webfrontend lokal unter `http://127.0.0.1:8001` erreichbar.
|
|
Die Swagger-Oberflaeche liegt unter `http://127.0.0.1:8001/docs`.
|
|
API-Statusinfo findest du unter `http://127.0.0.1:8001/api`.
|
|
|
|
## Wichtige Umgebungsvariablen
|
|
|
|
- `TICKETMASTER_API_KEY`: Ticketmaster Discovery API
|
|
- `JAMBASE_API_KEY`: JamBase Data API Bearer Token
|
|
- `JAMBASE_USER_AGENT`: eigene App-Kennung fuer JamBase-Requests
|
|
- `JAMBASE_SYNC_INTERVAL_HOURS`: Mindestabstand fuer JamBase-API-Laeufe, Standard `72`; `0` deaktiviert die Bremse
|
|
- `BANDSINTOWN_APP_ID`: echte Bandsintown App-ID fuer Artist-Events
|
|
- `EVENTIM_ENABLED`: aktiviert den Eventim-Website-Provider
|
|
- `EVENTLENS_AUTH_USERNAME`, `EVENTLENS_AUTH_PASSWORD`: optionaler Passwortschutz fuer Webfrontend und API
|
|
- `NOTIFICATION_EMAIL_TO`: Empfaenger fuer Benachrichtigungen
|
|
- `SMTP_HOST`, `SMTP_USER`, `SMTP_PASS`: SMTP-Zugang fuer E-Mails
|
|
|
|
## Beispielablauf
|
|
|
|
1. Watch Item anlegen:
|
|
|
|
```bash
|
|
curl -X POST http://127.0.0.1:8001/watch-items \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"name": "AnnenMayKantereit",
|
|
"watch_type": "artist",
|
|
"region_scope": "hamburg"
|
|
}'
|
|
```
|
|
|
|
2. Sync manuell anstossen:
|
|
|
|
```bash
|
|
curl -X POST http://127.0.0.1:8001/sync
|
|
```
|
|
|
|
JamBase wird dabei nur abgefragt, wenn der letzte erfolgreiche JamBase-Lauf aelter als
|
|
`JAMBASE_SYNC_INTERVAL_HOURS` ist. Fuer einen sofortigen Provider-Lauf:
|
|
|
|
```bash
|
|
curl -X POST 'http://127.0.0.1:8001/sync?force_providers=true'
|
|
```
|
|
|
|
3. Events abfragen:
|
|
|
|
```bash
|
|
curl http://127.0.0.1:8001/events
|
|
```
|
|
|
|
4. Ticketkauf markieren:
|
|
|
|
```bash
|
|
curl -X PATCH http://127.0.0.1:8001/events/1/purchase \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"is_ticket_purchased": true}'
|
|
```
|
|
|
|
## Hinweise fuer Debian 13 und NGINX
|
|
|
|
- NGINX kann nativ auf dem Host laufen und auf `127.0.0.1:8001` proxyen.
|
|
- Das Backend lauscht absichtlich nur auf `127.0.0.1`, damit es nicht direkt aus dem Internet erreichbar ist.
|
|
- Fuer produktiven Betrieb solltest du TLS im NGINX-Terminator aktivieren.
|
|
- Setze `EVENTLENS_AUTH_USERNAME` und `EVENTLENS_AUTH_PASSWORD`, wenn Eventlens ueber NGINX, VPN oder Tunnel erreichbar ist.
|
|
- Das Frontend wird direkt vom FastAPI-Container ausgeliefert, es ist kein Node- oder Build-Container noetig.
|
|
|
|
## Backup und Restore
|
|
|
|
Ein komprimiertes Datenbank-Backup kannst du so erstellen:
|
|
|
|
```bash
|
|
cd /opt/eventlens
|
|
bash scripts/backup-db.sh
|
|
```
|
|
|
|
Die Datei landet standardmaessig unter `backups/`. Einen anderen Zielordner kannst du ueber `BACKUP_DIR` setzen:
|
|
|
|
```bash
|
|
BACKUP_DIR=/srv/backups/eventlens bash scripts/backup-db.sh
|
|
```
|
|
|
|
Restore-Beispiel:
|
|
|
|
```bash
|
|
gunzip -c backups/eventlens-eventlens-YYYYMMDD-HHMMSS.sql.gz | \
|
|
docker compose exec -T db mariadb -u"$DB_USER" -p"$DB_PASSWORD" "$DB_NAME"
|
|
```
|
|
|
|
## Bekannte Betriebsfalle
|
|
|
|
Wenn MariaDB bereits mit aelteren Zugangsdaten initialisiert wurde, reicht eine Aenderung in `.env` allein nicht aus. In dem Fall bleibt das Docker-Volume bestehen und der App-User in MariaDB hat noch das alte Passwort.
|
|
|
|
Zum Angleichen auf die aktuellen Werte aus `.env`:
|
|
|
|
```bash
|
|
cd /opt/eventlens
|
|
sudo bash scripts/fix-db-user.sh
|
|
```
|
|
|
|
Wenn dir die Datenbank egal ist und du komplett frisch starten willst:
|
|
|
|
```bash
|
|
cd /opt/eventlens
|
|
sudo docker compose down -v
|
|
sudo docker compose up -d --build
|
|
```
|
|
|
|
## Naechste sinnvolle Ausbaustufen
|
|
|
|
- Web-Frontend fuer Watchlist und Events
|
|
- Weitere Datenquellen neben Ticketmaster
|
|
- Telegram oder Push-Benachrichtigungen
|
|
- Nutzerverwaltung
|
|
|
|
## Provider-Hinweise
|
|
|
|
- Ticketmaster nutzt die offizielle Discovery API.
|
|
- JamBase nutzt die JamBase Data API ueber `https://api.data.jambase.com/v3/events` mit Bearer-Token und `User-Agent`.
|
|
- Bandsintown nutzt die offizielle Artist-Events-API und arbeitet deshalb vor allem fuer Watchlist-Eintraege vom Typ `artist`.
|
|
- Eventim nutzt eine beobachtete oeffentliche JSON-Web-API von eventim.de. Das ist keine offiziell dokumentierte Developer-API, aber stabiler als HTML-Scraping. Aenderungen an diesem Web-Endpoint koennen trotzdem Anpassungen noetig machen.
|
|
- Eventim kann serverseitig durch Eventim/Akamai geblockt werden. In dem Fall liefert `eventlens` bewusst keine falschen Treffer, sondern ueberspringt den Provider und schreibt einen Hinweis ins Backend-Log.
|
|
- Bandsintown benoetigt eine echte, von Bandsintown freigeschaltete App-ID. Ohne diese wird der Provider deaktiviert oder als `blocked` angezeigt.
|
|
- Barclays Arena wird ueber die offizielle Eventseite der Arena abgefragt.
|
|
- Fabrik wird ueber die offizielle Veranstaltungsseite der Fabrik Hamburg abgefragt.
|
|
- Fuer robuste persoenliche Ueberwachung koennen pro Watchlist-Eintrag direkte Quellen-URLs hinterlegt werden. Diese werden beim Sync gezielt per JSON-LD und HTML-Textscan durchsucht.
|