Files
UmbrelApps/Docs/Plannen/Actief/004-Eigenimage/TAKEN.md
T
HarmenandClaude Fable 5.1 a694a9cbd1 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>
2026-09-08 16:36:30 +02:00

121 lines
8.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Taken - Eigenimage
> Prioriteit: **A** | Wacht op:
>
> **Gepromoveerd van masterplan naar `Actief/` op 27-08-2026**, direct na het afronden van
> **Webinterface**. Dat was de volgorde die de gebruiker die dag afsprak, en de reden staat in
> [PLAN.md](PLAN.md) §9: een eigen image maakt van elke paginawijziging een bouwronde, en dat had het
> werk aan de webinterface geremd. Dat werk is nu klaar.
>
> **Het register is beslist (27-08-2026): Gitea, net als bij Evolu Relay.** Bij inlevering wordt het
> opnieuw bekeken, en dat is dan een taak van **Publicatie-Gate**. De gebruiker is uitdrukkelijk nog niet
> toe aan publiceren: dit is voorlopig zijn eigen app voor eigen gebruik. Zie [OPEN.md](OPEN.md) punt 1,
> inclusief het ene ding dat daar nog uitgezocht moet worden.
>
> **En lees §1 van het plan.** Het argument dat voor de hand ligt, "dan komen wijzigingen eindelijk aan bij
> een bestaande installatie", geldt hier níet: alle code staat in een `*.template` en die staan in de
> update-whitelist. Wat dit plan wél oplevert, staat in §3.
## Volgende stap
> **Opgepakt op 07-09-2026 op verzoek van de gebruiker.** Fase 1 tot en met 3 zijn in één sessie gedaan
> en gecommit als Electrum Gate 0.1.0. **Op 08-09-2026 is de image op de Umbrel gebouwd, geduwd, gepind
> en geïnstalleerd**; de bouw slaagde in één keer en de app draait. Voor Electrum Gate is dit plan af.
> Wat overblijft is Evolu Relay (§8 van het plan) en, voor **Publicatie-Gate**, multi-arch.
- [x] **Fase 1 tot en met 3 gedaan (07-09-2026), als 0.1.0.** De vier `*.template`-bestanden staan nu in
`tools/electrum-gate/` zonder de extensie, plus `Dockerfile`, `build.sh` en `entrypoint.sh`. De
compose gebruikt één image voor beide containers, ongepind tot de eerste push. Tests aangepast en
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
- [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)
## Fase 1 - Het bouwrecept
- [x] Beslissen: één image of twee (open punt 2). **Eén**, zoals [PLAN.md](PLAN.md) §6 voorstelt; beslist
07-09-2026, zie [OPEN.md](OPEN.md)
- [x] Beslissen: waar wordt gebouwd (open punt 3). **Op de Umbrel**, want dat is de enige machine met
Docker; de werkplek heeft het niet. Zie [OPEN.md](OPEN.md)
- [x] `tools/electrum-gate/Dockerfile`: `nginx:1.30-alpine` plus `python3` uit apk, de vijf bestanden
erin, `ENTRYPOINT []` zodat het envsubst-script van de nginx-image niet meedraait. De bouwcontext is
de repo-root, want `icon.png` blijft in de app-map (het manifest wijst ernaar) en wordt van daar
gekopieerd; `.dockerignore` in de root houdt de context klein
- [x] `tools/electrum-gate/build.sh` naar het voorbeeld van Evolu Relay: `VERSION`, controles vooraf
(ontbrekende bestanden, een `${` die niemand meer invult), bouwen, en de vervolgstappen afdrukken
- [ ] **Multi-arch bouwen, en dat is nieuw werk.** `build.sh` heeft er een schakelaar voor:
`PLATFORMS="linux/amd64,linux/arm64"` bouwt met `buildx` en duwt meteen. Nog nooit geprobeerd, en
niet nodig voor eigen gebruik op een amd64-Umbrel. Hoort bij **Publicatie-Gate**; zie
[PLAN.md](PLAN.md) §4
- [x] **Anoniem te halen, gecontroleerd 08-09-2026.** Na `docker logout` gaf `docker pull` dezelfde digest
terug als de push. umbreld krijgt geen inloggegevens mee, dus dit was de laatste voorwaarde voor de
update
## Fase 2 - Het `command`-blok wordt een script
- [x] `tools/electrum-gate/entrypoint.sh`, uit het `command`-blok van de compose. Zelfde gedrag, geen
`$$` meer, en het `log_format` staat nu gewoon in `stream.conf` in plaats van in een los bestand dat
het script wegschreef. Nieuw erin: het invullen van het backend-adres in het stream-blok (zie fase 3)
- [x] Wat niet mocht sneuvelen en er staat: de sessieteller uit `/proc/net/tcp`, de herlaadlus met zijn
vangnettak, en `exec nginx` als laatste regel. Alle drie met een toets in
`test_server_start_zonder_certificaat.py`, en die zijn gezien te falen
## Fase 3 - De app-map opschonen
- [x] De vier templates uit de app-map, met `git mv` naar `tools/electrum-gate/` zonder `.template`
- [x] **`index.html` heeft geen template-invulling meer.** `${APP_VERSION}` en het backend-adres komen uit
`status.json`: de agent krijgt `GATE_APP_VERSION: ${APP_VERSION}` uit de compose en zet `version` in
de status; het adres stond er al als `backend.address`
- [x] **`stream.conf` heeft geen template-invulling meer.** Twee plaatshouders zonder dollarteken,
`__GATE_ELECTRUM_HOST__` en `__GATE_ELECTRUM_PORT__`, die `entrypoint.sh` uit de omgeving invult;
de server-service krijgt daarvoor dezelfde twee variabelen als de agent
- [x] De compose houdt zijn `environment`-blok; de mounts van de vijf losse bestanden zijn eruit
- [x] Wat er in de app-map overblijft: `docker-compose.yml`, `umbrel-app.yml`, `icon.png` en `data/` met
zijn twee `.gitkeep`-bestanden. Precies wat [PLAN.md](PLAN.md) §6 zei
- [x] De tests mee verhuisd: `test_agent_certificates.py` laadt `tools/electrum-gate/agent.py`;
`test_server_start_zonder_certificaat.py` toetst `entrypoint.sh` en de Dockerfile in plaats van het
`command`-blok, plus dat de tag in de compose `VERSION` uit `build.sh` is; `test_appstore_vorm.py`
leest ook de nginx-config onder `tools/` en toetst tag gelijk aan `VERSION` voor élke eigen image;
`test_paginas_parsen.mjs` en `tools/voorbeeldpagina.mjs` vinden een pagina op beide plekken
## Fase 4 - Uitrollen en verifiëren
- [x] Image gebouwd en geduwd op de Umbrel (08-09-2026) en gepind als `0.1.0@sha256:97fee09b…7cfd8f`,
twee keer in de compose. `version` stond al op 0.1.0
- [x] Op de Umbrel geüpdatet en daarna ook gedeïnstalleerd en opnieuw geïnstalleerd (08-09-2026), zodat
de app-datamap geen oude templates meer bevat. De gebruiker meldt dat alles werkt; welke van de vijf
controles hij precies deed staat niet vast, de pagina en de versie zijn gezien
- [x] **De versie in de kop van de pagina** toont v0.1.0, dus de weg via `status.json` werkt
- [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
## Fase 5 - Evolu Relay
- [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
De laatste stap van fase 5 wacht op de gebruiker: bouwen kan alleen op de Umbrel.