MeTube 安装教程:复制粘贴就能装好的视频下载站

2187 字
11 分钟
MeTube 安装教程:复制粘贴就能装好的视频下载站
MeTube 安装教程:复制粘贴就能装好的视频下载站

在 VPS 上装 MeTube 其实就三件事:装个 Docker、把 YouTube 的 cookies 传上去、打开网页下视频。整个过程不需要懂 Linux,跟着下面的步骤一条一条复制、粘贴、回车就行。

装完之后是这样的:浏览器打开你的域名,输入账号密码,把视频链接粘贴进去点 Download,视频就下载到你自己的服务器上了。IP 直接访问打不开、进站要密码、磁盘快满会自动删最旧的视频,这些都一起帮你配好。

文中演示下载的全部是 Blender 基金会的 CC BY 开源影片,可以免费商用;下载其他内容之前,请自行确认你有相应授权。

关键要点
  • 全程复制粘贴就能完成,只需要改两个地方:你的 VPS IP 和你的域名。
  • 装好后浏览器打开域名、输账号密码就能用,电脑手机都行。
  • 磁盘小也不怕:每 4 小时自动删最早的视频,快满也会自动删。

装之前要有什么#

  • 一台 VPS(文中用的是 Debian 13,Ubuntu 也一样),知道它的 IP 和 root 密码。
  • 一个托管在 Cloudflare 的域名,比如文中的 test.9corner.com。
  • YouTube 的 cookies 文件:只有下私有视频、年龄限制视频,或遇到 bot 检查时才需要,导出方法见后面「上传 YouTube cookies」一节。

连上 VPS#

在 Windows 上按 Win + R,输入 cmd 回车,打开「命令提示符」,然后输入:

Terminal window
ssh root@你的VPS的IP

第一次连接会问一句 yes/no,输入 yes 回车;然后让你输密码(输入时屏幕上不显示字,这是正常的)。看到 root@xxxx:~# 这样的提示符,就说明进到服务器里了。接下来所有命令都在这个窗口里复制粘贴。

在本地命令提示符里 ssh 连接 VPS,输入 yes 和密码后看到 root 提示符
在本地命令提示符里 ssh 连接 VPS,输入 yes 和密码后看到 root 提示符

装 Docker#

逐行复制粘贴,每行回车:

Terminal window
apt update && apt install -y curl
curl -fsSL https://get.docker.com -o /tmp/get-docker.sh
sh /tmp/get-docker.sh

第三行会跑一两分钟,输出很长是正常的。跑完验证一下:

Terminal window
docker --version

能打印出 Docker version 29.9.3 这样的版本号,就说明装好了。

运行 Docker 官方安装脚本,最后打印出版本号
运行 Docker 官方安装脚本,最后打印出版本号

启动 MeTube#

把下面这一整块全部复制、粘贴、回车(一次性贴完即可):

Terminal window
mkdir -p /opt/metube/downloads && cd /opt/metube
cat > docker-compose.yml << 'EOF'
services:
metube:
image: ghcr.io/alexta69/metube
container_name: metube
restart: unless-stopped
ports:
- "127.0.0.1:8081:8081"
volumes:
- ./downloads:/downloads
EOF
docker compose up -d

然后验证:

Terminal window
docker ps

STATUS 一栏显示 Up ... (healthy) 就说明跑起来了。其中 127.0.0.1:8081 是故意只给服务器自己用的,外网访问一律走后面的域名入口,这样才好加密码。

粘贴配置文件并启动,docker ps 显示 healthy 且端口只绑定本机
粘贴配置文件并启动,docker ps 显示 healthy 且端口只绑定本机

设置密码和域名#

先把 Nginx 和密码工具装上,再生成一张证书(Cloudflare 的「完全」模式要求源站有证书,自签的就行),最后给网站设置一个登录账号:

Terminal window
apt update && apt install -y nginx apache2-utils openssl
mkdir -p /etc/nginx/ssl
openssl req -x509 -nodes -newkey rsa:2048 -days 3650 \
-keyout /etc/nginx/ssl/metube.key -out /etc/nginx/ssl/metube.crt \
-subj "/CN=test.9corner.com"
htpasswd -c /etc/nginx/.htpasswd admin

