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

装 Docker
逐行复制粘贴,每行回车:
apt update && apt install -y curlcurl -fsSL https://get.docker.com -o /tmp/get-docker.shsh /tmp/get-docker.sh第三行会跑一两分钟,输出很长是正常的。跑完验证一下:
docker --version能打印出 Docker version 29.9.3 这样的版本号,就说明装好了。

启动 MeTube
把下面这一整块全部复制、粘贴、回车(一次性贴完即可):
mkdir -p /opt/metube/downloads && cd /opt/metubecat > 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:/downloadsEOFdocker compose up -d然后验证:
docker psSTATUS 一栏显示 Up ... (healthy) 就说明跑起来了。其中 127.0.0.1:8081 是故意只给服务器自己用的,外网访问一律走后面的域名入口,这样才好加密码。

设置密码和域名
先把 Nginx 和密码工具装上,再生成一张证书(Cloudflare 的「完全」模式要求源站有证书,自签的就行),最后给网站设置一个登录账号:
apt update && apt install -y nginx apache2-utils opensslmkdir -p /etc/nginx/sslopenssl 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 adminhtpasswd 会让输两次密码(不回显),这个账号 admin 和你设的密码,就是以后打开网站要输的。

然后把 Nginx 的规则整块贴进去,作用是:用 IP 来访问的一律掐断,只有你的域名能进,进门还要先输密码:
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;}
# 只有这个域名能进,先输密码再转给 MeTubeserver { 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"; }}EOFrm -f /etc/nginx/sites-enabled/defaultnginx -t && systemctl reload nginx唯一要改的就是 test.9corner.com,换成你自己的域名(出现两处)。

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

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

别把 cookies.txt 发给人、别提交到仓库;截图前把里面的值打码。
cookies 有时效,过阵子失效了就重新导出一份传上去。
下载第一个视频
把视频链接粘贴到页面顶部的输入框,点 Download:
- 正在下载的在 Downloading 区,能看到进度条和速度。
- 下载完成的出现在 Completed 区,点标题就能在线看,点旁边的图标可以把文件下载到本地。

文件都存在服务器 /opt/metube/downloads 目录里。
自动清理旧视频
小盘 VPS 必须管好磁盘。这块配置好之后:每 4 小时自动删掉最早的一个视频;每 10 分钟检查一次磁盘,用到 95% 就一直删最早的,直到降下来。
cat > /opt/metube/cleanup.sh << 'EOF'#!/bin/bash# 每 4 小时删掉最早的一个视频;磁盘用到 95% 就一直删到降下来DIR=/opt/metube/downloadsLIMIT=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 ;;esacEOFchmod +x /opt/metube/cleanup.sh
cat > /etc/cron.d/metube-cleanup << 'EOF'SHELL=/bin/bashPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin0 */4 * * * root /opt/metube/cleanup.sh oldest*/10 * * * * root /opt/metube/cleanup.sh fullEOF删了什么可以看日志:
cat /var/log/metube-cleanup.log
想保住某个视频不被删,下完把它从 /opt/metube/downloads 拷走就行。
检查是否装对
在服务器上跑三条命令,各对应一个预期结果:
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'
对照这份清单:
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>8081> 打不开?
故意的。MeTube 只监听服务器自己,公网只能从域名入口进,这样密码保护才有意义。
Q:视频莫名其妙少了?
被自动清理删了,cat /var/log/metube-cleanup.log 能看到删了哪个。想保住就把文件拷出 downloads 目录。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!

