From 6782e4d40b1dab2b255e0112ec4c4f235bbb09e0 Mon Sep 17 00:00:00 2001 From: ordinarthur <@arthurbarre.js@gmail.com> Date: Sat, 11 Apr 2026 17:54:26 +0200 Subject: [PATCH] feat: add Dockerfiles for K3s deployment Dockerfile.ssr for Astro SSR, Dockerfile.api for Fastify API. Co-Authored-By: Claude Opus 4.6 --- .dockerignore | 18 ++++++++++++++++++ Dockerfile.api | 15 +++++++++++++++ Dockerfile.ssr | 25 +++++++++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile.api create mode 100644 Dockerfile.ssr diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..c761e88 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,18 @@ +node_modules +dist +.git +.gitignore +.env +.env.* +*.md +.vscode +.idea +.DS_Store +.astro +sanity +k8s +.gitea +migrate-images.mjs +seed-sanity.mjs +seed-sanity-homepage.mjs +clean-duplicates.mjs diff --git a/Dockerfile.api b/Dockerfile.api new file mode 100644 index 0000000..4ac8035 --- /dev/null +++ b/Dockerfile.api @@ -0,0 +1,15 @@ +# Fastify API — no build step, runs server.mjs directly +FROM node:22-alpine +WORKDIR /app + +RUN corepack enable && corepack prepare pnpm@latest --activate + +COPY package.json pnpm-lock.yaml ./ +RUN pnpm install --frozen-lockfile --prod + +COPY server.mjs ./ + +ENV NODE_ENV=production +EXPOSE 3000 + +CMD ["node", "server.mjs"] diff --git a/Dockerfile.ssr b/Dockerfile.ssr new file mode 100644 index 0000000..ae9be08 --- /dev/null +++ b/Dockerfile.ssr @@ -0,0 +1,25 @@ +# --- Stage 1: Build Astro SSR --- +FROM node:22-alpine AS build +WORKDIR /app + +RUN corepack enable && corepack prepare pnpm@latest --activate + +COPY package.json pnpm-lock.yaml ./ +RUN pnpm install --frozen-lockfile + +COPY . . +RUN pnpm build + +# --- Stage 2: Runtime --- +FROM node:22-alpine AS runtime +WORKDIR /app + +COPY --from=build /app/dist ./dist +COPY --from=build /app/node_modules ./node_modules +COPY --from=build /app/package.json ./ + +ENV HOST=0.0.0.0 +ENV PORT=4321 +EXPOSE 4321 + +CMD ["node", "dist/server/entry.mjs"]