# ═══════════════════════════════════════════════════════════════════════════════ # De image voor de app whatsnext-evolu-relay. # # 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 # image. # ═══════════════════════════════════════════════════════════════════════════════ FROM node:24-slim WORKDIR /app # Eerst alleen het manifest, zodat een wijziging in `src/` de installatielaag niet # ongeldig maakt. COPY package.json ./ RUN npm install --omit=dev --no-audit --no-fund COPY src ./src # 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 # gemounte map van de host als root wordt aangeraakt. RUN mkdir -p /app/data && chown -R node:node /app USER node ENV NODE_ENV=production EXPOSE 4000 CMD ["node", "src/index.js"]