add launcher

This commit is contained in:
2026-09-13 01:57:46 +02:00
parent 2e1701c442
commit 682c0f4971
6 changed files with 2165 additions and 209 deletions
+44 -1
View File
@@ -3,5 +3,48 @@
das komplette serverjonas search
- `crawler.py` – PostgreSQL-Crawler, baut den Suchindex auf
- `launcher.py` – startet/überwacht den Crawler und rollt Updates aus (siehe unten)
- `search/` – Suchmaschine darüber (CLI + HTTP-API), siehe [search/README.md](search/README.md)
- `web/` – Statistik-Webseite
- `web/` – Statistik-Webseite
## Rolling Updates (Generation-Mechanismus)
Zentrale Tabelle (eine Zeile, `id = 1`):
```sql
CREATE TABLE IF NOT EXISTS deployment_state (
id INTEGER PRIMARY KEY,
generation BIGINT NOT NULL,
required_version INTEGER NOT NULL
);
```
**Ablauf:**
1. Einmalig initialisieren: `python3 crawler.py --init-deployment`
2. Launcher starten: `python3 launcher.py` (startet + überwacht den Crawler)
3. Neue Version verteilen:
- Neue `crawler.py` mit erhöhter `JONASSEARCH_CRAWLER_VERSION` bereitstellen
(Update-Quelle im `.env` setzen oder Datei nach `releases/<VERSION>/crawler.py` legen)
- `python3 launcher.py --check-update`
→ neue Version wird gestaget → geprüft (`--self-update`) → aktiviert
→ **erst dann** wird die Generation in PostgreSQL erhöht (`--update-deployment`)
4. Alle laufenden alten Crawler merken das beim nächsten sicheren Punkt
(vor jedem relevanten Commit bzw. spätestens nach
`JONASSEARCH_UPDATE_CHECK_SECONDS` im Hintergrund-Check),
rollen ihre offene Transaktion sauber zurück und beenden sich mit
**Exit-Code 42** – nie mitten in einer Transaktion, kein hartes Killen.
5. Der jeweilige Launcher erkennt 42 und startet die bereits bereitgestellte
neue Version, die die neue Generation beim Start liest.
Exit-Codes des Crawlers: `0` = normal beendet, `1` = Fehler/Crash,
`42` = ausschließlich „Update erforderlich".
Nützliche Befehle:
```bash
python3 crawler.py --version # installierte Version
python3 launcher.py --status # Generation + Versionen anzeigen
python3 crawler.py --self-update 2 # gestagte Release prüfen (ohne zu aktivieren)
python3 crawler.py --update-deployment 2 # Generation+1 und required_version=2 setzen
```