Files
dev_blog/Containerfile
2026-04-29 15:44:47 -05:00

51 lines
1.4 KiB
Docker

# syntax=docker/dockerfile:1.7
# ---------- Build stage ----------
FROM node:24-trixie-slim AS build
ENV PNPM_HOME=/pnpm \
PATH=/pnpm:$PATH \
CI=1
RUN corepack enable
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
pnpm install --frozen-lockfile
COPY . .
RUN pnpm run build
# ---------- Runtime stage ----------
FROM node:24-trixie-slim AS runtime
ENV NODE_ENV=production \
HOST=0.0.0.0 \
PORT=4321 \
ASTRO_TELEMETRY_DISABLED=1
RUN groupadd --system --gid 1001 astro \
&& useradd --system --uid 1001 --gid astro --shell /usr/sbin/nologin astro
WORKDIR /app
# Only what's needed to run `astro preview`
COPY --from=build --chown=astro:astro /app/package.json ./package.json
COPY --from=build --chown=astro:astro /app/node_modules ./node_modules
COPY --from=build --chown=astro:astro /app/dist ./dist
COPY --from=build --chown=astro:astro /app/astro.config.mjs ./astro.config.mjs
USER astro
EXPOSE 4321
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
CMD node -e "fetch('http://127.0.0.1:'+ (process.env.PORT||4321) +'/').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"
# Invoke astro directly via node to avoid corepack/pnpm shims at runtime
# (the rootfs is read-only and corepack would try to write a cache dir).
CMD ["node", "./node_modules/astro/bin/astro.mjs", "preview", "--host", "0.0.0.0", "--port", "4321"]