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>
8.5 KiB
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 §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 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
*.templateen 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.
-
Fase 1 tot en met 3 gedaan (07-09-2026), als 0.1.0. De vier
*.template-bestanden staan nu intools/electrum-gate/zonder de extensie, plusDockerfile,build.shenentrypoint.sh. De compose gebruikt één image voor beide containers, ongepind tot de eerste push. Tests aangepast en mutatie-getest; details in PROGRESS.md -
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
-
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 -
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
Fase 1 - Het bouwrecept
- Beslissen: één image of twee (open punt 2). Eén, zoals PLAN.md §6 voorstelt; beslist 07-09-2026, zie OPEN.md
- 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
tools/electrum-gate/Dockerfile:nginx:1.30-alpinepluspython3uit apk, de vijf bestanden erin,ENTRYPOINT []zodat het envsubst-script van de nginx-image niet meedraait. De bouwcontext is de repo-root, wanticon.pngblijft in de app-map (het manifest wijst ernaar) en wordt van daar gekopieerd;.dockerignorein de root houdt de context kleintools/electrum-gate/build.shnaar 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.shheeft er een schakelaar voor:PLATFORMS="linux/amd64,linux/arm64"bouwt metbuildxen duwt meteen. Nog nooit geprobeerd, en niet nodig voor eigen gebruik op een amd64-Umbrel. Hoort bij Publicatie-Gate; zie PLAN.md §4 - Anoniem te halen, gecontroleerd 08-09-2026. Na
docker logoutgafdocker pulldezelfde 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
tools/electrum-gate/entrypoint.sh, uit hetcommand-blok van de compose. Zelfde gedrag, geen$$meer, en hetlog_formatstaat nu gewoon instream.confin 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)- Wat niet mocht sneuvelen en er staat: de sessieteller uit
/proc/net/tcp, de herlaadlus met zijn vangnettak, enexec nginxals laatste regel. Alle drie met een toets intest_server_start_zonder_certificaat.py, en die zijn gezien te falen
Fase 3 - De app-map opschonen
- De vier templates uit de app-map, met
git mvnaartools/electrum-gate/zonder.template index.htmlheeft geen template-invulling meer.${APP_VERSION}en het backend-adres komen uitstatus.json: de agent krijgtGATE_APP_VERSION: ${APP_VERSION}uit de compose en zetversionin de status; het adres stond er al alsbackend.addressstream.confheeft geen template-invulling meer. Twee plaatshouders zonder dollarteken,__GATE_ELECTRUM_HOST__en__GATE_ELECTRUM_PORT__, dieentrypoint.shuit de omgeving invult; de server-service krijgt daarvoor dezelfde twee variabelen als de agent- De compose houdt zijn
environment-blok; de mounts van de vijf losse bestanden zijn eruit - Wat er in de app-map overblijft:
docker-compose.yml,umbrel-app.yml,icon.pngendata/met zijn twee.gitkeep-bestanden. Precies wat PLAN.md §6 zei - De tests mee verhuisd:
test_agent_certificates.pylaadttools/electrum-gate/agent.py;test_server_start_zonder_certificaat.pytoetstentrypoint.shen de Dockerfile in plaats van hetcommand-blok, plus dat de tag in de composeVERSIONuitbuild.shis;test_appstore_vorm.pyleest ook de nginx-config ondertools/en toetst tag gelijk aanVERSIONvoor élke eigen image;test_paginas_parsen.mjsentools/voorbeeldpagina.mjsvinden een pagina op beide plekken
Fase 4 - Uitrollen en verifiëren
- Image gebouwd en geduwd op de Umbrel (08-09-2026) en gepind als
0.1.0@sha256:97fee09b…7cfd8f, twee keer in de compose.versionstond al op 0.1.0 - 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
- De versie in de kop van de pagina toont v0.1.0, dus de weg via
status.jsonwerkt icon.pngis 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 §1
Fase 5 - Evolu Relay
- Beslist (08-09-2026, gebruiker): één image met de relay erbij, geen tweede recept. Basis blijft
node:24-slimombetter-sqlite3; nginx en python3 komen uit apt - Agent, nginx-config en pagina naar
tools/evolu-relay/metgit mv, zonder.template. Dockerfile en build.sh herschreven; bouwcontext is de repo-root, zoals bij Gate.VERSION0.6.0, manifest 0.6.0, drie keer dezelfde tag in de compose, ongepind tot de eerste push - Wat er anders is dan verplaatst:
user www-data;in nginx.conf (Debian heeft geen gebruiker nginx),user: nodeop de relay-service in de compose (de image heeft geenUSERmeer), de versie viaapi/statusmetRELAY_APP_VERSION, enPYTHONUNBUFFEREDalsENVin de image - Tests mee:
test_relay_agent.pylaadttools/evolu-relay/agent.py; de vormtest toetst de drie tags tegenVERSION; de paginatest envoorbeeldpagina.mjsvinden 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 ofowners.jsonen de labels de update overleefd hebben (die staan onderdata/relayen zijn niet aangeraakt). Eerste keer voor deze image met apt erin, dus reken op een ronde: ofnginxuit Debian zonderwww-data-verrassingen start, en of de relay alsnodenog indata/relaykan 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.