🎬 MoonTV 是一个开箱即用的、跨平台的影视聚合播放器。它基于 Next.js 14 + Tailwind CSS + TypeScript 构建,支持多资源搜索、在线播放、收藏同步、播放记录、云端存储,让你可以随时随地畅享海量免费影视内容。
🚀 本项目为专门针对
linux/arm/v7架构(如玩客云等 32 位低功耗设备)深度编译优化的 Docker 镜像版本。
- 📦 ARMv7 深度适配:突破官方镜像的架构限制,通过 GitHub Actions + QEMU 跨架构交叉编译,让 32 位老旧设备也能流畅运行 Next.js 14 应用。
- ⚡ 低内存环境优化:针对玩客云等 1GB 小内存设备,利用
force-dynamic策略将部分 SSG 静态生成转为 SSR 动态渲染,成功绕过构建时由于环境变量缺失导致的打包失败与 OOM 故障。 - 🔍 多源聚合搜索:一次搜索立刻返回全源结果。
- 📄 丰富详情页:支持剧集列表、演员、年份、简介等完整信息展示。
▶️ 流畅在线播放:集成 HLS.js & ArtPlayer。- ❤️ 收藏 + 继续观看:支持 Kvrocks/Redis/Upstash 存储,极度推荐使用 Upstash 降低本地 CPU 负载,实现多端同步进度。
- 📱 PWA:离线缓存、安装到桌面/主屏,移动端原生体验。
- 🌗 响应式布局:桌面侧边栏 + 移动底部导航,自适应各种屏幕尺寸。
- 👿 智能去广告:自动跳过视频中的切片广告(实验性)。
| 分类 | 主要依赖 / 技术难点攻克 |
|---|---|
| 前端框架 | Next.js 14 · App Router |
| 架构适配 | 解决 Node.js 20 弃用警告、基于 linux/arm/v7 的跨平台交叉编译 (QEMU / Buildx) |
| UI & 样式 | Tailwind CSS 3 |
| 语言 | TypeScript 4 |
| 播放器 | ArtPlayer · HLS.js |
| 部署 | Docker · GitHub Actions 自动化 CI/CD |
本项目仅支持 Docker 或其他基于 Docker 的平台(如 CasaOS、Portainer)部署。请在终端 SSH 中执行拉取与启动操作。
本镜像基于 32 位 ARMv7 架构编译,完美兼容以下常见设备及系统(推荐配置 Swap 虚拟内存以防 OOM):
- 玩客云 (OneCloud) / 赚钱宝 / 搭载 Amlogic S805 芯片的各类矿渣设备
- 树莓派 2 / 树莓派 3 (运行 32 位系统)
- 其他刷入 Armbian 32 位系统 (armhf) 的机顶盒及单板机
对于玩客云等 CPU 和内存极弱的设备,强烈推荐使用云端 Serverless 数据库 Upstash。这样不仅可以实现数据持久化,还无需在本地再多跑一个数据库容器占用资源。
- 在 upstash 注册账号并新建一个 Redis 实例,名称任意。
- 复制新数据库的 HTTPS ENDPOINT 和 TOKEN
- 使用如下
docker run命令一键部署(请替换为你自己的账号密码和 URL/TOKEN):
docker run -d \
--name moontv \
-p 3000:3000 \
-e USERNAME="admin" \
-e PASSWORD="your_password" \
-e NEXT_PUBLIC_STORAGE_TYPE="upstash" \
-e UPSTASH_URL="[https://你的-endpoint.upstash.io](https://你的-endpoint.upstash.io)" \
-e UPSTASH_TOKEN="你的Token" \
--restart unless-stopped \
mcgtekwrt/lunatv-armv7:latest
或者使用 docker-compose.yml:
services:
moontv-core:
image: mcgtekwrt/lunatv-armv7:latest
container_name: moontv-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
如果你希望把数据完全存放在本地,可以使用 KVRocks(注意:这会额外占用玩客云部分内存)。
services:
moontv-core:
image: mcgtekwrt/lunatv-armv7:latest
container_name: moontv-core
restart: on-failure
ports:
- '3000:3000'
environment:
- USERNAME=admin
- PASSWORD=admin_password
- NEXT_PUBLIC_STORAGE_TYPE=kvrocks
- KVROCKS_URL=redis://moontv-kvrocks:6666
networks:
- moontv-network
depends_on:
- moontv-kvrocks
moontv-kvrocks:
image: apache/kvrocks
container_name: moontv-kvrocks
restart: unless-stopped
volumes:
- kvrocks-data:/var/lib/kvrocks
networks:
- moontv-network
networks:
moontv-network:
driver: bridge
volumes:
kvrocks-data:
services:
moontv-core:
image: mcgtekwrt/lunatv-armv7:latest
container_name: moontv-core
restart: on-failure
ports:
- '3000:3000'
environment:
- USERNAME=admin
- PASSWORD=admin_password
- NEXT_PUBLIC_STORAGE_TYPE=redis
- REDIS_URL=redis://moontv-redis:6379
networks:
- moontv-network
depends_on:
- moontv-redis
moontv-redis:
image: redis:alpine
container_name: moontv-redis
restart: unless-stopped
networks:
- moontv-network
# 请开启持久化,否则升级/重启后数据丢失
volumes:
- ./data:/data
networks:
moontv-network:
driver: bridge
完成部署后为空壳应用,无播放源,需要站长在管理后台的配置文件设置中填写配置文件(后续会支持订阅)。
提示:如果是国内环境,GitHub Raw 源建议添加 https://ghproxy.net/ 前缀代理,防止拉取失败。
配置文件示例如下:
{
"cache_time": 7200,
"api_site": {
"dyttzy": {
"api": "[http://xxx.com/api.php/provide/vod](http://xxx.com/api.php/provide/vod)",
"name": "示例资源",
"detail": "[http://xxx.com](http://xxx.com)"
}
// ...更多站点
},
"custom_category": [
{
"name": "华语",
"type": "movie",
"query": "华语"
}
]
}
-
cache_time:接口缓存时间(秒)。 -
api_site:你可以增删或替换任何资源站,字段说明: -
key:唯一标识,保持小写字母/数字。 -
api:资源站提供的vodJSON API 根地址。 -
name:在人机界面中展示的名称。 -
detail:(可选)部分无法通过 API 获取剧集详情的站点,需要提供网页详情根 URL,用于爬取。 -
custom_category:自定义分类配置,用于在导航中添加个性化的影视分类。以 type + query 作为唯一标识。支持以下字段: -
name:分类显示名称(可选,如不提供则使用 query 作为显示名) -
type:分类类型,支持movie(电影)或tv(电视剧) -
query:搜索关键词,用于在豆瓣 API 中搜索相关内容
custom_category 支持的自定义分类已知如下:
- movie:热门、最新、经典、豆瓣高分、冷门佳片、华语、欧美、韩国、日本、动作、喜剧、爱情、科幻、悬疑、恐怖、治愈
- tv:热门、美剧、英剧、韩剧、日剧、国产剧、港剧、日本动画、综艺、纪录片
也可输入如 "哈利波特" 效果等同于豆瓣搜索
MoonTV 支持标准的苹果 CMS V10 API 格式。
将完整的配置文件 base58 编码后提供 http 服务即为订阅链接,可在 MoonTV 后台/Helios 中使用。
可借助 watchtower 自动更新镜像容器
dockge/komodo 等 docker compose UI 也有自动更新功能
| 变量 | 说明 | 可选值 | 默认值 |
|---|---|---|---|
| USERNAME | 站长账号 | 任意字符串 | 无默认,必填字段 |
| PASSWORD | 站长密码 | 任意字符串 | 无默认,必填字段 |
| SITE_BASE | 站点 url | 形如 https://example.com | 空 |
| NEXT_PUBLIC_SITE_NAME | 站点名称 | 任意字符串 | MoonTV |
| ANNOUNCEMENT | 站点公告 | 任意字符串 | 本网站仅提供影视信息搜索服务,所有内容均来自第三方网站。本站不存储任何视频资源,不对任何内容的准确性、合法性、完整性负责。 |
| NEXT_PUBLIC_STORAGE_TYPE | 播放记录/收藏的存储方式 | redis、kvrocks、upstash | 无默认,必填字段 |
| KVROCKS_URL | kvrocks 连接 url | 连接 url | 空 |
| REDIS_URL | redis 连接 url | 连接 url | 空 |
| UPSTASH_URL | upstash redis 连接 url | 连接 url | 空 |
| UPSTASH_TOKEN | upstash redis 连接 token | 连接 token | 空 |
| 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_FLUID_SEARCH | 是否开启搜索接口流式输出 | true/ false | true |
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 选项解释:
- direct:由浏览器直接请求豆瓣分配的默认图片域名
- server:由服务器代理请求豆瓣分配的默认图片域名
- img3:由浏览器请求豆瓣官方的精品 cdn(阿里云)
- cmliussss-cdn-tencent:由浏览器请求豆瓣 CDN,该 CDN 由 CMLiussss 搭建,并由腾讯云 cdn 提供加速
- cmliussss-cdn-ali:由浏览器请求豆瓣 CDN,该 CDN 由 CMLiussss 搭建,并由阿里云 cdn 提供加速
- custom: 用户自定义 proxy,由 NEXT_PUBLIC_DOUBAN_IMAGE_PROXY 定义
v100.0.0 以上版本可配合 Selene 使用,移动端体验更加友好,数据完全同步
目前该项目可以配合 OrionTV 在 Android TV 上使用,可以直接作为 OrionTV 后端
已实现播放记录和网页端同步
为了您的安全和避免潜在的法律风险,我们要求在部署时强烈建议关闭公网注册:
- **设置环境变量
PASSWORD**:为您的实例设置一个强密码 - 仅供个人使用:请勿将您的实例链接公开分享或传播
- 遵守当地法律:请确保您的使用行为符合当地法律法规
- 本项目仅供学习和个人使用
- 请勿将部署的实例用于商业用途或公开服务
- 如因公开分享导致的任何法律问题,用户需自行承担责任
- 项目开发者不对用户的使用行为承担任何法律责任
- 本项目不在中国大陆地区提供服务。如有该项目在向中国大陆地区提供服务,属个人行为。在该地区使用所产生的法律风险及责任,属于用户个人行为,与本项目无关,须自行承担全部责任。特此声明
MIT © 2025 MoonTV & Contributors
- ts-nextjs-tailwind-starter — 项目最初基于该脚手架。
- LunaTV — 原项目,由此版本进行适配
- LibreTV — 由此启发,站在巨人的肩膀上。
- ArtPlayer — 提供强大的网页视频播放器。
- HLS.js — 实现 HLS 流媒体在浏览器中的播放支持。
- Zwei — 提供获取豆瓣数据的 cors proxy
- CMLiussss — 提供豆瓣 CDN 服务
- 感谢所有提供免费影视接口的站点。
本镜像的拉取次数与镜像体积数据由 Docker Hub 实时同步更新。



