Files
UmbrelApps/tools/evolu-relay/Dockerfile
T

36 lines
1.5 KiB
Docker
Raw Normal View History

# ═══════════════════════════════════════════════════════════════════════════════
# 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"]