2025-07-03更新:鉴于官方已经支持了Cloudflare搭建,所以更新了相关教程,需要注意的是,即使通过Cloudflare进行部署也是需要在github进行fork操作。
这个项目和之前推荐过的项目有点类似,原理基本一致,而且该项目最下方引用处也说明了相关情况:
如果你之前已经看过下面这篇文章并且搭建好了相关站点,则该项目对于你来说应该是轻车熟路了:

LibreTV:自建一个轻量级、免费的在线视频搜索与观看平台
项目介绍
目前该项目具备以下功能特性:
🔍 多源聚合搜索:内置数十个免费资源站点,一次搜索立刻返回全源结果。
📄 丰富详情页:支持剧集列表、演员、年份、简介等完整信息展示。
▶️ 流畅在线播放:集成 HLS.js & VidStack。
❤️ 收藏 + 继续观看:LocalStorage 存储,后续扩展 DB 存储。
📱 PWA:离线缓存、安装到桌面/主屏,移动端原生体验。
🌗 响应式布局:桌面侧边栏 + 移动底部导航,自适应各种屏幕尺寸。
🚀 极简部署:一条 Docker 命令即可将完整服务跑起来,或免费部署到 Vercel。
👿 智能去广告:自动跳过视频中的切片广告(实验性)
简单的说,之前LibreTV具有的功能基本都有,二者可能是在界面布局以及用户交互方面存在一定的差别。
目前该项目支持两种方式进行部署:Vercel 和 Docker。并且官方也说明了,后续不会支持Cloudflare。
Fork项目
点击下图中红色区域按钮fork该项目:
之后会跳转到下图页面,其中需要填写的只有1️⃣号处,2️⃣号为选填内容,之后点击3️⃣处按钮即可:
fork之后相当于你复制了一个当前项目到自己的项目列表中,接下来的操作就跟github没关系了。
Vercel部署
官方提供了比较明确的部署步骤,针对程序员或者之前部署过相关项目的朋友们来说非常熟悉也非常明确,如果你是新手或者第一次看到改方式,你需要先测试一下能否访问:https://vercel.com/
如果不能访问,那就只能说非常抱歉了,你只能选择第二种,或者自行寻找相关办法解决网络环境问题,如果你可以访问,则可以继续下面的步骤了。
进入个人的Vercel页面之后点击下图中红色区域按钮新增一个项目,选择project即可:
接下来点击下图中红色区域的按钮导入你之前fork的项目:
接下来可以看到下面的界面,点击红色区域即可展开内容处,如果你需要设置一个密码,避免别人使用的话,可以在1️⃣号按钮处输入:PASSWORD,之后在2️⃣号里面输入你自定义密码,最后点击3️⃣号按钮进行部署:
部署完毕之后即可看到下面的界面:
点击上图中黑色按钮即可跳转到项目详情页面:
在上方界面,点击红色按钮即可进入:
至此,整个项目在Vercel上已经部署完毕了。
Vercel每个月都有免费的流量和访问次数限制,个人使用应该是问题不大的,如果对外开放,考虑使用自己的服务器或者docker等不受限制的设备进行部署。
Cloudflare部署
部署之前请同样进行项目的fork操作,具体点击这里进行查看fork操作的具体步骤:Fork操作。
fork之后可以开始进行Cloudflare的部署操作了。首先进入Cloudflare首页,点击下图中1️⃣号按钮的位置:
之后点击「Pages」选项卡并且点击下方的开始使用按钮:
按照下图进行github的链接操作,也就是提供github的访问权限给Cloudflare,这样Cloudflare才能访问你的项目并且进行部署:
默认情况下会选择访问你所有项目,不过这里建议进行手动选择只能访问要部署的项目内容,具体操作可以看下图的数字进行操作:
点击安装之后会进行授权操作,授权完毕之后就会看到下面的界面,选择你需要部署的项目:
之后按照下图中红色的位置输入对应的命令:pnpm install --frozen-lockfile && pnpm run pages:build
接下来就会开始自动部署了:
部署完毕在以后,就可以看到下面的界面提示成功了:
如果你想要针对这个项目设定密码,可以点击上图中红色箭头部分内容,我个人是推荐的,毕竟Cloudflare的流量和访问量都是有次数限制的,点击红色箭头会跳转到首页,你需要在这个页面选择下图中的选项卡并且按照数字顺序进行操作:
之后再回到部署选项卡按照下图中的数字顺序重新部署:
部署完毕之后已经全部操作完毕了,最终如下图:
如果想要查看项目搭建效果,可以点击下图中红色区域的链接:
Docker部署
Docker部署方式适合自己有软路由或者NAS等含有docker的设备,如果你的服务器安装了docker环境,也可以尝试通过该方法安装。
直接运行【官方推荐】
# 拉取预构建镜像
docker pull ghcr.io/senshinya/moontv:latest# 运行容器
# -d: 后台运行 -p: 映射端口 3000 -> 3000
docker run -d --name moontv -p 3000:3000 ghcr.io/senshinya/moontv:latest
docker-compose示例
version: '3.9'
services:
moontv:
image: ghcr.io/senshinya/moontv:latest
container_name: moontv
restart: unless-stopped
ports:
- '3000:3000'
environment:
- PASSWORD=your_password
# 如需自定义配置,可挂载文件
# volumes:
# - ./config.json:/app/config.json:ro
最后访问服务器链接加上3000端口即可。
环境变量
该项目目前提供了一些相关变量,如果你有能力或者了解如何修改,可以尝试自行修改。
变量 | 说明 | 可选值 | 默认值 |
---|---|---|---|
PASSWORD | 实例访问密码,留空则不启用密码保护 | 任意字符串 | (空) |
SITE_NAME | 站点名称 | 任意字符串 | MoonTV |
ANNOUNCEMENT | 站点公告 | 任意字符串 | 本网站仅提供影视信息搜索服务,所有内容均来自第三方网站。本站不存储任何视频资源,不对任何内容的准确性、合法性、完整性负责。 |
NEXT_PUBLIC_STORAGE_TYPE | 播放记录/收藏的存储方式 | localstorage(本地浏览器存储)、redis(仅 docker 支持) | localstorage |
REDIS_URL | redis 连接 url,若 NEXT_PUBLIC_STORAGE_TYPE 为 redis 则必填 | 连接 url | 空 |
NEXT_PUBLIC_ENABLE_REGISTER | 是否开放注册,建议首次运行时设置 true,注册初始账号后可关闭 | true / false | false |
NEXT_PUBLIC_SEARCH_MAX_PAGE | 搜索接口可拉取的最大页数 | 1-50 | 5 |
NEXT_PUBLIC_AGGREGATE_SEARCH_RESULT | 搜索结果默认是否按标题和年份聚合 | true / false | true |
总结
针对只需要部署项目的朋友们来说,到了这里就已经结束了,但是如果喜欢折腾的朋友可以继续前往项目看看更多,其提供了相关的配置说明。
整体来说这个项目和之前推荐的LibreTV在部署方式差别不大,但是界面和交互方式有一些不同,LibreTV注重的是搜索,也就是你明确知道看什么,但是MoonTV注重的是推荐,如果有能力两个都部署也不是不可以。
两个项目都是利用现有的资源采集站提供的API来实现的,所以最终依赖的就是资源采集站,如果对应的API发生变动,请及时记得更新。