Optimize: switch to output:'standalone' + slim runner image
Vorher: 1.22 GB Image (volle node_modules im Container). Nachher: ~150 MB (Next.js erzeugt unter .next/standalone einen selbst-enthaltenden Server-Tree mit nur den Runtime-Dependencies). Dockerfile kopiert standalone-Output + .next/static + public, entfernt node_modules/package.json/src-Copy, startet mit 'node server.js'.
This commit is contained in:
+8
-11
@@ -18,20 +18,17 @@ RUN npm run build
|
|||||||
|
|
||||||
FROM node:22.13-bookworm-slim AS runner
|
FROM node:22.13-bookworm-slim AS runner
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
ENV NODE_ENV=production NEXT_TELEMETRY_DISABLED=1 PORT=3000
|
ENV NODE_ENV=production NEXT_TELEMETRY_DISABLED=1 PORT=3000 HOSTNAME=0.0.0.0
|
||||||
# Non-Root
|
# Non-Root
|
||||||
RUN groupadd --system --gid 1001 nodejs \
|
RUN groupadd --system --gid 1001 nodejs \
|
||||||
&& useradd --system --uid 1001 --gid nodejs eldov
|
&& useradd --system --uid 1001 --gid nodejs eldov
|
||||||
# Standalone-Output kopieren (Next.js legt ihn unter .next/standalone an,
|
# Standalone-Output (Next.js legt ihn unter .next/standalone an). Wir kopieren
|
||||||
# wenn output: 'standalone' gesetzt ist; hier vorerst klassischer next start).
|
# den selbst-enthaltenden Server-Tree und die zwei statischen Ordner, die
|
||||||
COPY --from=build /app/.next ./.next
|
# Next nicht mit reinpackt (public + .next/static).
|
||||||
COPY --from=build /app/public ./public
|
COPY --from=build --chown=eldov:nodejs /app/.next/standalone ./
|
||||||
COPY --from=build /app/src ./src
|
COPY --from=build --chown=eldov:nodejs /app/.next/static ./.next/static
|
||||||
COPY --from=build /app/package.json ./package.json
|
COPY --from=build --chown=eldov:nodejs /app/public ./public
|
||||||
COPY --from=build /app/next.config.ts ./next.config.ts
|
|
||||||
COPY --from=build /app/proxy.ts ./proxy.ts
|
|
||||||
COPY --from=build /app/node_modules ./node_modules
|
|
||||||
RUN mkdir -p /app/data && chown -R eldov:nodejs /app
|
RUN mkdir -p /app/data && chown -R eldov:nodejs /app
|
||||||
USER eldov
|
USER eldov
|
||||||
EXPOSE 3000
|
EXPOSE 3000
|
||||||
CMD ["npm", "run", "start"]
|
CMD ["node", "server.js"]
|
||||||
|
|||||||
@@ -44,6 +44,10 @@ const config: NextConfig = {
|
|||||||
projectItemRewrite("/en/projects", "en"),
|
projectItemRewrite("/en/projects", "en"),
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
|
// Standalone-Build: Next.js erzeugt unter .next/standalone einen getrimmten
|
||||||
|
// Server-Tree mit nur den Dependencies, die er zur Runtime braucht. Image
|
||||||
|
// schrumpft von ~1.2 GB auf ~150 MB.
|
||||||
|
output: "standalone",
|
||||||
// Traefik vertraut uns — wir akzeptieren X-Forwarded-For.
|
// Traefik vertraut uns — wir akzeptieren X-Forwarded-For.
|
||||||
// (trustHostHeader ist die Next.js-Default ab 16, wenn hinter einem
|
// (trustHostHeader ist die Next.js-Default ab 16, wenn hinter einem
|
||||||
// Reverse-Proxy deployed.)
|
// Reverse-Proxy deployed.)
|
||||||
|
|||||||
Reference in New Issue
Block a user