DDTV_Docker版使用教程(Linux)

February 4, 2023 · View on GitHub

Docker 镜像在 Docker HubGitHub Container registry 上提供。

两个位置提供的镜像完全一样,都是对 DDTV 发行版本的简单包装。

先决条件

  • Linux
  • 容器引擎,如 Docker-ce 18.03 或更高版本 (安装教程)、Podman 等

:::tip DockerHub 更换镜像源 DockerHub 更换镜像源教程 :::

可用镜像

Docker 项目名特点
DDTV_CLI重启容器即可更新 DDTV
DDTV_WEB_Server重启容器即可更新 DDTV
DDTV_Deps只含 DDTV 必须依赖

:::tip 在容器中更新 DDTV 重启容器即可,配置AutoInsallUpdate目前仅供DDTV_GUI使用。 :::

镜像名

Docker 项目名GHCR 镜像名Docker Hub 镜像名
DDTV_CLIghcr.io/chkzl/ddtv/cliddtv/cli
DDTV_WEB_Serverghcr.io/chkzl/ddtv/webserverddtv/webserver
DDTV_Depsghcr.io/chkzl/ddtv/depsddtv/deps

CLI / WEB_Server 支持的架构及可用标签

系统 \ 架构amd64arm64v8arm32v7可用标签
alpine11alpine 3.0-alpine 3.0.*.*-alpine
debianlatest debian 3.0 3.0.*.*

:::warning Tip 1 受 DDTV 依赖影响,目前 alpine arm 下 DDTV 的日志功能二维码功能无法使用,并因此存在内存泄露问题(日志及内存泄露问题应该解决了,等个有缘人测试.jpg),不建议使用。 :::

最佳实践

查阅修改docker-ddtv.env后运行

方法一:修改docker-compose.yml后自行运行

wget https://raw.githubusercontent.com/moomiji/docker-ddtv/docker/docker-ddtv.env
nano docker-ddtv.env

wget https://raw.githubusercontent.com/moomiji/docker-ddtv/docker/docker-compose.yml
nano docker-compose.yml
> version: '3'
> services:
>   DDTV.service_name:
>     env_file:
>       - docker-ddtv.env
> ...
# env_file 优先级低于 environment 指定的环境变量

方法二:使用参数--env-file运行

  • docker cli
wget https://raw.githubusercontent.com/moomiji/docker-ddtv/docker/docker-ddtv.env
vi docker-ddtv.env
sudo docker run --env-file=./docker-ddtv.env ...

docker cli 运行容器

运行 DDTV_WEB_Server

sudo docker volume create DDTV_Rec
sudo docker run -d -p 11419:11419 \ # \后面不能有字符
        -v DDTV_Rec:/DDTV/Rec     \ # 必须,挂载卷或文件夹;否则会挂载匿名卷
        -v ${CONFIG_DIR}:/DDTV    \ # 可选,持久化 DDTV_WEB_Server 配置文件
        -e PUID=$(id -u)          \
        -e PGID=$(id -g)          \
        --name DDTV_WEB_Server    \
        ghcr.io/chkzl/ddtv/webserver
# 删除容器
sudo docker rm -f DDTV_WEB_Server
# 删除录制文件
sudo docker volume rm DDTV_Rec

运行 DDTV_CLI

sudo docker volume create DDTV_Rec
sudo docker run -d -p 11419:11419 \ # \后面不能有字符
        -v DDTV_Rec:/DDTV/Rec     \ # 必须,挂载卷或文件夹;否则会挂载匿名卷
        -v ${CONFIG_DIR}:/DDTV    \ # 可选,持久化 DDTV_CLI 配置文件
        -e PUID=$(id -u)          \
        -e PGID=$(id -g)          \
        --name DDTV_CLI           \
        ghcr.io/chkzl/ddtv/cli
# 删除容器
sudo docker rm -f DDTV_CLI
# 删除录制文件
sudo docker volume rm DDTV_Rec

单独挂载配置文件

CLI / WEB_Server

-v ${PWD}/DDTV:/DDTV    \ # 可选,持久化 DDTV_CLI 配置文件

# 替换成

-v ${PWD}/DDTV/RoomListConfig.json:/DDTV/RoomListConfig.json \
-v ${PWD}/DDTV/DDTV_Config.ini:/DDTV/DDTV_Config.ini         \
-v ${PWD}/DDTV/BiliUser.ini:/DDTV/BiliUser.ini               \

::: tip 若单独挂载RoomListConfig.json,环境变量RoomList、变量BiliUser 和 CLI / WEB_Server 配置文件变量将不可用。2 :::

可用环境变量

Docker 版独有环境变量

参数名格式默认值说明可用镜像
TZ州/城市Asia/Shanghai时区cli webserver
PUIDnum0运行 DDTV 的用户 IDcli webserver
PGIDnum0运行 DDTV 的用户组 IDcli webserver
RoomList 2json{"data":[]}来自同名配置文件cli webserver
BiliUser 2ini来自同名配置文件cli webserver

::: tip RoomList \ BiliUser 的食用方法 务必使用单引号括起变量;使用\n转义换行符,例如:

-e RoomList='{"data":[{"name":"蒂蒂媞薇_Official", "Description":"", "RoomId":21446992, "UID":408490081, "IsAutoRec":false, "IsRemind":false, "IsRecDanmu":false, "Like":false, "Shell":""}]}' \
-e BiliUser='cookie=...\nExTime=...\ncsrf=...\nuid=...' \

:::

CLI / WEB_Server 配置文件常用环境变量 2

参数名与DDTV Core通用配置文件的配置名完全相同。

参数名格式默认值说明
RoomListConfig路径./RoomListConfig.jsonRoomListConfig.json文件位置
IsHlsboolTrue是否优先使用HLS进行录制
IsDevboolFalse是否使用开发版更新模式
IsAutoTranscodboolFalse是否启用自动转码
IsFlvSplitboolFalse是否启用全局FLV文件按大小切分开关,注:启动后自动合并、自动转码失效
FlvSplitSizelongint1073741824文件切分的大小(byte)
WebUserNamestringamiWEB登陆使用的用户名
WebPasswordstringddtvWEB登陆使用的密码
ShellboolFalse用于控制下载完成后是否执行对应房间的Shell命令
WebHookUrlstringstring.EmptyWebHook的目标地址

:::tip 使用dev开发版 法1:初次启动容器,可设置环境变量IsDev=True后启动容器 2,在登陆bilibili(即配置文件写入)后关闭容器
法2:停止容器,修改配置文件DDTV_Config.ini的配置IsDev=True
之后启动容器获取dev更新 :::

:::warning Tip 2 变量只在初次启动,即配置或配置文件不存在时可用。 :::

更多可用变量见 官网配置说明docker-ddtv.env

CLI / WEB_Server 可用运行参数

sudo docker run  \
     ...         \
     镜像[:标签] \
     --no-update \ # 容器重启后不自动更新 DDTV
     --verbose   \ # 脚本输出更多信息(若服务器多人使用docker,请谨慎使用该参数,因为会将DDTV中的个人信息\配置输出到docker日志中)