草庐IT

自托管视频共享平台Clipable

杨浦老苏 2023-09-18 原文

什么是 Clipable ?

Clipable 是一个自托管视频共享平台,为个人和组织提供了一种简单高效的方式来托管、共享和管理他们的视频内容。受 StreamableYouTube 等流行平台的启发,Clipable 提供了一个简单直观的用户界面,使任何人都可以轻松上传、共享和观看视频。Clipable 专注于隐私和安全,为那些寻求更受控制和自力更生的视频托管解决方案的人提供了另一种选择。无论您是内容创作者、企业主,还是只是想与朋友和家人分享视频的人,Clipable 都能提供您自信地管理视频内容所需的所有功能。

官方提供了演示站点:https://clipable.net/

镜像下载

官方的镜像发布在 ghcr.io
地址:https://github.com/clipable/clipable/pkgs/container/clipable

SSH 客户端登录到群晖后,执行下面的命令

# 拉取镜像,目前只发布了一个版本
docker pull ghcr.io/clipable/clipable:latest

如果没有科学上网,很可能会拉不动,可以试试 docker 代理网站:https://dockerproxy.com/,但是会多几个步骤

# 如果拉不动的话加个代理
docker pull ghcr.dockerproxy.com/clipable/clipable:latest

# 重命名镜像(如果是通过代理下载的)
docker tag ghcr.dockerproxy.com/clipable/clipable:latest ghcr.io/clipable/clipable:latest

# 删除代理镜像(如果是通过代理下载的)
docker rmi ghcr.dockerproxy.com/clipable/clipable:latest

下载完成后,可以在 映像 中找到

安装容器

docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

version: '2.1'

services:
  postgres:
    image: postgres:14
    container_name: clipable-db
    environment:
      - POSTGRES_HOST_AUTH_METHOD=trust
    volumes:
      - ./pg_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 1s
      timeout: 5s
      retries: 5

  minio:
    image: minio/minio
    container_name: clipable-minio
    volumes:
      - ./minio_data:/data
    # ports:
    #   - 9001:9001
    environment:
    #  - "MINIO_ACCESS_KEY=minio"
    #  - "MINIO_SECRET_KEY=myminiokeythatishouldchange123"
      - MINIO_ROOT_USER=minio
      - MINIO_ROOT_PASSWORD=myminiokeythatishouldchange123
    command: server /data --console-address ":9001"

  createbuckets:
    image: minio/mc
    container_name: clipable-mc
    depends_on:
      - minio
    entrypoint: >
      /bin/sh -c "
      /usr/bin/mc alias set clipable http://minio:9000 minio myminiokeythatishouldchange123;
      /usr/bin/mc mb clipable/clips;
      exit 0;
      "
  clipable:
    image: ghcr.io/clipable/clipable:latest
    container_name: clipable-web
    # All of these environment variables are documented here: https://github.com/clipable/clipable/wiki/Environment-Variables
    environment:
      #DEBUG: "true"
      MAX_UPLOAD_SIZE: 5GB
      ALLOW_REGISTRATION: "true"
      FFMPEG_CONCURRENCY: 1 
      FFMPEG_THREADS: 0
      FFMPEG_PRESET: medium
      FFMPEG_TUNE: film
      DB_HOST: postgres
      DB_PORT: 5432
      DB_USER: postgres
      DB_PASSWORD: postgres
      DB_NAME: postgres
      DB_IDHASHKEY: mydbidkeythatishouldchange123
      COOKIE_KEY: mycookiekey12345
      COOKIE_DOMAIN: 192.168.0.197
      S3_BUCKET: clips
      S3_ACCESS: minio
      S3_SECRET: myminiokeythatishouldchange123
      S3_ADDRESS: minio:9000
      S3_SECURE: "false"
    ports:
      - 8190:80
    depends_on:
      postgres:
        condition: service_healthy

参数比较多,就不一一说明了,有兴趣可以去看官方文档:https://github.com/clipable/clipable/wiki/Environment-Variables

上面的参数必须要修改的只有 COOKIE_DOMAIN

  • 如果你是在局域网使用,请修改为群晖主机的 IP
  • 如果你反代后使用,请修改为域名,即便你没有备案,也不要带端口,例如:实际访问时使用的是 https://clipable.laosu.ml:444,这里就填 clipable.laosu.ml

COOKIE_DOMAIN 设置不正确的现象是,点login 按钮登录之后又回到 login

其他的参数比如密码,如果局域网使用,改不改无所谓,毕竟数据库 postgres和存储 minio 都没有把接口暴露出来,鉴于数据库采用的方式,务必不要添加端口

现在开始依次执行下面的命令

# 新建文件夹 clipable 和 子目录
mkdir -p /volume2/docker/clipable/{minio_data,pg_data}

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

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

# 一键启动
docker-compose up -d

需要注意的是,在启动完成后, 容器clipable-mc 是会停止的

在它的日志中,你会看到已经成功创建了 bucket,所以不用理会

运行程序

在浏览器中输入 http://群晖IP:8190 就能看到主界面

注册一个用户

注册成功后会多出 upload 按钮

上传一个视频

有个转码的过程

完成后就可以播放了

回到首界面

参考文档