htpasswd 会让输两次密码(不回显),这个账号 admin 和你设的密码,就是以后打开网站要输的。

安装 Nginx、生成证书、用 htpasswd 设置登录密码
安装 Nginx、生成证书、用 htpasswd 设置登录密码

然后把 Nginx 的规则整块贴进去,作用是:用 IP 来访问的一律掐断,只有你的域名能进,进门还要先输密码:

Terminal window
cat > /etc/nginx/conf.d/metube.conf << 'EOF'
# 禁止 IP 访问:用 IP 或别的域名访问,一律直接断开
server {
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/nginx/ssl/metube.crt;
ssl_certificate_key /etc/nginx/ssl/metube.key;
server_name _;
return 444;
}
# 只有这个域名能进,先输密码再转给 MeTube
server {
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
server_name test.9corner.com;
ssl_certificate /etc/nginx/ssl/metube.crt;
ssl_certificate_key /etc/nginx/ssl/metube.key;
auth_basic "MeTube";
auth_basic_user_file /etc/nginx/.htpasswd;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
EOF
rm -f /etc/nginx/sites-enabled/default
nginx -t && systemctl reload nginx

唯一要改的就是 test.9corner.com,换成你自己的域名(出现两处)。

粘贴 Nginx 配置:444 掐断 IP 访问、只放行自己的域名、加密码验证
粘贴 Nginx 配置:444 掐断 IP 访问、只放行自己的域名、加密码验证

最后去 Cloudflare 后台做两件事:

  • DNS 里加一条 A 记录,名字填 test(按你的实际前缀),IPv4 填 VPS 的 IP,橙色云保持开启。
  • SSL/TLS 概览里,把加密模式设为「完全(Full)」。

弄好后浏览器打开 https://test.9corner.com,弹出账号密码框,输入刚才的 admin 和密码,就能看到 MeTube 的界面了。

上传 YouTube cookies#

公开视频不用传。遇到「Sign in to confirm you’re not a bot」、私有视频或年龄限制的,按两步走:先从 YouTube 导出 cookies,再上传到 MeTube。

从 YouTube 导出 cookies#

  1. 在 Chrome 商店安装 Get cookies.txt LOCALLY。
  2. 打开 chrome://extensions,点这个扩展的「详情」,打开「在无痕模式下允许」。
  3. 按 Ctrl+Shift+N(macOS 是 Cmd+Shift+N)开无痕窗口,打开 YouTube 并登录。
  4. 点扩展图标,确认顶部域名是 https://www.youtube.com/,点 Export All Cookies。
  5. 浏览器会下载一个 www.youtube.com_cookies.txt;文件名不用改,传到 MeTube 后就存成 cookies.txt。

Get cookies.txt LOCALLY 的导出界面:域名是 YouTube,点 Export All Cookies 下载 cookies.txt
Get cookies.txt LOCALLY 的导出界面:域名是 YouTube,点 Export All Cookies 下载 cookies.txt

上传到 MeTube#

回到网站:点开 Advanced Options(高级选项),在最下面的 TOOLS 区域找到 Cookies 按钮,选中刚才的 cookies.txt 上传,看到 Cookies active 就说明生效了。

展开高级选项,在 TOOLS 里上传 cookies.txt,显示 Cookies active
展开高级选项,在 TOOLS 里上传 cookies.txt,显示 Cookies active

cookies 等于账号会话

别把 cookies.txt 发给人、别提交到仓库;截图前把里面的值打码。

cookies 有时效,过阵子失效了就重新导出一份传上去。

下载第一个视频#

把视频链接粘贴到页面顶部的输入框,点 Download:

  • 正在下载的在 Downloading 区,能看到进度条和速度。
  • 下载完成的出现在 Completed 区,点标题就能在线看,点旁边的图标可以把文件下载到本地。

粘贴链接点 Download 后出现实时进度条,完成的视频在 Completed 列表里
粘贴链接点 Download 后出现实时进度条,完成的视频在 Completed 列表里

文件都存在服务器 /opt/metube/downloads 目录里。

自动清理旧视频#

小盘 VPS 必须管好磁盘。这块配置好之后:每 4 小时自动删掉最早的一个视频;每 10 分钟检查一次磁盘,用到 95% 就一直删最早的,直到降下来。

cat > /opt/metube/cleanup.sh << 'EOF'
#!/bin/bash
# 每 4 小时删掉最早的一个视频;磁盘用到 95% 就一直删到降下来
DIR=/opt/metube/downloads
LIMIT=95
# 找出最早的那个视频文件
oldest() {
find "$DIR" -maxdepth 1 -type f \
\( -name '*.mp4' -o -name '*.webm' -o -name '*.mkv' -o -name '*.mp3' -o -name '*.m4a' \) \
-printf '%T@ %p\n' | sort -n | head -1 | cut -d' ' -f2-
}
del() {
f=$(oldest)
[ -z "$f" ] && return 1
echo "$(date '+%F %T') 删除 $f" >> /var/log/metube-cleanup.log
rm -f "$f"
}
used() { df --output=pcent "$DIR" | tail -1 | tr -dc '0-9'; }
case "$1" in
oldest) del ;;
full) while [ "$(used)" -ge "$LIMIT" ]; do del || break; done ;;
esac
EOF
chmod +x /opt/metube/cleanup.sh
cat > /etc/cron.d/metube-cleanup << 'EOF'
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 */4 * * * root /opt/metube/cleanup.sh oldest
*/10 * * * * root /opt/metube/cleanup.sh full
EOF

