2026-08-25 17:18:22 +02:00
|
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
|
|
|
# Evolu Relay - de sync-server van Trezor Suite op je eigen Umbrel.
|
|
|
|
|
#
|
|
|
|
|
# Drie containers, twee images. De relay en de quota-manager komen uit dezélfde
|
|
|
|
|
# image met een ander `command`: bovenstrooms is het één codebase met meerdere
|
|
|
|
|
# startscripts. Dat is nagetrokken in de Dockerfile en de README van Trezor; zie
|
|
|
|
|
# Docs/Referenties/Upstream-evolu-relay.md §2.
|
|
|
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
|
|
|
|
|
|
|
|
services:
|
|
|
|
|
app_proxy:
|
|
|
|
|
environment:
|
|
|
|
|
APP_HOST: whatsnext-evolu-relay_relay_1
|
|
|
|
|
APP_PORT: 4000
|
|
|
|
|
# Trezor Suite is geen browser met een sessiecookie. Achter de inlog van
|
|
|
|
|
# umbrelOS zou het een inlogpagina krijgen in plaats van de relay, en dat
|
|
|
|
|
# is niet op te lossen aan onze kant.
|
|
|
|
|
#
|
|
|
|
|
# Dit is geen omweg: het is het patroon dat de eigen nostr-relay-app van
|
|
|
|
|
# Umbrel gebruikt, om precies dezelfde reden. Ook Gitea en Budibase in de
|
|
|
|
|
# officiele store doen het zo.
|
|
|
|
|
#
|
|
|
|
|
# De prijs staat er wel bij: wie deze poort kan bereiken, bereikt de relay
|
|
|
|
|
# zonder aanmelding. Wat de schade beperkt is dat de relay zelf elke
|
|
|
|
|
# eigenaar weigert die geen limietenrij in de database heeft. Zet deze app
|
|
|
|
|
# dus niet zonder meer open naar het internet; zie het masterplan
|
|
|
|
|
# Bereikbaarheid.
|
|
|
|
|
PROXY_AUTH_ADD: "false"
|
|
|
|
|
|
|
|
|
|
relay:
|
2026-08-25 18:31:20 +02:00
|
|
|
# Gebouwd uit de broncode van Trezor door tools/evolu-relay/build.sh, en
|
|
|
|
|
# geduwd naar het Gitea-register op dezelfde server als deze store. Dat moet:
|
|
|
|
|
# umbreld haalt élke image op via de Docker Engine API (docker-modem) en niet
|
|
|
|
|
# via compose, dus een lokaal gebouwde tag is voor hem onbereikbaar en
|
|
|
|
|
# `pull_policy` wordt nooit gelezen. Op 25-08-2026 op het apparaat
|
|
|
|
|
# vastgesteld; zie Docs/Referenties/Umbrel-appstore-spec.md.
|
2026-08-25 18:13:57 +02:00
|
|
|
#
|
2026-08-25 18:31:20 +02:00
|
|
|
# De digest hoort erbij en niet alleen de tag: een tag kan opnieuw geduwd
|
|
|
|
|
# worden en dan draait er iets anders dan hier staat.
|
2026-08-25 18:24:39 +02:00
|
|
|
#
|
2026-08-25 18:31:20 +02:00
|
|
|
# Let op: dit is de digest van één architectuur (amd64), want er is alleen
|
|
|
|
|
# amd64 geduwd. Voor de officiele store moet het een multi-arch index-digest
|
|
|
|
|
# zijn met arm64 erin; zie het masterplan Publicatie-Relay.
|
|
|
|
|
image: sc.kamenier-hamer.nl/sysop/evolu-relay:c03a204@sha256:2fe1e9e90e5cbc12d5ea6363df03bb132fddec0150283063b9103a09bdbe853a
|
2026-08-25 17:18:22 +02:00
|
|
|
restart: on-failure
|
|
|
|
|
depends_on:
|
|
|
|
|
db:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
# Bovenstrooms staat `CMD ["yarn", "start"]` in de Dockerfile, met daarbij een
|
|
|
|
|
# eigen commentaar dat het misschien een van de twee specifieke scripts had
|
|
|
|
|
# moeten zijn. Daarom hier expliciet, en niet vertrouwen op de standaard.
|
|
|
|
|
command: ["yarn", "start-evolu-relay"]
|
|
|
|
|
environment:
|
|
|
|
|
RELAY_PORT: "4000"
|
|
|
|
|
HEALTH_PORT: "4002"
|
|
|
|
|
# dev of prod. Volgens .env.sample zet prod authenticatie aan; in de code
|
|
|
|
|
# bepaalt die vlag alleen het logniveau en staan de autorisatiecontroles
|
|
|
|
|
# onvoorwaardelijk aan. Een van de twee is achterhaald en dat is nog niet
|
|
|
|
|
# uitgezocht. Hier staat prod, want dat is de veilige kant van die
|
|
|
|
|
# onduidelijkheid: als het iets aanzet, willen we dat het aanstaat.
|
|
|
|
|
SERVER_ENV: prod
|
|
|
|
|
POSTGRES_GATE_HOST: whatsnext-evolu-relay_db_1
|
|
|
|
|
POSTGRES_GATE_PORT: "5432"
|
|
|
|
|
POSTGRES_GATE_USER: suite-sync
|
|
|
|
|
POSTGRES_GATE_DB: suite-sync-gate
|
|
|
|
|
# Door umbrelOS per installatie afgeleid. Nooit een letterlijke waarde:
|
|
|
|
|
# deze repo is publiek.
|
|
|
|
|
POSTGRES_GATE_PASSWORD: ${APP_PASSWORD}
|
|
|
|
|
POSTGRES_GATE_SSL: "false"
|
|
|
|
|
|
|
|
|
|
quota-manager:
|
2026-08-25 18:31:20 +02:00
|
|
|
# Zelfde image als relay, ander commando. Tag en digest moeten dus gelijk
|
|
|
|
|
# blijven aan die hierboven.
|
|
|
|
|
image: sc.kamenier-hamer.nl/sysop/evolu-relay:c03a204@sha256:2fe1e9e90e5cbc12d5ea6363df03bb132fddec0150283063b9103a09bdbe853a
|
2026-08-25 17:18:22 +02:00
|
|
|
restart: on-failure
|
|
|
|
|
depends_on:
|
|
|
|
|
db:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
command: ["yarn", "start-quota-manager"]
|
|
|
|
|
# Waarom deze container er is, terwijl hij bij Trezor bij hun betaalde
|
|
|
|
|
# hosting hoort: de relay weigert elke eigenaar zonder rij in de
|
|
|
|
|
# limietentabel, en dit is wat die rijen aanmaakt. Er is geen HTTP-koppeling
|
|
|
|
|
# tussen de twee; ze delen alleen de database. Zie Upstream-evolu-relay.md §3.
|
|
|
|
|
environment:
|
|
|
|
|
QUOTA_MANAGER_PORT: "4001"
|
|
|
|
|
HEALTH_PORT: "4012"
|
|
|
|
|
SERVER_ENV: prod
|
|
|
|
|
POSTGRES_GATE_HOST: whatsnext-evolu-relay_db_1
|
|
|
|
|
POSTGRES_GATE_PORT: "5432"
|
|
|
|
|
POSTGRES_GATE_USER: suite-sync
|
|
|
|
|
POSTGRES_GATE_DB: suite-sync-gate
|
|
|
|
|
POSTGRES_GATE_PASSWORD: ${APP_PASSWORD}
|
|
|
|
|
POSTGRES_GATE_SSL: "false"
|
|
|
|
|
|
|
|
|
|
db:
|
|
|
|
|
# TODO pinnen op de multi-arch index-digest, met
|
|
|
|
|
# `docker buildx imagetools inspect postgres:17-alpine`. Kan alleen op een
|
|
|
|
|
# machine met Docker; staat als taak in het plan Umbrelapp.
|
|
|
|
|
#
|
|
|
|
|
# Niet `postgres` kaal zoals de compose van Trezor doet: dat is `latest` en
|
|
|
|
|
# dus niet reproduceerbaar, en een grote-versiesprong van Postgres migreert
|
|
|
|
|
# zijn datamap niet vanzelf. Dan start de database niet meer en is de data
|
|
|
|
|
# alleen met handwerk terug te halen.
|
|
|
|
|
image: postgres:17-alpine
|
|
|
|
|
restart: on-failure
|
|
|
|
|
environment:
|
|
|
|
|
POSTGRES_USER: suite-sync
|
|
|
|
|
POSTGRES_DB: suite-sync-gate
|
|
|
|
|
POSTGRES_PASSWORD: ${APP_PASSWORD}
|
|
|
|
|
# Een submap en niet de wortel van de mount. Postgres weigert een datamap
|
|
|
|
|
# die al iets anders bevat, en een mount heeft op sommige bestandssystemen
|
|
|
|
|
# een lost+found.
|
|
|
|
|
PGDATA: /var/lib/postgresql/data/pgdata
|
|
|
|
|
volumes:
|
|
|
|
|
# Onder data/ en niet in een naamloos Docker-volume: dit is wat umbrelOS
|
|
|
|
|
# bewaart en meeneemt in de back-up. In een volume zou de database een
|
|
|
|
|
# herinstallatie van de app niet overleven.
|
|
|
|
|
- ${APP_DATA_DIR}/data/postgres:/var/lib/postgresql/data
|
|
|
|
|
healthcheck:
|
|
|
|
|
# Op de eigen database en gebruiker, niet op `-d postgres` zoals
|
|
|
|
|
# bovenstrooms: die database bestaat hier niet en dan is de controle groen
|
|
|
|
|
# terwijl het verkeerde antwoord gegeven wordt.
|
|
|
|
|
test: ["CMD-SHELL", "pg_isready -U suite-sync -d suite-sync-gate"]
|
|
|
|
|
interval: 10s
|
|
|
|
|
timeout: 5s
|
|
|
|
|
retries: 10
|
|
|
|
|
start_period: 30s
|