From 3f5fc0f960b0305684e5624a6ac76a86b0271ede Mon Sep 17 00:00:00 2001 From: Markus Graf Date: Sun, 29 Mar 2026 23:50:23 +0200 Subject: [PATCH] chore(260329-x2a): add Dockerfile and .dockerignore for containerized deployment - Multi-stage build: node:22-alpine for build, separate stage for serve - Runs vite preview on port 4173 with host 0.0.0.0 - config.json mountable at runtime via -v /path/to/config.json:/app/dist/config.json:ro --- .dockerignore | 8 ++++++++ Dockerfile | 26 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..7d62fad --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +node_modules +dist +.git +.planning +*.md +.biome +.claude +.agents diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..16a66e3 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,26 @@ +# Stage 1 — build +FROM node:22-alpine AS build + +WORKDIR /app + +COPY package*.json ./ +RUN npm ci + +COPY . . +RUN npm run build + +# Stage 2 — serve +FROM node:22-alpine AS serve + +WORKDIR /app + +COPY --from=build /app/package*.json ./ +RUN npm ci + +COPY --from=build /app/dist ./dist +COPY --from=build /app/vite.config.ts ./vite.config.ts + +EXPOSE 4173 + +# Mount config: docker run -v /path/to/config.json:/app/dist/config.json:ro -p 4173:4173 zauberwald +CMD ["npm", "run", "preview"]