# ---- 前端构建阶段 ----
FROM node:22-alpine AS build
WORKDIR /app

# 构建期 SSG 拉数据用的「后端 SSG 内部地址」。
# 在 docker-compose 里通过 build.args.BASE_API_SSG 传入（= http://localhost:8091，
# 配合 build.network: host，让前端构建容器能访问已启动的 backend 容器的 SSG 内部端口）。
# 该端口只绑宿主回环（127.0.0.1:8091），nginx 绝不反代，因此 SSG 全量数据不会外泄。
# BASE_API_SSG 与运行期 BASE_API（8090）完全分离，二者指向不同端口。
ARG BASE_API_SSG=http://localhost:8091
ENV BASE_API_SSG=$BASE_API_SSG

# SSG 内部端口的可选访问令牌（防御纵深）。仅构建期 node fetch 使用，且不带 PUBLIC_ 前缀，
# 故绝不会进入前端 bundle。置空时后端不校验（依赖回环绑定即可）。
ARG SSG_TOKEN=""
ENV SSG_TOKEN=$SSG_TOKEN

# 运行期浏览器调用地址：置空 = 同源相对路径 /api（由下方 nginx 反代到 backend:8090）
ENV BASE_API=""

COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# ---- 运行阶段 ----
# 前端以 @astrojs/node standalone server 运行（监听 3000），nginx 反代 / 到该端口、
# 反代 /api 到 backend:8090。这样 on-demand SSR 详情页 / sitemap / robots 才能正确产出 HTML。
FROM node:22-alpine
RUN apk add --no-cache nginx
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
EXPOSE 80
ENTRYPOINT ["/entrypoint.sh"]
