We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
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 [email protected]:/root scp ./k3s-install.sh [email protected]:/root # ssh登录到服务器 ssh [email protected] # 离线安装 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白嫖不额外收费的
The text was updated successfully, but these errors were encountered:
@acgnhiki 如果你觉得有用,可以Pin在首页(狗头)
Sorry, something went wrong.
No branches or pull requests
在阿里云 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
# 继续部署,以便可以浏览器远程访问控制台 kubectl apply -f blrec-service.yaml kubectl apply -f 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
白嫖不额外收费的The text was updated successfully, but these errors were encountered: