📦 LunaTV (MoonTV) 详细部署教程

LunaTV 是一个开源、跨平台的影视聚合播放器,基于 Next.js 14 构建,支持多资源搜索、在线播放、收藏同步和播放记录功能。它本身是一个“空壳”项目,不内置任何播放源或直播源,需要由使用者自行配置。

重要声明:本项目仅供个人学习使用,严禁商业用途。请勿公开分享或传播你的实例,并遵守当地法律法规。项目开发者不对用户的使用行为承担法律责任。


⚙️ 部署前准备

  1. 一台服务器或本地电脑(建议配置 1GB 内存以上),并已安装 DockerDocker Compose
  2. 一个域名(可选,但推荐用于配置 HTTPS 访问)。
  3. 管理员账号信息:准备一个安全的 USERNAMEPASSWORD,用于登录管理后台。

☁️ 方案一:Zeabur 一键部署(最推荐新手)

Zeabur 是一个云平台,可以一键部署完整环境(包含数据库),自动配置 HTTPS 和 CDN,并有免费额度。

  1. 点击一键部署:访问 LunaTV 在 Zeabur 的模板页面,点击部署按钮。系统会自动配置 LunaTV + Kvrocks 数据库。
  2. 设置管理员账号:在部署过程中,根据提示设置环境变量 USERNAME(管理员账号)和 PASSWORD(管理员密码),务必使用强密码。
  3. 设置访问域名(必须):部署完成后,进入 Zeabur 控制台的 LunaTV 服务页面,点击 “Networking”“网络” 标签,生成一个 Zeabur 提供的免费域名(如 xxx.zeabur.app),或绑定你自己的自定义域名。
  4. 访问与登录:通过设置好的域名访问 LunaTV,并使用你设置的管理员账号密码登录后台(地址通常是 https://你的域名/admin)。

🐳 方案二:Docker Compose 部署(通用方案)

此方案适用于任何安装了 Docker 的环境,例如你自己的服务器、NAS(如飞牛NAS)等。

1. 准备 docker-compose.yml 文件

创建一个目录(如 lunatv),并在其中新建一个名为 docker-compose.yml 的文件,内容如下。请务必修改 USERNAMEPASSWORD 环境变量的值

方案 A:使用 Kvrocks 存储(推荐,数据更稳定)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
services:
lunatv-core:
image: ghcr.io/moontechlab/lunatv:latest # 官方镜像
container_name: lunatv-core
restart: on-failure
ports:
- '3000:3000' # 左侧端口可按需修改,如 13000:3000
environment:
- USERNAME=admin # 改成你的管理员账号
- PASSWORD=your_strong_password # 改成你的强密码
- NEXT_PUBLIC_STORAGE_TYPE=kvrocks
- KVROCKS_URL=redis://lunatv-kvrocks:6666
depends_on:
- lunatv-kvrocks

lunatv-kvrocks:
image: apache/kvrocks
container_name: lunatv-kvrocks
restart: unless-stopped
volumes:
- kvrocks-data:/var/lib/kvrocks # 持久化数据

volumes:
kvrocks-data:

方案 B:使用 Redis 存储(新手入门首选,更轻量)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
services:
lunatv-core:
image: ghcr.io/moontechlab/lunatv:latest
container_name: lunatv-core
restart: on-failure
ports:
- '3000:3000'
environment:
- USERNAME=admin # 改成你的管理员账号
- PASSWORD=your_strong_password # 改成你的强密码
- NEXT_PUBLIC_STORAGE_TYPE=redis
- REDIS_URL=redis://lunatv-redis:6379
depends_on:
- lunatv-redis

lunatv-redis:
image: redis:alpine
container_name: lunatv-redis
restart: unless-stopped
volumes:
- ./redis-data:/data # 持久化Redis数据

2. 启动容器

docker-compose.yml 文件所在目录下,打开终端执行:

1
docker-compose up -d

3. 访问

启动成功后,通过 http://你的服务器IP:3000(或你修改的端口)即可访问 LunaTV。


🔧 通用配置:添加播放源(所有方案必需)

LunaTV 部署完成后是一个空壳,必须自己添加播放源才能搜索和观看内容。

  1. 登录后台:访问 https://你的域名/adminhttp://你的IP:3000/admin,输入你设置的管理员账号和密码。
  2. 进入源管理:在后台找到 “源管理”“配置文件设置” 页面。
  3. 添加配置文件:你需要提供符合苹果CMS V10 API 格式的 JSON 配置文件。这里给出一个示例格式,你需要用有效的资源站 API 地址替换其中的示例地址:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"cache_time": 7200,
"api_site": {
"example_site": { // 唯一标识,小写字母或数字
"api": "http://example.com/api.php/provide/vod", // 替换为真实资源站API
"name": "示例资源站",
"detail": "http://example.com" // 可选
}
},
"custom_category": [ // 可选:自定义分类
{
"name": "华语电影",
"type": "movie",
"query": "华语"
}
]
}

提示:完整的配置说明和更多示例,请参阅 LunaTV 官方文档

❓ 常见问题与避坑指南

  • 项目无法访问:检查服务器防火墙或安全组是否放行了 3000 端口(或你自定义的端口)。
  • 数据丢失:务必在 docker-compose.yml 中配置数据持久化卷(volumes),否则容器升级或重启后,收藏、播放记录会丢失。
  • 镜像选择:优先使用官方镜像 ghcr.io/moontechlab/lunatv:latest,避免使用非官方镜像导致启动失败或源失效。
  • 端口冲突:如果 3000 端口已被占用,将 ports 配置项的左侧端口(如 '3000:3000')改为其他值,例如 '13000:3000'
  • Zeabur 更新镜像:Zeabur 不会自动更新镜像,需要进入服务页面,点击 “重启当前版本” 来拉取最新的 latest 镜像。