搭建MoonTV影视网站

简介

MoonTV是一款开箱即用、跨平台的影视聚合播放器。它基于Next.js 14 + Tailwind CSS + TypeScript构建,支持多资源搜索、在线播放、收藏同步、播放记录、本地/云端存储,让您可以随时随地畅享海量免费影视内容。

链接直达

 

 

更新

  1. 进入你的 fork 仓库页面
  2. 点击 Fetch upstream(获取上游更新)按钮(位于仓库名称下方)
  3. 如果有更新,点击 Fetch and merge 即可完成同步

设置访问密码

设置–>变量和机密–>添加PASSWORD环境变量。

Cloudflare 新的部署方式

  1. Fork本仓库到你的GitHub账户。

创建数据库

登陆Cloudflare,点击存储和数据库->D1 sql数据库,创建一个数据库,名称自定义
图片[1]-搭建MoonTV影视网站-楊仙森万事坞

初始化数据库

进入刚创建的数据库,点击左上角的 Explore Data

图片[2]-搭建MoonTV影视网站-楊仙森万事坞

复制粘贴如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
CREATE TABLE IF NOT EXISTS users (
  username TEXT PRIMARY KEY,
  password TEXT NOT NULL,
  created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
);

CREATE TABLE IF NOT EXISTS play_records (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  username TEXT NOT NULL,
  key TEXT NOT NULL,
  title TEXT NOT NULL,
  source_name TEXT NOT NULL,
  cover TEXT NOT NULL,
  year TEXT NOT NULL,
  index_episode INTEGER NOT NULL,
  total_episodes INTEGER NOT NULL,
  play_time INTEGER NOT NULL,
  total_time INTEGER NOT NULL,
  save_time INTEGER NOT NULL,
  search_title TEXT,
  UNIQUE(username, key)
);

CREATE TABLE IF NOT EXISTS favorites (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  username TEXT NOT NULL,
  key TEXT NOT NULL,
  title TEXT NOT NULL,
  source_name TEXT NOT NULL,
  cover TEXT NOT NULL,
  year TEXT NOT NULL,
  total_episodes INTEGER NOT NULL,
  save_time INTEGER NOT NULL,
  UNIQUE(username, key)
);

CREATE TABLE IF NOT EXISTS search_history (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  username TEXT NOT NULL,
  keyword TEXT NOT NULL,
  created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
  UNIQUE(username, keyword)
);

CREATE TABLE IF NOT EXISTS admin_config (
  id INTEGER PRIMARY KEY DEFAULT 1,
  config TEXT NOT NULL,
  updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
);

-- 基本索引
CREATE INDEX IF NOT EXISTS idx_play_records_username ON play_records(username);
CREATE INDEX IF NOT EXISTS idx_favorites_username ON favorites(username);
CREATE INDEX IF NOT EXISTS idx_search_history_username ON search_history(username);

-- 复合索引优化查询性能
-- 播放记录:用户名+键值的复合索引,用于快速查找特定记录
CREATE INDEX IF NOT EXISTS idx_play_records_username_key ON play_records(username, key);
-- 播放记录:用户名+保存时间的复合索引,用于按时间排序的查询
CREATE INDEX IF NOT EXISTS idx_play_records_username_save_time ON play_records(username, save_time DESC);

-- 收藏:用户名+键值的复合索引,用于快速查找特定收藏
CREATE INDEX IF NOT EXISTS idx_favorites_username_key ON favorites(username, key);
-- 收藏:用户名+保存时间的复合索引,用于按时间排序的查询
CREATE INDEX IF NOT EXISTS idx_favorites_username_save_time ON favorites(username, save_time DESC);

-- 搜索历史:用户名+关键词的复合索引,用于快速查找/删除特定搜索记录
CREATE INDEX IF NOT EXISTS idx_search_history_username_keyword ON search_history(username, keyword);
-- 搜索历史:用户名+创建时间的复合索引,用于按时间排序的查询
CREATE INDEX IF NOT EXISTS idx_search_history_username_created_at ON search_history(username, created_at DESC);

-- 搜索历史清理查询的优化索引
CREATE INDEX IF NOT EXISTS idx_search_history_username_id_created_at ON search_history(username, id, created_at DESC);

进行D1 数据库的初始化

图片[3]-搭建MoonTV影视网站-楊仙森万事坞

重新部署

初次部署,构建命令填写 pnpm install --frozen-lockfile && pnpm run pages:build,预设框架为无,构建输出目录为 .vercel/output/static,保存并部署。

图片[4]-搭建MoonTV影视网站-楊仙森万事坞

还没部署完成之前,进入设置,将兼容性标志设置为 nodejs_compat
图片[5]-搭建MoonTV影视网站-楊仙森万事坞

设置 -> 绑定,添加绑定 D1 数据库,选择你刚创建的数据库,变量名称填 DB,全部设置完成之后,点击重新部署。
图片[6]-搭建MoonTV影视网站-楊仙森万事坞

账号设置

设置环境变量 NEXT_PUBLIC_STORAGE_TYPE,值为 d1;设置 USERNAME 和 PASSWORD 作为站长账号

图片[7]-搭建MoonTV影视网站-楊仙森万事坞

温馨提示:本文最新于2025-07-17 16:31:56进行了更新,某些文章内容具有时效性,若失效或有错误,请在下方留言
© 版权声明
THE END
点赞13投币 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容