146 lines
8.2 KiB
Markdown
146 lines
8.2 KiB
Markdown
# Umbrelapp - masterplan
|
|||
|
|
|
||
|
|
> **App: Evolu Relay.** Status: nog niet actief. Dit is één bestand en dat is bewust: er is nog geen
|
||
|
|
> `TAKEN.md`, `PROGRESS.md` of `OPEN.md`, want er wordt nog niet aan gewerkt. Bij promotie naar
|
||
|
|
> `Plannen/Actief/NNN-Umbrelapp/` worden de paragrafen hieronder over die vier bestanden verdeeld; zie
|
||
|
|
> `HomeGit/Docs/Werkproces.md` §1b.
|
||
|
|
>
|
||
|
|
> Afhankelijk van: **Proefopstelling**. Het aantal containers, de variabelen en de authenticatievraag
|
||
|
|
> komen daar vandaan, en zonder die antwoorden is elk manifest een gok.
|
||
|
|
|
||
|
|
## 1. Doel
|
||
|
|
|
||
|
|
Van een stack die lokaal draait naar een tweede app in deze store, die je in umbrelOS installeert en die
|
||
|
|
daarna vanzelf terugkomt. Concreet: een map `whatsnext-evolu-relay/` met een `umbrel-app.yml` en een
|
||
|
|
`docker-compose.yml`, geïnstalleerd op de Umbrel van de gebruiker, met Trezor Suite die erop
|
||
|
|
synchroniseert.
|
||
|
|
|
||
|
|
## 2. Afbakening
|
||
|
|
|
||
|
|
Het pakket en de installatie: manifest, compose, en de controles op het apparaat zelf. Ook het opruimen
|
||
|
|
van wat de eigen opzet van Trezor meebrengt en Umbrel niet wil, zoals de `.k8s/`-map en een eigen
|
||
|
|
netwerkblok.
|
||
|
|
|
||
|
|
De store zelf valt hier **buiten**: die bestaat al en serveert Electrum Gate. Wat er nog aan moet gebeuren
|
||
|
|
is één map erbij.
|
||
|
|
|
||
|
|
## 3. Niet-doelen
|
||
|
|
|
||
|
|
- **Geen bereikbaarheid van buiten het thuisnetwerk.** Masterplan **Bereikbaarheid**. Dit plan is af als
|
||
|
|
het op het eigen netwerk werkt.
|
||
|
|
- **Geen inlevering bij de officiële store.** Masterplan **Publicatie-Relay**. Dat is een andere maatstaf:
|
||
|
|
niet "hij werkt hier" maar "iemand anders keurt het goed".
|
||
|
|
- **Geen wijzigingen aan de relay zelf.** Wat Trezor levert, draaien we; wat het niet kan, kan het niet.
|
||
|
|
|
||
|
|
## 4. Ontwerp
|
||
|
|
|
||
|
|
### 4a. De vorm is bekend, de inhoud niet
|
||
|
|
|
||
|
|
De repo-vorm van een community store, de app-proxy, de whitelist bij updates en de regel dat een wijziging
|
||
|
|
zonder verhoging van `version` niet wordt uitgerold: dat staat allemaal al opgeschreven, met bron, in
|
||
|
|
[Umbrel-appstore-spec.md](../../Referenties/Umbrel-appstore-spec.md), en het hoeft niet opnieuw uitgezocht
|
||
|
|
te worden. Electrum Gate in dezelfde repo is bovendien een werkend voorbeeld van elke regel daaruit.
|
||
|
|
|
||
|
|
Wat hieronder staat is wat daar **niet** uit volgt, omdat die spec is opgeschreven vanuit een app die op
|
||
|
|
vier punten een ander geval is.
|
||
|
|
|
||
|
|
### 4b. De cliënt is geen browser, en dat raakt de app-proxy
|
||
|
|
|
||
|
|
**Dit is de ontwerpvraag die alles bepaalt**, en de reden dat dit plan wacht in plaats van alvast te
|
||
|
|
beginnen aan een manifest.
|
||
|
|
|
||
|
|
Electrum Gate heeft een dashboard dat een mens in een browser opent, en dat mag dus gewoon achter de inlog
|
||
|
|
van umbrelOS staan. Trezor Suite is geen browser met een sessiecookie. Komt de relay achter `app_proxy` met
|
||
|
|
de standaardinstelling te staan, dan krijgt Suite een inlogpagina in plaats van de relay, en dat is geen
|
||
|
|
configuratiefoutje maar het einde van het pad.
|
||
|
|
|
||
|
|
Twee bekende uitwegen, allebei met een prijs:
|
||
|
|
|
||
|
|
1. **`PROXY_AUTH_ADD: "false"`** op de proxy-service, zoals Gitea en Budibase in de officiële store doen.
|
||
|
|
Dan doet de app zijn eigen authenticatie, en de vraag wordt meteen: **dóét deze relay dat?** Zo niet,
|
||
|
|
dan zet je een open eindpunt op je Umbrel;
|
||
|
|
2. **een eigen `ports:` op de service**, zoals Electrum Gate met 50022 doet. Voor een niet-web-poort is dat
|
||
|
|
normaal en de inlevereisen noemen het ook zo. De poort moet dan wel uniek zijn op de host, en dat is
|
||
|
|
hier een echte controle: op deze machine draaien al Electrum Gate, een Electrum-server en een reverse
|
||
|
|
proxy.
|
||
|
|
|
||
|
|
Welke van de twee het wordt, hangt af van hoe Suite zich tegen de relay authenticeert. Dat antwoord komt
|
||
|
|
uit **Proefopstelling**, fase 4.
|
||
|
|
|
||
|
|
### 4c. Er is geen web-UI, en `port` is een verplicht veld
|
||
|
|
|
||
|
|
`port` in het manifest is de poort die umbrelOS voor de tegel gebruikt, dus een web-UI-poort. Deze app
|
||
|
|
heeft er geen. Wat andere apps zonder interface daarmee doen is niet uitgezocht; zie open punt 1.
|
||
|
|
|
||
|
|
### 4d. Er zit een database in de stack
|
||
|
|
|
||
|
|
Nieuw ten opzichte van Electrum Gate, dat niets bewaart.
|
||
|
|
|
||
|
|
- **De Postgres-datamap hoort onder `${APP_DATA_DIR}/data/postgres`**, niet in een naamloos Docker-volume.
|
||
|
|
Anders overleeft de data een herinstallatie niet en zit hij niet in de back-up van umbrelOS.
|
||
|
|
- **Het wachtwoord hoort niet in de repo.** umbrelOS levert `${APP_PASSWORD}` en `${APP_SEED}` aan, per
|
||
|
|
installatie afgeleid. Een literal in de compose is in een publieke repo een gepubliceerd wachtwoord.
|
||
|
|
- **`backupIgnore` verdient een overweging, en het antwoord is hier waarschijnlijk "niets".** De database
|
||
|
|
ís de waarde van deze app. Dat staat er expliciet omdat Electrum Gate het veld wél gebruikt, en
|
||
|
|
overnemen uit gewoonte zou hier precies het verkeerde weglaten.
|
||
|
|
|
||
|
|
### 4e. Geen afhankelijkheden, en niets om te vervangen
|
||
|
|
|
||
|
|
Electrum Gate declareert `dependencies: [electrs]` en leunt op het wisselmechanisme met Fulcrum en
|
||
|
|
ElectrumX. Deze app staat op zichzelf: geen `dependencies`, geen `implements`, en geen leesmount in de map
|
||
|
|
van een andere app. Dat maakt het pakket eenvoudiger en het haalt meteen het grootste review-risico weg dat
|
||
|
|
Electrum Gate wél heeft.
|
||
|
|
|
||
|
|
### 4f. De image is niet van ons, en misschien bestaat hij niet
|
||
|
|
|
||
|
|
Electrum Gate draait op `nginx:alpine` en `python:3-alpine`, twee images die gewoon in een registry staan
|
||
|
|
en die je alleen nog hoeft te pinnen. Hier is niet bekend of Trezor een image publiceert of alleen een
|
||
|
|
Dockerfile levert. Is het alleen een Dockerfile, dan bouw en publiceer je zelf, en dan ben je onderhouder
|
||
|
|
van een image geworden. **Proefopstelling** fase 1 levert het antwoord; zie
|
||
|
|
[Upstream-evolu-relay.md](../../Referenties/Upstream-evolu-relay.md) §4 punt 1.
|
||
|
|
|
||
|
|
## 5. Het werk in grote lijnen
|
||
|
|
|
||
|
|
**Fase 1 - de app-map.** `whatsnext-evolu-relay/` naast `whatsnext-electrum-gate/`, met een
|
||
|
|
`umbrel-app.yml` waarvan het `id` gelijk is aan de mapnaam. Uitkomst: umbrelOS toont een tweede tegel in
|
||
|
|
de store, ook al doet de app nog niets.
|
||
|
|
|
||
|
|
**Fase 2 - de compose.** De `docker-compose.yaml` van Trezor omzetten: `app_proxy`, geen eigen netwerkblok,
|
||
|
|
data onder `${APP_DATA_DIR}/data/`, geheimen uit umbrelOS-variabelen, en `.k8s/` blijft waar het is.
|
||
|
|
Uitkomst: een compose die op de Umbrel start.
|
||
|
|
|
||
|
|
**Fase 3 - het manifest afmaken.** Velden in de voorgeschreven volgorde, een eigen icoon, en een antwoord
|
||
|
|
op de `port`-vraag uit §4c.
|
||
|
|
|
||
|
|
**Fase 4 - installeren en verifiëren op de Umbrel.** Installeren, Suite laten synchroniseren, en daarna de
|
||
|
|
controles die je alleen op het apparaat kunt doen: overleeft de data een update, komt de app terug na een
|
||
|
|
herstart, en botst er geen poort met wat er al draait.
|
||
|
|
|
||
|
|
## 6. Open punten
|
||
|
|
|
||
|
|
1. **Wat wordt `port` in het manifest?** Dat veld is de web-UI-poort voor de tegel en deze app heeft geen
|
||
|
|
web-UI. Wat andere apps zonder interface daarmee doen is niet uitgezocht.
|
||
|
|
**Moment:** fase 3 · **Eigenaar:** uit te zoeken bij het schrijven van het manifest
|
||
|
|
2. **Komt er een statuspagina?** Electrum Gate heeft er een en die bleek in de praktijk het nuttigste deel
|
||
|
|
van de app. Hier zou dat kunnen: draait de relay, hoe groot is de database, wanneer was de laatste
|
||
|
|
synchronisatie. Het is echter een eigen container en een eigen onderhoudslast, en het is geen voorwaarde
|
||
|
|
om te kunnen synchroniseren. Voordeel dat pas sinds de samenvoeging bestaat: de pagina van Electrum Gate
|
||
|
|
staat in dezelfde repo en is grotendeels over te nemen.
|
||
|
|
**Moment:** pas overwegen als fase 4 geslaagd is · **Eigenaar:** gebruiker
|
||
|
|
3. **Blijft de quota-manager buiten het pakket?** Als **Proefopstelling** uitwijst dat het kan, dan ja.
|
||
|
|
Blijkt hij verplicht, dan verandert dit plan van vorm en hoort dit punt opnieuw beslist te worden.
|
||
|
|
**Moment:** bij promotie van dit plan · **Eigenaar:** volgt uit Proefopstelling
|
||
|
|
|
||
|
|
## 7. Verificatie
|
||
|
|
|
||
|
|
Alles behalve het laatste punt is op een laptop te controleren; het laatste punt is precies waarom dit plan
|
||
|
|
bestaat.
|
||
|
|
|
||
|
|
- YAML geldig, `id` in het manifest gelijk aan de mapnaam, elke `image:` met een `@sha256:`-digest. Dat
|
||
|
|
zijn de fouten die je anders pas op het apparaat merkt, en ze zijn automatisch te controleren;
|
||
|
|
- **op de Umbrel:** installeren, synchroniseren met Suite, en daarna een herstart van de app en van het
|
||
|
|
apparaat. Meld per controle of hij gedaan is, en meld ook expliciet welke niet;
|
||
|
|
- **en één die alleen bij een tweede app in een bestaande store bestaat:** dat het toevoegen van deze app
|
||
|
|
Electrum Gate niet raakt. Een kapot manifest in de ene map mag de andere niet meeslepen; of umbrelOS dat
|
||
|
|
netjes doet is niet uitgezocht.
|