-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
44 lines (35 loc) · 1.63 KB
/
Copy pathDockerfile
File metadata and controls
44 lines (35 loc) · 1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 飞虹 Code (fhcode) — 稳定部署镜像
# 多阶段构建:构建阶段编译 TS -> dist,运行阶段仅携带生产依赖。
# 注意:本项目用 src/web/express.d.ts 提供本地 Express 类型声明,
# 不依赖 @types/express,因此构建是密封(hermetic)且可复现的。
# ---------- 构建阶段 ----------
FROM node:20-slim AS build
WORKDIR /app
# 先拷贝清单并安装全部依赖(含 devDependencies:typescript/tsx)
COPY package.json package-lock.json* ./
RUN npm install
# 再拷贝源码并构建(tsc 编译 + 复制运行时资源,与 npm run build 完全一致:
# 统一走 scripts/copy-web.cjs —— Web 静态资源 + self-evolve/manager.js + cli/self-evolve-cli.js,
# 缺任一项启动链 require 即 MODULE_NOT_FOUND,勿再改回内联 node -e)
COPY . .
RUN npx tsc && node scripts/copy-web.cjs
# ---------- 运行阶段 ----------
FROM node:20-slim AS runtime
WORKDIR /app
ENV NODE_ENV=production \
FH_HOME=/data/fhcode \
FH_WEB_PORT=8080
# 仅安装生产依赖(express / zod)
COPY package.json package-lock.json* ./
RUN npm install --omit=dev && npm cache clean --force
# 拷贝构建产物与必要元数据
COPY --from=build /app/dist ./dist
COPY --from=build /app/README.md ./README.md
COPY --from=build /app/LICENSE ./LICENSE
# FH_HOME 持久化:会话 / 审计链 / 租户数据
VOLUME ["/data/fhcode"]
EXPOSE 8080
# 默认以 Web 控制台模式启动(企业运维入口)
# 如需纯 CLI,可覆盖:docker run ... node dist/cli/index.js --help
ENTRYPOINT ["node", "dist/cli/index.js"]
CMD ["serve", "--port", "8080"]