2026-08-28 11:12:41 +02:00
|
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
|
|
|
# De image voor de app whatsnext-evolu-relay.
|
|
|
|
|
#
|
2026-09-08 16:36:30 +02:00
|
|
|
# Eén image voor drie containers. De compose start hem drie keer: als `relay`
|
|
|
|
|
# met het standaardcommando (`node src/index.js`, als gebruiker node), als
|
|
|
|
|
# `agent` met `python3 /app/agent.py` en als `server` met nginx. Tot 0.5.6 zat
|
|
|
|
|
# alleen de relay in deze image en draaiden de agent en de pagina als *.template
|
|
|
|
|
# op python:3-alpine en nginx:alpine; sinds 0.6.0 zit alles hier. Beslist door de
|
|
|
|
|
# gebruiker op 08-09-2026, na dezelfde stap bij Electrum Gate: één image scheelt
|
|
|
|
|
# een tweede recept en een tweede pin. Zie het plan Eigenimage, PLAN.md §8.
|
|
|
|
|
#
|
2026-08-28 11:12:41 +02:00
|
|
|
# Dit bouwt niet de relay van Evolu na: het installeert `@evolu/nodejs` uit npm
|
|
|
|
|
# en start ons eigen `src/index.js`, dat alleen de twee terugroepfuncties voor de
|
|
|
|
|
# toegangscontrole toevoegt.
|
|
|
|
|
#
|
|
|
|
|
# Waarom `slim` en niet `alpine`: `better-sqlite3` zit onder `@evolu/nodejs` en
|
|
|
|
|
# heeft kant-en-klare binaries voor glibc, niet voor musl. Op alpine zou hij bij
|
|
|
|
|
# elke bouw opnieuw gecompileerd moeten worden, met een bouwketen erbij in de
|
2026-09-08 16:36:30 +02:00
|
|
|
# image. Dat is ook de reden dat nginx en python3 hier uit apt komen en niet
|
|
|
|
|
# andersom node in een nginx-image gezet is.
|
|
|
|
|
#
|
|
|
|
|
# De bouwcontext is de REPO-ROOT, niet deze map: icon.png blijft in de app-map
|
|
|
|
|
# staan (het manifest wijst ernaar voor de tegel in de winkel) en wordt van daar
|
|
|
|
|
# gekopieerd, zodat er niet twee exemplaren zijn. build.sh geeft die context mee.
|
2026-08-28 11:12:41 +02:00
|
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
|
|
|
|
|
|
|
|
FROM node:24-slim
|
|
|
|
|
|
2026-09-08 16:36:30 +02:00
|
|
|
# nginx en python3 uit Debian. Geen aanbevolen pakketten: die halen bij nginx
|
|
|
|
|
# onder meer een set modules binnen die de pagina niet gebruikt. De agent heeft
|
|
|
|
|
# alleen de standaardbibliotheek nodig.
|
|
|
|
|
RUN apt-get update \
|
|
|
|
|
&& apt-get install -y --no-install-recommends nginx python3 \
|
|
|
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
|
|
2026-08-28 11:12:41 +02:00
|
|
|
WORKDIR /app
|
|
|
|
|
|
|
|
|
|
# Eerst alleen het manifest, zodat een wijziging in `src/` de installatielaag niet
|
|
|
|
|
# ongeldig maakt.
|
2026-09-08 16:36:30 +02:00
|
|
|
COPY tools/evolu-relay/package.json ./
|
2026-08-28 11:12:41 +02:00
|
|
|
RUN npm install --omit=dev --no-audit --no-fund
|
|
|
|
|
|
2026-09-08 16:36:30 +02:00
|
|
|
COPY tools/evolu-relay/src ./src
|
|
|
|
|
COPY tools/evolu-relay/agent.py ./agent.py
|
2026-08-28 11:12:41 +02:00
|
|
|
|
|
|
|
|
# De relay maakt zelf `data/` aan bij de start, maar dan als de gebruiker die op
|
|
|
|
|
# dat moment draait. Vooraf aanmaken met de juiste eigenaar voorkomt dat een
|
2026-09-08 16:36:30 +02:00
|
|
|
# gemounte map van de host als root wordt aangeraakt. Alleen `data/` en `src/` zijn
|
|
|
|
|
# van node; agent.py en de rest blijven van root, want die worden alleen gelezen.
|
|
|
|
|
RUN mkdir -p /app/data && chown -R node:node /app/data /app/src
|
2026-08-28 11:12:41 +02:00
|
|
|
|
2026-09-08 16:36:30 +02:00
|
|
|
# De pagina. Debian zet nginx' eigen voorbeeldpagina onder /var/www/html; wij
|
|
|
|
|
# gebruiken het pad dat de nginx-image ook gebruikt, zodat nginx.conf gelijk kan
|
|
|
|
|
# blijven aan die van Electrum Gate.
|
|
|
|
|
COPY tools/evolu-relay/nginx.conf /etc/nginx/nginx.conf
|
|
|
|
|
COPY tools/evolu-relay/index.html /usr/share/nginx/html/index.html
|
|
|
|
|
COPY whatsnext-evolu-relay/icon.png /usr/share/nginx/html/icon.png
|
|
|
|
|
|
|
|
|
|
# Geen USER hier, en dat is met opzet: nginx moet als root beginnen om poort 80 te
|
|
|
|
|
# nemen, en de agent schrijft in de gedeelde map. De relay hoort wél als node te
|
|
|
|
|
# draaien, zoals hij tot 0.5.6 deed, en dat regelt de compose met `user: node`.
|
2026-08-28 11:12:41 +02:00
|
|
|
|
|
|
|
|
ENV NODE_ENV=production
|
2026-09-08 16:36:30 +02:00
|
|
|
ENV PYTHONUNBUFFERED=1
|
|
|
|
|
EXPOSE 4000 80
|
2026-08-28 11:12:41 +02:00
|
|
|
|
|
|
|
|
CMD ["node", "src/index.js"]
|