暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

视频分享平台PeerTube的搭建

各种折腾 2023-05-03
866

老苏下载了吴恩达的 Prompt for developer
 课程,不管是否有兴趣,都可以看看,早晚我们都得学会使用 ChatGPT

虽然课程对话是英文,但有中文字幕,课程地址:https://www.aliyundrive.com/s/H3CpaapD87Z


这个软件的坑有点多,但是迈过去了再回头看,也就那么回事,细心 + 耐心而已;

什么是 PeerTube ?

PeerTube
是一个开源的去中心化视频分享平台,类似于 YouTube
。不同之处在于,PeerTube
使用 P2P
技术来分发视频,从而减轻了服务器负担。此外,PeerTube
支持自托管和自定义,因此您可以创建自己的视频分享平台,以满足自己的需求。PeerTube
YouTube
的去中心化联合替代方案。目标不是取代 YouTube
,而是利用 ActivityPub
WebTorrent
协议的优势提供一个可行的替代方案。

什么是 ActivityPub ?

ActivityPub
 是一个去中心社交网络(decentralized social networking
)的交互协议,允许软件项目通过添加 ActivityPub
 支持,实现拥有完全不同代码库的应用程序之间的可互操作社交网络。

反向代理

PeerTube 不支持网络服务器主机更改。请记住,您的域名在您第一次启动 PeerTube
后就已确定

假设我们实际访问地址为:https://peertube.laosu.ml:444

域名局域网地址备注
peertube.laosu.ml
http://192.168.0.197:8900
peertube
的访问地址

npm
中的设置

SSL
都勾选了

经上面设置后,实际访问时,会遇到下面👇这样的错误

Client log: 错误: 无法检索 OAuth 客户端证书:Getting client tokens for host peertube.laosu.ml is forbidden。确保你你已正确配置 PeerTube(config/ directory),特别是“webserver”部分。

经分析,实际上还是出现了截端口现象,所以还需要将下面的代码填入到 npm
Advanced

   location  {  
proxy_set_header Host $host:444;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_pass http://192.168.0.197:8900;
proxy_redirect http:// https://;
}

命令行安装

采用 docker-compose
安装,需要准备环境变量文件 .env.txt
和  docker-compose.yml
文件

.env.txt 文件

.txt
做后缀名是为了在群晖上修改方便

在官方 https://raw.githubusercontent.com/Chocobozzz/PeerTube/master/support/docker/production/.env 基础上修改出来的,为了便于理解,老苏改成了中文注释,所以你保存的时候,记得用 utf-8
编码格式

# Postgres 数据库设置
POSTGRES_USER=peertube
POSTGRES_PASSWORD=peertube
POSTGRES_DB=peertube

# 同 POSTGRES_USER
PEERTUBE_DB_USERNAME=peertube
# 同 POSTGRES_PASSWORD
PEERTUBE_DB_PASSWORD=peertube
PEERTUBE_DB_SSL=false
# docker-compose.yml 中 Postgres service 名称 "postgres"
PEERTUBE_DB_HOSTNAME=postgres

# PeerTube 服务设置
PEERTUBE_WEBSERVER_HOSTNAME=peertube.laosu.ml

# 端口需设置为域名的端口
PEERTUBE_WEBSERVER_PORT=444
PEERTUBE_WEBSERVER_HTTPS=true

# trust_proxy 的 IP,用逗号分隔,最后一个为群晖主机IP
PEERTUBE_TRUST_PROXY=["127.0.0.1", "loopback", "172.18.0.0/16","192.168.0.197"]

# 用 `openssl rand -hex 32` 生成
PEERTUBE_SECRET=8c38d40582cd475f50e87c2d83db9f10fd0ab78b9df3e5c35efa8e6282c0cbb9

# E-mail 设置
# If you use a Custom SMTP server
PEERTUBE_SMTP_USERNAME=wbsu2003@88.com
PEERTUBE_SMTP_PASSWORD=<第三方邮件客户端专用密码>
PEERTUBE_SMTP_HOSTNAME=smtp.88.com
PEERTUBE_SMTP_PORT=25
PEERTUBE_SMTP_FROM=wbsu2003@88.com
PEERTUBE_SMTP_TLS=false
PEERTUBE_SMTP_DISABLE_STARTTLS=false
PEERTUBE_ADMIN_EMAIL=wbsu2003@hotmail.com

# 启用注册
PEERTUBE_SIGNUP_ENABLED=true

几个主要参数的说明

  • PEERTUBE_DB_PASSWORD
    POSTGRES_PASSWORD
    要一致,虽然没有对外暴露端口,但是这个应用毕竟已经映射到公网上了,所以建议密码搞复杂一点;
  • PEERTUBE_WEBSERVER_HOSTNAME
    :这里只填域名,但一定不要带端口,也不要带协议
  • PEERTUBE_WEBSERVER_PORT
    :老苏因为没有备案,域名是带端口的,如果你是备案过的,这里填 443
  • PEERTUBE_WEBSERVER_HTTPS
    :设为 true
    表示启用了 https
    协议,如果这里是 false
    ,如果你备案过的话,那 PEERTUBE_WEBSERVER_PORT
    就改 80
  • PEERTUBE_SECRET
    :执行一次 openssl rand -hex 32
    就行