删了什么可以看日志:

Terminal window
cat /var/log/metube-cleanup.log

定时任务的两行配置,以及日志里记录的删除动作
定时任务的两行配置,以及日志里记录的删除动作

想保住某个视频不被删,下完把它从 /opt/metube/downloads 拷走就行。

检查是否装对#

在服务器上跑三条命令,各对应一个预期结果:

Terminal window
curl -m 5 http://你的VPS的IP/
curl -sk https://test.9corner.com/ -o /dev/null -w '%{http_code}\n'
curl -sk -u admin https://test.9corner.com/ -o /dev/null -w '%{http_code}\n'

三条验证:IP 访问被掐断、域名无密码 401、带密码 200
三条验证:IP 访问被掐断、域名无密码 401、带密码 200

对照这份清单:

  • curl IP 显示 Connection reset,说明 IP 访问被掐断了。
  • 不带密码返回 401,带密码返回 200。
  • 浏览器打开域名会先要账号密码,进去能看到 MeTube 界面。
  • 粘贴链接能出现进度条。
  • 等 4 小时后 cat /var/log/metube-cleanup.log 能看到删除记录。

这套东西适合自用缓存:自己看、随手存。别把它当网盘或媒体库分享给别人,自动清理随时会把旧文件删掉;想认真存片,把 /opt/metube/downloads 换成一块大数据盘,再去 MeTube 的 wiki 研究订阅功能。

常见问题#

Q:浏览器打开提示 521 或 522?#

Cloudflare 的 SSL/TLS 模式没设对,改成「完全(Full)」再试。

Q:下载报「Sign in to confirm you’re not a bot」或者会员视频下不了?#

cookies 过期或导出时没登录。按「从 YouTube 导出 cookies」的五步重新导出一份(导出前确认浏览器登录着 YouTube),再到页面上传替换。

Q:为什么 IP<8081> 打不开?#

故意的。MeTube 只监听服务器自己,公网只能从域名入口进,这样密码保护才有意义。

Q:视频莫名其妙少了?#

被自动清理删了,cat /var/log/metube-cleanup.log 能看到删了哪个。想保住就把文件拷出 downloads 目录。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

MeTube 安装教程:复制粘贴就能装好的视频下载站
https://9corner.com/posts/metube-vps-install/
作者
9Corner
发布于
2026-11-04
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
9Corner
写代码、折腾服务器、淘好东西。记录技术折腾笔记与日常随笔。
分类
标签
站点统计
文章
5
分类
3
标签
11
总字数
14,167
运行时长
0 天
最后活动
0 天前
文章目录