去中心化视频平台 PeerTube 自托管实践指南:从零搭建你的独立视频站点

在 YouTube、Bilibili 等中心化视频平台占据绝对主导地位的今天,内容创作者面临着平台规则变化、收益分成降低、视频下架等诸多不确定性。PeerTube 作为一款由非营利组织 Framasoft 主导开发的联邦化(Federated)视频平台,正逐渐成为追求独立与自由的内容创作者的新选择。本文将带你从零开始,完成一次完整的 PeerTube 自托管部署。


一、为什么选择 PeerTube?

PeerTube 并非要"取代" YouTube,而是提供一种去中心化、互操作性更强的替代方案。在深入部署之前,先理解它的核心价值:

  • 联邦化架构:基于 ActivityPub 协议,可以与 Mastodon、Pleroma 等联邦宇宙实例互联互通。
  • 点对点传输:采用 WebTorrent 技术,用户观看时同时上传片段,大幅降低服务器带宽压力。
  • 无审查压力:作为站长,你完全掌控内容政策和数据。
  • 开源免费:AGPL-3.0 协议,代码完全透明。
  • 货币化灵活:支持通过 Liberapay、OpenCollective 等第三方渠道接受打赏。
注意:PeerTube 适合追求独立表达、技术爱好者、社区型内容的创作者。若你需要海量分发与商业广告体系,自托管并非最优选择。

二、部署前的准备工作

2.1 服务器配置建议

PeerTube 对硬件有一定要求,主要取决于并发观看人数。

用户规模CPU内存存储带宽
个人/小社区(< 100 并发)2 核4GB100GB SSD100Mbps
中型社区(100-500 并发)4 核8GB500GB SSD500Mbps
大型实例(> 1000 并发)8 核+16GB+数 TB1Gbps+

推荐系统:Ubuntu 22.04 LTS 或 Debian 12,已通过官方兼容性测试。

2.2 域名与 DNS

需要准备一个独立域名,并配置以下解析:

  • A 记录:指向服务器公网 IP
  • A 记录 (通配符):例如 *.example.com 用于 Federation
  • 可选:AAAA 记录 支持 IPv6

2.3 软件依赖

  • Node.js 20.x(运行 PeerTube 主程序)
  • PostgreSQL 15+(数据库)
  • Redis 7+(缓存与队列)
  • Nginx(反向代理与 HTTPS 终止)
  • ffmpeg(视频转码核心)

三、Docker 方式部署(推荐)

Docker 部署是最稳定、最可维护的方式,官方提供了完整的 docker-compose.yml 模板。

3.1 初始化目录结构

mkdir -p /opt/peertube && cd /opt/peertube
curl -sL https://raw.githubusercontent.com/Chocobozzz/PeerTube/develop/support/docker/production/docker-compose.yml > docker-compose.yml
curl -sL https://raw.githubusercontent.com/Chocobozzz/PeerTube/develop/support/docker/production/.env > .env

3.2 配置 .env 文件

关键配置项如下:

PEERTUBE_WEBSERVER_HOSTNAME=video.example.com
PEERTUBE_WEBSERVER_PORT=80
[email protected]
PEERTUBE_DB_HOSTNAME=postgres
PEERTUBE_DB_USERNAME=peertube
PEERTUBE_DB_PASSWORD=StrongRandomPassword123!
PEERTUBE_REDIS_HOSTNAME=redis
安全提示PEERTUBE_DB_PASSWORDPEERTUBE_SECRET 等字段务必使用密码管理器生成的强随机字符串。

3.3 启动服务

docker compose up -d

首次启动会自动拉取镜像、初始化数据库、创建管理员账户,日志可通过 docker compose logs -f peertube 查看。

3.4 验证状态

curl -I https://video.example.com/api/v1/config

若返回 200 OK 且包含 JSON 格式的配置信息,则说明 PeerTube 服务端已正常运行。


四、Nginx 反向代理与 HTTPS

默认情况下 PeerTube 仅监听 9000 端口,必须通过 Nginx 提供 HTTPS 访问。

4.1 Nginx 配置示例

/etc/nginx/sites-available/peertube.conf 中写入:

