原项目地址https://github.com/MoonTechLab/LunaTV
🎬 MoonTV 是一个开箱即用的、跨平台的影视聚合播放器。它基于 Next.js 14 + Tailwind CSS + TypeScript 构建,支持多资源搜索、在线播放、收藏同步、播放记录、本地/云端存储,让你可以随时随地畅享海量免费影视内容。
| 分类 | 主要依赖 |
|---|---|
| 前端框架 | Next.js 14 · App Router |
| UI & 样式 | Tailwind CSS 3 |
| 语言 | TypeScript 4 |
| 播放器 | ArtPlayer · HLS.js |
| 代码质量 | ESLint · Prettier · Jest |
| 部署 | Docker · Vercel · pages |
本项目支持 Vercel、Docker、Netlify、Cloudflare 部署。
存储支持矩阵
| Docker | Vercel | Cloudflare | |
|---|---|---|---|
| localstorage | ✅ | ✅ | ✅ |
| 原生 redis | ✅ | ||
| Cloudflare D1 | ✅ | ||
| Upstash Redis | ☑️ | ✅ | ✅ |
✅:经测试支持
☑️:理论上支持,未测试
config.json,请直接修改 Fork 后仓库中该文件。main 分支将自动触发重新构建。部署完成后即可通过分配的域名访问,也可以绑定自定义域名。
main 分支将自动触发重新构建。部署完成后即可通过分配的域名访问,也可以绑定自定义域名。
Cloudflare Pages 的环境变量尽量设置为密钥而非文本
.vercel/output/staticnodejs_compat,无需选择,直接粘贴config.json,请直接修改 Fork 后仓库中该文件。main 分支将自动触发重新构建。# 拉取预构建镜像
# 或拉取最新版本
docker pull stardm/startv:latest
# 运行容器
# -d: 后台运行 -p: 映射端口 3000 -> 3000
docker run -d --name moontv -p 3000:3000 --env PASSWORD=your_password stardm/startv:latest
services:
startv-core:
image: stardm/startv:latest
container_name: startv-core
restart: on-failure
ports:
- '3000:3000'
environment:
- PASSWORD=password
services:
startv-core:
image: stardm/startv:latest
container_name: startv-core
restart: on-failure
ports:
- '3000:3000'
environment:
- USERNAME=admin
- PASSWORD=admin_password
- NEXT_PUBLIC_STORAGE_TYPE=upstash
- UPSTASH_URL= https 开头的 HTTPS ENDPOINT
- UPSTASH_TOKEN= TOKEN
| 变量 | 说明 | 可选值 | 默认值 |
|---|---|---|---|
| USERNAME | 非 localstorage 部署时的管理员账号 | 任意字符串 | (空) |
| PASSWORD | 非 localstorage 部署时为管理员密码 | 任意字符串 | (空) |
| NEXT_PUBLIC_SITE_NAME | 站点名称 | 任意字符串 | MoonTV |
| ANNOUNCEMENT | 站点公告 | 任意字符串 | 本网站仅提供影视信息搜索服务,所有内容均来自第三方网站。本站不存储任何视频资源,不对任何内容的准确性、合法性、完整性负责。 |
| NEXT_PUBLIC_STORAGE_TYPE | 播放记录/收藏的存储方式 | localstorage、redis、d1、upstash | localstorage |
| REDIS_URL | redis 连接 url | 连接 url | 空 |
| UPSTASH_URL | upstash redis 连接 url | 连接 url | 空 |
| UPSTASH_TOKEN | upstash redis 连接 token | 连接 token | 空 |
| NEXT_PUBLIC_ENABLE_REGISTER | 是否开放注册,仅在非 localstorage 部署时生效 | true / false | false |
| NEXT_PUBLIC_SEARCH_MAX_PAGE | 搜索接口可拉取的最大页数 | 1-50 | 5 |
| NEXT_PUBLIC_DOUBAN_PROXY_TYPE | 豆瓣数据源请求方式 | 见下方 | direct |
| NEXT_PUBLIC_DOUBAN_PROXY | 自定义豆瓣数据代理 URL | url prefix | (空) |
| NEXT_PUBLIC_DOUBAN_IMAGE_PROXY_TYPE | 豆瓣图片代理类型 | 见下方 | direct |
| NEXT_PUBLIC_DOUBAN_IMAGE_PROXY | 自定义豆瓣图片代理 URL | url prefix | (空) |
| NEXT_PUBLIC_DISABLE_YELLOW_FILTER | 关闭色情内容过滤 | true/false | false |
NEXT_PUBLIC_DOUBAN_PROXY_TYPE 选项解释:
direct: 由服务器直接请求豆瓣源站
cors-proxy-zwei: 浏览器向 cors proxy 请求豆瓣数据,该 cors proxy 由 Zwei 搭建
cmliussss-cdn-tencent: 浏览器向豆瓣 CDN 请求数据,该 CDN 由 CMLiussss 搭建,并由腾讯云 cdn 提供加速
cmliussss-cdn-ali: 浏览器向豆瓣 CDN 请求数据,该 CDN 由 CMLiussss 搭建,并由阿里云 cdn 提供加速
custom: 用户自定义 proxy,由 NEXT_PUBLIC_DOUBAN_PROXY 定义
NEXT_PUBLIC_DOUBAN_IMAGE_PROXY_TYPE 选项解释:
如果为 localstorage 模式所有可自定义项集中在根目录的 config.json 中(localstorage 模式)
非 localstorage 可在部署好的网页中直接配置
{
"api_site": {
"dyttzy": {
"api": "http://caiji.dyttzyapi.com/api.php/provide/vod",
"name": "电影天堂资源",
"detail": "http://caiji.dyttzyapi.com"
}
// ...更多站点
},
"custom_category": [
{
"name": "华语",
"type": "movie",
"query": "华语"
}
]
}
cache_time:接口缓存时间(秒)。api_site:你可以增删或替换任何资源站,字段说明:
key:唯一标识,保持小写字母/数字。api:资源站提供的 vod JSON API 根地址。name:在人机界面中展示的名称。detail:(可选)部分无法通过 API 获取剧集详情的站点,需要提供网页详情根 URL,用于爬取。custom_category:自定义分类配置,用于在导航中添加个性化的影视分类。以 type + query 作为唯一标识。支持以下字段:
name:分类显示名称(可选,如不提供则使用 query 作为显示名)type:分类类型,支持 movie(电影)或 tv(电视剧)query:搜索关键词,用于在豆瓣 API 中搜索相关内容custom_category 支持的自定义分类已知如下:
也可输入如 "哈利波特" 效果等同于豆瓣搜索
MoonTV 支持标准的苹果 CMS V10 API 格式。
修改后 无需重新构建,服务会在启动时读取一次。
该特性目前仅支持通过非 localstorage 存储的部署方式使用
支持在运行时动态变更服务配置
设置环境变量 USERNAME 和 PASSWORD 即为站长用户,站长可设置用户为管理员
站长或管理员访问 /admin 即可进行管理员配置
目前该项目可以配合 OrionTV 在 Android TV 上使用,可以直接作为 OrionTV 后端
该项目已兼容 Selene 在移动端上使用,可以直接作为 Selene 后端
为了您的安全和避免潜在的法律风险,我们要求在部署时设置密码保护并强烈建议关闭公网注册:
PASSWORD:为您的实例设置一个强密码MIT © 2025 MoonTV & Contributors