# syntax=docker/dockerfile:1.10 # The build output is platform-independent, so build natively (no QEMU) for multi-arch images. FROM --platform=$BUILDPLATFORM node:24-alpine AS build WORKDIR /app RUN corepack enable ENV ASTRO_TELEMETRY_DISABLED=1 COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ RUN --mount=type=cache,id=pnpm,target=/root/.local/share/pnpm/store \ pnpm install --frozen-lockfile COPY . . # The canonical site URL is compiled in; Harbor settings are read at runtime (see below). ARG SITE_URL RUN pnpm build FROM node:24-alpine WORKDIR /app ENV NODE_ENV=production HOST=0.0.0.0 PORT=8080 # Default Harbor instance; still overridable with `-e HARBOR_URL=...` at runtime. ARG HARBOR_URL ENV HARBOR_URL=${HARBOR_URL} # The server build is self-contained (see `vite.ssr.noExternal`), so no node_modules. COPY --from=build /app/dist ./dist COPY package.json server.mjs ./ USER node EXPOSE 8080 CMD ["node", "server.mjs"]