36 lines
1.5 KiB
Docker
36 lines
1.5 KiB
Docker
# ═══════════════════════════════════════════════════════════════════════════════
|
|||
|
|
# 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"]
|