开发者指南 · 14
Docker 部署
14.1 多阶段构建
dockerfile
# Stage 1: frontend-builder
FROM node:20-alpine AS frontend-builder
RUN npm ci && npm run build # → dist/
# Stage 2: production
FROM python:3.11-slim
RUN pip install -r requirements.txt
RUN npm install express http-proxy-middleware
COPY --from=frontend-builder /build/dist /app/frontend/dist- React 源码和 devDependencies 不进入最终镜像
- Express
server.js从dist/提供静态文件
14.2 docker-compose
text
Cloudflare (SSL) → Nginx (:80) → Express (:3000) → FastAPI (:8000)- Nginx:SSL 终止 + 反向代理(
nginx/nginx.conf) - Express:静态资源 +
/api代理 - FastAPI:核心后端
- 用户数据 volume:
./data/users:/app/users
14.3 启动脚本(start.sh)
- 启动 FastAPI(
:8000) - 等待就绪后启动 Express(
:3000) wait -n监控两个进程
14.4 健康检查
容器内置健康检查(检查 FastAPI /docs 端点),Nginx 在后端就绪后才接受流量。
14.5 .dockerignore
排除 frontend/node_modules/ / frontend/dist/ / venv/ / data/ / .env / .git/。
14.6 可选 CLI 构建参数
Compose 将 JELLYFISH_CODEX_CLI_VERSION 与 JELLYFISH_CURSOR_CLI_VERSION 独立传入 Docker 构建,留空则跳过安装。在 .env 固定版本后执行 docker compose up -d --build openjellyfish,再执行 docker compose exec nginx nginx -s reload。单独打开运行时环境开关不会安装 CLI。镜像以 UID 1000 运行,确保 data/ 可写并持久化,包括 data/runtime 和 data/superadmin.key;自定义可执行文件路径必须是容器内路径。