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:
|
|
|
|
|
# TODO pinnen. Deze tag komt uit tools/evolu-relay/build.sh en bestaat
|
|
|
|
|
# voorlopig alleen in de lokale Docker-opslag van de machine waar gebouwd is.
|
|
|
|
|
# Daarom staat er geen @sha256: er is nog geen register. Compose haalt niets
|
|
|
|
|
# op zolang de image lokaal bestaat; zodra de tag naar een register wijst,
|
|
|
|
|
# hoort de digest erbij. Zie Docs/Referenties/Images-pinnen.md.
|
|
|
|
|
image: whatsnext/evolu-relay:c03a204
|
2026-08-25 18:13:57 +02:00
|
|
|
# Verplicht zolang de tag niet in een register staat. umbreld draait bij een
|
|
|
|
|
# installatie en bij een update `docker compose pull` (zie `app-script` in
|
|
|
|
|
# umbreld), en dat zou deze tag op Docker Hub zoeken, waar hij niet bestaat.
|
|
|
|
|
# De installatie faalt dan voordat er iets gestart is. `never` slaat hem over
|
|
|
|
|
# bij het ophalen en gebruikt wat er lokaal staat.
|
|
|
|
|
#
|
|
|
|
|
# Bijkomend voordeel: staat de image er niet, dan is de fout "image niet
|
|
|
|
|
# gevonden" in plaats van een mislukte netwerkpoging, en dat wijst naar de
|
|
|
|
|
# bouwstap die overgeslagen is. Weg zodra er een register is.
|
|
|
|
|
pull_policy: never
|
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:
|
|
|
|
|
image: whatsnext/evolu-relay:c03a204
|
2026-08-25 18:13:57 +02:00
|
|
|
# Zelfde reden als bij relay hierboven.
|
|
|
|
|
pull_policy: never
|
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
|