Alle apps van umbrelOS delen een Docker-netwerk, dus een servicenaam als 'agent' is daar niet uniek. Electrum Gate heeft er een op poort 8000 en Evolu Relay sinds vandaag ook, en Docker verdeelde de naam netjes over allebei. Gemeten op het apparaat: van tien verzoeken vanuit de nginx-container kwamen er vijf bij de verkeerde app uit, met een 404 tot gevolg. Op de statuspagina zag dat eruit als een status die wisselde tussen "running" en "agent unreachable". Dit raakte twee apps, en de tweede is de vervelende: de pagina van Electrum Gate proxyde ook naar http://agent:8000 en werkte alleen omdat die app tot vandaag de enige met die naam was. Het installeren van Evolu Relay heeft die pagina dus kapotgemaakt. Beide gaan nu naar <app-id>_agent_1, en beide manifesten gaan omhoog, want zonder verhoging bereikt een gewijzigde template geen bestaande installatie. Dezelfde les stond al in de compose van Electrum Gate, over de servicenaam 'server', en die is bij het schrijven van de nginx-config genegeerd. Daarom nu een toets erop: test_appstore_vorm controleert voor elke app dat een proxy_pass en elke *_HOST-variabele een naam gebruiken die met het app-id begint. Muteertest gedaan, de toets viel om op precies de korte naam. Bijgewerkt in build.sh: VERSION daar is het etiket op de image, en `version` in het manifest is een ander nummer dat erop vooruit mag lopen. Ze lopen uiteen zodra er een reparatie in de app-map zit zonder dat de image wijzigt, en dat is nu het geval. Tests: alle vier groen (34, 54, 39 en 60 goed, 0 fout). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
90 lines
4.8 KiB
Bash
90 lines
4.8 KiB
Bash
#!/bin/sh
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
# Bouwt de image voor de app whatsnext-evolu-relay.
|
|
#
|
|
# Wat er gebouwd wordt is ONS programma: `src/index.js` roept `createRelay` uit
|
|
# `@evolu/nodejs` aan met onze eigen toegangscontrole erin. De relay zelf komt
|
|
# gewoon uit npm en wordt niet nagebouwd of aangepast.
|
|
#
|
|
# Dit verving op 28-08-2026 het vorige recept, dat de repo van Trezor kloonde en
|
|
# hun Dockerfile bouwde. Dat pakket had een Postgres en een quota-manager nodig en
|
|
# kon als zelf-gehoste relay in de kern niet werken; zie het plan Umbrelapp,
|
|
# OPEN.md punt 6.
|
|
#
|
|
# Waarom dit NIET in de app-map staat: umbreld kopieert de hele app-map naar het
|
|
# apparaat, en bij een update wordt alleen een whitelist ververst waar een
|
|
# Dockerfile niet in zit. Bouwen tijdens het starten van de app zou de installatie
|
|
# bovendien minuten laten hangen. Het recept hoort dus in de repo en het resultaat
|
|
# in een register; de app verwijst alleen naar de tag.
|
|
#
|
|
# Draaien: sh build.sh
|
|
# Vereist: docker op de machine waar je bouwt. Git is niet meer nodig.
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
|
|
set -eu
|
|
|
|
# ── De pin ────────────────────────────────────────────────────────────────────
|
|
# De versies van `@evolu/common` en `@evolu/nodejs` staan exact in package.json en
|
|
# zijn dáár de pin. Hier staat alleen het etiket op de uitkomst.
|
|
#
|
|
# Dit is het etiket op de IMAGE. Verhoog het als de image verandert, dus als er
|
|
# iets in src/, package.json of de Dockerfile wijzigt, en zet dan dezelfde waarde
|
|
# achter `image:` in de compose.
|
|
#
|
|
# `version` in umbrel-app.yml is een ander nummer en mag hierop vooruitlopen: dat
|
|
# moet bij élke wijziging aan de app omhoog, ook als alleen een template
|
|
# verandert, want anders rolt umbrelOS hem niet uit. Dat heeft hier een keer een
|
|
# dag gekost. Ze zijn dus gelijk zolang alleen de image wijzigt, en lopen uiteen
|
|
# zodra er een reparatie in de app-map zit.
|
|
VERSION="0.2.0"
|
|
|
|
# Het register staat er expres in en dit is geen smaakkwestie: umbreld haalt élke
|
|
# image op via de Docker Engine API, dus een tag die alleen lokaal bestaat is voor
|
|
# hem onbereikbaar en de installatie faalt met "pull access denied". Dat is op
|
|
# 25-08-2026 op het apparaat vastgesteld. Zie Umbrel-appstore-spec.md.
|
|
IMAGE="sc.kamenier-hamer.nl/sysop/evolu-relay:${VERSION}"
|
|
|
|
RECEPT="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)"
|
|
|
|
# ── Controles vooraf ──────────────────────────────────────────────────────────
|
|
# Beter hier hard falen dan een image bouwen die iets anders bevat dan je denkt.
|
|
|
|
if [ ! -f "${RECEPT}/package.json" ] || [ ! -f "${RECEPT}/src/index.js" ]; then
|
|
echo "FOUT: package.json of src/index.js ontbreekt in ${RECEPT}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f "${RECEPT}/package-lock.json" ]; then
|
|
echo "LET OP: er is geen package-lock.json, dus npm kiest zelf de onderliggende"
|
|
echo " afhankelijkheden. De twee pakketten van Evolu staan exact vast in"
|
|
echo " package.json, maar wat daaronder hangt kan meebewegen. Draai eenmalig"
|
|
echo " 'npm install' in deze map, commit het lock-bestand, en zet dan in de"
|
|
echo " Dockerfile 'npm install' om naar 'npm ci'."
|
|
echo
|
|
fi
|
|
|
|
# ── Bouwen ────────────────────────────────────────────────────────────────────
|
|
|
|
echo "Bouwen als ${IMAGE}"
|
|
docker build --tag "$IMAGE" "$RECEPT"
|
|
|
|
echo
|
|
echo "Klaar:"
|
|
docker image inspect --format '{{.RepoTags}} {{.Id}}' "$IMAGE"
|
|
echo
|
|
echo "Bouwen is niet genoeg: de app verwijst naar het register, want umbreld kan"
|
|
echo "niet bij een image die alleen lokaal staat. Nog te doen:"
|
|
echo
|
|
echo " docker login sc.kamenier-hamer.nl"
|
|
echo " docker push ${IMAGE}"
|
|
echo
|
|
echo "Zet daarna de digest uit de push-uitvoer achter de tag in"
|
|
echo "whatsnext-evolu-relay/docker-compose.yml, en zet \`version\` in het manifest"
|
|
echo "op ${VERSION}. Zonder die verhoging rolt umbrelOS het niet uit."
|
|
echo
|
|
echo "Controleer dat het anoniem te halen is, want umbreld krijgt geen"
|
|
echo "inloggegevens mee. Log uit in dezelfde context waarin je inlogde, anders"
|
|
echo "meet je je eigen sessie:"
|
|
echo
|
|
echo " docker logout sc.kamenier-hamer.nl && docker pull ${IMAGE}"
|