Files
what-to-eat/Dockerfile
T
toor 7049eb02a8 feat: 增加 Docker 部署(Dockerfile + compose,端口 2229)
用多阶段构建把 Nuxt 静态产物交给 nginx 托管,对外暴露 2229 端口。
nginx 配置覆盖 SPA 路由回退与静态资源缓存策略,构建上下文用 .dockerignore 排除依赖与产物。
2026-10-21 14:38:50 +08:00

46 lines
1.5 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ---------- 构建阶段 ----------
FROM node:24-alpine AS builder
# pnpm 版本与 package.json 的 packageManager 字段保持一致
RUN npm install -g pnpm@11.21.0
WORKDIR /app
# 构建期关闭遥上报,避免容器构建时产生外部请求
ENV NUXT_TELEMETRY_DISABLED=1
# 先只复制依赖清单,让 pnpm install 这一层可以被缓存复用
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
COPY apps/web/package.json apps/web/package.json
COPY packages/cook/package.json packages/cook/package.json
COPY docs/package.json docs/package.json
RUN pnpm install --frozen-lockfile
# 再复制源码并构建
COPY . .
# 统计配置在构建期编译进静态产物
ARG NUXT_PUBLIC_CLARITY_PROJECT_ID=ks1ebw03i5
ARG NUXT_PUBLIC_CLARITY_DOMAINS=cook.yunyoujun.cn,cook.yunle.fun
ENV NUXT_PUBLIC_CLARITY_PROJECT_ID=${NUXT_PUBLIC_CLARITY_PROJECT_ID}
ENV NUXT_PUBLIC_CLARITY_DOMAINS=${NUXT_PUBLIC_CLARITY_DOMAINS}
# 镜像里没有 .git,版本号组件拿不到 commit;传入该值即可显示版本信息
ARG CF_PAGES_COMMIT_SHA=
ENV CF_PAGES_COMMIT_SHA=${CF_PAGES_COMMIT_SHA}
# 构建产物输出到仓库根目录的 dist/(见 scripts/copy-web-output.ts)
RUN pnpm run build
# ---------- 运行阶段 ----------
FROM nginx:stable-alpine
COPY docker/nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 2229
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD wget -qO- http://127.0.0.1:2229/ >/dev/null || exit 1