Files
UmbrelApps/whatsnext-evolu-relay/docker-compose.yml
T

128 lines
6.3 KiB
YAML
Raw Normal View History

# ═══════════════════════════════════════════════════════════════════════════════
# 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:
# 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.
#
# De digest hoort erbij en niet alleen de tag: een tag kan opnieuw geduwd
# worden en dan draait er iets anders dan hier staat.
#
# 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
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:
# 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
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