前言

MoonTV 是一款开箱即用、跨平台支持的免费影视聚合播放器,集成了多资源站点的搜索与在线播放功能,还支持收藏同步和播放记录,让你随时随地畅享海量影视内容。

本篇文章将重点介绍如何利用 Cloudflare Pages 平台免费部署 MoonTV,借助 Cloudflare 提供的全球 CDN 加速和免费的 D1 数据库存储,实现多账户数据隔离和跨设备同步功能。通过本文,你可以轻松搭建属于自己的私人多端影视站,无需复杂运维,让观影体验更加便捷和安全。

准备工作

在部署前请确保你已经拥有以下条件:

  • GitHub 账号,并已 Fork 本项目到自己账户下
  • Cloudflare 账号
  • 一个 Cloudflare 解析的域名(非必须)

部署流程(Cloudflare Pages)

1. Fork 项目并导入到 Cloudflare Pages

  1. 打开 GitHub,Fork 项目仓库:https://github.com/senshinya/moontv
  2. 登录 Cloudflare,进入 Workers & Pages → Pages
  3. 点击「创建项目」,导入你的 GitHub 仓库
  4. 配置构建参数如下:
    • 构建命令
    1
    pnpm install --frozen-lockfile && pnpm run pages:build
    • 输出目录
    1
    .vercel/output/static

2. 设置兼容性标志

创建后首次构建,如果失败请先设置兼容性标志。进入 Pages 项目的「设置 → 构建设置」,在兼容性标志中添加:

1
nodejs_compat

该标志用于启用 Node.js 兼容层,让项目在 Cloudflare 的运行环境中可以执行 Next.js 服务端逻辑。

3. 添加密钥(PASSWORD)

为避免他人随意访问你的实例,请设置访问密码。在 Pages 设置 → 环境变量 → 「变量和机密」中添加:

  • 名称:PASSWORD
  • 类型:机密
  • 值:设置你自己的密码,如 myStrongPassword123

保存后重新部署。

可选进阶:绑定 D1 数据库(支持收藏与播放记录同步)

如果你希望支持跨设备播放进度同步和收藏记录,可以绑定 Cloudflare 的 D1 数据库:

  1. 前往「存储和数据库 → D1」,新建一个数据库(名字随意)
  2. 打开数据库控制台,执行项目中提供的 D1初始化 SQL
  3. 回到 Pages 项目,进入设置 → 绑定,添加数据库绑定,变量名填为:
1
DB
  1. 同时新增环境变量:
名称
NEXT_PUBLIC_STORAGE_TYPE d1
USERNAME 自定义站长用户名
PASSWORD 自定义站长密码
  1. 重试部署,完成后访问 /admin 即可进入后台管理界面。

常见问题与排查

  • 构建失败:缺少兼容性标志?

    • 请务必设置 nodejs_compat 否则构建会因为环境不兼容失败。
  • 部署后无法访问或空白页面?

    • 检查是否配置正确构建输出目录为 .vercel/output/static
  • 密码无效?

    • 环境变量建议设为“机密变量”而不是普通文本变量
  • 收藏和播放记录不保存?

    • 检查是否启用了 D1 支持,并确保数据库初始化成功且绑定正确