Mehrstufiges Abbild mit Standalone-Ausgabe, eigener Migrationsdienst, Worker als ESM-Buendel, LXC-Installer fuer Proxmox, Reverse-Proxy-Beispiele, Sicherungsskript und Zustandspruefung. Stapel gebaut und mit Agent-Durchlauf geprueft. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
51 lines
1.8 KiB
Docker
51 lines
1.8 KiB
Docker
# ProxLedger – Abbild für Dashboard und Worker.
|
||
# Beide Dienste teilen sich dieses Abbild und unterscheiden sich nur im Startbefehl.
|
||
|
||
FROM node:24-alpine AS basis
|
||
WORKDIR /app
|
||
# openssl wird von Prisma benötigt, tini beendet Prozesse sauber.
|
||
RUN apk add --no-cache openssl tini
|
||
|
||
# ---------------------------------------------------------------- Abhängigkeiten
|
||
FROM basis AS abhaengigkeiten
|
||
COPY package.json package-lock.json ./
|
||
COPY prisma ./prisma
|
||
COPY prisma7.config.ts ./
|
||
RUN npm ci --ignore-scripts
|
||
|
||
# ---------------------------------------------------------------- Bauen
|
||
FROM abhaengigkeiten AS bauen
|
||
COPY . .
|
||
RUN npx prisma generate \
|
||
&& npm run build \
|
||
&& npm run build:worker
|
||
|
||
# ---------------------------------------------------------------- Laufzeit
|
||
FROM basis AS laufzeit
|
||
ENV NODE_ENV=production
|
||
ENV PORT=3000
|
||
|
||
RUN addgroup -g 1001 -S proxledger && adduser -S proxledger -u 1001 -G proxledger
|
||
|
||
# Next.js im Standalone-Modus bringt seine eigenen Abhängigkeiten mit.
|
||
COPY --from=bauen --chown=proxledger:proxledger /app/.next/standalone ./
|
||
COPY --from=bauen --chown=proxledger:proxledger /app/.next/static ./.next/static
|
||
COPY --from=bauen --chown=proxledger:proxledger /app/public ./public
|
||
|
||
# Agent-Skripte werden zur Laufzeit ausgeliefert.
|
||
COPY --from=bauen --chown=proxledger:proxledger /app/agent ./agent
|
||
|
||
# Worker als gebündelte Datei. Migrationen übernimmt der eigene Dienst „migrate“
|
||
# (Stufe „bauen“), damit dieses Abbild schlank bleibt und keine CLI mitschleppt.
|
||
COPY --from=bauen --chown=proxledger:proxledger /app/dist ./dist
|
||
COPY --chown=proxledger:proxledger deploy/start.sh ./start.sh
|
||
|
||
RUN mkdir -p /data/uploads && chown -R proxledger:proxledger /data
|
||
VOLUME ["/data"]
|
||
ENV UPLOAD_DIR=/data/uploads
|
||
|
||
USER proxledger
|
||
EXPOSE 3000
|
||
ENTRYPOINT ["/sbin/tini", "--"]
|
||
CMD ["./start.sh", "web"]
|