为您的剪辑提供可自行托管的 TikTok feed
用您自己的视频制作 TikTok feed
Erin 是一项简单且可自行托管的服务,使您能够使用 TikTok 著名的垂直滑动提要来查看自己的剪辑。 Reddit 上有人请求开发一款可自行托管的应用程序,该应用程序可以使用 TikTok 的界面显示过滤后的视频,所以我做到了。
Erin 实现了所有这些功能:
除此之外,请注意 Erin 只是一个完全由 Caddy 提供支持的 React 应用程序。 Caddy 负责身份验证、提供静态文件以及同时提供 React 应用程序。
*:您可以屏蔽视频以将其隐藏在源中。如果您想查看哪些视频被屏蔽,甚至取消屏蔽它们,您可以长按
Mask
按钮,管理器将打开。
**:默认情况下,Erin 将从您的文件夹及其子目录中的所有视频创建随机源。但是,如果您想创建自定义源(播放列表),您可以创建子目录并相应地组织您的视频。例如:
https://my-server.tld/directory-a
将从位于/directory-a
目录中的视频创建提要,并且它适用于任何路径(因此支持嵌套文件夹)。
***:您可以使用元数据文件显示所有视频的频道(带有头像和名称)、标题和链接。元数据文件可以位于视频文件夹内的任何位置,并且它必须与其关联视频的文件名匹配,同时用 JSON 替换扩展名。例如:
my-video.mp4
可以在my-video.json
中包含其元数据。此处显示了元数据格式,请注意,您可以在标题中使用原始 HTML 来自定义样式和效果。
有关更多信息,请阅读配置。
在继续之前,无论是 Docker、Docker Compose 还是独立部署,请确保您已创建包含所有视频文件的videos
目录。稍后,该目录将可供您的 Erin 实例使用(通过将卷绑定到 Docker 容器,或将该目录放在 Caddyfile 旁边)。
您可以在命令行上使用 Docker 快速运行 Erin。
您可以使用以下命令:
# Create a .env file
touch .env
# Edit .env file ...
# Option 1 : Run Erin attached to the terminal (useful for debugging)
docker run --env-file .env -p < YOUR-PORT-MAPPING > -v ./videos:/srv/videos:ro mosswill/erin
# Option 2 : Run Erin as a daemon
docker run -d --env-file .env -p < YOUR-PORT-MAPPING > -v ./videos:/srv/videos:ro mosswill/erin
注意:
sample.env
文件位于存储库的根目录中,可帮助您入门
注意:使用
docker run --env-file
时,请确保删除AUTH_ENABLED
和AUTH_SECRET
周围的引号,否则容器可能会因 Docker 在幕后操作的意外插值和类型转换而崩溃。
为了帮助您快速入门,“examples/”目录中提供了一些示例docker-compose
文件。
以下是每个示例的描述:
docker-compose.simple.yml
:在端口 443 上将 Erin 作为前端服务运行,并直接在docker-compose
文件中提供环境变量。
docker-compose.proxy.yml
:Erin 在端口 80 上运行的设置,在监听端口 443 的代理后面。
当您的docker-compose
文件到位时,您可以使用以下命令:
# Run Erin in the current terminal (useful for debugging)
docker-compose up
# Run Erin in a detached terminal (most common)
docker-compose up -d
# Show the logs written by Erin (useful for debugging)
docker logs < NAME-OF-YOUR-CONTAINER >
要运行 Erin,您需要在.env
文件中设置以下环境变量:
注意:命令行上提供的常规环境变量也可以工作
注意:
sample.env
文件位于存储库的根目录中,可帮助您入门
范围 | 类型 | 描述 | 默认 |
---|---|---|---|
PUBLIC_URL | boolean | 用于远程访问您的 Erin 实例的公共 URL。 (如果不是标准 80 或 443,请包含 HTTP / HTTPS 和端口。不要包含尾部斜杠)(阅读官方 Caddy 文档) | https://本地主机 |
AUTH_ENABLED | string | 是否应启用基本身份验证。 (此参数区分大小写)(可能值:true、false) | 真的 |
AUTH_SECRET | string | 用于保护您的 Erin 实例的密码的安全哈希值。 | secure-password 的哈希值 |
APP_TITLE | string | 您希望在浏览器选项卡中显示的自定义标题。 (提示:如果您希望 Erin 动态显示当前视频的标题,可以在此处使用[VIDEO_TITLE] 。) | Erin - 为您自己的剪辑提供 TikTok feed |
AUTOPLAY_ENABLED | boolean | 是否应启用自动播放。 (此参数区分大小写)(可能值:true、false) | 错误的 |
PROGRESS_BAR_POSITION | string | 进度条应位于屏幕上的位置。 (此参数区分大小写)(可能的值:底部、顶部) | 底部 |
提示:要为您的实例生成安全哈希,请使用以下命令:
docker run caddy caddy hash-password --plaintext " your-new-password "
注意:使用
docker-compose.yml
环境变量时,如果您的密码哈希包含美元符号:将它们全部加倍,否则应用程序将崩溃。例如:$ab$cd$efxyz
变为$$ab$$cd$$efxyz
。这是由于docker-compose
字符串插值系统的警告造成的。
如果您在运行 Erin 时遇到任何问题,请参阅以下可能出现的常见问题。
如果这些都不符合您的情况,请随时提出问题。
Erin 位于 Caddy Web 服务器之上。
因此 :
除此之外,请确保满足以下要求:
如果 Erin 在没有代理的情况下作为独立应用程序运行:
A erin XXX.XXX.XXX.XXX
for https://erin.your-server-tld
).env
文件根据配置部分进行了良好配置。如果 Erin 在 Docker 内部/代理后面运行:
PUBLIC_URL
在.env
中设置正确。无论如何,最关键的部分是配置和阅读 Caddy 官方文档。
为了让 Erin 提供您的视频文件,必须遵守以下要求:
.mp4
、 .ogg
、 .webm
之一。 (这是网络浏览器唯一支持的扩展。)/srv/videos
中。为了确保您的视频位于 Docker 容器内且位于正确的位置,您可以:
docker exec -it <NAME-OF-YOUR-CONTAINER> sh
ls /srv/videos
如果尽管一切都配置良好,Erin 仍然无法找到您的视频,请提出一个问题,其中包括当请求转到/media/
时浏览器的 Javascript 控制台和网络选项卡的输出。它可能与浏览器缓存、无效配置或无效凭据有关。
现在,您应该将新的视频文件放入 Docker 挂载的视频目录中。艾琳会自动选取这些新文件,当您刷新浏览器时,您就会看到它们。
Erin 会自动将您的文件名翻译成标题以显示在界面上。
转换操作如下:
-
变成
__
变为-
以下是一些帮助您命名文件的示例:
Vegas-trip__Clip-1.mp4
变成Vegas trip - Clip 1
Spanish-language__Lesson-1.mp4
变成Spanish language - Lesson 1
Spiderman-1.ogg
成为Spiderman 1
艾琳会在每次浏览器刷新时随机打乱您的视频文件。
因此,您的视频没有特定的显示顺序。
目前,Erin 将仅尝试检索具有受支持扩展名的视频。
支持的扩展名是: .webm
、 .mp4
和.ogg
。
但请注意,Safari 似乎不支持.ogg
,因此 Safari 用户将忽略这些视频。
如果您有任何建议或想法来支持更多扩展(尤其是 Safari 用户),请随时提出问题。
将 Docker / Docker Compose 与 Caddy 生成的密码哈希一起使用时,似乎有一些注意事项。
这些是您应该遵循的规则:
docker run ... --env-file .env ...
部署了 Erin,那么您的AUTH_SECRET
应该根本没有引号,并且所有美元符号都应该保持原样而不会转义或加倍docker-compose.yml
文件部署 Erin,那么您的AUTH_SECRET
的美元符号应该加倍。示例: i$am$groot
变为i$$am$$groot
。也就是说,请记住您的密码哈希必须使用以下命令生成:
docker run caddy caddy hash-password --plaintext " your-new-password "
请随意提出问题,解释发生的情况并描述您的环境。
嘿嘿!说声谢谢并提及帮助我们前进的人和项目总是一个好主意。
非常感谢这些项目背后的个人/团队:
如果您喜欢或者它对您有任何帮助,请不要忘记提及 Erin!