MoonTV 搭建教程
本文面向想在自有服务器上搭建 MoonTV 影视聚合播放器的用户,涵盖 Docker Compose 部署与 Upstash 云端存储配置。
适用系统: Linux(推荐 Debian / Ubuntu)
适用平台: 云服务器 / 本地 NAS / 家庭服务器
前言
🎬 MoonTV 是一个开箱即用的、跨平台的影视聚合播放器。它基于 Next.js 14 + Tailwind CSS + TypeScript 构建,支持多资源搜索、在线播放、收藏同步、播放记录、云端存储。
本文将使用 Docker Compose + Upstash 的方式来搭建 MoonTV,无需自建数据库,数据存储在云端。
本文参考了 lunatv-config 项目的配置说明。
功能特性
- 🔍 多源聚合搜索:一次搜索立刻返回全源结果
- 📄 丰富详情页:支持剧集列表、演员、年份、简介等完整信息展示
- ▶️ 流畅在线播放:集成 HLS.js & ArtPlayer
- ❤️ 收藏 + 继续观看:支持云端存储,多端同步进度
- 📱 PWA:离线缓存、安装到桌面/主屏,移动端原生体验
- 🌗 响应式布局:桌面侧边栏 + 移动底部导航,自适应各种屏幕尺寸
部署后项目为空壳项目,无内置播放源和直播源,需要自行收集配置。
前置条件
在开始之前,请确保你已准备好以下环境:
- 一台可访问的服务器(VPS、NAS、家庭服务器等)
- 已安装 Docker 和 Docker Compose
- 一个 Upstash 账号(注册地址)
第一步:注册 Upstash
-
访问 Upstash 官网 并注册账号
-
登录后,点击 Create Database

Create Database -
选择 Redis 类型,名称随意填写
-
创建完成后,在数据库详情页找到以下信息:

查看详情 - HTTPS 点击复制(形如
https://xxx.upstash.io) - TOKEN 点击复制(认证令牌)
- HTTPS 点击复制(形如
请妥善保存这两个信息,后续配置需要用到。
第二步:创建 Docker Compose 配置文件
在你的服务器上创建项目目录:
mkdir moontv && cd moontv一键创建并写入 docker-compose.yml 文件并启动 (需要替换环境变量为自己的):
cat > docker-compose.yml <<EOF && docker compose up -dservices: moontv-core: image: ghcr.io/moontechlab/lunatv:latest container_name: moontv-core restart: on-failure ports: - '33000:3000' environment: - USERNAME=admin - PASSWORD=admin_password - NEXT_PUBLIC_STORAGE_TYPE=upstash - UPSTASH_URL=https://你的HTTPS_ENDPOINT - UPSTASH_TOKEN=你的TOKENEOF第三步:配置环境变量
请将以下环境变量替换为你自己的值:
| 变量 | 说明 |
|---|---|
container_name | 容器名称 |
USERNAME | 管理员账号(自定义) |
PASSWORD | 管理员密码(自定义) |
NEXT_PUBLIC_STORAGE_TYPE | 存储类型,固定为 upstash |
UPSTASH_URL | Upstash 的 HTTPS ENDPOINT |
UPSTASH_TOKEN | Upstash 的 TOKEN |
请务必修改 USERNAME 和 PASSWORD,使用强密码以保障安全。
第四步:启动服务
运行以下命令启动 MoonTV:
docker compose up -d查看容器状态:
docker compose ps查看日志:
docker compose logs -f启动成功后,访问 http://你的服务器IP:33000 即可打开 MoonTV。
第五步:配置播放源
部署完成后为空壳应用,无播放源,需要在管理后台配置。
- 访问你的 MoonTV 地址
- 使用设置的管理员账号密码登录
- 进入管理后台的 配置文件 设置
- 添加播放源配置
配置文件格式示例(可直接用):
{ "cache_time": 7200, "api_site": { "iqiyizyapi.com": { "name": "🎬-爱奇艺-", "api": "https://iqiyizyapi.com/api.php/provide/vod", "detail": "https://iqiyizyapi.com" }, "mtzy.me": { "name": "🎬茅台资源", "api": "https://caiji.maotaizy.cc/api.php/provide/vod", "detail": "https://mtzy.me" }, "wolongzyw.com": { "name": "🎬卧龙资源", "api": "https://wolongzyw.com/api.php/provide/vod", "detail": "https://wolongzyw.com" }, "ikunzy.com": { "name": "🎬iKun资源", "api": "https://ikunzyapi.com/api.php/provide/vod", "detail": "https://ikunzy.com" }, "dyttzyapi.com": { "name": "🎬电影天堂", "api": "http://caiji.dyttzyapi.com/api.php/provide/vod", "detail": "http://caiji.dyttzyapi.com" }, "www.maoyanzy.com": { "name": "🎬猫眼资源", "api": "https://api.maoyanapi.top/api.php/provide/vod", "detail": "https://www.maoyanzy.com" }, "cj.lzcaiji.com": { "name": "🎬量子资源", "api": "https://cj.lzcaiji.com/api.php/provide/vod", "detail": "https://cj.lzcaiji.com" }, "360zy.com": { "name": "🎬360 资源", "api": "https://360zyzz.com/api.php/provide/vod", "detail": "https://360zy.com" }, "jszyapi.com": { "name": "🎬极速资源", "api": "https://jszyapi.com/api.php/provide/vod", "detail": "https://jszyapi.com" }, "www.moduzy.net": { "name": "🎬魔都资源", "api": "https://www.mdzyapi.com/api.php/provide/vod", "detail": "https://www.moduzy.net" }, "ffzyapi.com": { "name": "🎬非凡资源", "api": "https://api.ffzyapi.com/api.php/provide/vod", "detail": "https://cj.ffzyapi.com" }, "bfzy.tv": { "name": "🎬暴风资源", "api": "https://bfzyapi.com/api.php/provide/vod", "detail": "https://bfzy.tv" }, "zuida.xyz": { "name": "🎬最大资源", "api": "https://api.zuidapi.com/api.php/provide/vod", "detail": "https://zuida.xyz" }, "wujinzy.me": { "name": "🎬无尽资源", "api": "https://api.wujinapi.me/api.php/provide/vod", "detail": "https://wujinzy.com" }, "xinlangapi.com": { "name": "🎬新浪资源", "api": "https://api.xinlangapi.com/xinlangapi.php/provide/vod", "detail": "https://xinlangapi.com" }, "api.wwzy.tv": { "name": "🎬旺旺资源", "api": "https://api.wwzy.tv/api.php/provide/vod", "detail": "https://api.wwzy.tv" }, "www.subozy.com": { "name": "🎬速播资源", "api": "https://subocaiji.com/api.php/provide/vod", "detail": "https://www.subozy.com" }, "jinyingzy.com": { "name": "🎬金鹰点播", "api": "https://jinyingzy.com/api.php/provide/vod", "detail": "https://jinyingzy.com" }, "p2100.net": { "name": "🎬飘零资源", "api": "https://p2100.net/api.php/provide/vod", "detail": "https://p2100.net" }, "api.ukuapi88.com": { "name": "🎬U酷影视", "api": "https://api.ukuapi88.com/api.php/provide/vod", "detail": "https://www.ukuzy.com" }, "api.guangsuapi.com": { "name": "🎬光速资源", "api": "https://api.guangsuapi.com/api.php/provide/vod", "detail": "https://api.guangsuapi.com" }, "www.hongniuzy.com": { "name": "🎬红牛资源", "api": "https://www.hongniuzy2.com/api.php/provide/vod", "detail": "https://www.hongniuzy.com" }, "caiji.moduapi.cc": { "name": "🎬魔都动漫", "api": "https://caiji.moduapi.cc/api.php/provide/vod", "detail": "https://caiji.moduapi.cc" }, "www.ryzyw.com": { "name": "🎬如意资源", "api": "https://pz.v88.qzz.io/?url=https://cj.rycjapi.com/api.php/provide/vod", "detail": "https://www.ryzyw.com" }, "www.haohuazy.com": { "name": "🎬豪华资源", "api": "https://pz.v88.qzz.io/?url=https://hhzyapi.com/api.php/provide/vod", "detail": "https://www.haohuazy.com" }, "bdzy1.com": { "name": "🎬百度云zy", "api": "https://pz.v88.qzz.io/?url=https://api.apibdzy.com/api.php/provide/vod", "detail": "https://bdzy1.com" }, "lovedan.net": { "name": "🎬艾旦影视", "api": "https://pz.v88.qzz.io/?url=https://lovedan.net/api.php/provide/vod", "detail": "https://lovedan.net" } }}订阅功能
将完整的配置文件进行 base58 编码后提供 HTTP 服务,即为订阅链接,可在 MoonTV 后台使用。
https://pz.v88.qzz.io?format=2&source=jin18转或者中转连接:
https://pz.v88.qzz.io?format=3&source=jin18常见问题
Q: 如何修改端口?
修改 docker-compose.yml 中的端口映射:
ports: - '8080:3000' # 将 33000 改为你想要的端口Q: 如何备份数据?
由于使用 Upstash 云端存储,你的播放记录和收藏数据已自动存储在云端,无需额外备份。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!













