41 lines
1.2 KiB
Docker
41 lines
1.2 KiB
Docker
# ---- 构建阶段 ----
|
||
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"]
|