# SSHKeyVault – ein Abbild fuer Weboberflaeche und Worker; sie unterscheiden sich nur im Startbefehl. FROM node:24-alpine AS basis WORKDIR /app # openssl braucht Prisma, tini beendet Prozesse sauber. RUN apk add --no-cache openssl tini && corepack enable # ---------------------------------------------------------------- Abhaengigkeiten FROM basis AS abhaengigkeiten COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ COPY prisma ./prisma COPY prisma.config.ts ./ RUN pnpm install --frozen-lockfile --ignore-scripts # ---------------------------------------------------------------- Bauen FROM abhaengigkeiten AS bauen COPY . . RUN pnpm prisma generate && pnpm build && pnpm build:worker # ---------------------------------------------------------------- Laufzeit FROM basis AS laufzeit ENV NODE_ENV=production ENV PORT=3400 # Sonst bindet Next an den von Docker gesetzten HOSTNAME und der Healthcheck ueber # 127.0.0.1 schlaegt fehl. ENV HOSTNAME=0.0.0.0 RUN addgroup -g 1001 -S sshkv && adduser -S sshkv -u 1001 -G sshkv COPY --from=bauen --chown=sshkv:sshkv /app/.next/standalone ./ COPY --from=bauen --chown=sshkv:sshkv /app/.next/static ./.next/static COPY --from=bauen --chown=sshkv:sshkv /app/public ./public COPY --from=bauen --chown=sshkv:sshkv /app/dist ./dist COPY --chown=sshkv:sshkv deploy/start.sh ./start.sh USER sshkv EXPOSE 3400 ENTRYPOINT ["/sbin/tini", "--"] CMD ["./start.sh", "web"]