FROM node:24-alpine AS web-build WORKDIR /src COPY web/package.json web/package-lock.json ./web/ RUN cd web && npm ci COPY seo ./seo COPY web ./web RUN cd web && npm run build:client && npx vite build --ssr src/entry-server.jsx --outDir .ssr && npm prune --omit=dev FROM golang:1.26-alpine AS build WORKDIR /src COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o /out/server ./cmd/server FROM node:24-alpine RUN apk add --no-cache ca-certificates tzdata && adduser -D -u 10001 app COPY --from=build /out/server /usr/local/bin/server WORKDIR /app COPY --from=web-build /src/web/dist ./web/dist COPY --from=web-build /src/web/.ssr ./web/.ssr COPY --from=web-build /src/web/node_modules ./web/node_modules COPY web/package.json ./web/package.json COPY web/scripts/render-page.mjs web/scripts/seo-document.mjs ./web/scripts/ ENV WEB_DIR=/app/web/dist SSR_RENDERER=/app/web/scripts/render-page.mjs USER app EXPOSE 8080 ENTRYPOINT ["server"]