静看光阴荏苒
不管不顾不问不说也不念

PeerTube配置MinIO对象存储

书接上回,把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

赞(2)
未经允许不得转载:荒岛 » PeerTube配置MinIO对象存储
分享到: 更多 (0)

评论 3

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    好家伙我直接好家伙,貌似这样比S3等对象存储香多了~ :mrgreen:

    BobMaster3周前 (09-25) Microsoft Edge 93.0.961.52 Microsoft Edge 93.0.961.52 Windows 10 x64 Edition Windows 10 x64 Edition回复
  2. #2

    今天想拿甲骨文的arm装一个玩玩,结果发现官方docker不支持arm64,后面有打算按照官方的文档走,yarn又一直报npm版本错误,看到issue有提到buildx来构建arm版本的docker镜像结果还是失败 :cry: :cry:

    Kolicime3周前 (09-25) Google Chrome 93.0.4577.82 Google Chrome 93.0.4577.82 Android 11 Android 11回复
    • 还是别拿甲骨文折腾,就算搭出来转码的时间你会哭的,亲测体验千万别入坑 :cry:

      Foliage3周前 (09-26) Opera 64.3.3282.60839 Opera 64.3.3282.60839 Android 11 Android 11回复

分享创造快乐

广告合作资源投稿