搭建katelyaTV影视站

简介

一个基于MoonTV(LunaTV)二次开发的项目。

项目地址:链接直达

Cloudflare部署

第一步:fork仓库并连接

  1. Fork KatelyaTV 仓库
  2. 登录Cloudflare
  3. 进入Workers和Pages → 点击创建应用程序
  4. 选择Pages →连接到Git
  5. 选择你 Fork 的仓库

第二步:配置构建设置

在构建设置页面填写:

  • 构建命令pnpm install && pnpm pages:build

  • 构建输出目录.vercel/output/static

  • 根目录./(默认)

  • Node.js 版本:(18推荐)

  • 设置环境变量中添加:

    • PASSWORD: 访问密码

第三步:设置兼容性

  1. 点击保存并配置
  2. 等待首次构建完成(可能会失败,没关系)
  3. 进入项目设置兼容标志
  4. 添加: 标志nodejs_compat

第四步:重新部署

  1. 进入部署页面
  2. 点击最新部署旁的  →重试部署
  3. 等待部署成功

这时候还不能正常播放视频

第五步:配置资源站

  1. 下载配置文件资源站配置文件,复制文件内容。
  2. 更新仓库配置
    • 回到你的GitHub仓库
    • 找到config.json文件,点击编辑
    • 使用下载的内容替换原有配
    • 提交更改
  3. 等待自动配置:Cloudflare Pages 会自动重新构建配置

扩展

如果您想要用户系统和数据同步:

第一步:创建D1数据库

  1. 在 Cloudflare Dashboard 进入存储和数据库→ D1 SQL 数据库
  2. 点击创建数据库,名称自定义(比如katelyatv

第二步:初始化数据库

进入刚创建的数据库,点击左上角的 Explore Data,粘贴如下内容到查询窗口,点击运行全部

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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 TABLE IF NOT EXISTS skip_configs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL,
key TEXT NOT NULL,
source TEXT NOT NULL,
video_id TEXT NOT NULL,
title TEXT NOT NULL,
segments TEXT NOT NULL,
updated_time INTEGER NOT NULL,
UNIQUE(username, key)
);

-- 基本索引
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_skip_configs_username ON skip_configs(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);

-- 跳过配置索引
-- 跳过配置:用户名+键值的复合索引,用于快速查找特定配置
CREATE INDEX IF NOT EXISTS idx_skip_configs_username_key ON skip_configs(username, key);
-- 跳过配置:用户名+更新时间的复合索引,用于按时间排序的查询
CREATE INDEX IF NOT EXISTS idx_skip_configs_username_updated_time ON skip_configs(username, updated_time DESC);

第三步:绑定数据库

  1. 返回页面 项目设置
  2. 进入绑定添加绑定
  3. 选择D1数据库
  4. 指标名称:DB
  5. 选择您刚刚创建的数据库

第四步:添加环境变量

环境变量中补充:

  • NEXT_PUBLIC_STORAGE_TYPEd1
  • USERNAME: 管理员用户名
  • PASSWORD: 管理员密码

第五步:重新部署

重新部署后,你就可以:

  • 使用管理员账号登录
  • 访问/admin管理后台
  • 支持用户注册和数据同步

Vercel部署

第一步:叉仓库

  1. 打开KatelyaTV GitHub 页面
  2. 点击右上角Fork按钮
  3. 等待 Fork 完成

第二步:到部署Vercel

  1. 访问Vercel,用 GitHub 账号登录
  2. 点击添加新… → 项目
  3. 找到你刚才Fork的KatelyaTV仓库,点击导入
  4. 环境变量部分添加:
    • 钥匙:PASSWORD
    • 值:(你的访问密码这是进入网站的密码)
  5. 点击Deploy开始部署

第三步:配置资源站

  1. 下载配置文件资源站配置文件,复制文件内容。
  2. 更新仓库配置
    • 回到你的GitHub仓库
    • 找到config.json文件,点击编辑
    • 使用下载的内容替换原有配
    • 提交更改
  3. 等待自动配置:Cloudflare Pages 会自动重新构建配置

注意事项

  • Vercel 版本不支持用户注册和账号系统
  • 观看记录保存在浏览器本地,换设备会丢失

飞牛NAS部署(Docker + Redis)

创建 docker-compose.yml 文件

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
version: '3.8'
services:
# KatelyaTV 主应用
katelyatv:
image: ghcr.io/katelya77/katelyatv:latest
container_name: katelyatv
ports:
- "3000:3000"
environment:
# 管理员账号(请修改)
- USERNAME=admin
- PASSWORD=your_strong_password
# 启用 Redis 存储
- NEXT_PUBLIC_STORAGE_TYPE=redis
- REDIS_URL=redis://katelyatv-redis:6379
# 允许用户注册(可选)
- NEXT_PUBLIC_ENABLE_REGISTER=true
depends_on:
katelyatv-redis:
condition: service_healthy
restart: unless-stopped
# 可选:挂载自定义配置
# volumes:
# - ./config.json:/app/config.json:ro

# Redis 数据库
katelyatv-redis:
image: redis:7-alpine
container_name: katelyatv-redis
command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
volumes:
- katelyatv-redis-data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 3s
retries: 3
restart: unless-stopped

volumes:
katelyatv-redis-data:

搭建katelyaTV影视站
https://skilladd.org/2025/09/03/40.搭建katelyaTV影视站/
Author
skilladd
Posted on
September 3, 2025
Licensed under