server {
    listen 80;
    server_name video.example.com *.video.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name video.example.com;

    ssl_certificate     /etc/letsencrypt/live/video.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/video.example.com/privkey.pem;

    client_max_body_size 100M;

    location / {
        proxy_pass http://127.0.0.1:9000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

4.2 申请 Let's Encrypt 证书

apt install certbot python3-certbot-nginx -y
certbot --nginx -d video.example.com -d "*.video.example.com"

注意:通配符证书需要使用 DNS 验证方式申请。


五、安装后的关键配置

5.1 管理员后台

首次登录默认管理员账号(用户名 root),请立即修改默认密码。后台路径为 /admin,包含以下核心模块:

  • 配置 → 基础信息:站点名称、描述、Logo、主题色
  • 配置 → 实例设置:是否允许联邦、是否启用注册
  • 用户管理:审核注册申请、封禁违规用户

5.2 启用 P2P 传输(关键性能优化)

在后台 配置 → 转码/播放 中,确认以下两项已开启:

  • 启用 P2P:允许观看者之间互相传输视频块
  • Web 种子:将 HTTP 请求转化为 WebTorrent 协议

启用后,带宽成本可降低 50%-90%(视并发用户规模而定)。

5.3 转码设置

进入 设置 → 转码,根据服务器 CPU 性能选择转码预设:

  • 推荐开启 2160p → 1080p → 720p → 480p 阶梯转码
  • 若 CPU 较弱,可仅保留 720p 与 480p
  • 转码会占用较多 CPU 资源,建议使用 硬件加速(如 Intel QSV、NVIDIA NVENC)

六、联邦化(Federation)配置

这是 PeerTube 最独特的特性——你的实例可以与其他联邦宇宙节点互相订阅、评论。

6.1 查找其他实例

访问 The FederationFediDB,搜索其他 PeerTube 或 Mastodon 实例。

6.2 互相关注

在频道页面点击 "关注" 按钮,输入目标实例的 URL 即可。成功后:

  • 对方用户能看到你频道的视频
  • 你能收到他们的视频更新

6.3 反垃圾与审核

联邦化是把双刃剑,建议在后台开启:

  • 实例黑名单:拉黑已知垃圾实例
  • 视频黑名单:按视频哈希或关键词屏蔽
  • 自定义实例标语:在实例首页明示你的内容政策

七、运维与监控

7.1 日常备份策略

# 数据库备份
docker exec peertube-postgres pg_dump -U peertube peertube > backup_$(date +%F).sql

# 视频文件备份(volume 目录)
rsync -avz /opt/peertube/volumes/storage/ backup-server:/peertube-storage/

建议每天凌晨自动备份,保留最近 30 天的数据。

7.2 升级 PeerTube

cd /opt/peertube
docker compose pull
docker compose up -d

PeerTube 每周发布补丁每月发布次要版本。升级前务必阅读官方 CHANGELOG,注意可能的破坏性变更。

7.3 性能监控工具

推荐引入:

  • Netdata:实时监控 CPU、内存、磁盘、网络
  • Prometheus + Grafana:长期可视化趋势
  • PeerTube 自带的实例统计 API/api/v1/stats

八、常见问题与解决方案

Q1:视频上传后长时间处于"待转码"状态?

检查 docker compose logs peertube 中是否有 ffmpeg 报错。常见原因是 CPU 资源耗尽磁盘空间不足

Q2:联邦化无法连通其他实例?

检查 443 端口是否开放、Nginx 是否正确转发 WebSocket、/api/v1/server 是否能从外网访问。

Q3:上传大文件失败?

在 Nginx 中增大 client_max_body_size,并在 PeerTube 后台调整 Maximum video size

Q4:P2P 无法启用?

必须启用 HTTPS,且浏览器需支持 WebRTC(Chrome/Edge/Firefox 现代版本均可)。


九、写在最后

自托管 PeerTube 并非一项"装上就用"的轻量工作,它需要你兼顾系统管理、安全加固、内容审核、社区运营等多个角色。但作为回报,你将获得:

  • 一个不受平台摆布的独立内容家园
  • 一种真正的社区所有权:你的听众既是观众,也是节点的贡献者
  • 一份值得写进简历的全栈运维经验

去中心化的力量从来不在于单个节点多么强大,而在于节点之间的互相信任与协作。当你部署完自己的 PeerTube 实例,并通过 ActivityPub 协议与其他联邦宇宙相连时,你就已经成为了这场互联网精神复兴运动中的一部分。

祝你部署顺利,拍出好视频。🚀