书接上回,把peertube实例从contabo迁移到littlecreekhosting后就要着手开始配置对象存储了。
本来我是直接用的contabo的vps700,配置算是非常给力了,4c10g700ghdd,可以满足peertube日常的转码和存储需求,价格也才10.99刀一月。虽然这价格确实不贵,但是我觉得对于我这个没有很多人看的实例来说还是有点不太值,所以就一直想找个更节约的方案。
经常玩vps的都知道,一些cpu给力的vps往往硬盘都不够大,硬盘大的vps称之为存储vps,存储用途的机器cpu普遍又不行,而peertube是既需要cpu又需要硬盘的程序。这在选择机器上就比较困难,除了独立服务器外很难找到一个非常合适的vps,像我之前用的contabo算是非常合适的了,但我又觉得价格略高。
我在很久前就考虑过用对象存储的方案,即把主站放在一台cpu给力的vps上,视频数据通过对象存储放到存储vps上,这样就完美了。但是由于当时peertube的对象存储支持太拉跨,配置后各种问题就放弃了,转而还是继续用这种一体式的方案,搞个大盘鸡全扔上去。。不过我一直还是有在关注peertube对原生s3对象存储支持的开发进度,可谓是千呼万唤始出来啊,终于在3.4.0版本作者发布了第一个原生支持s3对象存储的版本!
peertube只要支持了原生s3对象存储,那剩下的事情就好办很多了,我只需要找两台满足要求的vps即可。说来也是巧合,我昨天在let上看到littlecreekhosting的offer,3.5刀一月的机器给4c4g80gnvme,这配置用来做转码再适合不过了。至于存储用的vps,我手里还有去年黑5买的垃圾hosthatch,一直放那吃灰,刚好500g硬盘,两者结合起来岂不美哉?
正文开始。
首先不得不吐槽一下,这一套配置下来,坑实在是多,尤其是minio,给我整了大半天。这东西能用和能不能用好完全是两回事。能用,就是像官方介绍的那样,下载给个执行权限运行就完事了。但是这样最简的配置是根本不可能用在生产环境的,peertube也不支持这种配置。
废话不多说了,下面是我的配置记录。
首先创建一个名为minio-user的用户,指定用户主目录为/mnt/data,这也是数据存储的目录:
useradd -m -d /mnt/data -s /sbin/nologin -U minio-user
下载minio给执行权限,然后移动到/usr/local/bin:
wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio mv minio /usr/local/bin
新建minio配置文件:
nano /etc/default/minio
写入如下配置:
MINIO_VOLUMES="/mnt/data" MINIO_OPTS="--address :443 --console-address :9001" MINIO_ROOT_USER=imlala MINIO_ROOT_PASSWORD=password MINIO_DOMAIN=minio.example.com MINIO_SERVER_URL="https://minio.example.com"
这里解释一下为何要这么配置。一开始我也很naive,以为随便配置一下peertube就能用了。
发现不能用后,看错误日志发现,peertube只支持virtual-host-style存储桶,也就是我们常说的dns-style存储桶,并且只支持通过ssl连接。
所以得配置minio的virtual-host-style存储桶以及ssl。
MINIO_DOMAIN是启用virtual-host-style存储桶。
MINIO_SERVER_URL是我后面发现启用了minio的ssl后不能登录控制台,根据文档说明,加上这个配置就可以了。
下载systemd服务文件:
curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service
编辑systemd服务文件:
nano minio.service
在[Service]下面加入如下配置,目的是为了能够监听1024以下的端口:
AmbientCapabilities=CAP_NET_BIND_SERVICE
移动systemd服务文件:
mv minio.service /etc/systemd/system/
启动以及设置开机自启:
systemctl enable --now minio
现在需要申请一个通配符证书,这里使用certbot来完成,先安装最新版的certbot以及cloudflare插件:
apt -y update apt -y install snapd snap install core snap refresh core snap install --classic certbot ln -s /snap/bin/certbot /usr/bin/certbot snap set certbot trust-plugin-with-root=ok snap install certbot-dns-cloudflare
创建如下目录:
mkdir -p ~/.secrets/certbot
新建配置文件:
nano ~/.secrets/certbot/cloudflare.ini
在文件内写入如下配置,xxxxx是你的cloudflare的apikey:
dns_cloudflare_api_token = xxxxx
apikey申请可以参考这里:https://lala.im/7737.html
使用下面的命令申请证书:
certbot certonly \ --dns-cloudflare \ --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini \ -d *.minio.example.com -d minio.example.com
将申请好的证书复制到下面的目录:
cp /etc/letsencrypt/live/minio.example.com/fullchain.pem /mnt/data/.minio/certs/public.crt cp /etc/letsencrypt/live/minio.example.com/privkey.pem /mnt/data/.minio/certs/private.key
更改所有者:
chown minio-user:minio-user /mnt/data/.minio/certs/public.crt chown minio-user:minio-user /mnt/data/.minio/certs/private.key
重启minio服务:
systemctl restart minio
打开minio控制台:https://minio.example.com,创建一个桶:
把桶的权限改为公开:
在设置-region-配置服务器位置:
现在可以测试一下这个桶是否支持virtual-host-style。
如果正常的话,访问:https://peertube.minio.example.com,应该能够访问到这个桶的xml文件。
至此,minio的配置就全部完成了。
回到peertube实例的机器内,编辑peertube的配置文件:
nano /opt/peertube/docker-volume/config/production.yaml
在文件的底部,写入如下配置:
object_storage: enabled: true endpoint: 'minio.example.com' region: 'hosthatch-uk' videos: bucket_name: 'peertube' prefix: 'videos/' streaming_playlists: bucket_name: 'peertube' prefix: 'streaming-playlists/' credentials: access_key_id: 'imlala' secret_access_key: 'password'
注意凭据这块,我没有在minio内创建新的用户,所以这里的access_key_id直接对应MINIO_ROOT_USER。
同理secret_access_key对应MINIO_ROOT_PASSWORD。
配置完成后,重启容器即可:
docker-compose restart
参考文献:
https://github.com/minio/minio-service
https://docs.min.io/docs/generate-let-s-encypt-certificate-using-concert-for-minio
https://docs.min.io/docs/minio-quickstart-guide.html
https://docs.joinpeertube.org/admin-remote-storage
好家伙我直接好家伙,貌似这样比S3等对象存储香多了~
今天想拿甲骨文的arm装一个玩玩,结果发现官方docker不支持arm64,后面有打算按照官方的文档走,yarn又一直报npm版本错误,看到issue有提到buildx来构建arm版本的docker镜像结果还是失败
还是别拿甲骨文折腾,就算搭出来转码的时间你会哭的,亲测体验千万别入坑
按大佬的一步步来的,可惜还是不能通过域名访问minio