MyTube 详细部署教程

1. 项目简介

MyTube 是一款专为视频收藏爱好者和 NAS 用户打造的开源自托管视频下载与管理平台。它集成了视频下载、本地存储与播放功能,支持 YouTube、Bilibili、Twitch、MissAV 及 yt-dlp 支持的数十个网站,让你轻松构建属于自己的私有影音资料库。

核心功能:

  • 多平台视频下载:支持 YouTube、Bilibili 等 yt-dlp 支持的主流平台
  • 本地化存储:视频文件及缩略图自动完整下载至本地,实现永久保存
  • 可视化合集管理:提供直观的 Web 界面,支持创建自定义合集
  • 内置播放器:应用内集成视频播放器,无需第三方工具即可直接观看
  • 自动订阅与下载:支持频道订阅、自动下载跟踪
  • Cloudflare Tunnel 支持:内置穿透功能,无需端口转发即可安全远程访问
  • Agent 集成:支持 MCP 协议,可接入 openclaw、hermes 等 Agent 助手实现自动化管理
  • REST API 支持:提供完整的 API 接口,支持第三方应用集成

2. 部署前准备

2.1 硬件要求

  • 操作系统:支持 Docker 的任意系统(Linux、macOS、Windows 或 NAS)
  • 内存:推荐 2GB 以上
  • 硬盘空间:根据视频存储需求决定
  • 网络:稳定的互联网连接

2.2 软件要求

Docker 部署(推荐):

  • Docker 20.10+
  • Docker Compose V2

源码部署:

  • Node.js 22.22+、23.x、24.x、25.x 或 26.x
  • npm v9+

重要提示:后端依赖 better-sqlite3,不支持的 Node 版本会在 npm install 时失败。Docker 镜像已内置 Node 22,推荐使用 Docker 部署。

3. 方式一:Docker Compose 部署(推荐)

这是官方推荐的部署方式,适合大多数用户。

3.1 下载 Docker Compose 配置文件

从项目仓库获取 stacks/docker-compose.yml 配置文件,或直接创建以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
services:
backend:
image: franklioxygen/mytube:backend-latest
container_name: mytube-backend
pull_policy: always
restart: unless-stopped
ports:
- "5551:5551"
networks:
- mytube-network
environment:
- PORT=5551
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
- MYTUBE_AUTO_FIX_PERMISSIONS=${MYTUBE_AUTO_FIX_PERMISSIONS:-1}
- MYTUBE_ADMIN_TRUST_LEVEL=container
volumes:
- ./uploads:/app/uploads
- ./data:/app/data

frontend:
image: franklioxygen/mytube:frontend-latest
container_name: mytube-frontend
pull_policy: always
restart: unless-stopped
ports:
- "5556:5556"
depends_on:
- backend
environment:
- VITE_API_URL=/api
- VITE_BACKEND_URL=
networks:
- mytube-network

networks:
mytube-network:
driver: bridge
driver_opts:
com.docker.network.bridge.enable_ip_masquerade: "true"
com.docker.network.bridge.enable_icc: "true"

3.2 启动服务

1
docker compose up -d

3.3 访问应用

容器运行后,在浏览器中访问:

  • 前端界面http://localhost:5556
  • 后端 APIhttp://localhost:5551

3.4 数据持久化说明

上述配置会在当前目录创建两个文件夹用于持久化数据:

  • ./uploads:存储下载的视频和缩略图
  • ./data:存储 SQLite 数据库和日志

4. 方式二:单容器部署

如果你偏好使用单个容器,可以使用官方发布的单容器镜像,该镜像已包含构建好的前端静态资源。

4.1 使用官方 Compose 文件

1
docker-compose -f stacks/docker-compose.single-container.yml up -d

4.2 自定义存储路径

如果你想自定义数据存储路径,可以覆盖默认值:

1
2
3
MYTUBE_UPLOADS_DIR=./uploads \
MYTUBE_DATA_DIR=./data \
docker-compose -f stacks/docker-compose.single-container.yml up -d

4.3 访问方式

单容器模式下,前端和 API 通过同一端口访问:

  • 前端界面http://localhost:5551
  • 后端 APIhttp://localhost:5551/api

5. 方式三:源码部署(开发者)

适合需要修改源码或深度定制的开发者。

5.1 环境准备

确保已安装符合要求的 Node.js 版本(22.22+)。

5.2 克隆项目

1
2
git clone https://github.com/franklioxygen/MyTube.git
cd MyTube

5.3 配置环境变量

后端配置:

1
2
cd backend
cp .env.example .env

编辑 .env 文件:

1
2
3
4
5
PORT=5551
# 可选:声明管理员信任边界
# 有效值:application | container | host
# 默认:container
# MYTUBE_ADMIN_TRUST_LEVEL=container

前端配置:

1
2
cd frontend
cp .env.example .env

