群晖 NAS 部署 douyin_tiktok_download_api (DTK) 教程
在群晖 Container Manager 上一键部署抖音/TikTok 无水印解析 API,24小时运行,不占用电脑资源。
一、为什么选择群晖部署
| 对比项 | WSL2 (Windows) | 群晖 NAS |
|---|---|---|
| 运行时间 | 需要开电脑 | 24小时运行 |
| 磁盘占用 | 占 C 盘 | 存 NAS 硬盘 |
| 部署难度 | 命令行敲 | 图形界面点 |
| 稳定性 | 关机就停 | 不关机 |
| 访问方式 | 127.0.0.1 | 内网 IP 直接访问 |
二、前提条件
- 群晖 NAS(已安装 Container Manager)
- Docker 已启用
- NAS 内网 IP 已固定(如
192.168.0.51) - 管理员账号
三、部署步骤
3.1 创建数据目录
打开 File Station,进入 docker 共享文件夹,新建目录结构:
docker/
└── dtk/
├── data/
└── pgdata/
data存应用数据,pgdata存数据库。两个文件夹必须手动建好,否则容器启动报错。
3.2 生成密钥
在电脑或群晖 SSH 中执行:
openssl rand -base64 48
复制输出的密钥,后面要用。
3.3 创建 Docker Compose 项目
- 打开 Container Manager
- 左侧点「项目」
- 点「新增」
- 项目名称:
dtk - 路径:选择
/volume1/docker/dtk/ - 来源:选择「创建 docker-compose.yml」
- 点下一步
3.4 粘贴 docker-compose.yml
把以下内容粘贴进去(替换密钥为上一步生成的):
services:
douyin_tiktok_download_api:
image: evil0ctal/douyin_tiktok_download_api:latest
container_name: dtk_api
restart: always
ports:
- "8080:8000"
environment:
TZ: Asia/Shanghai
DTK_SECRET_KEY: "你的密钥"
DTK_DATABASE_URL: "postgresql+asyncpg://dtk:dtk123@postgres:5432/dtk"
DTK_BIND_HOST: "0.0.0.0"
DTK_BIND_PORT: "8000"
depends_on:
migrate:
condition: service_completed_successfully
redis:
condition: service_started
volumes:
- ./data:/app/data
worker:
image: evil0ctal/douyin_tiktok_download_api:latest
container_name: dtk_worker
restart: always
environment:
TZ: Asia/Shanghai
DTK_SECRET_KEY: "你的密钥"
DTK_DATABASE_URL: "postgresql+asyncpg://dtk:dtk123@postgres:5432/dtk"
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_started
command: worker
migrate:
image: evil0ctal/douyin_tiktok_download_api:latest
container_name: dtk_migrate
environment:
DTK_SECRET_KEY: "你的密钥"
DTK_DATABASE_URL: "postgresql+asyncpg://dtk:dtk123@postgres:5432/dtk"
depends_on:
postgres:
condition: service_healthy
command: migrate
postgres:
image: timescale/timescaledb:2.17.2-pg16
container_name: dtk_postgres
restart: always
environment:
POSTGRES_USER: dtk
POSTGRES_PASSWORD: dtk123
POSTGRES_DB: dtk
volumes:
- ./pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U dtk"]
interval: 5s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
container_name: dtk_redis
restart: always
3.5 等待启动
点完成后,Container Manager 会自动:
- 拉取镜像(首次约 1-2 分钟)
- 启动 PostgreSQL → 等待健康检查通过
- 启动 Redis
- 运行数据库迁移(migrate 容器跑完自动退出,灰色是正常的)
- 启动 API 和 Worker
最终容器状态:
| 容器 | 状态 | 说明 |
|---|---|---|
| dtk_postgres | 绿色运行 | TimescaleDB 数据库 |
| dtk_redis | 绿色运行 | Redis 缓存队列 |
| dtk_api | 绿色运行 | API 服务 |
| dtk_worker | 绿色运行 | 后台任务 |
| dtk_migrate | 灰色已停止 | 一次性迁移任务,跑完就退出 |
如果项目显示橙色/红色,点「操作」→「构建」重新构建一次即可。
四、初始化配置
4.1 获取初始化令牌
- Container Manager → 容器 → 双击
dtk_api - 点「日志」标签
- 找到类似这行:
http://127.0.0.1:8000/setup?token=xxxxx - 复制
token=后面的字符串
4.2 创建管理员
浏览器打开:
http://群晖IP:8080/setup?token=复制的token
按向导完成 4 步:
- 创建管理员:输入用户名和密码(至少12位)
- 配置代理:直接跳过
- 铸造首个身份:直接跳过
- 冒烟测试:直接跳过
4.3 导入抖音 Cookie
- 控制台左侧点「身份池」
- 点「导入 cookie」
- 平台选
douyin - 在 Chrome 浏览器打开 douyin.com 并登录,F12 → Network → 刷新 → 复制 request headers 中的 cookie 和 user-agent
- 粘贴到 DTK 中,勾选确认,保存
五、使用
| 用途 | 地址 |
|---|---|
| 控制台 | http://群晖IP:8080/ |
| 调试台 | 左侧菜单「调试台」 |
| API 文档 | http://群晖IP:8080/docs |
解析视频
- 打开「调试台」
- 粘贴抖音视频链接
- 点「发起请求」
- 展开「归一化结果」查看无水印视频地址
六、注意事项
6.1 必须手动创建的目录
data/— 应用数据pgdata/— 数据库数据
不创建会报 Bind mount failed: ... does not exist 错误。
6.2 dtk_migrate 灰色是正常的
migrate 是一次性任务,数据库迁移完成后自动退出。不影响使用。
6.3 镜像拉取慢
Container Manager → 设置 → 注册表,添加国内镜像源:
docker.m.daocloud.iodocker.1ms.run
6.4 端口冲突
如果 8080 被占用,修改 compose 文件中的端口映射,如 "8081:8000"。
6.5 防火墙
群晖控制面板 → 安全性 → 防火墙,允许 8080 端口。
七、日常运维
| 操作 | 方法 |
|---|---|
| 重启服务 | 项目 → 操作 → 重新构建 |
| 查看 API 日志 | 容器 → dtk_api → 日志 |
| 查看 Worker 日志 | 容器 → dtk_worker → 日志 |
| 停止服务 | 项目 → 操作 → 停止 |
| 启动服务 | 项目 → 操作 → 构建 |
数据备份
停止项目后,备份 /volume1/docker/dtk/ 整个目录即可。主要是 pgdata(数据库)和 data(应用数据)。
八、常见问题
Q: 项目一直红色?
postgres 和 redis 变绿后,点项目 → 操作 → 构建,重新跑一次。migrate 第一次跑可能因为 postgres 还没就绪而失败,再构建一次就好。
Q: 打开网页显示 403 或风控?
Cookie 过期了。重新从浏览器复制新鲜 Cookie,删除旧身份后重新导入。
Q: 密码忘了?
只能通过 CLI 重置,控制台无法找回。
Q: 群晖重启后服务会自动启动吗?
会。compose 里配置了 restart: always,Docker 启动后自动拉起所有容器。
九、架构图
浏览器 ──→ dtk_api (:8080)
│
├──→ Redis (任务队列)
│ │
│ └──→ dtk_worker (后台解析)
│ │
└──→ PostgreSQL (TimescaleDB)
- dtk_api:接收 HTTP 请求
- dtk_worker:消费队列,调用抖音接口
- dtk_migrate:一次性数据库迁移
- PostgreSQL (TimescaleDB):存储数据
- Redis:任务队列
部署日期:2026-09-18 镜像版本:v5.1.0