用 Docker 在自己的机器上部署一套抖音 / TikTok 数据服务,同时获得 REST API、MCP、CLI 和 Web 控制台。本文基于开源项目公开文档整理,具体版本和命令请以项目仓库当前说明为准。
重要说明
Douyin_TikTok_Download_API 是第三方开源项目,并非抖音或 TikTok 官方 API。自托管后仍会受到账号权限、IP、风控和平台条款限制。请只在授权和合规范围内使用。
这套项目能做什么
Douyin_TikTok_Download_API(作者 Evil0ctal)是一套开源、可自托管的抖音 / TikTok 数据接口。
早期它主要用于解析分享链接和获取媒体地址。到了 v5,项目已经更接近一套完整的数据服务:
| 能力 | 说明 |
|---|---|
| REST API | /api/v1/...,适合网站、脚本和后端调用 |
| MCP | 默认 /mcp,可接 Claude Code、Claude Desktop、Codex 等 |
| CLI | 在终端中通过 dtk 使用 |
| Web Console | 管理身份池、任务、资料库、下载、日志和 API Key |
| 本地归档 | PostgreSQL 保存解析结果,Redis 负责任务与缓存 |
版本更新较快,具体版本请以项目的 Latest Release 为准。
如果只想先体验界面,可以打开公开 Demo:
Demo 是共享实例,存在限流。不要向公开 Demo 提交个人 Cookie 或其他敏感信息。
和官方 TikTok MCP 有什么区别
搜索 “TikTok MCP” 时,很容易和 TikTok for Business MCP Server 混淆。
| 对比项 | Douyin_TikTok_Download_API | TikTok for Business MCP |
|---|---|---|
| 性质 | 第三方开源 | TikTok 官方 |
| 主要用途 | 内容数据,例如作品、作者、评论 | 广告投放与报表 |
| 自托管 | 支持 | 使用官方服务 |
| MCP | 支持 | 支持 |
如果你要管理广告、受众和投放数据,应该使用官方 Business MCP。
如果你的目标是内容读取、归档、自建接口或接入 Agent,可以继续看这套项目。
可以获取哪些数据
当前项目覆盖的数据类型大致包括:
- 单条视频 / 图集
- 作者公开资料与作品列表
- 作者喜欢列表
- 合集 / 播放列表
- 评论与回复
- 关键词搜索
- 媒体地址
- 收藏夹
- 归档后的历史数据
TikTok 还支持部分粉丝、关注和转发数据。
抖音的粉丝 / 关注列表通常需要登录会话,游客身份不一定能获取,因此不要把这类数据理解成稳定的普通公开接口。
REST、MCP、CLI 怎么选
| 方式 | 适合场景 |
|---|---|
| REST API | 网站、后台、Python 脚本、自动化 |
| MCP | Claude Code、Claude Desktop、Codex 等 Agent |
CLI(dtk) |
直接在服务器终端操作 |
| Web Console | 管理实例、身份、任务和 API Key |
REST、MCP 和 CLI 共用同一套 service 层。MCP 并非简单转发 REST,而是直接使用同一业务逻辑。
部署完成后,可以访问这些文档入口:
/docs
/swagger
/redoc
部署前先确认几件事
开始之前,建议先确认以下条件:
- 用途合规:能够解析链接,不代表拥有转载或再分发内容的权利。
- 运行环境:需要 Docker 和 Docker Compose,建议使用较新的 Compose。
- 服务依赖:v5 至少包含 API、Worker、PostgreSQL、Redis;浏览器组件可以按需开启。
- 大陆网络环境:如果拉取镜像较慢,可能需要先按官方说明配置镜像源。
使用 Docker 部署
1. 拉取项目
git clone https://github.com/Evil0ctal/Douyin_TikTok_Download_API.git
cd Douyin_TikTok_Download_API
2. 生成 .env
不要直接复制网上别人使用过的固定密钥。
可以在本机生成随机密码:
POSTGRES_PASSWORD=$(openssl rand -hex 24)
REDIS_PASSWORD=$(openssl rand -hex 24)
cat > .env <<EOF
DTK_SECRET_KEY=$(openssl rand -base64 48)
POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
REDIS_PASSWORD=${REDIS_PASSWORD}
DTK_DATABASE_URL=postgresql+asyncpg://dtk:${POSTGRES_PASSWORD}@postgres:5432/dtk
DTK_REDIS_URL=redis://:${REDIS_PASSWORD}@redis:6379/0
EOF
这里会分别生成:
DTK_SECRET_KEY- PostgreSQL 密码
- Redis 密码
- PostgreSQL 连接地址
- Redis 连接地址
3. 启动服务
如果希望本地构建:
docker compose -p dtk -f docker/compose.yml up -d
docker compose -p dtk -f docker/compose.yml logs api
第一次构建可能会比较慢。
如果希望直接使用已发布镜像,可以先执行:
export DTK_IMAGE=evil0ctal/douyin_tiktok_download_api
export DTK_IMAGE_TAG=latest
docker compose -p dtk -f docker/compose.yml pull
docker compose -p dtk -f docker/compose.yml up -d
先执行 pull 可以减少 Compose 又回到本地 build 的情况。
4. 打开 Web Console
默认地址:
http://127.0.0.1:8000
查看 API 日志:
docker compose -p dtk -f docker/compose.yml logs api
首次启动时,日志会打印初始化令牌。
使用这个令牌创建管理员账号,然后在 Web Console 中创建 API Key。
项目也提供一键安装脚本:
建议先阅读脚本内容,再决定是否执行,不要直接运行来源不明的远程安装脚本。
第一次调用 API
v5 的数据接口默认采用异步任务方式。
如果请求时没有传 wait,常见结果是:
202 + task_id
这表示任务已经接受并继续处理,并不代表请求失败。
下面是一次基本解析请求:
API_KEY='dtk_...'
curl -sS -X POST 'http://127.0.0.1:8000/api/v1/parse?wait=25' -H "X-API-Key: ${API_KEY}" -H 'content-type: application/json' -d '{"url":"你的抖音或 TikTok 分享链接"}'
返回结果可以这样理解:
| 结果 | 含义 |
|---|---|
200 + 正文 |
在等待时间内已经处理完成 |
202 + task_id |
任务仍在处理,需要继续查询 |
如果返回 task_id,可以继续轮询:
curl -sS "http://127.0.0.1:8000/api/v1/tasks/{task_id}" -H "X-API-Key: ${API_KEY}"
实例侧的等待上限常见约为 30 秒。wait 超过实例允许的范围时会直接返回参数错误。
为什么需要 PostgreSQL 和 Redis
v5 已经不只是一个简单的链接解析进程。
| 组件 | 主要作用 |
|---|---|
| PostgreSQL | 保存归档、身份、任务、设置等需要长期保留的数据 |
| Redis | 保存任务状态、缓存和调度过程中的快速数据 |
公开技术栈还包括 FastAPI、SQLAlchemy、React、TypeScript、TimescaleDB 等。
一般部署这套项目时,不需要额外再搭 Kafka、Elasticsearch 或 Kubernetes。
v5 的身份池
v4 常见的方式是手动把 Cookie 放进配置文件,Cookie 失效后需要自己替换。
v5 把 Cookie 和浏览器环境整理成了身份池。
可选浏览器组件可以自动生成游客身份,并提供:
- 健康度管理
- 身份轮换
- 限流
- 熔断
对于需要登录权限的数据,仍然可以手动导入 Cookie。
但如果只是使用公开能力,Cookie 并不是启动整套服务的必填项。
“无水印”是什么意思
这里的“无水印”并不是用 AI 去除已经绘制在画面上的水印。
项目做的是从平台返回的数据里选择平台本身提供的干净媒体流。
如果上游没有提供对应媒体流,接口也无法凭空生成一份原始无水印视频。
v4 和 v5 的主要区别
v5 基本可以理解为一次重写,不能按普通小版本升级来处理。
| 项目 | v4 | v5 |
|---|---|---|
| 身份 | 手工 Cookie | 身份池 + 可选自动游客身份 |
| 调用方式 | 更多同步调用 | 默认异步任务 |
| 数据 | 解析后直接使用 | PostgreSQL + Redis,可归档 |
| 访问控制 | 相对简单 | API Key、Scope、角色 |
| 管理界面 | PyWebIO | React Web Console |
| 接口方式 | REST | REST + MCP + CLI |
| 平台 | 曾包含 B 站等 | 当前主线为抖音、TikTok |
旧版仍可以在 v4 分支中找到。
如果从 v4 迁移到 v5,应按新的部署和接口重新适配,不建议把它理解成只修改版本号即可升级。
安全与合规建议
部署完成后,至少注意以下几点:
DTK_SECRET_KEY、PostgreSQL 密码、Redis 密码都应该独立生成并妥善保存。- PostgreSQL、Redis 和管理控制台不要在没有保护的情况下直接暴露公网。
- 需要远程访问时,建议使用 HTTPS、反向代理、API Key 或专网。
- 开源许可证只授权项目代码,不代表平台授权大规模采集或再分发内容。
- 自托管后依然可能受到上游限流。
- 身份健康、轮换和熔断只能帮助隔离问题,不能保证上游接口永久有效。
常见问题
这是官方 API 吗?
不是。这是第三方开源项目。
必须自己准备 Cookie 吗?
不一定。
启用浏览器身份后,可以自动生成游客身份。只有需要登录权限的数据,才可能需要手动导入登录态。
为什么请求返回 202?
这是异步任务的正常行为。
拿到 task_id 后继续查询任务状态,或者调用解析接口时使用 ?wait=N 等待结果。
可以接 Claude Code 或 Codex 吗?
可以。
项目提供 /mcp,可以接入支持 MCP 的 Agent。
v4 可以直接升级到 v5 吗?
不能按普通小版本升级理解。
建议把 v5 当成新的部署和接口重新适配。
项目资源
完成以上步骤后,本机应该能够打开 Web Console,并完成第一次 parse 请求。
如果部署过程中卡在拉镜像、初始化令牌或 202 任务轮询,可以优先检查对应服务日志和任务状态。