Files
UmbrelApps/whatsnext-electrum-gate/docker-compose.yml
T
HarmenandClaude Fable 5.1 d41c01b67e Gate 0.1.0: de image gepind
Gebouwd en geduwd op de Umbrel, digest twee keer in de compose. Geen
versieverhoging: 0.1.0 is nog nergens geinstalleerd.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 16:15:29 +02:00

137 lines
7.6 KiB
YAML

services:
# umbrelOS genereert deze service zelf; wij vullen alleen in waar hij heen moet
# wijzen. De hostnaam heeft de vorm <app-id>_<compose-service>_1.
app_proxy:
environment:
APP_HOST: whatsnext-electrum-gate_server_1
APP_PORT: 80
# Beide containers draaien dezelfde image, gebouwd door tools/electrum-gate/
# build.sh. Wat erin zit staat in de Dockerfile daar: nginx met de pagina en het
# stream-blok, en python3 met de agent. Tot 0.0.29 stonden die bestanden hier
# als *.template en draaiden ze op python:3-alpine en nginx:alpine; waarom dat
# veranderd is staat in het plan Eigenimage, PLAN.md §3.
#
# De tag hoort gelijk te zijn aan VERSION in build.sh, en er hoort een digest
# achter zodra de image geduwd is. Let op de valstrik uit KNOWLEDGE.md: een
# oude digest onder een nieuwe tag levert stilzwijgend de oude image, dus laat
# de digest er even van af zolang de nieuwe niet geduwd is.
# De agent. Hij schrijft status.json, leest de certificaten, bevraagt de
# Electrum-server en neemt de certificaatkeuze aan.
#
# Waarom een tweede container en niet een lus in de server hieronder: dit werk
# is een programma. Een certificaatdatum uitlezen, een JSON-RPC-verzoek doen,
# een geschiedenis bijhouden en een keuze valideren zijn geen dingen die je met
# openssl en nc aan elkaar knoopt zonder dat het stil verkeerde antwoorden gaat
# geven.
agent:
image: sc.kamenier-hamer.nl/sysop/electrum-gate:0.1.0@sha256:97fee09ba8004c2f0cf55e03cb612474f0a4b24724f9186a4e6769cebb7cfd8f
restart: on-failure
command:
- python3
- /app/agent.py
environment:
# Het adres van de Electrum-server die de gebruiker in umbrelOS gekozen
# heeft. umbrelOS vult dit in op grond van de afhankelijkheid hieronder,
# dus dit werkt met Electrs, Fulcrum en ElectrumX.
GATE_ELECTRUM_HOST: ${APP_ELECTRS_NODE_IP}
GATE_ELECTRUM_PORT: ${APP_ELECTRS_NODE_PORT}
GATE_TLS_PORT: "50022"
# De versie uit het manifest, voor de kop van de pagina. Die stond tot
# 0.0.29 rechtstreeks in de pagina, ingevuld door umbreld; nu de pagina in
# de image zit, geeft de agent hem door via status.json.
GATE_APP_VERSION: ${APP_VERSION}
# De zelfcontrole: de agent verbindt met de TLS-poort van de server
# hieronder en maakt de handdruk af. Niet localhost: dat is een andere
# container en dus een andere netwerk-namespace.
#
# De volledige containernaam en niet de servicenaam 'server'. Dat stond er
# eerst, en op het apparaat gaf het `[Errno 111] Connection refused`
# (27-08-2026). Die fout is veelzeggend: geweigerd betekent dat de naam wél
# oploste, alleen niet naar ons. 'server' is een naam die meer apps op deze
# machine gebruiken, en op een gedeeld netwerk is het dus een gok wie je
# krijgt. De vorm <app-id>_<service>_1 is uniek per app; het is niet toevallig
# dezelfde vorm die umbrelOS hierboven van APP_HOST verlangt.
GATE_TLS_HOST: whatsnext-electrum-gate_server_1
# Niet elke ronde meten, want elke meting is voor nginx een gewone sessie
# en levert dus een regel in het activiteitenlog op. Vijf minuten is vaak
# genoeg voor een waarde die zelden verandert; na een certificaatwissel
# wordt er sowieso gemeten.
GATE_SELF_CHECK_INTERVAL: "300"
GATE_INTERVAL: "60"
GATE_API_PORT: "8000"
GATE_STATE_DIR: /var/lib/gate
# Bron-naam=map. Een bron die niet gemount is, bestaat niet en wordt
# overgeslagen; dat is de normale toestand voor een reverse proxy die de
# gebruiker niet draait.
GATE_CERT_SOURCES: "Zoraxy=/certs/zoraxy,Own folder=/certs/own"
# De enige beschrijfbare bron, en dus de map waarin een upload van de
# pagina landt. Expliciet en niet afgeleid uit de lijst hierboven: welke
# bron beschrijfbaar is, hoort te staan naast de mount die dat toestaat.
# Leeg zetten schakelt uploaden uit.
GATE_UPLOAD_DIR: /certs/own
volumes:
# De gedeelde toestand: status.json, cert.conf, de herlaadvlag en de
# gekozen certificaat-id. Beide containers zitten hierin.
#
# Onder data/, want dat is wat andere apps doen: electrs mount
# ${APP_DATA_DIR}/data/electrs, mempool ${APP_DATA_DIR}/data. Verplaatst op
# 20-08-2026 met het oog op publicatie in de officiele store.
- ${APP_DATA_DIR}/data/runtime:/var/lib/gate
# De certificaatbronnen. Zoraxy alleen lezen: dat zijn de certificaten van
# een andere app en die raakt deze app niet aan.
- ${UMBREL_ROOT}/app-data/zoraxy/data/config/conf/certs:/certs/zoraxy:ro
# De eigen map is de enige die beschrijfbaar is, want hier landt een upload
# van de pagina. Alleen de agent; de nginx-container houdt hem alleen-lezen,
# want die hoeft er nooit iets neer te zetten.
- ${APP_DATA_DIR}/data/certs:/certs/own
#
# Nginx Proxy Manager hoort hier als derde bron bij en staat er bewust nog
# niet in. Het pad hieronder is een gok en niet geverifieerd, en een
# bind-mount naar een pad dat niet bestaat laat Docker het aanmaken. Dat zou
# een lege maphierarchie neerzetten in de app-data van een app die
# misschien niet eens geinstalleerd is, en die rommel blijft daar staan.
# Eerst op de Umbrel controleren waar NPM zijn certificaten neerzet, dan
# deze regel aanzetten en de naam toevoegen aan GATE_CERT_SOURCES.
#
# - ${UMBREL_ROOT}/app-data/nginx-proxy-manager/data/letsencrypt/live:/certs/npm:ro
# nginx: de pagina op poort 80 achter de app_proxy, en de TLS-poort 50022 zodra
# de agent een certificaat gekozen heeft. Het startscript is entrypoint.sh in de
# image; tot 0.0.29 stond dat hier als command-blok van ruim honderd regels, met
# elk dollarteken verdubbeld. Wat het doet staat daar uitgelegd.
server:
image: sc.kamenier-hamer.nl/sysop/electrum-gate:0.1.0@sha256:97fee09ba8004c2f0cf55e03cb612474f0a4b24724f9186a4e6769cebb7cfd8f
restart: on-failure
# De agent moet er zijn voordat nginx start, want de proxy_pass naar de agent
# wordt bij het starten opgelost en een onbekende naam laat nginx afbreken.
# Op de cert.conf van de agent wordt niet gewacht: de pagina komt hoe dan ook
# omhoog, zie entrypoint.sh.
depends_on:
- agent
ports:
# De TLS-poort voor Electrum-wallets. Dit is de enige poort die deze app
# zelf publiceert; de web-UI loopt via app_proxy.
#
# 50022 en niet de conventionele 50002, omdat Fulcrum die op de host
# bezet: met Fulcrum als backend zou de container niet starten, en dat is
# precies het omschakelen dat deze app moet ondersteunen. De poort naar
# buiten is toch al een andere, want die staat in de router doorgestuurd.
# Beslist 19-08-2026, open punt 1 van het plan Configuratie.
- "50022:50022"
environment:
# Dezelfde twee als bij de agent. entrypoint.sh vult ze in het stream-blok
# in, want nginx kan in een proxy_pass geen omgevingsvariabele lezen. Tot
# 0.0.29 deed umbreld dat via stream.conf.template.
GATE_ELECTRUM_HOST: ${APP_ELECTRS_NODE_IP}
GATE_ELECTRUM_PORT: ${APP_ELECTRS_NODE_PORT}
volumes:
# Dezelfde gedeelde toestand als de agent. nginx leest hier cert.conf en
# status.json, en schrijft de sessielog.
- ${APP_DATA_DIR}/data/runtime:/var/lib/gate
# De certificaten zelf moeten ook hier gemount zijn: de agent bepaalt
# welk pad in cert.conf komt, maar nginx moet het bestand kunnen openen.
- ${UMBREL_ROOT}/app-data/zoraxy/data/config/conf/certs:/certs/zoraxy:ro
- ${APP_DATA_DIR}/data/certs:/certs/own:ro