MoonCakeTV(月饼TV)是一款基于现代 Web 技术栈构建的影视资源聚合服务,支持多源搜索与在线播放,专为个人用户打造干净、快速的观影体验。
它不存储任何视频内容,也不代理流量,仅作为前端界面,将浏览器请求直接导向公开资源站点,实现高效检索与播放。

🔧 技术架构
- 前端框架:Next.js 15(App Router)
- 样式系统:Tailwind CSS
- 编程语言:TypeScript
- 播放核心:HLS.js + Video.js
- 部署方式:Docker / Vercel / 自建服务器
项目采用静态生成与服务端渲染结合的方式,在保证性能的同时提供良好的交互体验。
🌟 核心功能
🔍 多源聚合搜索
一次性查询数十个公开影视资源站,自动汇总结果,无需逐个切换平台查找。
📄 完整影视详情
每部影片展示:
- 剧集列表(支持分季)
- 演员信息
- 上映年份
- 内容简介
- 来源标识
▶️ 浏览器内在线播放
集成 HLS.js 和 Video.js,支持 .m3u8
视频流直接播放,无需额外插件。
所有播放请求由浏览器直连源站,不经过 MoonCakeTV 服务器,降低部署压力。
📱 响应式设计
适配手机、平板、PC 和电视浏览器,大屏小屏皆可用。
🚀 多平台部署支持
支持多种部署方案:
- 本地运行(开发调试)
- Docker 部署(自建服务器/NAS)
- Vercel 托管(免运维,适合轻量使用)
🖥️ 本地开发指南
先决条件
- Node.js ≥ 18(推荐 v20 或 v22)
- npm
启动步骤
# 安装依赖
npm install
# 启动开发服务器(默认端口 3333)
npm run dev
🐳 Docker 部署(推荐用于生产环境)
适用于群晖 NAS、家用服务器、VPS 等场景。
第一步:配置密码保护 ✅
为防止未授权访问,请在项目根目录创建 .env
文件:
PASSWORD_MODE=env
MY_PASSWORD=your_secure_password
PASSWORD_MODE
可选值:
local
:无密码(仅限本地测试)env
:使用MY_PASSWORD
设置口令(推荐)db
:预留扩展(暂未启用)
第二步:拉取官方镜像(推荐)
# 拉取镜像
docker pull ghcr.io/mooncaketv/mooncaketv:latest
# 运行容器(映射端口 3333 → 3000)
docker run -d \
--name mooncaketv \
--env-file .env \
-p 3333:3000 \
ghcr.io/mooncaketv/mooncaketv:latest
自定义构建(可选)
通过 Makefile 构建:
make d-build # 构建镜像
make d-run # 运行容器
或使用 Docker CLI:
docker build -t mooncaketv .
docker run -d --name mooncaketv --env-file .env -p 3333:3000 mooncaketv
☁️ Vercel 部署(零服务器管理)
适合希望快速上线、无需维护服务器的用户。
部署流程
- Fork 本仓库到你的 GitHub 账户
- 登录 Vercel,点击 “Add New Project”,选择 Fork 的仓库
- 在项目设置 → Environment Variables 中添加:
PASSWORD_MODE=env MY_PASSWORD=your_secure_password
- 保持默认构建配置,完成部署
部署成功后可通过 Vercel 分配域名访问,也可绑定自定义域名。
💡 提示:播放走浏览器直连源站,不消耗 Vercel 函数带宽,免费额度足够个人使用。
🔒 安全与隐私提醒
由于该项目涉及公开视频资源检索,存在潜在法律与安全风险,请务必注意以下事项:
✅ 必须设置密码保护
- 防止实例被公开扫描利用
- 避免成为他人侵权行为的跳板
✅ 启用 HTTPS 访问(重要!)
- 若部署在公网服务器,必须通过反向代理(Nginx/Caddy/Traefik)配置 HTTPS
- 因 Cookie 启用
Secure
属性,HTTP 环境下无法保存登录状态,会导致反复跳转
❌ 禁止公开分享链接
- 不要将部署后的地址发布至论坛、社交媒体或 Telegram 群组
- 公开传播可能引发版权投诉或 IP 封禁
📌 仅限个人学习使用,不得用于商业目的
⚙️ 环境变量说明
变量名 | 说明 |
---|---|
PASSWORD_MODE | 访问控制模式:local (无密码)、env (环境变量口令) |
MY_PASSWORD | 当 PASSWORD_MODE=env 时必填,用于登录验证 |
❓ 常见问题 FAQ
Q:页面打不开或登录后不断跳转?
A:检查是否设置了正确的 .env
文件;清理浏览器 Cookie 后重试。若使用 HTTP 访问,请改为 HTTPS。
Q:Docker 启动后无法访问?
A:确认命令中包含 -p 3333:3000
,并尝试访问 http://localhost:3333
(宿主机 IP 替换 localhost
)。
Q:Vercel 部署安全吗?会不会产生费用?
A:播放请求由浏览器直连源站,不经过 Vercel 服务器,不消耗函数调用和带宽。只要不触发滥用机制,免费额度完全够用。
评论