fix(worker): ffmpeg改用apt安装,彻底解决下载慢+缓存+语法+清理问题 #689

Merged
auto-approve-bot merged 1 commits from fix/worker-ffmpeg-apt-install into develop 2026-07-21 22:19:56 +08:00
Owner

问题(连续3次踩坑后的终极修复)

  1. 下载慢:johnvansickle.com 下载 ffmpeg 静态包需要 36分钟
  2. 缓存坏包:下载到损坏文件后,buildx 缓存命中坏包反复失败(#681)
  3. 语法错误:bash 数组语法在 dash 下报错 Syntax error: "(" unexpected(#686→#688)
  4. 清理翻车rm -rf ffmpeg-* 误删 /tmp/ffmpeg-cache 挂载点,报 Device or resource busy(#688 合入后仍挂)

方案:改用 apt 安装

  • 直接 apt install ffmpeg,阿里云镜像,几秒完成
  • 放在 runtime 阶段安装,不依赖 builder 阶段的下载逻辑
  • 彻底消除:下载慢、缓存坏包、shell语法、清理误删 等所有问题
  • builder 阶段删掉 wget/xz-utils 等不再需要的依赖
  • 删掉 builder→runtime 的 ffmpeg 二进制拷贝

镜像体积

  • apt 版 ffmpeg 约 30MB(含依赖)
  • 静态编译版约 80MB
  • 体积略有增加,但构建速度和稳定性收益远大于体积代价

教训

  1. Dockerfile 的 RUN 默认用 /bin/sh(dash),必须用纯 sh 语法
  2. rm -rf foo-* 可能匹配到意料之外的文件/目录,必须精确匹配
  3. 外部下载依赖不可靠,优先用系统包管理器
## 问题(连续3次踩坑后的终极修复) 1. **下载慢**:johnvansickle.com 下载 ffmpeg 静态包需要 **36分钟** 2. **缓存坏包**:下载到损坏文件后,buildx 缓存命中坏包反复失败(#681) 3. **语法错误**:bash 数组语法在 dash 下报错 `Syntax error: "(" unexpected`(#686→#688) 4. **清理翻车**:`rm -rf ffmpeg-*` 误删 `/tmp/ffmpeg-cache` 挂载点,报 `Device or resource busy`(#688 合入后仍挂) ## 方案:改用 apt 安装 - 直接 `apt install ffmpeg`,阿里云镜像,**几秒完成** - 放在 runtime 阶段安装,不依赖 builder 阶段的下载逻辑 - 彻底消除:下载慢、缓存坏包、shell语法、清理误删 等所有问题 - builder 阶段删掉 wget/xz-utils 等不再需要的依赖 - 删掉 builder→runtime 的 ffmpeg 二进制拷贝 ## 镜像体积 - apt 版 ffmpeg 约 30MB(含依赖) - 静态编译版约 80MB - 体积略有增加,但构建速度和稳定性收益远大于体积代价 ## 教训 1. Dockerfile 的 RUN 默认用 /bin/sh(dash),必须用纯 sh 语法 2. `rm -rf foo-*` 可能匹配到意料之外的文件/目录,必须精确匹配 3. 外部下载依赖不可靠,优先用系统包管理器
xiaoxia added 1 commit 2026-07-21 22:16:14 +08:00
fix(worker): ffmpeg改用apt安装,彻底解决下载慢+缓存+语法+清理问题
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 20s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 42s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Successful in 1m39s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 2m6s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m36s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m38s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m18s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m3s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m41s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 21s
425fece374
问题:
1. johnvansickle.com下载ffmpeg静态包需要36分钟
2. 缓存命中坏包导致反复失败
3. bash数组语法在dash下报错(#688)
4. rm -rf ffmpeg-* 误删cache挂载点导致Device or resource busy

方案:
- 直接用apt install ffmpeg,从阿里云镜像下载,几秒完成
- 放在runtime阶段安装,不依赖builder阶段的下载
- 彻底消除下载、缓存、语法、清理等所有问题
- builder阶段删掉wget/xz-utils等不再需要的依赖
- 删掉builder→runtime的ffmpeg二进制拷贝

镜像体积影响:ffmpeg apt包约30MB(含依赖),
和静态编译版(~80MB)相比可能略大,但稳定性和构建速度收益远大于体积代价

🚀 预览环境已部署

项目 详情
PR号 #689
预览链接 https://pr-689.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #689 | | 预览链接 | [https://pr-689.preview.xiaoxiajianji.com](https://pr-689.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
Collaborator

代码审查结果 - PR #689

⚠️ 问题(0个需要修改)

💡 建议(1个可选)

  1. infra/docker/worker.Dockerfile 第82行:建议为 ffmpeg 指定固定版本号(如 ffmpeg=7:6.1.1-3),以确保镜像构建的可复现性,防止因上游软件源更新导致意外构建失败或运行时行为变更。

格式检查通过 | 逻辑审查通过 | ⚠️ 建议关注性能


🤖 由 AI 代码审查机器人自动生成 | 2026-07-21 22:17:54 | 模型:

## 代码审查结果 - PR #689 ### ⚠️ 问题(0个需要修改) 无 ### 💡 建议(1个可选) 1. **infra/docker/worker.Dockerfile 第82行**:建议为 `ffmpeg` 指定固定版本号(如 `ffmpeg=7:6.1.1-3`),以确保镜像构建的可复现性,防止因上游软件源更新导致意外构建失败或运行时行为变更。 --- ✅ 格式检查通过 | ✅ 逻辑审查通过 | ⚠️ 建议关注性能 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-21 22:17:54 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot approved these changes 2026-07-21 22:18:53 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-07-21 22:18:53 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot merged commit 44402f01d6 into develop 2026-07-21 22:19:56 +08:00
auto-approve-bot deleted branch fix/worker-ffmpeg-apt-install 2026-07-21 22:19:56 +08:00

🗑️ 预览环境已清理

PR #689 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #689 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.