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"]
