update
This commit is contained in:
41
Dockerfile
41
Dockerfile
@ -1,21 +1,17 @@
|
||||
# ---- 前端构建阶段 ----
|
||||
# ---- 构建阶段 ----
|
||||
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
|
||||
# 构建期 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 内部端口的可选访问令牌(防御纵深)。仅构建期 node fetch 使用,且不带 PUBLIC_ 前缀,
|
||||
# 故绝不会进入前端 bundle。置空时后端不校验(依赖回环绑定即可)。
|
||||
# SSG 内部接口可选令牌(无 PUBLIC_ 前缀,绝不会进入前端 bundle)
|
||||
ARG SSG_TOKEN=""
|
||||
ENV SSG_TOKEN=$SSG_TOKEN
|
||||
|
||||
# 运行期浏览器调用地址:置空 = 同源相对路径 /api(由下方 nginx 反代到 backend:8090)
|
||||
# 运行期浏览器调用地址:空 = 同源相对 /api(由 proxy 反代到后端)
|
||||
ENV BASE_API=""
|
||||
|
||||
COPY package*.json ./
|
||||
@ -23,15 +19,22 @@ RUN npm ci
|
||||
COPY . .
|
||||
RUN npm run build
|
||||
|
||||
# ---- 运行阶段 ----
|
||||
# 前端以 @astrojs/node standalone server 运行(监听 3000),nginx 反代 / 到该端口、
|
||||
# 反代 /api 到 backend:8090。这样 on-demand SSR 详情页 / sitemap / robots 才能正确产出 HTML。
|
||||
# ---- 运行阶段:只跑 Astro node server,nginx 已独立成 proxy 容器 ----
|
||||
FROM node:22-alpine
|
||||
RUN apk add --no-cache nginx
|
||||
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
|
||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||
COPY entrypoint.sh /entrypoint.sh
|
||||
RUN chmod +x /entrypoint.sh
|
||||
EXPOSE 80
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
|
||||
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"]
|
||||
|
||||
Reference in New Issue
Block a user