编辑 .env 文件:

1
2
VITE_API_URL=/api
VITE_BACKEND_URL=

5.4 安装依赖并启动

1
2
3
4
5
6
7
8
9
10
11
12
13
# 安装后端依赖
cd backend
npm install

# 启动后端
npm run dev

# 新终端:安装前端依赖
cd frontend
npm install

# 启动前端
npm run dev

6. 初始配置

6.1 设置中文界面

系统部署完成后,点击右上角的设置按钮,选择 Settings,将语言修改为中文界面。

6.2 设置访问密码

由于系统默认没有管理员账号,建议第一时间到 安全与访问 里开通登录保护,设置一个访问密码。

6.3 上传 Cookie(重要)

如果要下载 YouTube、Bilibili 等平台的视频,必须上传你自己的 cookie 信息到本地,否则会因网站拦截导致下载失败。

获取 Cookie 步骤:

  1. 打开浏览器,登录目标视频网站
  2. 按 F12 打开开发者工具
  3. 刷新页面,切换到 网络(Network) 菜单
  4. 选择任意请求,在右侧标头中找到 Cookie 配置项
  5. 复制 Cookie 内容并上传到 MyTube 设置中

6.4 配置 API Key(用于 Agent 集成)

开启登录保护后,系统会默认开启 API Key 鉴权。API Key 可以用于让 openclaw、hermes 等 Agent 助手调用 MyTube API。

API Key 权限说明:API Key 只能使用下载相关功能,如需完整的 Agent 管理能力,还需要提供 MyTube 站点的 Cookie。

7. 接入 Agent 助手(可选)

MyTube 支持 MCP(Model Context Protocol),可以接入 openclaw、hermes 等 Agent 助手实现自动化管理。

7.1 MCP Server 要求

  • Node.js 20 或更高版本
  • 可访问的 MyTube 1.10.x 服务器

7.2 安装方式

1
npx -y mytube-mcp

或从源码运行:

1
2
3
4
5
git clone https://github.com/franklioxygen/mytube-mcp.git
cd mytube-mcp
npm install
npm run build
npm start

7.3 环境变量配置

变量名 说明
MYTUBE_BASE_URL MyTube 服务器地址(必需)
MYTUBE_AUTH_MODE 认证模式:api-keyadmin-session
MCP_TRANSPORT 传输方式:stdio(默认)或 http

7.4 提供给 Agent 的信息

将以下信息发给 Agent,让它整理成 skill:

  • MyTube 服务 URL:你的NAS地址:5551/api
  • API Key:复制你创建的 API Key
  • API 文档:参考项目中的 api-endpoints.md

8. 安全注意事项(重要)

8.1 版本安全提醒

MyTube 历史版本存在多个安全漏洞,务必使用最新版本

CVE 编号 影响版本 问题描述 修复版本
CVE-2026-23837 ≤1.7.65 未认证用户可绕过身份验证,访问和修改应用设置 1.7.66
CVE-2026-33890 <1.8.71 未认证攻击者可注册任意 passkey 获取管理员权限 1.8.71
CVE-2026-33735 <1.8.69 低权限用户可上传替换 SQLite 数据库 1.8.69
CVE-2026-24140 ≤1.7.78 设置管理功能存在批量赋值漏洞 1.7.78

8.2 部署安全建议

  • 使用最新版本:始终使用最新版本的 Docker 镜像或源码
  • 启用登录保护:设置强密码,避免未授权访问
  • 限制网络访问:通过防火墙或反向代理限制 /api/ 端点的访问
  • 定期更新:关注项目更新,及时修复安全漏洞

9. 常见问题与解决方案

9.1 端口冲突

如果端口 5551 或 5556 被占用,修改 PORT 环境变量,并相应更新前端的 VITE_API_URLVITE_BACKEND_URL

9.2 视频下载失败

  • 检查是否已上传有效的 Cookie 信息
  • 确认目标网站是否需要登录才能访问
  • 查看后端日志排查具体错误

9.3 Docker 网络连接问题

如果在 OpenWrt/iStoreOS 等系统上遇到容器无法访问互联网的问题,可以尝试:

  • 添加路由器的 DNS 服务器:dns: [8.8.8.8, 8.8.4.4]
  • 或使用 host 网络模式运行后端

10. 部署架构总结

部署方式 适用场景 访问端口 优势
双容器 Docker 生产环境 前端 5556 / 后端 5551 前后端分离,便于扩展
单容器 Docker 简单部署 5551 配置简单,资源占用少
源码部署 开发者 自定义 完全可控,便于定制

部署完成后,你可以通过 MyTube 构建自己的私有影音库,摆脱网络卡顿与内容下架的烦恼。无论是搭建家庭媒体中心、永久收藏珍贵内容,还是创建专注的学习资料库,MyTube 都能满足你的需求。