Relay 0.6.0: alles in een image, de app-map is leeg

Plan Eigenimage, fase 5, op keuze van de gebruiker: een image met de relay
erbij en geen tweede recept. agent.py, nginx.conf en index.html verhuizen
naar tools/evolu-relay/ naast src/; de Dockerfile blijft op node:24-slim en
haalt nginx en python3 uit apt. Drie containers uit een image: de relay als
node via de compose, de agent en nginx als root.

Anders dan alleen verplaatst: user www-data in nginx.conf (Debian heeft geen
gebruiker nginx), geen USER meer in de image, de versie in de kop via
api/status met RELAY_APP_VERSION. VERSION 0.6.0, manifest 0.6.0, drie keer
dezelfde tag in de compose, ongepind tot de eerste push.

Tests mee verhuisd; de vormtest toetst de drie tags tegen VERSION. Niet
gebouwd: er is hier geen Docker.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Harmen
2026-09-08 16:36:30 +02:00
co-authored by Claude Fable 5.1
parent 0e824a6354
commit a694a9cbd1
18 changed files with 327 additions and 177 deletions
+22
View File
@@ -19,6 +19,28 @@ De regel is: **verhoog je `VERSION`, dan verhoog je ook het manifest; andersom n
> geschreven uit de `releaseNotes` in het manifest en uit `PROGRESS.md` van het plan **Umbrelapp**. Ze zijn
> daarom korter dan de rest.
## 0.6.0 - 08-09-2026
**Nog niet gebouwd.** `VERSION` in `tools/evolu-relay/build.sh` staat op 0.6.0 en de compose verwijst
drie keer naar die tag zonder digest; die komt erbij zodra de gebruiker de image op de Umbrel gebouwd en
geduwd heeft. Tot die tijd is dit een versie in de repo en niet op het apparaat.
**Alles in één image.** Tot 0.5.6 zat alleen de relay in de eigen image en draaiden de agent en de pagina
als `*.template` op `python:3-alpine` en `nginx:alpine`. Nu zitten `agent.py`, `nginx.conf` en `index.html`
in dezelfde image als de relay, in `tools/evolu-relay/` naast `src/`. De basis blijft `node:24-slim` (om
`better-sqlite3`), met nginx en python3 uit apt erbij. Drie containers uit één image: de relay als
gebruiker `node` via de compose, de agent en nginx als root. Beslist door de gebruiker op 08-09-2026, na
dezelfde stap bij Electrum Gate; zie het plan **Eigenimage**, `PLAN.md` §8.
Wat er daardoor anders is dan alleen verplaatst:
- nginx draait als `www-data`, want Debian heeft geen gebruiker `nginx`;
- de pagina haalt de versie uit `api/status`; de agent krijgt hem als `RELAY_APP_VERSION` uit de compose.
umbreld vulde hem tot nu rechtstreeks in de pagina in;
- `icon.png` zit in de image en is daarmee updatebaar. Het blijft ook in de app-map, want het manifest
wijst ernaar;
- de app-map bevat nog `docker-compose.yml`, `umbrel-app.yml`, `icon.png` en `data/`.
## 0.5.6 - 07-09-2026
**Alleen de pagina, dus geen nieuwe image.** `VERSION` in `tools/evolu-relay/build.sh` blijft op 0.5.0.
+1 -1
View File
@@ -23,7 +23,7 @@
| Plan | App | Volgende stap | Status |
|-|-|-|-|
| [Eigenimage](Plannen/Actief/004-Eigenimage/TAKEN.md) | **beide** | **Electrum Gate draait sinds 08-09-2026 op zijn eigen image (0.1.0), gepind, herinstalleerd, app-datamap schoon.** De bouw slaagde in één keer en de pagina toont v0.1.0. Voor Gate is dit plan af. **Volgende stap: hetzelfde voor de agent en de pagina van Evolu Relay** (§8), die nog als `*.template` op `python:3-alpine` en `nginx:alpine` draaien. Eerste keuze daar: een tweede recept naast de relay-image, of één image met de relay erbij. Daarvóór: **fase 1 tot en met 3 gedaan op 07-09-2026.** Het recept staat in `tools/electrum-gate/` (Dockerfile, build.sh, entrypoint.sh en de vier voormalige templates), de app-map bevat alleen nog compose, manifest, icoon en `data/`, en de compose is voor het eerst zonder shellblok. Eén image voor beide containers, gebouwd op de Umbrel; open punt 2 en 3 zijn daarmee beslist. **Volgende stap is van de gebruiker en kan alleen op de Umbrel:** `sh tools/electrum-gate/build.sh`, duwen, de digest twee keer in de compose, committen, updaten, en dan de controles van fase 4. Reken op minstens één ronde, want de image is nog nooit gebouwd; de tests toetsen de tekst van het recept en niet het resultaat. **Daarna:** hetzelfde voor de agent en de pagina van Evolu Relay (§8), pas als de weg bij Gate bewezen is. Multi-arch en de anonieme pull horen bij **Publicatie-Gate** | 🔶 |
| [Eigenimage](Plannen/Actief/004-Eigenimage/TAKEN.md) | **beide** | **Evolu Relay 0.6.0 staat klaar in de repo (08-09-2026), ongebouwd: één image met relay, agent en pagina erin**, op keuze van de gebruiker. `tools/evolu-relay/` heeft nu naast `src/` ook `agent.py`, `nginx.conf` en `index.html`; de app-map bevat alleen nog compose, manifest, icoon en `data/`. **Volgende stap is van de gebruiker en kan alleen op de Umbrel:** `sh tools/evolu-relay/build.sh`, duwen, de digest drie keer in de compose, committen, updaten, en nakijken (v0.6.0 in de kop, een sync, de allowlist en labels intact). Eerste image met apt erin, dus reken op een ronde. **Daarna is dit plan voor beide apps af en gaat het naar `Archief/`.** Eerder vandaag: **Electrum Gate draait op zijn eigen image (0.1.0)**, gepind, herinstalleerd, app-datamap schoon; de bouw slaagde in één keer. Het recept staat in `tools/electrum-gate/` (Dockerfile, build.sh, entrypoint.sh en de vier voormalige templates), de app-map bevat alleen nog compose, manifest, icoon en `data/`, en de compose is voor het eerst zonder shellblok. Eén image voor beide containers, gebouwd op de Umbrel; open punt 2 en 3 zijn daarmee beslist. **Volgende stap is van de gebruiker en kan alleen op de Umbrel:** `sh tools/electrum-gate/build.sh`, duwen, de digest twee keer in de compose, committen, updaten, en dan de controles van fase 4. Reken op minstens één ronde, want de image is nog nooit gebouwd; de tests toetsen de tekst van het recept en niet het resultaat. **Daarna:** hetzelfde voor de agent en de pagina van Evolu Relay (§8), pas als de weg bij Gate bewezen is. Multi-arch en de anonieme pull horen bij **Publicatie-Gate** | 🔶 |
## B - Los oppakbaar (geen blokkade, geen vaste volgorde)
+3 -2
View File
@@ -24,8 +24,9 @@ De keten die eronder ligt, van achter naar voren:
zelf uitgeeft, en die is er precies één per app.
Stand op 08-09-2026: Electrum Gate draait op zijn eigen image sinds 0.1.0, gepind, en zijn twee vreemde
images zijn weg. Bij Evolu Relay staan `python:3-alpine` en `nginx:alpine` er nog voor de agent en de
pagina, en daarvoor geldt de regel hierboven onverkort.
images zijn weg. Evolu Relay heeft sinds 0.6.0 alles in zijn eigen image; de pin daarvan komt erbij bij de
eerste push. Daarmee is de keten hieronder afgelopen en is er per app precies één image om te pinnen. De
regel blijft staan voor wie er een vreemde image bij zet.
Twee dingen die dit níet zegt, want anders slaat het de andere kant op door:
@@ -3,6 +3,19 @@
> Chronologisch sessielog, nieuwste bovenaan. Kort: 3 tot 6 regels per entry. Wat er is gebeurd en
> waarom, niet wat er nog moet: dat staat in [TAKEN.md](TAKEN.md).
## 08-09-2026 (later) - Evolu Relay: alles in één image, in de repo klaar
Direct erna, op verzoek van de gebruiker en met zijn keuze: één image met de relay erbij, geen tweede
recept. De drie templates zijn met `git mv` naar `tools/evolu-relay/` gegaan, naast `src/`; de Dockerfile
blijft op `node:24-slim` (om `better-sqlite3`) en haalt nginx en python3 uit apt. Twee dingen die Debian
anders doet dan de nginx-image en die je moet kennen: geen gebruiker `nginx` (dus `www-data`), en geen
`USER` meer in de image, zodat de compose de relay met `user: node` laat draaien en de andere twee als root.
De versie in de kop loopt nu via `api/status`, zoals bij Gate. Versie 0.6.0 in manifest, `VERSION` en drie
keer in de compose, ongepind. Tests: alle zes groen, niets overgeslagen; de vormtest toetst de drie tags
tegen `VERSION`. In de voorbeeldpagina staat v0.6.0 in de kop. **Niet geverifieerd: de image**, en dit is
de eerste met apt erin. Bouwen is aan de gebruiker.
## 08-09-2026 - gebouwd, gepind, geïnstalleerd: Gate draait op zijn eigen image
De gebruiker bouwde en duwde de image op de Umbrel; de bouw slaagde in één keer, dus de zorg over `apk add
+23 -8
View File
@@ -29,9 +29,10 @@
mutatie-getest; details in [PROGRESS.md](PROGRESS.md)
- [x] **Fase 4 gedaan (08-09-2026): gebouwd, geduwd, gepind, geüpdatet, herinstalleerd.** Electrum Gate
draait op zijn eigen image en de app-datamap is schoon. Voor Gate is dit plan klaar
- [ ] **Volgende stap: hetzelfde voor de agent en de pagina van Evolu Relay.** Zie "Daarna" onderaan. De
weg is nu bij Gate bewezen, dus dit kan zonder onbekenden: `tools/evolu-relay/` krijgt naast de
relay-image een tweede recept, of één image met de relay erbij; dat is de eerste keuze om te maken
- [x] **Evolu Relay in de repo gedaan (08-09-2026), als 0.6.0:** één image met de relay erbij, zie fase 5
- [ ] **Volgende stap: de Relay-image bouwen, duwen, pinnen en updaten.** Van de gebruiker; zie fase 5.
Daarna is dit plan voor beide apps af en gaat het naar `Archief/`; wat overblijft (multi-arch,
anonieme pull per verhoging) hoort bij **Publicatie-Gate** en **Publicatie-Relay**
- [x] **Open punt 1 beantwoord (27-08-2026): voor nu Gitea, bij inlevering opnieuw kijken.** Daarmee is de
enige vraag weg die vóór het bouwen beantwoord moest zijn. Zie [OPEN.md](OPEN.md)
@@ -94,12 +95,26 @@
- [x] **`icon.png` is hiermee updatebaar**, want die zit in de image. Dat was de enige echte uitzondering
op "alles komt al aan bij een update"; zie [PLAN.md](PLAN.md) §1
## Daarna - Evolu Relay
## Fase 5 - Evolu Relay
- [ ] **Hetzelfde voor de agent en de pagina van Evolu Relay**, die nog als `*.template` op
`python:3-alpine` en `nginx:alpine` draaien; zie [PLAN.md](PLAN.md) §8. Pas na fase 4 hierboven:
eerst zien dat de weg werkt voordat de tweede app hem gaat
- [x] **Beslist (08-09-2026, gebruiker): één image met de relay erbij**, geen tweede recept. Basis blijft
`node:24-slim` om `better-sqlite3`; nginx en python3 komen uit apt
- [x] **Agent, nginx-config en pagina naar `tools/evolu-relay/`** met `git mv`, zonder `.template`.
Dockerfile en build.sh herschreven; bouwcontext is de repo-root, zoals bij Gate. `VERSION` 0.6.0,
manifest 0.6.0, drie keer dezelfde tag in de compose, ongepind tot de eerste push
- [x] **Wat er anders is dan verplaatst:** `user www-data;` in nginx.conf (Debian heeft geen gebruiker
nginx), `user: node` op de relay-service in de compose (de image heeft geen `USER` meer), de versie
via `api/status` met `RELAY_APP_VERSION`, en `PYTHONUNBUFFERED` als `ENV` in de image
- [x] Tests mee: `test_relay_agent.py` laadt `tools/evolu-relay/agent.py`; de vormtest toetst de drie
tags tegen `VERSION`; de paginatest en `voorbeeldpagina.mjs` vinden de pagina zelf
- [ ] **Bouwen, duwen, pinnen, updaten, nakijken.** Van de gebruiker, op de Umbrel:
`sh tools/evolu-relay/build.sh`, dan de digest **drie keer** in de compose. Nakijken: de pagina met
v0.6.0 in de kop, een sync vanuit Trezor Suite, en of `owners.json` en de labels de update overleefd
hebben (die staan onder `data/relay` en zijn niet aangeraakt). **Eerste keer voor deze image met
apt erin**, dus reken op een ronde: of `nginx` uit Debian zonder `www-data`-verrassingen start, en of
de relay als `node` nog in `data/relay` kan schrijven nu de map niet meer door de image aangemaakt
wordt
## Geblokkeerd / wacht op
Niets. Het Relay-deel kan beginnen; bouwen blijft werk van de gebruiker op de Umbrel.
De laatste stap van fase 5 wacht op de gebruiker: bouwen kan alleen op de Umbrel.
+8 -4
View File
@@ -262,10 +262,14 @@ tonen, maar drie klassen fouten hoeven niet op het apparaat gevonden te worden:
- [x] **De Postgres-pin is vervallen (28-08-2026):** die database zit niet meer in de app
- [x] **De statuspagina verbeteren, op een lijst van de gebruiker.** De lijst kwam op 30-08-2026 en is in
één ronde uitgevoerd; zie fase 6 hieronder
- [ ] **`python:3-alpine` en `nginx:alpine` pinnen op hun multi-arch index-digest. WACHT OP het plan
Eigenimage; doe dit niet eerder.** Op aanwijzing van de gebruiker (30-08-2026): die twee images zijn
de plek waar de agent en de pagina van deze app uitgevoerd worden, en dat is precies wat **Eigenimage**
naar een eigen image verhuist. Pin je ze nu, dan pin je iets dat verdwijnt.
- [x] **`python:3-alpine` en `nginx:alpine` pinnen: vervallen (08-09-2026).** Sinds 0.6.0 zitten de agent
en de pagina in de eigen relay-image (plan **Eigenimage**, fase 5), en die twee images staan niet
meer in de compose. Wat er te pinnen is, is de eigen image, en dat gebeurt bij elke verhoging. De
oude tekst hieronder blijft staan als uitleg waarom er tot dan bewust níet gepind is.
Op aanwijzing van de gebruiker (30-08-2026): die twee images waren
de plek waar de agent en de pagina van deze app uitgevoerd werden, en dat is precies wat **Eigenimage**
naar een eigen image verhuisde. Pin je ze dan, dan pin je iets dat verdwijnt.
De eis komt uit **Publicatie-Relay** en die is nog ver weg, dus er is geen haast. De regel en de hele
keten erachter staan in [KNOWLEDGE.md](../../../KNOWLEDGE.md); de commando's in