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

# 构建期 SSG 取数地址：走宿主回环的代理 18091（deploy.sh 传 build-arg，配合 build.network=host）。
# 由代理转发到「当前活跃的后端槽」，所以构建期不受正在更新哪个槽影响。
ARG BASE_API_SSG=http://127.0.0.1:18091
ENV BASE_API_SSG=$BASE_API_SSG

# SSG 内部接口可选令牌（无 PUBLIC_ 前缀，绝不会进入前端 bundle）
ARG SSG_TOKEN=""
ENV SSG_TOKEN=$SSG_TOKEN

# 运行期浏览器调用地址：空 = 同源相对 /api（由 proxy 反代到后端）
ENV BASE_API=""

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

# ---- 运行阶段：只跑 Astro node server，nginx 已独立成 proxy 容器 ----
FROM node:22-alpine
WORKDIR /app

ENV NODE_ENV=production \
    HOST=0.0.0.0 \
    PORT=3000

COPY package*.json ./
RUN npm ci --omit=dev && npm cache clean --force
COPY --from=build /app/dist ./dist

EXPOSE 3000

# 只探端口存活：SSR 取数临时失败不应该把容器判死（否则蓝绿切换会误判）
HEALTHCHECK --interval=15s --timeout=3s --start-period=15s --retries=3 \
  CMD nc -z 127.0.0.1 3000 || exit 1

CMD ["node", "./dist/server/entry.mjs"]