clipable/clipable: A simple, self-hosted, alternative to Streamable
地址:https://github.com/clipable/clipable

Clipable - A self-hosted Streamable alternative : selfhosted
地址:https://www.reddit.com/r/selfhosted/comments/11qj12a/clipable_a_selfhosted_streamable_alternative/

有关自托管视频共享平台Clipable的更多相关文章

  1. ruby - 通过 ruby​​ 进程共享变量 - 2

    我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是

  2. 动漫制作技巧如何制作动漫视频 - 2

    动漫制作技巧是很多新人想了解的问题,今天小编就来解答与大家分享一下动漫制作流程,为了帮助有兴趣的同学理解,大多数人会选择动漫培训机构,那么今天小编就带大家来看看动漫制作要掌握哪些技巧?一、动漫作品首先完成草图设计和原型制作。设计草图要有目的、有对象、有步骤、要形象、要简单、符合实际。设计图要一致性,以保证制作的顺利进行。二、原型制作是根据设计图纸和制作材料,可以是手绘也可以是3d软件创建。在此步骤中,要注意的问题是色彩和平面布局。三、动漫制作制作完成后,加工成型。完成不同的表现形式后,就要对设计稿进行加工处理,使加工的难易度降低,并得到一些基本准确的概念,以便于后续的大样、准确的尺寸制定。四、

  3. python ffmpeg 使用 pyav 转换 一组图像 到 视频 - 2

    2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p

  4. TimeSformer:抛弃CNN的Transformer视频理解框架 - 2

    Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图

  5. ruby - 在模块/类之间共享全局记录器 - 2

    在许多ruby​​类之间共享记录器实例的最佳(正确)方法是什么?现在我只是将记录器创建为全局$logger=Logger.new变量,但我觉得有更好的方法可以在不使用全局变量的情况下执行此操作。如果我有以下内容:moduleFooclassAclassBclassC...classZend在所有类之间共享记录器实例的最佳方式是什么?我是以某种方式在Foo模块中声明/创建记录器还是只是使用全局$logger没问题? 最佳答案 在模块中添加常量:moduleFooLogger=Logger.newclassAclassBclassC..

  6. ruby - 如何使用 cucumber 在场景之间共享状态 - 2

    我有一个功能“从外部网站导入文章”。在我的第一个场景中,我测试从外部网站导入链接列表。Feature:ImportingarticlesfromexternalwebsiteScenario:Searchingarticlesonexample.comandreturnthelinksGiventhereisanImporterAnditsURLis"http://example.com"Whenwesearchfor"demo"ThentheImportershouldreturn25linksAndoneofthelinksshouldbe"http://example.com/d

  7. ruby - 如何更改此正则表达式以从未指定 v 参数的 Youtube URL 获取 Youtube 视频 ID? - 2

    目前我正在使用这个正则表达式从YoutubeURL中提取视频ID:url.match(/v=([^&]*)/)[1]我怎样才能改变它,以便它也可以从这个没有v参数的YoutubeURL获取视频ID:http://www.youtube.com/user/SHAYTARDS#p/u/9/Xc81AajGUMU感谢阅读。编辑:我正在使用ruby​​1.8.7 最佳答案 对于Ruby1.8.7,这就可以了。url_1='http://www.youtube.com/watch?v=8WVTOUh53QY&feature=feedf'url

  8. ruby - Sinatra 路由中定义的全局变量是否在请求之间共享? - 2

    假设我有:get'/'do$random=Random.rand()response.body=$randomend如果我每秒有数千个请求到达/,$random是否会被共享并“泄漏”到上下文之外,或者它会像getblock的“本地”变量一样?我想如果它是在get'/'do的上下文之外定义的,它确实会被共享,但我想知道在ruby​​中是否有我不知道的$机制。 最佳答案 ThispartoftheSinatraREADMEaboutscopeisalwayshelpfultoread但是,如果您只需要为请求保留变量,那么我认为我建议使用

  9. ruby - 跨线程共享枚举器 - 2

    我想从不同线程调用一个公共(public)枚举器。当我执行以下操作时,enum=(0..1000).to_enumt1=Thread.newdopenum.nextsleep(1)endt2=Thread.newdopenum.nextsleep(1)endt1.joint2.join它引发了一个错误:Fibercalledacrossthreads.当enum在从t1调用一次后从t2调用时。为什么Ruby设计为不允许跨线程调用枚举器(或纤程),以及是否有其他方法可以提供类似的功能?我猜测枚举器/纤程上的操作的原子性在这里是相关的,但我不完全确定。如果这是问题所在,那么在使用时独占锁定

  10. ruby - 两个 gem 共享相同的要求? - 2

    当我打电话时:require'retryable'这两个gem冲突:https://github.com/robertsosinski/retryablehttps://github.com/carlo/retryable因为他们都有一个“可重试”文件,所以他们要求用户要求。我对使用第一个gem很感兴趣,但这并不总是会发生。这段代码作为我自己的gem的一部分执行,它必须对所有用户都是可靠的。有没有办法从gem中专门要求(因为gem名称当然不同)?如何解决这个命名冲突?编辑:澄清一下,这是官方仓库,gem名称实际上是不同的(“retryable-rb”和“carlo-retryable”

随机推荐