项目简介
🎬 MoonTV 是一个开箱即用的、跨平台的影视聚合播放器。它基于 Next.js 14 + Tailwind CSS + TypeScript 构建,支持多资源搜索、在线播放、收藏同步、播放记录、本地/云端存储,让你可以随时随地畅享海量免费影视内容。项目地址:https://github.com/senshinya/moontv
✨ 功能特性
- 🔍 多源聚合搜索:内置数十个免费资源站点,一次搜索立刻返回全源结果。
- 📄 丰富详情页:支持剧集列表、演员、年份、简介等完整信息展示。
- ▶️ 流畅在线播放:集成 HLS.js & ArtPlayer。
- ❤️ 收藏 + 继续观看:支持 Redis/D1 存储,多端同步进度。
- 📱 PWA:离线缓存、安装到桌面/主屏,移动端原生体验。
- 🌗 响应式布局:桌面侧边栏 + 移动底部导航,自适应各种屏幕尺寸。
- 🚀 极简部署:一条 Docker 命令即可将完整服务跑起来,或免费部署到 Vercel 和 Cloudflare。
- 👿 智能去广告:自动跳过视频中的切片广告(实验性)


部署流程
适用于自建服务器 / NAS / 群晖等场景。
1. 直接运行(最简单)
# 拉取预构建镜像
docker pull ghcr.io/senshinya/moontv:latest
# 运行容器
# -d: 后台运行 -p: 映射端口 3000 -> 3000
docker run -d --name moontv -p 3000:3000 ghcr.io/senshinya/moontv:latest
访问 http://服务器 IP:3000 即可。(需自行到服务器控制台放通 3000 端口)
2.Docker Compose 最佳实践
docker-compose文件内容
services:
moontv-core:
image: ghcr.nju.edu.cn/senshinya/moontv:latest
container_name: moontv
restart: unless-stopped
ports:
- '3000:3000'
environment:
- USERNAME=admin
- PASSWORD=admin_PASSWORD
- SITE_NAME=MoonTV
- ANNOUNCEMENT=本网站仅提供影视信息搜索服务,所有内容均来自第三方网站。本站不存储任何视频资源,不对任何内容的准确性、合法性、完整性负责。
- NEXT_PUBLIC_STORAGE_TYPE=redis
- REDIS_URL=redis://moontv-redis:6379
- NEXT_PUBLIC_ENABLE_REGISTER=true
- NEXT_PUBLIC_SEARCH_MAX_PAGE=50
- NEXT_PUBLIC_SEARCH_MAX_PAGE=url prefix
networks:
- moontv-network
depends_on:
- moontv-redis
# 如需自定义配置,可挂载文件
# volumes:
# - ./config.json:/app/config.json:ro
moontv-redis:
image: redis
container_name: moontv-redis
restart: unless-stopped
networks:
- moontv-network
# 如需持久化
# volumes:
# - ./data:/data
networks:
moontv-network:
driver: bridge
.env
CONTAINER_NAME=moontv
HOST_IP=0.0.0.0
WEB_HTTP_PORT=3000
CPUS=0
MEMORY_LIMIT=0MB
APP_PATH=/www/dk_project/dk_app/moontv/moontv_asx1
环境变量
| 变量 | 说明 | 可选值 | 默认值 |
|---|---|---|---|
| USERNAME | redis 部署时的管理员账号 | 任意字符串 | (空) |
| PASSWORD | 默认部署时为唯一访问密码,redis 部署时为管理员密码 | 任意字符串 | (空) |
| 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 | 是否开放注册,仅在 redis 部署时生效 | true / false | false |
| NEXT_PUBLIC_SEARCH_MAX_PAGE | 搜索接口可拉取的最大页数 | 1-50 | 5 |
| NEXT_PUBLIC_IMAGE_PROXY | 默认的浏览器端图片代理 | url prefix | (空) |
配置说明
所有可自定义项集中在根目录的 config.json 中:
{
"cache_time": 7200,
"api_site": {
"dyttzy": {
"api": "http://caiji.dyttzyapi.com/api.php/provide/vod",
"name": "电影天堂资源",
"detail": "http://caiji.dyttzyapi.com"
}
// ...更多站点
}
}
cache_time:接口缓存时间(秒)。api_site:你可以增删或替换任何资源站,字段说明:key:唯一标识,保持小写字母/数字。api:资源站提供的vodJSON API 根地址。name:在人机界面中展示的名称。detail:(可选)部分无法通过 API 获取剧集详情的站点,需要提供网页详情根 URL,用于爬取。
MoonTV 支持标准的苹果 CMS V10 API 格式。
修改后 无需重新构建,服务会在启动时读取一次。
管理员配置
该特性目前仅支持通过 Docker+Redis 或 Cloudflare+D1 的部署方式使用
支持在运行时动态变更服务配置
设置环境变量 USERNAME 和 PASSWORD 即为站长用户,站长可设置用户为管理员
站长或管理员访问 /admin 即可进行管理员配置
AndroidTV 使用
目前该项目可以配合 OrionTV 在 Android TV 上使用,可以直接作为 OrionTV 后端
暂时收藏夹与播放记录和网页端隔离,后续会支持同步用户数据
总结
MoonTV确实是一个非常实用的工具,尤其适合Docker爱好者和喜欢折腾技术的老铁们。它用极简的部署流程解决了传统影视聚合网站的痛点,无论是多源搜索、播放流媒体,还是跨平台同步,都能满足大部分需求。不过需要提醒的是,项目提供的资源均来自第三方网站,老铁们在使用时要注意遵守相关法律法规,避免造成不必要的麻烦。
项目地址和使用地址
- • 项目地址:https://github.com/senshinya/moontv