toolName: search_by_regex status: success query: StaticFiles toolName: view_files status: success filePath: /Users/fanyang/Desktop/FunMD_Convert/docling/app/server.py toolName: view_folder status: success /Users/fanyang/Desktop/FunMD_Convert toolName: view_files status: success filePath: /Users/fanyang/Desktop/FunMD_Convert/Dockerfile toolName: view_folder status: success /Users/fanyang/Desktop/FunMD_Convert toolName: edit_file_update status: success filePath: /Users/fanyang/Desktop/FunMD_Convert/Dockerfile changes: toolName: ApplyPatch status: failed toolName: write_to_file status: success filePath: /Users/fanyang/Desktop/FunMD_Convert/package_offline.sh content: undefined toolName: todo_write status: success Todos updated: 2 items 下面是按你给出的参考流程,结合当前项目的启动方式(后端 FastAPI 同时托管前端 `/ui`),进行“打包 → 传输 → 加载 → 启动”的完整方案。 **打包镜像** - 在项目根目录执行: - 构建镜像:`docker build -t funmd-convert:latest .` - 保存镜像:`docker save funmd-convert:latest -o FunMD_Convert.tar` - 查看大小:`ls -lh FunMD_Convert.tar` - 计算校验:`shasum -a 256 FunMD_Convert.tar | awk '{print $1}'` - 也可以直接用脚本: - `chmod +x package_offline.sh && ./package_offline.sh` - 该脚本会自动构建、生成 `FunMD_Convert.tar`、打印大小与 `sha256`,并给出服务器端加载和运行提示 **离线服务器加载** - 复制镜像包到服务器:`scp FunMD_Convert.tar user@server:/opt/FunMD_Convert/` - 加载镜像:`docker load -i /opt/FunMD_Convert/FunMD_Convert.tar` - 验证镜像:`docker images | grep funmd-convert` **启动容器** - 启动后端(同时托管前端 `/ui`): `docker run -d -p 8000:8000 --name FunMD_Convert --restart unless-stopped funmd-convert:latest` - 访问地址: - 后端健康检查:`http://<服务器IP>:8000/health` - 前端页面:`http://<服务器IP>:8000/ui/` - API 基地址:`http://<服务器IP>:8000/api/…` **MinIO 配置(首次部署或变更时)** - 通过后端接口配置 MinIO(确保 `public` 指向内网可达的 9000 端口): - `curl -X POST -F endpoint=10.9.35.31:9000 -F public=http://10.9.35.31:9000 -F access= -F secret= -F bucket=file-cms -F secure=false -F public_read=true http://<服务器IP>:8000/config/minio` - 验证连接:`curl -X POST -F endpoint=10.9.35.31:9000 -F bucket=file-cms -F access= -F secret= -F secure=false http://<服务器IP>:8000/config/minio/test` **说明与对齐** - 镜像内已包含: - 后端 FastAPI 服务(`uvicorn` 启动,端口 `8000`) - 前端已构建的静态资源,后端自动挂载为 `/ui` 与 `/assets` - Docling 模型离线预下载(构建阶段执行),容器内可直接使用 - 前端请求基座: - 当用后端托管前端时,前端自动回退到 `http://<当前主机>:8000`,无需额外配置 - 中文路径与 URL 显示: - 后端已修复 Zip/Tar 解压中文“乱码”,同时返回 `minio_url`(安全编码)和 `minio_url_display`(中文可读),前端展示文本用后者,资源实际加载用前者 **推荐的打包校验清单** - 构建完成后: - `ls -lh offline-funmd-convert.tar` 确认大小合理(包含模型与前端) - `shasum -a 256 offline-funmd-convert.tar | awk '{print $1}'` 记录校验值 - 服务器端: - `docker load -i ...` 后 `docker images | grep offline-funmd-convert` 显示镜像 - `docker ps` 容器运行后访问 `http://<服务器IP>:8000/health` 为 `{"status":"ok"}` 如果你希望镜像命名和示例完全对齐项目名(如 `FunMD_Convert`),只需在构建与运行命令中替换为: - 构建:`docker build -t funmd-convert:latest .` - 保存:`docker save funmd-convert:latest -o FunMD_Convert.tar` - 加载:`docker load -i /opt/FunMD_Convert/FunMD_Convert.tar` - 启动:`docker run -d -p 8000:8000 --name FunMD_Convert --restart unless-stopped funmd-convert:latest`