可以在https://github.com/Chocobozzz/PeerTube/blob/develop/support/docker/production/config/custom-environment-variables.yaml 文件中找到其他配置选项

docker-compose.yml 文件

在官方 https://raw.githubusercontent.com/chocobozzz/PeerTube/master/support/docker/production/docker-compose.yml 基础上做了比较大的调整,例如:

  • 删掉了 webserver
    certbot
    postfix
  • 删掉了卷 certbot-www
    等等

版本 production-bullseye
对应 v5.0.1-bullseye

version: "3.3"

services:

  peertube:
    image: chocobozzz/peertube:v5.0.1-bullseye
    # Use a static IP for this container because nginx does not handle proxy host change without reload
    # This container could be restarted on crash or until the postgresql database is ready for connection
    networks:
      default:
        ipv4_address: 172.18.0.42
    env_file:
      - .env.txt
    ports:
      - "1936:1935" # Comment if you don't want to use the live feature
      - "8900:9000" # Uncomment if you use another webserver/proxy or test PeerTube in local, otherwise not suitable for production
    volumes:
      - assets:/app/client/dist
      - ./data:/data
      - ./config:/config
    depends_on:
      - postgres
      - redis
    restart: "always"

  postgres:
    image: postgres:14
    env_file:
      - .env.txt
    volumes:
      - ./db:/var/lib/postgresql/data
    restart: "always"

  redis:
    image: redis:6.2
    volumes:
      - ./redis:/data
    restart: "always"

networks:
  default:
    ipam:
      driver: default
      config:
      - subnet: 172.18.0.0/16

volumes:
  assets:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: '/volume2/docker/peertube/assets'

docker-compose.yml
文件中需要修改的就两个地方:

  • 端口:
    • 1935
      rtmp
      的默认端口,老苏机器上还有 Owncast
      ,所以被占用了,改为了相邻的 1936
    • 9000
      web
      端口,但是用这个端口的软件太多了,比如 portainer
      ,所以改用了 8900
  • 网络:subnet: 172.18.0.0/16
    ,这是 docker
    的子网

如果非常巧合的情况下,172.18.0.0/16
正好被其它 docker
占用了,你会在一键启动时,看到 ERROR: Pool overlaps with other one on this address space
错误

这个时候你只能改其他网段试试了,如果这里改了,记得

  • peertube
    块中的 ipv4_address
    要改
  • .env.txt
    中的 PEERTUBE_TRUST_PROXY
    也要相应的调整

以上工作都完成之后,你可以依次执行下面的命令

# 新建文件夹 peertube 和 子目录
mkdir -p /volume2/docker/peertube/{assets,config,data,db,redis}

# 进入 peertube 目录
cd /volume2/docker/peertube

# 将 .env.txt 和 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中输入 https://peertube.laosu.ml:444
就可以看到主界面了

不要用http://群晖IP:8900
,否则右下角还是会显示 无法检索 OAuth 客户端证书
错误

管理员账号

方法一

在  /docker/peertube/data/logs
目录中找到 peertube.log
文件

打开 peertube.log
,搜索 root

{"message":"Username: root","level":"info","label":"peertube.laosu.ml:444","timestamp":"2023-02-21T15:16:06.996Z"}
{"message":"User password: vohiniduyinajiso","level":"info","label":"peertube.laosu.ml:444","timestamp":"2023-02-21T15:16:06.996Z"}

其中密码就是 User password
后面的 vohiniduyinajiso

方法二

可以用找回密码,来获取管理员 root
的密码,电子邮件就是我们之前填写的 PEERTUBE_ADMIN_EMAIL
的值

如果邮件配置没问题的话,很快就会收到重置的邮件

点邮件中的链接,直接重置密码即可

方法三

通过命令行方式对密码进行管理员账号 root
的密码进行重置

# 重置 root 用户的密码
docker-compose exec -u peertube peertube npm run reset-password -- -u root

拿到管理员密码后,用用户名 root
,也可以用邮件地址 wbsu2003@hotmail.com
登录,对网站进行设置

注册用户

也可以新建一个用户,用来发布视频

接下来就是建频道,发布视频

发布成功后,如果是公开的可以在首页看到

直接可以播放

更多的功能老苏也在抽空摸索中

参考文档

GitHub - Chocobozzz/PeerTube: ActivityPub-federated video streaming platform using P2P directly in your web browser 地址:https://github.com/Chocobozzz/PeerTube

PeerTube 是什么?| JoinPeerTube 地址:https://joinpeertube.org/zh_Hans

new docker install, Cannot generate HTML page. ENOENT: no such file or directory · Issue #4522 · Chocobozzz/PeerTube 地址:https://github.com/Chocobozzz/PeerTube/issues/4522

Invalid client: client is invalid · Issue #3151 · Chocobozzz/PeerTube 地址:https://github.com/Chocobozzz/PeerTube/issues/3151

PeerTube/tools.md at develop · Chocobozzz/PeerTube 地址:https://github.com/Chocobozzz/PeerTube/blob/develop/support/doc/tools.md#reset-passwordjs

PeerTube documentation 地址:https://docs.joinpeertube.org/

@所有人:写文不易,如果你都看到了这里,请点个
在看
,分享给更多的朋友;为确保你能收到每一篇文章,请主页右上角设置星标。


文章转载自各种折腾,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论