lala.im:PeerTube配置MinIO对象存储

運維技術·lala.im · 2021-09-24 · 131 人浏览

原文地址:https://lala.im/8065.html,請支持原作者!該處僅作轉載。

书接上回,把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\nhttps://docs.min.io/docs/generate-let-s-encypt-certificate-using-concert-for-minio\nhttps://docs.min.io/docs/minio-quickstart-guide.html\nhttps://docs.joinpeertube.org/admin-remote-storage

運維技術 網盤 lala.im
Theme Jasmine by Kent Liao