MoonTV 部署实战:基于 Next.js 的影视聚合应用快速上线
MoonTV 是一款开箱即用、跨平台的影视聚合播放器,基于 Next.js 14、Tailwind CSS 与 TypeScript 构建,支持多源聚合搜索、在线播放、收藏同步与播放记录。它通过 Docker 一键部署,非常适合自建影视聚合站点。本文记录完整的部署流程与环境配置。
一、部署方式选型
MoonTV 官方仅支持 Docker(或基于 Docker 的平台)部署,主要提供三种资源存储方案:
- Kvrocks 存储(推荐):兼容 Redis 协议的轻量 KV 数据库,持久化可靠,适合自托管。
- Redis 存储:需注意开启持久化,否则升级或重启后数据可能丢失。
- Upstash 存储:云端托管 Redis,适合不想自建数据库的场景。
二、Docker Compose 部署(Kvrocks 方案)
创建 docker-compose.yml,内容如下:
services:
moontv-core:
image: ghcr.io/moontechlab/lunatv: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:
执行启动命令:
docker compose up -d
启动后容器 moontv-core 监听 3000 端口,moontv-kvrocks 承载数据存储。
三、访问与登录
首次启动后,浏览器访问 http://<服务器IP>:3000 会自动跳转到登录页。使用 compose 中配置的 USERNAME=admin 与 PASSWORD 即可登录管理后台。
⚠️ 为安全起见,部署时强烈建议关闭公网注册,避免未授权用户注册账号。
四、反向代理与域名绑定
生产环境通常用 Nginx 反向代理将域名指向 3000 端口,既能沿用 80/443 + HTTPS,也便于集中管理。示例站点配置:
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
五、更新与注意事项
- 镜像更新:Docker 不会自动拉取新版本,需手动
docker compose pull后重新up -d。 - 空壳项目:部署完成后的应用为空壳,无内置播放源,需在管理后台配置文件设置中填写自定义配置。
- 合规使用:请勿将实例用于商业用途或公开大规模服务。
结语
通过 Docker 与 Kvrocks 的组合,MoonTV 能在几分钟内完成部署,配合 Nginx 反代即可正式上线。清晰的存储选型和安全配置,是让这个自建影视站稳定运行的关键。