https://github.com/megabitsenmzq/Tutorials/blob/master/PeerTube/index.md
本文旨在描述如何通过虚拟主机与对象存储,配置易于私人使用的 PeerTube 实例。教程并不适用供大规模访问的网站架设。
虽然说只要 VPS 访问起来没有问题,不用对象存储也是没有问题的。但从经费的角度上,购买高带宽的对象存储总要比高带宽的 VPS 来的省钱。所以对于本文的目标读者,我还是建议使用对象存储。
事前准备
- 一台 VPS(本文以 Ubuntu/Debian 为例)
- 对象存储服务(本文以 Backblaze B2 为例)
- 个人域名或子域名
- 习惯使用 Linux 的大脑
配置对象存储
首先你需要配置一个供 PeerTube 保存其影片的对象存储池。PeerTube 支持 Amazon S3,或 Backblaze B2,你用哪个都行。
访问密钥
你需要从你选择的服务商建立一个访问用的 Key,并将:
- App Key ID
- App Key
记录下来以备稍后使用。
存储池
之后建立一个给 PeerTube 使用的池,并将池设置为公开(Public),记录下:
- 名字
- 终结点(Endpoint,即对象存储的主域名)
- 地区(只有 Amazon S3 需要)
配置 CORS
CORS 其实就是防盗链。你肯定不希望什么网站都外链你的视频出去播放。在上一步已经设置为公开的基础上,点击 “CORS Rules” 按钮进行配置。
选择:Share everything in this bucket with this one origin.
并在其下方写下你将会使用的域名。需包含 https://,端口号可以没有。
CORS 配置大概需要十分钟左右的时间来生效,正好可以来安装我们的网站。
安装 PeerTube
PeerTube 的安装是非常麻烦的,所以有很多人会选择使用 Docker 进行安装,但假如你对 Docker 并不熟悉,后续配置的时候可能会十分头疼。所以这里我们将直接进行安装。本文默认你在非 root 的 sudo user 下进行操作,其他情况请自行调整。
前置准备
安装 Node.js:
sudo apt install build-essential gnupg curl wget unzip
curl -sL https://deb.nodesource.com/setup_lts.x | sudo bash -
sudo apt install nodejs
sudo npm i -g yarn
安装其他包:
sudo apt install git python-dev ffmpeg postgresql postgresql-contrib redis-server
此处我们没有安装 nginx,因为我将会在后文使用 Caddy2 作为 Web 服务器。
启动数据库:
sudo systemctl enable --now postgresql redis-server
建立 PeerTube 用户并设置其密码:
sudo useradd -m -d /var/www/peertube -s /bin/bash peertube
sudo passwd peertube
配置 PostgreSQL 用户和数据库:
sudo -u postgres createuser -P peertube
sudo -u postgres createdb -O peertube -E UTF8 -T template0 peertube_prod
sudo -u postgres psql -c "CREATE EXTENSION pg_trgm;" peertube_prod
sudo -u postgres psql -c "CREATE EXTENSION unaccent;" peertube_prod
此处第一条命令后你会被要求输入数据库的访问密码,后面我们会用到。
安装 PeerTube
首先进入到 peertube 用户下:
su - peertube
下载最新版的 PeerTube:
mkdir config storage versions && cd versions
wget https://github.com/Chocobozzz/PeerTube/releases/download/v4.0.0/peertube-v4.0.0.zip
unzip peertube-v4.0.0.zip
ln -s /var/www/peertube/versions/peertube-v4.0.0 ../peertube-latest
本文编写时 PeerTube 的最新版本是 4.0,其他版本可以从 GitHub 获取。
安装:
cd ../peertube-latest
yarn install --production --pure-lockfile
安装过程中可能会出现一些警告,不用管他。
调整配置文件
首先从模版创建新的配置文件并打开:
cp config/default.yaml /var/www/peertube/config/default.yaml
cp config/production.yaml.example /var/www/peertube/config/production.yaml
nano /var/www/peertube/config/production.yaml
此处使用的是 nano 编辑器,使用方法非常简单,99.9% 的时候都只用 Crtl+O 保存,Ctrl+X 退出。
需要改动的地方有以下几点:
webserver:
https: true
hostname: 'peertube.imlala.best' # 你的域名
port: 443
如果你希望使用 http 进行测试,可以暂时改为 80 端口。
database:
hostname: 'localhost'
port: 5432
ssl: false
suffix: '_prod'
username: 'peertube'
password: 'password' # 刚刚设置的数据库密码
pool:
max: 5
object_storage:
enabled: true # 改为启用
endpoint: 's3.us-west-002.backblazeb2.com' # 你的对象存储池终结点
# region: 'us-east-1' # 你的对象存储地区(如果需要的话)
credentials:
access_key_id: 'xxxxxx' # 你的 App Key ID
secret_access_key: 'xxxxxx' # 你的 App Key
max_upload_part: 2GB
streaming_playlists:
bucket_name: 'PeerTube' # 你的对象存储池名字
prefix: 'streaming-playlists:' # 串流子文件夹名,注意结尾的冒号
videos:
bucket_name: 'PeerTube' # 你的对象存储池名字
prefix: 'videos:' # 影片子文件夹名,注意结尾的冒号
可以根据自己的实际需要填写,如果你不准备用对象存储,这里可以不改。串流列表和影片的池可以不是一个,如果不是一个的话,可以将两行子文件夹名用井号注释掉,如果是一个则必须要有子文件夹名。
transcoding:
enabled: false # 关闭转码
如果你的 VPS 性能很强可以不改,一般的便宜 VPS 都不太带的动转码的工作,我建议你在自己的电脑上转好了再上传。确保视频格式为 H264 音频格式为 AAC。
tracker:
enabled: false ## 关闭 P2P
因为我们的实例是自用的,开着 P2P 没什么意义,所以关掉。P2P 还会影响从对象存储串流。这里的选项并没有办法完全关闭 WebTorrent,我们后面会继续讲。
最后不要忘了保存。
启动 PeerTube
这里先用 Exit
命令回到之前的用户下,之后启动 PeerTube 服务:
sudo systemctl enable --now peertube
检查一下运行有无问题:
sudo systemctl status peertube
我们还需要修改默认的管理员密码,回到 peertube 用户下操作:
su - peertube
cd peertube-latest && NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run reset-password -- -u root
注意此处因为要拉起 Node.js,到出现输入密码提示的速度非常慢,如果误操作多按了回车什么的,可以用 Crtl+C 取消重来。
完成后再次用 Exit
命令回到之前的用户下。
安装 Caddy
Caddy 是一款非常现代且易于配置的 Web 服务器,还可以自动从 Let's Encrypt 签发 HTTPS 证书,我也很推荐你在其他场合尝试使用 Caddy。
用以下命令添加 Caddy 的源并安装:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo tee /etc/apt/trusted.gpg.d/caddy-stable.asc
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
编辑 Caddy 配置文件:
sudo nano /etc/caddy/Caddyfile
将文件的内容替换为以下内容并保存:
peertube.imlala.best { # 你的域名
reverse_proxy 127.0.0.1:9000
}
启动 Caddy 服务:
sudo systemctl enable --now caddy
检查运行有无问题:
sudo systemctl status caddy
此时如果出现端口被占用的问题,说明你可能在运行 nginx 一类的其他 Web 服务器。如果出现无法注册 HTTPS 证书一类的问题,可以检查一下防火墙和 CDN 配置,比如关掉 Cloudflare 的代理再试。
现在你可以打开你的网站试试看了,如果不出意外应该已经可以打开了。你可以用 root 和刚才设置的密码来登录。如果访问不了可以检查防火墙配置。
其他必要配置
在 PeerTube 的管理页面中我们可以对服务器做进一步的自定义。我这里挑选一些重要的来讲一下。
管理面板
首先我建议你安装 privacysettings 插件,它可以将新上传的影片锁定为站内访问,对一个自用的节点非常实用。
在 Configuration > Basic 下,你可以将 SEARCH 和 FEDERATION 里面的项目全部勾掉,来进一步提高自闭程度。记得点保存设置。
我的账户面板
还记得我们刚才提到的 P2P 影响对象存储访问的问题吗?我很怀疑这其实是一个 Bug,在 Tracker 已经被禁用的情况下,P2P 应该不可用才对,但 Web Torrent 却还在浏览器上运行。这基本上等于是把我们用来提速的对象给存储架空了。即便在不用对象存储的条件下,我依然发现它要比直连慢得多,对于私人使用来说怎么都是关掉为好。
我们需要在 “我的账户” 的 Settings 中找到 “帮助分享正在播放的视频” 勾掉。记得点保存设置。这一选项需要在每个用户的设置里面进行调整,非常的麻烦,不过因为我们是自己用,所以影响不是特别大。希望这一问题能在以后的版本中得到解决。
PeerTube 的中文翻译也不是很完整,有时候有有时候没有。
排错
在 PeerTube 的 “管理” 的 “系统” 菜单下的 Jobs 中可以看到正在执行的任务。如 “move-to-object-storage ” 就是将上传的视频移动到对象存储的任务,你可以在其报告中看到一些相关的错误提示。如果对象存储无法访问,可以检查 CORS 是否正确,极端情况下可以先改成允许所有网站访问进行测试。还有可能是因为对象存储没有设置为 Public。
如完全按照本教程配置,播放器应该会在播放时右下角显示 HTTP 字样(电脑版页面),而不是上传下载速度,否则请检查是否已关闭 “帮助分享正在播放的视频”。
参考资料
知乎 Xpitz PeerTube 安装教程:如何搭建视频分享平台(想要用 Docker 装的可以参考此文)
结语
我早就有想搭一个 PeerTube 的想法但是一直没有付诸实践,主要就是因为安装过于麻烦。这次教程用自用节点的角度尽可能细致的梳理了安装步骤,希望能够帮到有同样想法的朋友。
没有评论:
发表评论