LunaTV:用 Next.js 14 聚合影视搜索与在线播放
给个人站长用的 Docker 影视聚合播放器,能搜多源并同步进度,但播放源必须自己提供。
GitHub MoonTechLab/LunaTV 更新 2026-09-08 分支 main 星标 9.7K 分叉 9.0K
Next.js 14 影视聚合 HLS.js Docker

🧭 决策指南

适合,如果你

  • 你已有 Docker 环境,并想部署基于 Next.js 14、Tailwind CSS 3 和 TypeScript 的影视聚合前端。
    README“技术栈”列出 Next.js 14、Tailwind CSS 3、TypeScript;“部署”写明仅支持 Docker 或基于 Docker 的平台。
  • 你需要 Kvrocks、Redis 或 Upstash 保存收藏、播放记录并同步进度。
    README“功能特性”列出 Kvrocks/Redis/Upstash 多端同步;环境变量支持 redis、kvrocks、upstash。
  • 你需要 PWA、响应式导航,并计划让 v100.0.0 以上版本配合 Selene 使用。
    README“功能特性”列出 PWA 和响应式布局;“客户端”写明 v100.0.0 以上可配合 Selene。

不适合,如果你

  • 你需要开箱即用的影视内容库,而不准备自行收集播放源。
    README“注意”写明部署后为空壳项目,无内置播放源和直播源,需要自行收集。
  • 你准备将实例公开分享、提供公网服务或用于商业用途。
    README“安全与隐私提醒”要求仅供个人使用、勿公开分享;项目描述声明 CC BY-NC-SA 禁止商业化。
  • 你的部署平台不支持 Docker 或基于 Docker 的平台。
    README“部署”明确写明本项目仅支持 Docker 或其他基于 Docker 的平台部署。

前置条件

  • 需要 Docker 或基于 Docker 的平台;README 原文为“本项目仅支持 Docker 或其他基于 Docker 的平台部署”。 / Docker or a Docker-based platform is required; the README says: “本项目仅支持 Docker 或其他基于 Docker 的平台部署。”
  • 必须设置 USERNAME 和 PASSWORD;环境变量表将两者标为“无默认,必填字段”。 / USERNAME and PASSWORD must be set; the environment-variable table marks both as required with no defaults.
  • 必须设置 NEXT_PUBLIC_STORAGE_TYPE,取值为 redis、kvrocks 或 upstash。 / NEXT_PUBLIC_STORAGE_TYPE must be set to redis, kvrocks, or upstash.
  • 需要在配置文件中填写 api_site;README 明确说明无播放源,需要站长填写配置文件。 / api_site must be filled in the configuration; the README states that no playback sources are included and the site owner must provide the configuration.
  • 若使用 Kvrocks,需要配置 KVROCKS_URL;示例使用 redis://moontv-kvrocks:6666。 / When using Kvrocks, KVROCKS_URL is required; the example uses redis://moontv-kvrocks:6666.

第一步命令(README 原文)

image: ghcr.io/moontechlab/lunatv:latest

要注意

  • Zeabur 部署后还必须设置 Domain,否则浏览器无法访问。
    README“zeabur 一键部署”中的重要提示。
  • 配置 api_site 时,api 必须是资源站提供的 vod JSON API 根地址。
    README“配置文件”中 api_site 字段说明。
  • 公开实例会触及 README 所列法律风险,项目要求设置 PASSWORD 并关闭公网注册。
    README“安全与隐私提醒”及“部署要求”。
  • NEXT_PUBLIC_SEARCH_MAX_PAGE 范围为 1-50,默认值为 5。
    README“环境变量”表。

替代方案

  • Selene:需要移动端体验更友好且与 LunaTV 数据完全同步时,README 指向 v100.0.0 以上版本配合 Selene。
    README“客户端”
  • OrionTV:目标设备是 Android TV 时,README 说明 LunaTV 可作为 OrionTV 后端并同步播放记录。
    README“AndroidTV 使用”

材料未说明

  • README 未给出运行所需 CPU、内存、磁盘或并发规模。 / The README does not specify required CPU, memory, disk, or concurrency capacity.
  • README 未说明自行收集的资源站可用性、稳定性或内容覆盖范围。 / The README does not specify the availability, stability, or content coverage of self-collected sources.
  • README 省略了 Redis 存储的丢数据风险细节、Upstash 配置步骤及其运行限制。 / The README omits details of Redis data-loss risk, Upstash setup steps, and operational limits.
  • README 未说明 v100.1.3 相比 v100.0.0 的具体变更内容。 / The README does not explain the specific changes from v100.0.0 to v100.1.3.
  • README 未提供 HLS.js、ArtPlayer 播放兼容格式、浏览器范围或 DRM 支持信息。 / The README provides no information about HLS.js and ArtPlayer format compatibility, browser coverage, or DRM support.

💡 深度解析

6
不适合 我想把 MoonTV 部署成面向公众的商业影视流媒体服务,并加入自己的运营和收费体系;在这个商业约束下是否适合采用?
适合读者: 计划把影视聚合站作为商业流媒体服务或公开内容平台运营的产品团队

