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

128 lines
6.1 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:
# WERKT NIET ZOALS HET HIER STAAT, en dat is bewust zichtbaar gelaten tot de
# keuze voor een register gemaakt is. Deze tag komt uit
# tools/evolu-relay/build.sh en bestaat alleen in de lokale Docker-opslag van
# de machine waar gebouwd is.
#
# Op 25-08-2026 bleek bij de eerste installatiepoging dat dat niet genoeg is:
# umbreld haalt élke image op via de Docker Engine API (docker-modem), niet
# via compose, en faalt met "pull access denied" voordat er iets start. Een
# lokaal gebouwde image is dus onbereikbaar, en `pull_policy: never` helpt
# niet, want umbreld leest de compose niet om te pullen. Zie
# Docs/Referenties/Umbrel-appstore-spec.md.
#
# Wat hier moet komen: een tag in een register waar de Umbrel anoniem bij kan,
# met @sha256-digest erbij. Zie Docs/Referenties/Images-pinnen.md en het plan
# Umbrelapp.
image: whatsnext/evolu-relay:c03a204
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
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