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