Open frankcui95 opened 2 years ago
Ubuntu on ECS + K3S + Traefik v2 + Aliyun OSS + (Public or Private) Domain
可选 + SSL + Cloudflare + WireGuard + ZeroTier
这篇文档面向容器运维人员。
这并不是一篇对新手友好的教程。
确切来说是我想蹭个热度怕忘了整理个部署文档在这。
用了几个月,在服务器上的录制效果我很满意。
这个文档里面可能包含错误,欢迎各路大神指正
在阅读正文之前,已经默认读者已经熟悉或者掌握以下知识或技能
不要担心, 如果你不熟悉上面说的是什么,你可以尝试乱拳打死老师傅敲对命令
*标注的需要重点关注
OSS 这里比较麻烦,新建一个目录,blrec
blrec
用 DNSMASQ (或 BIND9 或 ADGuardHome 或其他同类 DNS 解析软件) 自己随便写一个不存在的域名,自己做解析,不讲
公网访问 6443 管理端口会经常被 reset by peer
所以建议组建私有网络在本机或者登录到服务器上操作 Kubernetes
给 ECS 和本地 OpenWrt 搭建 ZeroTier 和 WireGuard 环境不在本文档范围内,可邮件我私聊
ECS 的安全组需要开启 22 9993 51820 80 443 端口,搭建私网后后续可以禁用 22
将系统软件包都更新到最新
sudo apt update sudo apt upgrade -y reboot
安装 K8S
众所周知的原因无法在服务器上下载某些资源
# 将二进制下载到本地 curl -LO 'https://github.com/k3s-io/k3s/releases/download/v1.25.0%2Bk3s1/k3s' curl -Lo k3s-install.sh 'https://get.k3s.io' curl -Lo k3s-install.sh 'https://get.k3s.io' # 复制到服务器上 scp ./k3s root@101.xxx.yyy.zzz:/root scp ./k3s-install.sh root@101.xxx.yyy.zzz:/root # ssh登录到服务器 ssh root@101.xxx.yyy.zzz # 离线安装 install -m 0755 ./k3s /usr/local/bin # 这个--tls-san example.com写你申请的域名,没有可以不加 # 这个traefik不用他内嵌的v1,用v2或更高 cat ./k3s-install.sh | INSTALL_K3S_SKIP_DOWNLOAD=true sh -s - --disable=traefik --tls-san example.com # 安装helm curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | tee /usr/share/keyrings/helm.gpg > /dev/null apt-get install apt-transport-https --yes echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | tee /etc/apt/sources.list.d/helm-stable-debian.list apt-get update apt-get install helm -y # 安装traefik helm repo add traefik https://helm.traefik.io/traefik helm repo update helm install traefik traefik/traefik # 安装阿里云oss相关工具 apt install build-essential git -y git clone https://github.com/aliyun/ossfs.git cd ossfs/ ./autogen.sh autoupdate ./autogen.sh ./configure make make install touch /etc/passwd-ossfs chmod 640 /etc/passwd-ossfs # 这里写你自己的 echo 'Bucket名称:AccessKey ID:AccessKey Secret' | tee /etc/passwd-ossfs # 写一个系统启动脚本,开机挂载oss # 如果你OSS和ECS不在上海 oss-cn-shanghai-internal.aliyuncs.com改成对应的内网地址,记住,内网 cat <<EOF | tee /etc/systemd/system/mount-oss [Unit] Description=Mount OSS via ossfs for %I Before=k3s.service After=network-online.target nss-lookup.target Wants=network-online.target nss-lookup.target Documentation=https://github.com/aliyun/ossfs/blob/master/README-CN.md [Service] Type=oneshot RemainAfterExit=yes ExecStartPre=/usr/bin/mkdir -p /mnt/oss/%i ExecStart=/usr/local/bin/ossfs %i /mnt/oss/%i -ourl=oss-cn-shanghai-internal.aliyuncs.com -o noxattr -o allow_other ExecStop=/usr/bin/umount /mnt/oss/%i [Install] WantedBy=multi-user.target EOF # 应用变更 systemctl daemon-reload # 这里面@符号后面的是bucket名称 systemctl enable mount-oss@yukiko-live-recording systemctl start mount-oss@yukiko-live-recording # 可以试着去网页版OSS控制台添加几个文件 # 回来ls看看/mnt/oss/bucket名称下面有没有文件 # 如果没有,就是挂载失败或者权限配置不对
将这个文件修改修改保存为blrec-deployment.yaml
blrec-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: blrec namespace: default spec: progressDeadlineSeconds: 600 replicas: 1 selector: matchLabels: app: blrec strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 0 type: RollingUpdate template: metadata: labels: app: blrec spec: containers: # 以后想升级改这里的镜像tag,重新 kubectl apply -f blrec-deployment.yaml - image: acgnhiki/blrec:v1.10.0 imagePullPolicy: IfNotPresent name: blrec ports: - containerPort: 2233 protocol: TCP resources: limits: cpu: "1" memory: 1000Mi requests: cpu: 100m memory: 256Mi volumeMounts: - mountPath: /cfg name: cfg - mountPath: /rec name: rec - mountPath: /log name: log restartPolicy: Always volumes: - hostPath: # 这里路径改一下,你想录制到哪个OSS文件夹就改哪个 bucket名称后面的文件夹是你在OSS里面的文件夹 path: /mnt/oss/yukiko-live-recording/files/ type: "" name: rec - hostPath: path: /mnt/oss/yukiko-live-recording/cfg/ type: "" name: cfg - hostPath: path: /tmp/blrec/ type: "" name: log
将这个文件保存为blrec-service.yaml
blrec-service.yaml
apiVersion: v1 kind: Service metadata: name: blrec spec: clusterIP: None ports: - name: tcp-http port: 2233 protocol: TCP targetPort: 2233 selector: app: blrec type: ClusterIP
将这个文件修改修改保存为blrec-ingressroute.yaml
blrec-ingressroute.yaml
apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: name: blrec namespace: default spec: entryPoints: - web routes: - kind: Rule # 这里example.com修改成你自己的域名 match: Host(`blrec.example.com`) services: - kind: Service name: blrec port: 2233
# 在服务器上运行 kubectl apply -f blrec-deployment.yaml # 检查是否部署成功 kubectl get pods -l app=blrec | grep Running # 如果有返回,就是部署成功,大概长下面这样
NAME READY STATUS RESTARTS AGE blrec-6fbbd6ff64-mvcxk 1/1 Running 0 1m
# 继续部署,以便可以浏览器远程访问控制台 kubectl apply -f blrec-service.yaml kubectl apply -f blrec-ingressroute.yaml
给你的域名添加指向 ECS 的 IP 的 A 记录
blrec.example.com A 101.xxx.yyy.zzz
blrec.example.com
Traefik 配置 SSL 和 http 重定向 https
略
这个我有现成的
用Traefik
和腾讯云的方案比,不用自己手动同步虚拟机的系统盘里面的录播文件到OSS
缺点是OSS的写入请求次数有很多
用ffmpeg转mp4耗时很长也多花钱
添加元数据到flv文件也多花钱
好处是不用管剩余磁盘空间,只要管好马内~
录播到ECS不收费网络流量费
不直接从ECS下载录播文件不花流量费
ECS转存OSS的流量费呢,挂载的时候要用内网地址,才不会多收费
OSS存储费用和下载费用参考官方文档
Cloudflare的CDN是阿里云收OSS流出流量费用
Cloudflare白嫖不额外收费的
@acgnhiki 如果你觉得有用,可以Pin在首页(狗头)
在阿里云 ECS 上录制到 OSS
TL;DR
Ubuntu on ECS + K3S + Traefik v2 + Aliyun OSS + (Public or Private) Domain
可选 + SSL + Cloudflare + WireGuard + ZeroTier
前言
这篇文档面向容器运维人员。
这并不是一篇对新手友好的教程。
确切来说是我想
蹭个热度怕忘了整理个部署文档在这。用了几个月,在服务器上的录制效果我很满意。
这个文档里面可能包含错误,欢迎各路大神指正
在阅读正文之前,已经默认读者已经熟悉或者掌握以下知识或技能
不要担心, 如果你不熟悉上面说的是什么,你可以尝试
乱拳打死老师傅敲对命令本篇文章有的
废话连篇本篇文章没有的
(因为我只是会一点)准备工作
阿里云专有网络 VPC 不要经典网络
阿里云 ECS
*标注的需要重点关注
RAM 访问控制
阿里云 OSS
OSS 这里比较麻烦,新建一个目录,
blrec
准备域名和证书
阿里云域名 + 阿里云 1 年免费证书 (推荐)
有 OpenWrt 或者 AIO
用 DNSMASQ (或 BIND9 或 ADGuardHome 或其他同类 DNS 解析软件) 自己随便写一个不存在的域名,自己做解析,不讲
网络拓扑
公网访问 6443 管理端口会经常被 reset by peer
所以建议组建私有网络在本机或者登录到服务器上操作 Kubernetes
给 ECS 和本地 OpenWrt 搭建 ZeroTier 和 WireGuard 环境不在本文档范围内,可邮件我私聊
ECS 的安全组需要开启 22 9993 51820 80 443 端口,搭建私网后后续可以禁用 22
软件环境搭建
将系统软件包都更新到最新
安装 K8S
众所周知的原因无法在服务器上下载某些资源
将这个文件修改修改保存为
blrec-deployment.yaml
将这个文件保存为
blrec-service.yaml
将这个文件修改修改保存为
blrec-ingressroute.yaml
DNS 设置
给你的域名添加指向 ECS 的 IP 的 A 记录
blrec.example.com A 101.xxx.yyy.zzz
浏览器打开
blrec.example.com
看看能不能进入 blrec 的页面进阶配置
使用 SSL
Traefik 配置 SSL 和 http 重定向 https
使用 Cloudflare
Cloudflare 接管 DNS
略
Cloudflare 配置 CDN 给网站
略
Cloudflare 配置 CDN 给 OSS
略
Cloudflare 配置 IP 访问限制
略
阿里云 ECS 安全组配置 80 和 443 端口允许 Cloudflare 访问
略
随便写个 web 的目录浏览器方便下载
这个我有现成的
配置内网穿透http服务
用Traefik
私网访问阿里云没有公网IP的内网数据库
略
通过webhook读取弹幕数据将礼物和上舰记录保存到数据库
略
总结
和腾讯云的方案比,不用自己手动同步虚拟机的系统盘里面的录播文件到OSS
缺点是OSS的写入请求次数有很多
用ffmpeg转mp4耗时很长也多花钱
添加元数据到flv文件也多花钱
好处是不用管剩余磁盘空间,只要管好马内~
录播到ECS不收费网络流量费
不直接从ECS下载录播文件不花流量费
ECS转存OSS的流量费呢,挂载的时候要用内网地址,才不会多收费
OSS存储费用和下载费用参考官方文档
Cloudflare的CDN是阿里云收OSS流出流量费用
Cloudflare
白嫖不额外收费的