news 2026/9/12 5:57:44

Meetily 后端如何通过 build-docker.sh 与 run-docker.sh 完成 CPU 版 Docker 部署并查看服务状态

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Meetily 后端如何通过 build-docker.sh 与 run-docker.sh 完成 CPU 版 Docker 部署并查看服务状态

Meetily 后端如何通过 build-docker.sh 与 run-docker.sh 完成 CPU 版 Docker 部署并查看服务状态

【免费下载链接】meetilyPrivacy first, AI meeting assistant with 4x faster Parakeet/Whisper live transcription, speaker diarization, and Ollama summarization built on Rust. 100% local processing. no cloud required. Meetily (Meetly Ai - https://meetily.ai) is the #1 Self-hosted, Open-source Ai meeting note taker for macOS & Windows. Understand How to write meeting minutes项目地址: https://gitcode.com/GitHub_Trending/me/meetily

Meetily 后端的 Docker 部署由两个脚本协作完成:build-docker.sh负责构建镜像,run-docker.sh负责启动和管理容器。两者都位于backend目录,面向 macOS/Linux 的 Bash 环境(Windows 对应build-docker.ps1/run-docker.ps1)。部署成功后会在本机得到两个服务:Whisper 语音转写服务(默认端口 8178)和 FastAPI 会议应用(默认端口 5167),全部运行在 Docker 容器内。

部署前需要满足的条件

  • 已安装 Docker:Linux 使用 Docker Engine,macOS 使用 Docker Desktop;
  • Docker Buildx 可用——build-docker.sh 会执行docker buildx version检查,不可用会直接报错退出;首次构建时脚本会创建一个名为whisper-builder的 buildx 构建器;
  • backend目录下存在whisper.cpp目录,脚本检查不到时会输出 "whisper.cpp directory not found" 并退出;
  • 给 Docker 分配 8GB 以上内存。backend/README.md 要求为容器分配 8GB+ RAM;docker-compose.yml 的注释进一步建议每个服务 8GB 内存起、2 个以上 CPU 核心;
  • 能访问外网:Whisper 模型不在本地时由脚本或容器下载。

用 build-docker.sh 构建 CPU 版镜像

backend目录下执行:

cd backend ./build-docker.sh cpu

cpu参数指定构建 CPU 版 whisper server,会议应用镜像会一并构建。脚本按以下顺序执行:

  1. 创建data/models/config/目录;
  2. 检查 Docker、Buildx 与whisper.cpp目录;
  3. 进入whisper.cpp目录执行git submodule update --init --recursive(会更新该子模块的检出状态),并把whisper-custom/server/下的自定义 server 文件复制到whisper.cpp/examples/server/
  4. 基于 Dockerfile.server-cpu 构建whisper-server镜像,基于 Dockerfile.app 构建meetily-backend镜像。两个镜像都会打上「类型-日期-githash」形式的完整标签,并额外打一个短标签(whisper-server:cpumeetily-backend:app)。

每个镜像构建成功会输出Successfully built: <镜像名:标签>,全部结束后输出=== Build Complete ===,本地构建还会列出已构建的镜像清单,可据此确认两个镜像都已生成。

两点说明:

  • 在 macOS 上执行cpu时,脚本检测到系统后会自动改用 macOS 优化构建(Dockerfile.server-macos),这是脚本内置行为,无需额外操作。
  • run-docker.sh 的start在启动前会检查whisper-server:cpumeetily-backend镜像是否存在,缺失时会自动调用build-docker.sh构建。所以这一步可以省略,但预先构建能让你在启动阶段之前就看到构建错误。

可选参数:--no-cache(不使用缓存构建)、--dry-run(只打印将执行的命令),常规部署不需要。./run-docker.sh build cpu也可以作为入口,它会原样转发给build-docker.sh

用 run-docker.sh 启动两个服务

首次部署:交互式启动

./run-docker.sh start --interactive

向导依次要求确认:

  • 模型:默认base.en,支持 tiny 到 large-v3 及 q5_1、turbo 变体,大小参考(来自 README):tiny ~39 MB、base ~142 MB、small ~244 MB、medium ~769 MB、large-v3 ~1550 MB;
  • 语言:默认 auto,也支持直接输入语言代码;
  • 端口:Whisper 端口默认 8178、应用端口默认 5167,带冲突检测;
  • 数据库:全新安装(在backend/data/下创建空的meeting_minutes.db)或从已有安装迁移;
  • GPU 模式:自动检测,未检测到 GPU 的机器会提示 "No GPU detected, using CPU mode";
  • 翻译:是否启用转写成英文。

选择会保存到backend/.docker-preferences,下次启动可直接复用。

如果所选模型不在本地backend/models/目录,脚本会提示 "Download model now? (Y/n)":选 Y 会立即下载到backend/models/ggml-<model>.bin;选 N 或非交互环境时,模型在容器启动过程中自动下载,启动时间会更长。

非交互启动

./run-docker.sh start --detach

注意:在终端中执行且未传自定义模型/语言时,脚本仍会先进入设置流程——首次运行直接进入上面的完整设置向导;如果已存在.docker-preferences,则先出现「1 复用上次设置 / 2 自定义 / 3 使用默认值」菜单,选 3 即可按默认值继续,随后在后台启动。也可以把参数一次给全,完全跳过交互(README 中的示例):

./run-docker.sh start --model base --language es --detach

不带--detach时,脚本启动服务后会持续跟随容器日志,按 Ctrl+C 会弹出「继续看日志 / 退出(服务保持运行)/ 停止服务 / 重启 / 查看状态」的选项菜单。

其他常用选项见./run-docker.sh --help--port(Whisper 端口)、--app-port(应用端口)、--cpu/--gpu(强制模式,CPU-only 机器默认就是 CPU 镜像,可不传)、--env-file。环境变量WHISPER_MODELWHISPER_PORTAPP_PORT也能覆盖对应默认值。

验证服务是否就绪

启动时的自动检查

--detach启动成功后,脚本先输出两个服务地址(Whisper Server: http://localhost:<port>Meeting App: http://localhost:<app_port>),然后自动等待两个阶段:

  1. 等待容器内模型文件就绪,最长 5 分钟(对应模型下载);
  2. 轮询http://localhost:8178/http://localhost:5167/get-meetings两个端点,最长 1 分钟。

两个端点都有响应时输出 "All services are ready!";某一项超时则输出对应服务的日志排查命令(logs --service whisper -flogs --service app -f)。

用 status 命令查看

./run-docker.sh status

该命令先执行docker compose ps显示容器状态,再检查容器端口映射,并对两个服务做连通性检查,输出形如:

Whisper Server: http://localhost:8178 Whisper Server is responding Meeting App: http://localhost:5167 Meeting App is responding

(端口以脚本实际显示的映射端口为准;服务无响应时会输出 "not responding"。)如果两个容器都不在运行,会输出 "No services are running"。

手动访问确认

  • Whisper Server:http://localhost:8178,健康检查为GET /,转写接口为POST /inference,另提供 WebSocket(ws://localhost:8178/);
  • 会议应用:http://localhost:5167,API 文档在http://localhost:5167/docs(Swagger UI),健康检查为GET /get-meetings,WebSocket 为ws://localhost:5167/ws

运行中的常见处理与适用边界

端口冲突:先./run-docker.sh stop停掉服务,再用lsof -i :8178(macOS/Linux)或netstat -an | grep :8178查看占用进程。交互式启动的端口选择菜单在检测到端口被占用时,也可以选择直接终止占用进程——该操作会对目标端口进程执行kill -9,执行前请确认该进程可以终止。

模型下载失败:确认网络连接与磁盘空间后手动下载:

./run-docker.sh models download base.en

脚本从 Hugging Face 的 whisper.cpp 仓库拉取ggml-<model>.binbackend/models/,成功后输出 "Model downloaded successfully"。模型名必须在脚本支持列表内(tiny 到 large-v3 及其 q5_1、turbo 变体),否则报错并列出可用模型。

停止与清理./run-docker.sh stop执行docker compose down停止服务。./run-docker.sh clean执行down --volumes --remove-orphans,除容器外还会删除 compose 定义的数据卷,包括存放已下载模型的whisper_models卷(模型下次需要重新下载;backend/data/是 bind mount,数据库文件不受影响),加--images还会删除镜像。执行前确认不再需要当前运行数据。

资源不足导致丢音频:容器内存/CPU 不足时,音频处理队列(上限 10 条)会被写满,日志出现 "Dropped old audio chunk X due to queue overflow",症状是转写缺失或不完整、处理延迟。对策是增大 Docker 的内存与 CPU 分配(README 建议 8GB+ 内存),并选择与硬件匹配的 Whisper 模型大小。

适用边界

  • 本文只覆盖 CPU 路径;GPU 构建需要 NVIDIA 驱动和 nvidia-container-toolkit,属于另一条路径(./build-docker.sh gpu);
  • README 的脚本参考列出了--diarize启动选项,但在 run-docker.sh 中该选项已被注释("Feature not available yet"),当前版本暂不可用;
  • 脚本运行会修改本地文件:创建data/models/config/目录,生成.docker-preferences偏好文件和data/meeting_minutes.db,并在whisper.cpp内更新子模块。

更多脚本说明可参考 backend/SCRIPTS_DOCUMENTATION.md,服务编排细节见 backend/docker-compose.yml。

【免费下载链接】meetilyPrivacy first, AI meeting assistant with 4x faster Parakeet/Whisper live transcription, speaker diarization, and Ollama summarization built on Rust. 100% local processing. no cloud required. Meetily (Meetly Ai - https://meetily.ai) is the #1 Self-hosted, Open-source Ai meeting note taker for macOS & Windows. Understand How to write meeting minutes项目地址: https://gitcode.com/GitHub_Trending/me/meetily

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 5:57:44

Python分形艺术创作:从数学原理到算法实现

1. 为什么选择Python进行算法艺术创作 当我在2015年第一次用Matlab绘制出曼德勃罗集时&#xff0c;就被算法生成的艺术品震撼了。但真正让我转向Python的原因&#xff0c;是它在科学计算与可视化领域的完整生态。今天&#xff0c;我想分享如何用Python这个"数字画笔"…

作者头像 李华
网站建设 2026/9/12 5:57:35

MBA论文降AI率工具对比与实战技巧

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 5:57:03

2026深圳化工产品成分分析检测排名 TOP5 CMA 资质提供含量检测、纯度检测、元素分析 联系方式推荐

深圳化工产品成分分析检测市场&#xff0c;机构林立&#xff0c;良莠不齐。化工企业、新材料厂商、日化生产工厂、橡塑制造业以及食品医药企业的研发质检部门&#xff0c;在筛选服务商时&#xff0c;稍有不慎便会误入无正规资质的检测机构&#xff0c;其出具的成分分析报告不仅…

作者头像 李华
网站建设 2026/9/12 5:53:51

告别EasyExcel:Java Excel处理的架构升级路径

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 5:52:42

MATLAB实现可交互TSP-PSO算法:排列编码与GUI可视化

简介&#xff1a;本资源是一套基于MATLAB实现的粒子群优化&#xff08;PSO&#xff09;算法求解旅行商问题&#xff08;TSP&#xff09;的完整仿真方案&#xff0c;面向算法初学者、智能优化方向本科生及工程实践者&#xff0c;聚焦组合优化问题建模与可视化验证。压缩包共5个文…

作者头像 李华
网站建设 2026/9/12 5:52:08

MATLAB离散PSO求解TSP:排列编码与交换速度实现

简介&#xff1a;本资源是一套基于MATLAB实现的粒子群优化&#xff08;PSO&#xff09;算法求解旅行商问题&#xff08;TSP&#xff09;的完整仿真方案&#xff0c;面向算法初学者、智能优化方向本科生及工程实践者&#xff0c;聚焦组合优化核心难点——在NP难问题中高效搜索近…

作者头像 李华