README: Update-Ablauf, readarchive und common/ dokumentiert
Der README beschrieb bisher nur die Erstinstallation. Neu: - Abschnitt "Update eines laufenden Stacks" mit der Reihenfolge Rollback sichern, Compose angleichen, nur den geaenderten Container ziehen, verifizieren. Inklusive der beiden Fallen: der Volume-Pfad von readin hat sich auf /opt/app/readin/data geaendert, und ein Mount auf /etc/influxdb2 fuehrt zu Datenverlust. - readarchive in der Container-Liste, mit Parametern und Aufruf ueber das Profil tools. - common/ unter den Sourcen, mit dem Hinweis, dass eine Aenderung dort beide Container betrifft. - deploy.sh: Tag mitgeben, sonst gibt es keinen Weg zurueck. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -72,6 +72,13 @@ Das Logfile kann via **tail -f log/noise.log** im Verzeichnise **noisesensors**
|
||||
* **readin**
|
||||
Über diesen Container werden alle 5 min. die aktuellen Daten von *sensor.community* abgeholt und in den beiden Datenbanken gespeichert
|
||||
|
||||
* **readarchive**
|
||||
Gegenstück zu *readin*: liest rückwirkend die Tagesdateien von *archive.sensor.community* ein, um Lücken zu füllen. Kein Dauerdienst, sondern ein Lauf mit Parametern — deshalb hängt er im Compose am Profil `tools` und wird von `docker compose up` nicht mitgestartet:
|
||||
~~~
|
||||
docker compose run --rm readarchive -t noise -s 2026-07-22 -e 2026-07-23 -d influx
|
||||
~~~
|
||||
Parameter: `-s` Startdatum, `-e` Enddatum (**exklusiv**), `-t` Sensortyp, `-d` Ziel (`mongo`, `influx` oder `both`). Ohne Argumente gilt der Default `-t noise` für den Vortag. Ein Tag dauert etwa zwei Minuten. Schlägt ein Influx-Write fehl, werden die betroffenen Sensoren am Ende aufgelistet und der Exit-Code ist ≠ 0.
|
||||
|
||||
* **logrotate**
|
||||
Mit Hilfe dieses Containers werde die Log-Files im Unterverzeichnis *log* täglich rotiert. Es werden 7 Versionen behalten, ältere gelöscht.
|
||||
|
||||
@@ -99,12 +106,75 @@ Logindaten: Entsprechen der im Portainer hinterlegten.
|
||||
|
||||
## Sourcen für die Container
|
||||
|
||||
Das gesamte Projekt ist im GitHub unter **laermsensor-stack** abgelegt. Für jeden der 3 Container existiert darunter ein Verzeichnis:
|
||||
**readin**, **sensorapi** und **noise**. In diesen Verzeichnisse sind alle benötigten Sourcen enthalten.
|
||||
Das gesamte Projekt ist im GitHub unter **laermsensor-stack** abgelegt. Für jeden der 4 Container existiert darunter ein Verzeichnis:
|
||||
**readin**, **readarchive**, **sensorapi** und **noise**. In diesen Verzeichnissen sind alle benötigten Sourcen enthalten.
|
||||
|
||||
Sollte was geändert werden, so muss mit **deploy.sh** der Container neu erzeugt und auf die Registry (siehe oben) gepushed werden.
|
||||
Daneben gibt es **common** mit den Modulen, die sich *readin* und *readarchive* teilen: `mongo.js`, `influx_post.js`, `logit.js` und `statistics.js`. Sie lagen früher in beiden Komponenten doppelt und sind auseinandergelaufen. Wer dort etwas ändert, ändert es für beide — nach einer Änderung also **beide** Container neu bauen.
|
||||
|
||||
Das vierte hier liegende Verzeichnis **noisesensors** ist nur dummy, es spiegelt die Dateistruktur für das aktuelle Stack ab, wie oben beschrieben (wird mit Hilfe von **noise.tgz** erzeugt).
|
||||
Sollte was geändert werden, so muss mit **deploy.sh** der Container neu erzeugt und auf die Registry (siehe oben) gepushed werden. Der Build-Kontext von *readin* und *readarchive* ist wegen `common/` das Wurzelverzeichnis des Repositories; `deploy.sh` wechselt selbst dorthin und kann aus dem Komponentenverzeichnis aufgerufen werden.
|
||||
|
||||
`deploy.sh` nimmt optional ein Tag als Argument:
|
||||
~~~
|
||||
./deploy.sh # nur :latest
|
||||
./deploy.sh 2026-08-01 # :2026-08-01 und zusätzlich :latest
|
||||
~~~
|
||||
**Ein Tag mitgeben.** Wird nur `latest` gepusht, überschreibt jeder Build den vorherigen Stand und es gibt keinen Weg zurück (siehe *Update eines laufenden Stacks*).
|
||||
|
||||
Das Verzeichnis **noisesensors** ist nur dummy, es spiegelt die Dateistruktur für das aktuelle Stack ab, wie oben beschrieben (wird mit Hilfe von **noise.tgz** erzeugt).
|
||||
|
||||
## Update eines laufenden Stacks
|
||||
|
||||
Betrifft eine Installation, die bereits läuft und auf einen neueren Stand gebracht werden soll.
|
||||
|
||||
### 1. Rollback-Möglichkeit sicherstellen
|
||||
|
||||
**Vor allem anderen.** Zeigt in der Registry nur `latest` auf das Image, existiert der laufende Stand nach dem Pull nirgends mehr. Prüfen, welche Tags es gibt:
|
||||
|
||||
~~~
|
||||
curl -H "Authorization: Basic <auth aus ~/.docker/config.json>" \
|
||||
https://docker.citysensor.de/v2/readin/tags/list
|
||||
~~~
|
||||
|
||||
Fehlt ein benanntes Tag für den laufenden Stand, ihn zuerst benennen und pushen. Das alte Image findet sich auf dem Build-Rechner meist noch unbenannt (`docker images | grep readin`):
|
||||
|
||||
~~~
|
||||
docker tag <alte-image-id> docker.citysensor.de/readin:<datum-alt>
|
||||
docker push docker.citysensor.de/readin:<datum-alt>
|
||||
~~~
|
||||
|
||||
### 2. docker-compose.yml im Portainer angleichen
|
||||
|
||||
Den Stand aus `noisesensors/docker-compose.yml` dieses Repositories übernehmen. Zu beachten:
|
||||
|
||||
* **Zwingend** bei einem Update von einem Stand vor August 2026: das Volume von *readin* muss auf `/opt/app/readin/data` zeigen, nicht mehr auf `/opt/app/data`. Das Layout im Image spiegelt seit der Einführung von `common/` das Repository. Bleibt der alte Pfad stehen, schreibt readin `aktdata.json` in die Container-Schicht statt auf den Host.
|
||||
* Optional der Service **readarchive** mit `profiles: ["tools"]`.
|
||||
* **Nicht** aufnehmen: ein Mount auf `/etc/influxdb2`. Das Entrypoint von influxdb legt dort beim Setup das CLI-Profil `default` an. Ist bereits eines vorhanden, scheitert der Setup — und das Entrypoint löscht daraufhin `influxd.bolt` und `engine/` im Datenverzeichnis und startet neu. Weil der Mount das Aufräumen überlebt, wiederholt sich das endlos und der Datenbestand ist bei jeder Runde weg.
|
||||
|
||||
### 3. Nur den geänderten Container ziehen
|
||||
|
||||
Nicht den ganzen Stack neu starten — Mongo und Influx bleiben unangetastet:
|
||||
|
||||
~~~
|
||||
docker compose pull readin
|
||||
docker compose up -d readin
|
||||
~~~
|
||||
|
||||
Im Portainer entspricht das dem Aktualisieren des Stacks mit *Re-pull image and redeploy*.
|
||||
|
||||
### 4. Verifizieren
|
||||
|
||||
Der nächste Lauf kommt binnen fünf Minuten:
|
||||
|
||||
~~~
|
||||
tail -20 <LOCALDIR>/noisesensors/log/readin.log
|
||||
ls -l <LOCALDIR>/noisesensors/data/aktdata.json
|
||||
~~~
|
||||
|
||||
Erwartet werden `Influx-Write-Time` und `Program end` sowie ein frischer Zeitstempel an `aktdata.json` — letzterer belegt, dass der Volume-Pfad stimmt.
|
||||
|
||||
### 5. Rollback
|
||||
|
||||
Image-Tag im Stack auf den in Schritt 1 gesicherten Stand setzen, die Volume-Zeile auf den alten Pfad zurückdrehen, redeploy.
|
||||
|
||||
## Versionen
|
||||
|
||||
@@ -112,6 +182,7 @@ Das vierte hier liegende Verzeichnis **noisesensors** ist nur dummy, es spiegelt
|
||||
---- | ---- | ----
|
||||
1.0.0 | 2023-11-30 |
|
||||
2.0.0 | 2026-07-25 | Anpassung an Stack-Änderungen
|
||||
2.1.0 | 2026-08-01 | readarchive dazu, gemeinsame Module unter common/, Zeitstempel in UTC
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user