不适合,因为项目明确禁止商业化,也把公开服务和版权责任留给部署者承担。

  • 项目描述写明采用 CC BY-NC-SA 协议,禁止任何商业化行为;衍生项目还必须保留项目地址并以相同协议开源。
  • 安全与隐私提醒要求仅供个人使用,不要公开分享或传播实例,并建议关闭公网注册。
  • 项目定位是影视聚合前端,不提供影视内容、内容存储、转码、版权管理、商业计费或企业级审计能力。
  • README 还指出部署后没有内置播放源,内容依赖用户收集的第三方接口。因此商业运营、内容合法性和公开访问风险都不符合你的约束。
  • 项目描述:采用 CC BY-NC-SA 协议,禁止任何商业化行为
  • 项目描述:任何衍生项目必须保留本项目地址并以相同协议开源
  • 安全与隐私提醒:仅供个人使用,请勿将部署的实例用于商业用途或公开服务
  • 安全与隐私提醒:强烈建议关闭公网注册
  • 项目洞察:不适合需要内容上传、媒体库转码、精细权限、商业计费或企业级审计的场景
材料未说明:README 未说明商业授权是否存在单独申请渠道或例外条款。;README 未提供面向公众服务所需的审计、计费、内容审核和高可用设计。
适合 我需要在网页、Selene 和 Android TV 的 OrionTV 之间同步收藏与播放记录;MoonTV 能否覆盖这三种终端?
适合读者: 同时使用网页端、Selene 移动端和 OrionTV Android TV,要求收藏与播放进度同步的个人用户

适合,README 明确把网页、Selene 和 OrionTV 放在同一套同步使用场景中。

  • 功能特性写明支持收藏、继续观看和多端同步进度,底层可使用 Kvrocks、Redis 或 Upstash。
  • 客户端章节说明 v100.0.0 以上可配合 Selene 使用,且“数据完全同步”。项目当前最新版本为 v100.1.3,满足该版本门槛。
  • AndroidTV 章节说明 MoonTV 可以作为 OrionTV 后端,并且已经实现播放记录与网页端同步。
  • PWA 和响应式布局还覆盖桌面、移动端和主屏安装场景。不过,README 没有承诺所有 Android TV 机型、播放器格式或异常恢复行为都一致。
  • 功能特性:收藏 + 继续观看:支持 Kvrocks/Redis/Upstash 存储,多端同步进度
  • 客户端:v100.0.0 以上版本可配合 Selene 使用,数据完全同步
  • AndroidTV 使用:可以配合 OrionTV,在 Android TV 上使用
  • AndroidTV 使用:已实现播放记录和网页端同步
  • 项目数据:latest_release = v100.1.3
材料未说明:README 未列出 Selene 与 OrionTV 的具体客户端版本兼容矩阵。;README 未说明 Android TV 遥控器导航、分辨率和所有电视机型的适配边界。
适合 我已经有一台个人服务器,习惯用 Docker Compose,并希望用 Kvrocks 保存收藏、播放记录和跨设备进度;MoonTV 是否适合我?
适合读者: 在个人服务器上使用 Docker Compose,并希望用 Kvrocks 保存收藏和播放记录的自托管部署者

适合,因为 MoonTV 的官方部署路径就是 Docker,并且 Kvrocks 是 README 推荐的存储方案。

  • 技术栈章节明确写着“部署:Docker”,部署章节还说明项目“仅支持 Docker 或其他基于 Docker 的平台”。
  • Kvrocks 示例同时启动 ghcr.io/moontechlab/lunatv:latestapache/kvrocks,并把 /var/lib/kvrocks 挂载到持久化卷。
  • 功能特性说明支持 Kvrocks/Redis/Upstash,用于“收藏 + 继续观看”和多端同步。
  • 但部署完成后仍是空壳项目,必须在管理后台填写苹果 CMS V10 资源配置;Docker 服务启动并不等于已有可播放内容。
  • 技术栈:部署 | Docker
  • 部署:本项目仅支持 Docker 或其他基于 Docker 的平台
  • 部署:Kvrocks 存储(推荐)
  • 功能特性:收藏 + 继续观看:支持 Kvrocks/Redis/Upstash 存储,多端同步进度
  • 注意:部署后项目为空壳项目,无内置播放源和直播源
材料未说明:README 未说明个人服务器所需的最低 CPU、内存和磁盘规格。;README 未给出 Kvrocks 数据备份、恢复和升级迁移的完整操作流程。
适合 我计划把 MoonTV 部署到 Docker 平台,只使用 Upstash Redis 保存收藏和播放记录,不想维护本地 Redis 或 Kvrocks;这个方案是否可行?
适合读者: 只有 Upstash Redis、没有本地数据库容器,希望在云平台部署并保留观看状态的部署者

