ClipBucket 常用命令与运维实战
ClipBucket V5 运维手册:服务管理与五合一健康检查、常用 SQL、转码链路与 cron 批量转码实测、上传→转码→播放 E2E、备份恢复演练(mysqldump+tar,行数核验)与十条排障实录。
ClipBucket 常用命令与运维实战
目标:给 ClipBucket V5(v5.5.3-#221)管理员一份可照抄的运维手册——服务管理、数据库、日志、转码链路(含手动转码与定时任务)、上传→转码→播放全链实操、备份恢复,以及本专栏实测过程中沉淀的排障清单。全部命令与输出均来自 2026-10-28 实测;部署过程见《ClipBucket Docker Compose 部署实战》,参数含义见《ClipBucket 配置参数详解》。
一、环境信息
- 应用版本:ClipBucket V5 v5.5.3-#221(官方镜像
oxygenz/clipbucket-v5:latest,内置栈 Nginx 1.26.3 / PHP-FPM 8.5.12 / MariaDB 11.8.6 / Redis / FFmpeg 7.1.5) - 服务编排:Docker Compose v5.6.1,项目
clipbucket-5.5.3-stack,服务名clipbucket,服务实例名clipbucket-5.5.3-web,对外端口8142→80 - 持久化:
/var/lib/mysql(数据库)与/srv/http/clipbucket(站点)均为宿主目录挂载 - 示例账号:
admin/q1w2e3r4 - 站点内路径约定:站点根 =
/srv/http/clipbucket,Web 根 =/srv/http/clipbucket/upload
二、服务管理命令
以下命令在宿主 /opt/data/quzuo/tmp/clipbucket/compose(编排文件所在目录)执行。
docker compose ps # 服务状态
docker compose restart clipbucket # 重启服务
docker compose up -d --force-recreate # 变更编排后重建(数据卷不受影响)
docker compose logs -f clipbucket # 实时日志
docker compose ps 实测回显:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
clipbucket-5.5.3-web oxygenz/clipbucket-v5:latest "entrypoint.sh" clipbucket 36 minutes ago Up 36 minutes 0.0.0.0:8142->80/tcp, [::]:8142->80/tcp
服务内健康速查(一条命令验五个组件,实测回显注释):
docker exec clipbucket-5.5.3-web bash -c \
'curl -s -o /dev/null -w "web:%{http_code}\n" http://127.0.0.1/; \
redis-cli ping; \
mariadb -uroot -e "SELECT 1" | tail -1; \
ffmpeg -version | head -1 | cut -d" " -f1-3; \
php -v | head -1'
web:200
PONG
1
ffmpeg version 7.1.5-0+deb13u1
PHP 8.5.12 (cli)
三、数据库访问与常用 SQL
服务内置 MariaDB 客户端,root 免密走本地 socket:
docker exec -it clipbucket-5.5.3-web mariadb -uroot clipbucket
高频查询(实测可用):
-- 视频状态总览
SELECT videoid, title, file_name, status, active, broadcast, views
FROM cb_video ORDER BY videoid DESC;
-- 转码队列(等待处理的记录)
SELECT Q.id, V.file_name, V.status, Q.date_added, Q.is_completed
FROM cb_video_conversion_queue Q JOIN cb_video V ON V.videoid=Q.videoid
ORDER BY Q.id DESC LIMIT 10;
-- 配置键值(改配置先看这里)
SELECT name, value FROM cb_config WHERE name LIKE 'max_%' OR name LIKE 'proxy_%';
-- 用户与站点信息
SELECT userid, username, email, level FROM cb_users;
SELECT * FROM cb_version; -- 数据库结构版本(实测 5.5.3 / 221)
实测 cb_video 状态分布(本文写作时):
videoid title status
1 c Successful
2 second Successful
💡 结构提示:库共 122 张表(实测
SHOW TABLES计数)。若你的库缺表(如 tags 系列),见第 8.4 节断链导入修复。
四、日志体系
| 日志 | 路径 | 内容 |
|---|---|---|
| 转码日志(按天分目录) | upload/files/logs/<Y/m/d>/<file_name>.log | 逐行转码过程 + 输出详情 JSON 摘要 |
| 服务启动日志 | docker compose logs clipbucket | MariaDB/Redis/Nginx/PHP 启动横幅与告警 |
| Nginx/PHP 运行日志 | 服务内 /var/log/nginx/、/var/log/php8.5-fpm.log | 请求错误、PHP 致命错误 |
转码日志实测尾行(videoid=1,15 秒源片,耗时 4.4 秒):
==========================================
Conversion completed
==========================================
2026-10-28 10:22:28- Time Took : 4.4126 seconds
Conversion_status : completed
五、转码链路实战
5.1 链路全景(代码实测口径)
Web 上传 → files/temp/<随机名>.mp4 →(file_uploader 入库 cb_video=Waiting,
写 cb_video_conversion_queue 队列行,源文件落 files/conversion_queue/<Y/m/d>/)
→ 转码器(CLI:php actions/video_convert.php <file_name>)
→ FFmpeg 按启用档位输出 ≤ 源片分辨率的多码率 MP4(files/videos/<Y/m/d>/)
+ webp 缩略图(files/thumbs/video/<Y/m/d>/<file_name>/)
→ 队列行 is_completed=1,cb_video.status=Successful
分辨率档位来自 cb_video_resolution 表(实测 7 行:240p/360p/480p/720p/1080p 启用,1440p/2160p 默认停用,各含宽高与码率)。640×360 源片实测只产出 240p+360p——高于源片的档位自动跳过。
5.2 手动转码(单个视频)
docker exec clipbucket-5.5.3-web bash -c \
'cd /srv/http/clipbucket/upload && php actions/video_convert.php 179318291709958'
CLI 静默运行(进度与结果全部写入第 4 节的转码日志)。两条实测行为:
- 无参数直接执行:静默退出(
$argv[1]缺失即 die,退出码 0)——cron 配置必须传文件名; - 可选第二参数为音轨号(
$argv[2],多音轨视频选轨转码)。
5.3 定时转码(cron 实测可用的一行命令)
等待处理 = cb_video.status='Waiting' 且队列行未完成。实测通过的扫描+转码循环(服务内 crontab 示例,每分钟一次):
* * * * * cd /srv/http/clipbucket/upload && for FN in $(mariadb -uroot clipbucket -N -e "SELECT V.file_name FROM cb_video V LEFT JOIN cb_video_conversion_queue Q ON Q.videoid=V.videoid WHERE V.status='Waiting' AND (Q.is_completed=0 OR Q.is_completed IS NULL);"); do php actions/video_convert.php "$FN"; done
实测执行结果(videoid=2 演示):
videoid title status
1 c Successful
2 second Successful ← Waiting → Successful,队列行 is_completed=1
配套的收尾动作 actions/verify_converted_videos.php(内部触发 verify_converted_videos_cron 钩子,用于核对转换产物与缩略图)同样适合放进 cron。
5.4 上传→转码→播放全链实操(E2E 复盘)
自造源片(容器内置 FFmpeg,640×360 + 440Hz 音轨,15 秒):
docker exec clipbucket-5.5.3-web bash -c \
'ffmpeg -f lavfi -i testsrc=size=640x360:rate=25 -f lavfi -i sine=frequency=440:sample_rate=44100 \
-t 15 -c:v libx264 -preset ultrafast -pix_fmt yuv420p -c:a aac -shortest -y /tmp/cbdemo.mp4'
Web 上传(浏览器登录 admin → Upload;或等价的 HTTP 调用:登录 actions/login.php 后向 actions/file_uploader.php POST 分片四件套 chunk/chunks/name/unique_id + Filedata 文件)。实测响应:
{"success":"yes","file_name":"179318291709958","videoid":1}
转码完成后逐项验证(实测):
| 验证项 | URL / 路径 | 实测结果 |
|---|---|---|
| 多码率文件 | files/videos/2026/10/28/ | -240.mp4、-360.mp4(464KB 源 → 360p 输出 517939 字节) |
| 缩略图 | files/thumbs/video/2026/10/28/179318291709958/ | 5 帧 webp(512x320/768x480/original) |
| 视频可播 | GET /files/videos/.../179318291709958-360.mp4 | 200,字节数一致 |
| 观看页 | GET /watch_video.php?v=1 | 200,播放器 video-js 标记,标题正常 |
| 播放计数 | cb_video.views | 0 → 2(访问即计) |
六、备份与恢复
6.1 备份(实测命令)
# 数据库(一致性快照)
docker exec clipbucket-5.5.3-web bash -c \
'mkdir -p /tmp/cb_backup && mariadb-dump -uroot --single-transaction --routines clipbucket \
> /tmp/cb_backup/db-clipbucket-$(date +%F).sql'
# 视频产物 + 缩略图 + 站点配置文件
docker exec clipbucket-5.5.3-web bash -c \
'cd /srv/http/clipbucket/upload && tar czf /tmp/cb_backup/files-$(date +%F).tar.gz \
files/videos files/thumbs includes/config.php'
实测产出:
-rw-r--r-- 1 root root 571755 Oct 28 10:31 db-clipbucket-2026-10-28.sql
-rw-r--r-- 1 root root 2173603 Oct 28 10:31 files-2026-10-28.tar.gz
把 /tmp/cb_backup 拷回宿主(docker cp)即完成离线归档。规模化建议:把 mariadb-dump 与 tar 挂 cron 每日执行,输出落到挂载的数据盘。
6.2 恢复演练(实测)
新建临时库导入备份 SQL,核验行数后清理:
docker exec clipbucket-5.5.3-web bash -c \
'mariadb -uroot -e "DROP DATABASE IF EXISTS cb_restore_test; CREATE DATABASE cb_restore_test;" && \
mariadb -uroot cb_restore_test < /tmp/cb_backup/db-clipbucket-2026-10-28.sql && \
mariadb -uroot cb_restore_test -N -e "SELECT COUNT(*) FROM cb_video; SELECT COUNT(*) FROM cb_users;"'
实测回显(与源库一致:视频 1 条、用户 2 条):
1
2
⚠️ 恢复到真实站点时按镜像部署约定处理数据目录属主(本环境 UID/GID=1000),并保持
includes/config.php与备份同源。
七、命令速查表
| 目的 | 命令 |
|---|---|
| 服务状态/日志 | docker compose ps / docker compose logs -f clipbucket |
| 组件健康 | 第三节五合一命令 |
| 进站点 shell | docker exec -it clipbucket-5.5.3-web bash |
| 进数据库 | docker exec -it clipbucket-5.5.3-web mariadb -uroot clipbucket |
| 手动转码单个 | php actions/video_convert.php <file_name> |
| 批量转码(cron) | 5.3 节扫描循环 |
| 收尾核验(cron) | php actions/verify_converted_videos.php |
| 看转码日志 | cat files/logs/<Y/m/d>/<file_name>.log |
| 备份 | 6.1 节两条 |
| 站点配置表 | SELECT name,value FROM cb_config WHERE ... |
八、排障实录汇编(实测沉淀)
- 数据库起不来,连接报 socket 111:MariaDB 日志见
[ERROR] Aborting/ 权限表打不开。根因:数据目录为空(bind mount 盖掉初始化数据)。处置:把镜像内/var/lib/mysql初始化内容拷入挂载目录并chown -R 1000:1000(见部署篇 3.3),或改用命名卷。 - 打开安装器/后台 500:版本检查需出网(
update.class.php:104用file_get_contents+stream context 拉 JSON)。无外网临时关allow_url_fopen;有代理就在后台配proxy_enable/proxy_url/proxy_port(实测该配置生效于 stream context 与 cURL 两条链路)。 - 向导过了数据库页但后续页 500:
includes/config.php未生成时框架回退加载不存在的dbconnect.php。跑完向导配置生成步即可;手工补齐按 553 字节模板($DBHOST/$DBNAME/$DBUSER/$DBPASS/$DBPORT+TABLE_PREFIX)。 - 安装器删不掉/重复可进:安装锁
files/temp/install.me。删除即锁(实测删除后访问/cb_install/302 回首页)。 - 裸 POST 上传报
file_uploader : missing infos:enable_chunk_upload=yes时必须带chunk/chunks/name/unique_id。另有Invalid Content : application(实测复现)= 上传内容损坏/为空,检查源文件本身。 - 观看页跳首页:
videosSection=no(分区开关默认全关)。后台 Basic Configuration 打开即恢复(实测 302→200)。 - 上传标题只有一个字:
max_video_title=1(默认)。上传接口按它mb_substr截断文件名;调大后新上传标题完整(实测第二条视频标题second正常落库)。该限制同时作用于各类写入口的标题校验。 - 查视频返回空(get_video 为 null):
cb_version标称新版本但 tags 系列表缺失(安装器 SQL 导入断链且不回滚版本号)。用cb_install/sql/structure.sql(幂等)重导补齐 122 张表。 - CLI 直插视频记录报
You are not logged in:submit_upload依赖登录态,官方路径是 Web 上传入队 + cron 转码,不要用脚本伪造入库。 - MariaDB 启动日志
io_uring_queue_init() failed with EPERM:宿主内核禁用 io_uring 时 MariaDB 自动回退 libaio(实测回显create_uring failed: falling back to libaio),无功能影响,可忽略。
九、参考
- 本专栏姊妹篇:《ClipBucket 介绍与选型指南》《ClipBucket Docker Compose 部署实战》《ClipBucket 配置参数详解》
- 官方仓库:https://github.com/MacWarrior/clipbucket-v5
- 转码/队列相关代码入口(本环境实测路径):
upload/actions/video_convert.php、upload/actions/verify_converted_videos.php、upload/includes/functions_video.php