群晖 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 项目

  1. 打开 Container Manager
  2. 左侧点「项目
  3. 点「新增
  4. 项目名称:dtk
  5. 路径:选择 /volume1/docker/dtk/
  6. 来源:选择「创建 docker-compose.yml」
  7. 点下一步

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. 拉取镜像(首次约 1-2 分钟)
  2. 启动 PostgreSQL → 等待健康检查通过
  3. 启动 Redis
  4. 运行数据库迁移(migrate 容器跑完自动退出,灰色是正常的
  5. 启动 API 和 Worker

最终容器状态:

容器 状态 说明
dtk_postgres 绿色运行 TimescaleDB 数据库
dtk_redis 绿色运行 Redis 缓存队列
dtk_api 绿色运行 API 服务
dtk_worker 绿色运行 后台任务
dtk_migrate 灰色已停止 一次性迁移任务,跑完就退出

如果项目显示橙色/红色,点「操作」→「构建」重新构建一次即可。


四、初始化配置

4.1 获取初始化令牌

  1. Container Manager → 容器 → 双击 dtk_api
  2. 点「日志」标签
  3. 找到类似这行:
    http://127.0.0.1:8000/setup?token=xxxxx
  4. 复制 token= 后面的字符串

4.2 创建管理员

浏览器打开:

http://群晖IP:8080/setup?token=复制的token

按向导完成 4 步:

  1. 创建管理员:输入用户名和密码(至少12位)
  2. 配置代理:直接跳过
  3. 铸造首个身份:直接跳过
  4. 冒烟测试:直接跳过

4.3 导入抖音 Cookie

  1. 控制台左侧点「身份池」
  2. 点「导入 cookie」
  3. 平台选 douyin
  4. 在 Chrome 浏览器打开 douyin.com 并登录,F12 → Network → 刷新 → 复制 request headers 中的 cookie 和 user-agent
  5. 粘贴到 DTK 中,勾选确认,保存

五、使用

用途 地址
控制台 http://群晖IP:8080/
调试台 左侧菜单「调试台」
API 文档 http://群晖IP:8080/docs

解析视频

  1. 打开「调试台」
  2. 粘贴抖音视频链接
  3. 点「发起请求」
  4. 展开「归一化结果」查看无水印视频地址

六、注意事项

6.1 必须手动创建的目录

  • data/ — 应用数据
  • pgdata/ — 数据库数据

不创建会报 Bind mount failed: ... does not exist 错误。

6.2 dtk_migrate 灰色是正常的

migrate 是一次性任务,数据库迁移完成后自动退出。不影响使用。

6.3 镜像拉取慢

Container Manager → 设置 → 注册表,添加国内镜像源:

  • docker.m.daocloud.io
  • docker.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