适合,因为 README 为 Upstash 提供了独立的部署方式,不要求同时运行本地 Redis 或 Kvrocks。

  • Upstash 存储章节要求创建 Redis 实例,然后复制 HTTPS ENDPOINT 和 TOKEN。
  • 官方示例通过 NEXT_PUBLIC_STORAGE_TYPE=upstashUPSTASH_URLUPSTASH_TOKEN 连接云端存储。
  • 功能特性确认 Upstash 可用于收藏、继续观看和多端同步。
  • 如果你改用普通 Redis,README 特别警告存在丢数据风险,并要求开启持久化;因此你的“只用 Upstash”约束可以避开本地 Redis 卷配置,但仍依赖 Upstash 服务可用性和账号配置正确。
  • 部署:Upstash 存储
  • 部署:`NEXT_PUBLIC_STORAGE_TYPE=upstash`、`UPSTASH_URL`、`UPSTASH_TOKEN`
  • 功能特性:支持 Kvrocks/Redis/Upstash 存储,多端同步进度
  • 部署:Redis 存储(有一定的丢数据风险)
  • Redis 示例注释:请开启持久化,否则升级/重启后数据丢失
材料未说明:README 未说明 Upstash 免费额度、延迟、区域选择或请求限制。;README 未说明 Upstash 连接失败时收藏和播放记录功能如何降级。
视情况 我维护多个苹果 CMS V10 API,希望一次搜索返回各资源站结果,但资源接口经常变动;MoonTV 能否满足我的聚合需求?
适合读者: 维护多个苹果 CMS V10 兼容资源站、想统一搜索但不打算自行开发影视前端的个人站长

视情况,前提是你的资源站遵循标准苹果 CMS V10 格式且愿意持续维护配置。

  • 功能特性承诺“一次搜索立刻返回全源结果”,配置文件的 api_site 支持增删或替换资源站。
  • README 明确写明支持“标准的苹果 CMS V10 API 格式”;每个站点可配置 api、展示名称,以及无法从 API 获取详情时使用的 detail URL。
  • 配置还支持 cache_timecustom_category,可调节接口缓存并添加电影或电视剧分类。
  • 但项目不内置播放源,且外部接口可能失效、字段不完整或播放地址不可用;非标准 API 是否能接入,README 没有保证。
  • 功能特性:多源聚合搜索:一次搜索立刻返回全源结果
  • 配置文件:`api_site`:你可以增删或替换任何资源站
  • 配置文件:`cache_time`、`api_site`、`custom_category`
  • README:MoonTV 支持标准的苹果 CMS V10 API 格式
  • 注意:部署后项目为空壳项目,无内置播放源和直播源
材料未说明:README 未说明不同 CMS V10 供应商字段差异的兼容范围。;README 未给出资源站失效检测、自动下线或接口健康检查机制。
适合 我正在使用 Next.js 14 App Router、TypeScript 和 Tailwind CSS,并需要 HLS 播放、响应式页面和 PWA;MoonTV 能否作为前端基础?
适合读者: 使用 Next.js 14、TypeScript 和 Tailwind CSS 的前端开发者,想把播放器和 PWA 体验直接集成到影视聚合站

适合,MoonTV 的现有技术栈和功能正好覆盖这些前端约束。

  • 技术栈明确采用 Next.js 14 App Router、Tailwind CSS 3 和 TypeScript 4。
  • 播放器使用 ArtPlayer 与 HLS.js,README 将其描述为支持流畅在线播放。
  • 功能特性包括 PWA、离线缓存、安装到桌面或主屏,以及桌面侧边栏和移动端底部导航的响应式布局。
  • 但它不是通用媒体播放器或转码系统;项目依赖第三方播放地址,HLS.js 和 ArtPlayer 是否能播放某个具体流,还会受到格式、跨域响应头和资源可用性的影响。
  • 技术栈:Next.js 14 · App Router、Tailwind CSS 3、TypeScript 4
  • 技术栈:播放器 | ArtPlayer · HLS.js
  • 功能特性:PWA:离线缓存、安装到桌面/主屏
  • 功能特性:响应式布局:桌面侧边栏 + 移动底部导航
  • 项目洞察:HLS.js 和播放器不能保证所有第三方视频格式、跨域响应头或异常流都能播放
材料未说明:README 未说明自定义播放器皮肤、播放错误处理和 HLS 加密流支持范围。;README 未提供 PWA 离线缓存的具体缓存清单和失效策略。

✨ 核心亮点

  • 多源搜索一次返回全源结果
  • HLS.js 与 ArtPlayer 集成播放
  • Kvrocks、Redis、Upstash 支持进度同步
  • 9,716 星但部署后没有内置播放源

🔧 工程化

  • Next.js 14 App Router 提供影视搜索与详情页
  • ArtPlayer 与 HLS.js 负责在线播放
  • Kvrocks、Redis、Upstash 保存收藏与播放记录
  • PWA 支持离线缓存与移动端安装

⚠️ 风险

  • 部署后为空壳,必须自行收集播放源
  • CC BY-NC-SA 禁止商业化并要求同协议开源
  • Docker 是唯一明确支持的部署方式
  • PASSWORD 必填且 README 要求关闭公网注册
  • 智能去广告仍标注为实验性功能

👥 适合谁?

  • 使用 Docker 的个人影视聚合站维护者
  • 需要 Next.js 14 与 TypeScript 前端的开发者
  • 需要 Selene 或 OrionTV 客户端同步的用户