diff --git a/README.md b/README.md index 51be803..890fab6 100644 --- a/README.md +++ b/README.md @@ -53,568 +53,271 @@ ## 🚀 快速开始 -### 推荐方案选择 +### 💡 方案选择指南 -| 用户类型 | 推荐方案 | 特点 | -| ----------- | ---------------- | -------------------- | -| 🆕 新手用户 | Docker 单容器 | 最简单,5 分钟部署 | -| 👥 多人使用 | Vercel + Upstash | 免费,支持多用户 | -| 🏠 自托管 | Docker + Redis | 功能完整,数据可控 | -| 🏢 生产环境 | Docker + Kvrocks | 高可靠性,零丢失风险 | +| 使用场景 | 推荐方案 | 存储类型 | 成人内容过滤 | 多用户 | 部署难度 | +|---------|---------|---------|------------|-------|---------| +| **个人使用** | Docker 单容器 | localstorage | ❌ | ❌ | ⭐ | +| **家庭使用** | Docker + Redis | redis | ✅ | ✅ | ⭐⭐ | +| **免费部署** | Vercel + Upstash | upstash | ✅ | ✅ | ⭐⭐⭐ | +| **生产环境** | Docker + Kvrocks | kvrocks | ✅ | ✅ | ⭐⭐ | +| **全球加速** | Cloudflare Pages | d1 | ✅ | ✅ | ⭐⭐⭐⭐ | + +> 💡 **重要提示**:成人内容过滤功能需要数据库存储支持,不支持 `localstorage` 方式 --- ## 📋 部署方案 -### 方案一:Docker 单容器(推荐新手) +### 方案一:Docker 单容器(最简单) -**适合场景**:个人使用,最简单的部署方式 +**特点**:5分钟部署,个人使用,无多用户功能 ```bash -# 一键启动 docker run -d \ --name katelyatv \ -p 3000:3000 \ - --env PASSWORD=your_password \ - --restart unless-stopped \ - ghcr.io/katelya77/katelyatv:latest - -# 访问 http://localhost:3000 -``` - -**自定义配置文件(可选)**: - -```bash -# 挂载配置文件 -docker run -d \ - --name katelyatv \ - -p 3000:3000 \ - --env PASSWORD=your_password \ - -v ./config.json:/app/config.json:ro \ + -e PASSWORD=your_password \ --restart unless-stopped \ ghcr.io/katelya77/katelyatv:latest ``` -### 方案二:Docker + Redis(多用户推荐) +**挂载自定义配置**(可选): +```bash +docker run -d \ + --name katelyatv \ + -p 3000:3000 \ + -e PASSWORD=your_password \ + -v $(pwd)/config.json:/app/config.json:ro \ + --restart unless-stopped \ + ghcr.io/katelya77/katelyatv:latest +``` -**适合场景**:家庭/团队使用,支持多用户和数据同步 +### 方案二:Docker + Redis(推荐家庭使用) + +**特点**:完整功能,多用户支持,成人内容过滤 ```bash -# 下载配置文件 +# 1. 下载配置文件 curl -O https://raw.githubusercontent.com/katelya77/KatelyaTV/main/docker-compose.redis.yml curl -O https://raw.githubusercontent.com/katelya77/KatelyaTV/main/.env.redis.example + +# 2. 配置环境变量 cp .env.redis.example .env +``` -# 编辑环境变量 -nano .env +**编辑 .env 文件**: +```bash +# 管理员账号(必填) +USERNAME=admin +PASSWORD=your_secure_password -# 启动服务 +# 存储配置 +NEXT_PUBLIC_STORAGE_TYPE=redis +REDIS_URL=redis://katelyatv-redis:6379 + +# 功能开关 +NEXT_PUBLIC_ENABLE_REGISTER=true +``` + +```bash +# 3. 启动服务 docker compose -f docker-compose.redis.yml up -d ``` -**重要环境变量配置**: +### 方案三:Docker + Kvrocks(生产环境) + +**特点**:极高可靠性,数据持久化到磁盘,节省内存 ```bash -# 存储类型 -NEXT_PUBLIC_STORAGE_TYPE=redis - -# 管理员账号 -USERNAME=admin -PASSWORD=your_admin_password - -# Redis配置 -REDIS_URL=redis://katelyatv-redis:6379 - -# 开启用户注册 -NEXT_PUBLIC_ENABLE_REGISTER=true -``` - -### 方案三:Docker + Kvrocks(高可靠性) - -**适合场景**:生产环境,需要极高的数据可靠性 - -```bash -# 下载配置文件 +# 1. 下载配置文件 curl -O https://raw.githubusercontent.com/katelya77/KatelyaTV/main/docker-compose.kvrocks.yml curl -O https://raw.githubusercontent.com/katelya77/KatelyaTV/main/.env.kvrocks.example + +# 2. 配置环境变量 cp .env.kvrocks.example .env - -# 编辑环境变量 -nano .env - -# 启动服务(无密码版本) -docker compose -f docker-compose.kvrocks.yml up -d - -# 如需密码认证版本,使用: -# docker compose -f docker-compose.kvrocks.auth.yml up -d ``` -**重要环境变量配置**: - +**编辑 .env 文件**: ```bash -# 存储类型 -NEXT_PUBLIC_STORAGE_TYPE=kvrocks - -# 管理员账号(必填) +# 管理员账号(必填,否则无法登录) USERNAME=admin -PASSWORD=your_admin_password +PASSWORD=your_secure_password -# Kvrocks配置 +# 存储配置 +NEXT_PUBLIC_STORAGE_TYPE=kvrocks KVROCKS_URL=redis://kvrocks:6666 -# 密码配置(可选) -# KVROCKS_PASSWORD=your_kvrocks_password -# 开启用户注册 +# 功能开关 NEXT_PUBLIC_ENABLE_REGISTER=true ``` -**Kvrocks 优势**: - -- 🛡️ **极高可靠性**:基于 RocksDB,数据持久化到磁盘 -- ⚡ **性能优异**:完全兼容 Redis 协议,性能更佳 -- 💾 **节省内存**:数据存储在磁盘,内存使用量大幅降低 - -> 详细部署指南请查看:[Kvrocks 部署文档](docs/KVROCKS_DEPLOYMENT.md) +```bash +# 3. 启动服务 +docker compose -f docker-compose.kvrocks.yml up -d +``` ### 方案四:Vercel + Upstash(免费推荐) -**适合场景**:无服务器,免费部署,支持多用户 +**特点**:完全免费,自动HTTPS,全球CDN -#### 基础部署(仅密码保护) +#### 基础部署 +1. **Fork项目** → [GitHub仓库](https://github.com/katelya77/KatelyaTV) +2. **部署到Vercel**: + - 登录 [Vercel](https://vercel.com/) + - 导入刚Fork的仓库 + - 添加环境变量:`PASSWORD=your_password` + - 点击Deploy -1. **Fork 仓库**: +#### 多用户配置 +3. **创建Upstash数据库**: + - 访问 [Upstash](https://upstash.com/) + - 创建免费Redis数据库 + - 获取 `UPSTASH_REDIS_REST_URL` 和 `UPSTASH_REDIS_REST_TOKEN` - - 访问 [KatelyaTV](https://github.com/katelya77/KatelyaTV) - - 点击右上角 `Fork` 按钮,将项目 Fork 到你的 GitHub 账号 +4. **添加环境变量**: +```bash +# 存储配置 +NEXT_PUBLIC_STORAGE_TYPE=upstash +UPSTASH_REDIS_REST_URL=https://xxx.upstash.io +UPSTASH_REDIS_REST_TOKEN=your_token -2. **部署到 Vercel**: - - 登录 [Vercel](https://vercel.com/)(推荐使用 GitHub 账号登录) - - 点击 `New Project`,选择刚才 Fork 的 `KatelyaTV` 仓库 - - 在 `Environment Variables` 部分添加: - ``` - PASSWORD=your_password - ``` - - 点击 `Deploy` 开始部署 - - 等待 2-3 分钟部署完成,获得访问链接 +# 管理员账号 +USERNAME=admin +PASSWORD=your_password -#### 高级配置(多用户支持) +# 功能开关 +NEXT_PUBLIC_ENABLE_REGISTER=true +``` -3. **创建 Upstash Redis 数据库**: +5. **重新部署** → Vercel Dashboard → Redeploy - - 访问 [Upstash](https://upstash.com/),使用 GitHub 账号登录 - - 点击 `Create Database`,选择免费的区域(推荐选择离你最近的区域) - - 记录数据库的 `UPSTASH_REDIS_REST_URL` 和 `UPSTASH_REDIS_REST_TOKEN` +### 方案五:Cloudflare Pages + D1(全球加速) -4. **在 Vercel 中添加环境变量**: - - - 进入 Vercel 项目设置页面 - - 在 `Environment Variables` 添加以下变量: - - ```bash - # 存储配置 - NEXT_PUBLIC_STORAGE_TYPE=upstash - UPSTASH_REDIS_REST_URL=https://xxx.upstash.io - UPSTASH_REDIS_REST_TOKEN=your_token - - # 管理员账号 - USERNAME=admin - PASSWORD=admin_password - - # 用户注册 - NEXT_PUBLIC_ENABLE_REGISTER=true - - # 站点配置 - NEXT_PUBLIC_SITE_NAME=KatelyaTV - NEXT_PUBLIC_SITE_DESCRIPTION=高性能影视播放平台 - ``` - -5. **重新部署**: - - 在 Vercel 项目页面点击 `Deployments` 标签 - - 点击最新部署旁的三点菜单,选择 `Redeploy` - -### 方案五:Cloudflare Pages + D1(全球 CDN 加速) - -**适合场景**:全球访问,免费 CDN,无限带宽,支持多用户 - -#### 方法一:网页操作部署(推荐新手) - -1. **准备代码仓库**: - - - Fork [KatelyaTV](https://github.com/katelya77/KatelyaTV) 到你的 GitHub 账号 - -2. **创建 Cloudflare Pages 项目**: +**特点**:全球CDN,无限带宽,免费SSL +#### 快速部署 +1. **Fork项目** → [GitHub仓库](https://github.com/katelya77/KatelyaTV) +2. **创建Pages项目**: - 登录 [Cloudflare Dashboard](https://dash.cloudflare.com/) - - 左侧菜单选择 `Workers and Pages` → `Create application` → `Pages` → `Connect to Git` - -3. **连接仓库并配置**: - - - 选择 Fork 的 `KatelyaTV` 仓库,分支选择 `main` - - **构建设置**: + - Pages → Connect to Git → 选择仓库 + - 构建设置: ``` Build command: pnpm install --frozen-lockfile && pnpm run pages:build Build output directory: .vercel/output/static ``` - - **兼容性标志**:添加 `nodejs_compat` - -4. **环境变量配置**: - - ```bash - PASSWORD=your_password #在这设置密码 - USERNAME=admin #在这设置管理员用户名 - NEXT_PUBLIC_STORAGE_TYPE=d1 - NEXT_PUBLIC_ENABLE_REGISTER=true #用户注册功能 - ``` - -5. **创建 D1 数据库**(多用户支持): - ```bash - wrangler d1 create katelyatv-db - wrangler d1 execute katelyatv-db --file=./scripts/d1-init.sql - ``` - 在 `wrangler.toml` 中配置数据库 ID - -#### 方法二:命令行部署 + - 兼容性标志:`nodejs_compat` +3. **环境变量配置**: ```bash -# 安装 CLI 并登录 -npm install -g wrangler -wrangler login +# 管理员账号 +USERNAME=admin +PASSWORD=your_password -# 克隆并部署 -git clone https://github.com/your-username/KatelyaTV.git -cd KatelyaTV -pnpm install -pnpm run pages:build -wrangler pages deploy .vercel/output/static --project-name katelyatv +# 存储配置 +NEXT_PUBLIC_STORAGE_TYPE=d1 + +# 功能开关 +NEXT_PUBLIC_ENABLE_REGISTER=true ``` -### 方案六:Netlify 部署(备选方案) +4. **创建D1数据库**(多用户支持): +```bash +# 安装Wrangler CLI +npm install -g wrangler +wrangler auth login -**适合场景**:GitHub 集成,自动部署,免费额度充足 +# 创建数据库 +wrangler d1 create katelyatv-db +wrangler d1 execute katelyatv-db --file=./scripts/d1-init.sql +``` -1. **准备仓库**: - - - Fork [KatelyaTV](https://github.com/katelya77/KatelyaTV) 到你的 GitHub - -2. **部署到 Netlify**: - - - 登录 [Netlify](https://app.netlify.com/) - - 点击 `New site from Git` - - 选择 GitHub 并授权访问 - - 选择 KatelyaTV 仓库 - -3. **配置构建设置**: - - ``` - Build command: pnpm run build - Publish directory: .next - ``` - -4. **添加环境变量**: - - - 在站点设置中找到 `Environment variables` - - 添加: - - ```bash - PASSWORD=your_password - NEXT_PUBLIC_STORAGE_TYPE=localstorage - ``` - -5. **部署完成**: - - 获得 `xxx.netlify.app` 访问链接 - - 可以在设置中配置自定义域名 +5. **配置数据库绑定** → 在 `wrangler.toml` 中添加数据库ID --- -## 📝 部署注意事项 +## � 故障排除 -### 🚀 性能优化建议 +### 常见部署问题 -**Cloudflare Pages 优化**: - -- 启用 Brotli 压缩:在 Cloudflare Dashboard 的 Speed 标签中启用 -- 配置缓存规则:静态资源缓存 30 天,API 缓存 5 分钟 -- 开启 Auto Minify:JS、CSS、HTML 自动压缩 - -**Vercel 优化**: - -- 使用 Edge Functions 替代 Serverless Functions -- 配置合理的缓存头:`Cache-Control: public, max-age=3600` -- 启用分析面板监控性能 - -**Docker 优化**: - -- 使用多阶段构建减小镜像体积 -- 配置健康检查:`HEALTHCHECK --interval=30s CMD curl -f http://localhost:3000 || exit 1` -- 设置合理的内存限制:`--memory=512m` - -### 🔧 常见问题排除 - -**🚨 Docker + Kvrocks 登录失败(重要修复)**: - -**症状**: 部署成功但登录时提示"账号或密码错误",Kvrocks 中 admin_config 存在但 Users 数组为空 - -**原因**: 环境变量配置不完整,缺少 USERNAME 导致无法创建管理员用户 - -**解决方案**: +#### Docker + Kvrocks 登录失败 ⚠️ +**症状**:部署成功但无法登录,提示"账号或密码错误" +**解决方案**: ```bash -# 1. 确保 .env 文件包含必要的管理员配置 -cat > .env << EOF +# 确保 .env 包含完整配置 USERNAME=admin PASSWORD=your_secure_password NEXT_PUBLIC_STORAGE_TYPE=kvrocks -NEXTAUTH_SECRET=your_secret_here -NEXTAUTH_URL=http://localhost:3000 NEXT_PUBLIC_ENABLE_REGISTER=true -EOF -# 2. 重启服务以应用新配置 +# 重启服务应用配置 docker compose -f docker-compose.kvrocks.yml down docker compose -f docker-compose.kvrocks.yml up -d - -# 3. 检查日志确认配置初始化 -docker compose logs katelyatv - -# 4. 验证Kvrocks中的用户配置 -docker exec -it $(docker compose ps -q kvrocks) redis-cli -127.0.0.1:6666> GET admin_config -# 应该看到 Users 数组包含管理员用户 ``` -**构建失败**: - +#### 构建失败 ```bash -# 检查 Node.js 版本(需要 18+) +# 检查Node.js版本 (需要18+) node --version -# 清理缓存重新安装 +# 清理重装 rm -rf node_modules pnpm-lock.yaml pnpm install - -# 检查环境变量配置 -echo $PASSWORD ``` -**视频播放问题**: - -- 检查 config.json 格式是否正确 -- 确认视频源 API 地址可访问 -- 查看浏览器控制台错误信息 - -**数据库连接失败**: - +#### 数据库连接失败 ```bash -# Redis 连接测试 +# Redis连接测试 redis-cli -u $REDIS_URL ping -# D1 数据库状态检查 +# D1数据库检查 wrangler d1 info your-database-name -# Upstash 连接测试 +# Upstash连接测试 curl -H "Authorization: Bearer $UPSTASH_REDIS_REST_TOKEN" \ $UPSTASH_REDIS_REST_URL/ping ``` -**内存溢出**: +### 环境变量说明 -- 调整 Node.js 内存限制:`NODE_OPTIONS="--max-old-space-size=1024"` -- Docker 增加内存分配:`--memory=1g` -- 优化视频缓存策略 +| 变量名 | 必填 | 说明 | 示例值 | +|--------|-----|------|--------| +| `USERNAME` | 是* | 管理员用户名 | `admin` | +| `PASSWORD` | 是 | 访问密码 | `your_password` | +| `NEXT_PUBLIC_STORAGE_TYPE` | 否 | 存储类型 | `redis/d1/upstash` | +| `NEXT_PUBLIC_ENABLE_REGISTER` | 否 | 用户注册 | `true/false` | +| `REDIS_URL` | 否** | Redis连接 | `redis://localhost:6379` | +| `UPSTASH_REDIS_REST_URL` | 否** | Upstash地址 | `https://xxx.upstash.io` | +| `UPSTASH_REDIS_REST_TOKEN` | 否** | Upstash令牌 | `AX_xxx` | -### 🔒 安全配置 +> *多用户部署必填 **对应存储类型必填 -**生产环境必配**: +### 视频源配置 -```bash -# 强密码策略 -PASSWORD="$(openssl rand -base64 32)" +#### 推荐配置文件 +- **基础版**(20+站点):[config.json](https://www.mediafire.com/file/xl3yo7la2ci378w/config.json/file) +- **增强版**(94站点):[configplus.json](https://www.mediafire.com/file/fbpk1mlupxp3u3v/configplus.json/file) -# HTTPS 强制重定向 -FORCE_HTTPS=true - -# 跨域配置 -CORS_ORIGIN="https://your-domain.com" - -# 限制管理员访问 -ADMIN_IP_WHITELIST="192.168.1.0/24,10.0.0.0/8" -``` - -**防护措施**: - -- 启用 DDoS 防护(Cloudflare 免费提供) -- 配置 CSP 内容安全策略 -- 定期更新依赖包:`pnpm update` -- 监控异常访问日志 - -### 💾 数据备份 - -**定期备份策略**: - -```bash -# Redis 数据备份 -redis-cli -u $REDIS_URL --rdb backup.rdb - -# D1 数据库备份 -wrangler d1 export your-db-name --output=backup-$(date +%Y%m%d).sql - -# 配置文件备份 -cp config.json config-backup-$(date +%Y%m%d).json - -# 自动化备份脚本 -#!/bin/bash -# backup.sh -DATE=$(date +%Y%m%d_%H%M%S) -mkdir -p backups/$DATE -# 备份逻辑... -``` - -### 📊 监控和日志 - -**性能监控**: - -- Vercel Analytics:自动启用 -- Cloudflare Analytics:在 Dashboard 查看 -- 自定义监控:集成 Sentry 或类似服务 - -**日志分析**: - -```bash -# Docker 容器日志 -docker logs katelyatv-container -f - -# Vercel 函数日志 -vercel logs your-project - -# Cloudflare 实时日志 -wrangler tail --format=pretty -``` - ---- - -## ⚙️ 配置说明 - -### 🔧 环境变量详解 - -| 变量名 | 说明 | 默认值 | 示例值 | -| ------------------------------ | --------------------- | ------------ | ------------------------ | -| `PASSWORD` | 访问密码(必填) | 无 | `mySecretPass123` | -| `USERNAME` | 管理员用户名 | 无 | `admin` | -| `NEXT_PUBLIC_SITE_NAME` | 站点显示名称 | KatelyaTV | `我的影视站` | -| `NEXT_PUBLIC_SITE_DESCRIPTION` | 站点描述 | 高性能... | `专业的在线影视平台` | -| `NEXT_PUBLIC_STORAGE_TYPE` | 数据存储方式 | localstorage | `redis/d1/upstash` | -| `REDIS_URL` | Redis 连接字符串 | 无 | `redis://localhost:6379` | -| `UPSTASH_REDIS_REST_URL` | Upstash REST API 地址 | 无 | `https://xxx.upstash.io` | -| `UPSTASH_REDIS_REST_TOKEN` | Upstash 访问令牌 | 无 | `AX_xxx` | -| `NEXT_PUBLIC_ENABLE_REGISTER` | 是否允许用户注册 | false | `true/false` | -| `ENABLE_ANALYTICS` | 启用访问统计 | false | `true/false` | -| `CORS_ORIGIN` | 允许的跨域来源 | \* | `https://example.com` | - -### 🎨 自定义主题 - -**颜色配置**: - -```css -/* 在 src/styles/colors.css 中自定义 */ -:root { - --primary-color: #3b82f6; /* 主色调 */ - --secondary-color: #64748b; /* 次要颜色 */ - --background-color: #0f172a; /* 背景色 */ - --text-color: #e2e8f0; /* 文字颜色 */ -} -``` - -**Logo 替换**: - -- 替换 `public/logo.png`(推荐尺寸:200x60px) -- 更新 `public/favicon.ico` -- 修改 `public/manifest.json` 中的图标路径 - -### 📁 视频源配置详解 - -#### 推荐配置源 - -1. **基础版配置**: - - - 包含 20+ 优质片源 - - 下载:[config.json](https://www.mediafire.com/file/xl3yo7la2ci378w/config.json/file) - - 适合个人使用 - -2. **增强版配置**: - - 包含 94 个精选片源 - - 下载:[configplus.json](https://www.mediafire.com/file/fbpk1mlupxp3u3v/configplus.json/file) - - 重命名为 config.json 使用 - -#### 配置方式说明 - -**Docker 部署**: - -```bash -# 方法1:挂载本地配置文件 -docker run -d \ - -v ./config.json:/app/config.json:ro \ - -p 3000:3000 \ - ghcr.io/katelya77/katelyatv:latest - -# 方法2:环境变量传入 -docker run -d \ - -e CONFIG_JSON='{"cache_time":7200,"api_site":{...}}' \ - -p 3000:3000 \ - ghcr.io/katelya77/katelyatv:latest -``` - -**Vercel 部署**: - -1. 将配置内容复制到仓库的 `config.json` 文件中 -2. 提交并推送到 GitHub -3. Vercel 会自动重新部署 - -**Cloudflare Pages**: - -1. 编辑仓库的 `config.json` 文件 -2. 推送更改触发自动部署 -3. 或在管理员界面 `/admin` 上传配置 - -**管理员界面配置**: - -1. 访问 `https://你的域名/admin` -2. 使用管理员账号登录 -3. 在「配置管理」中导入或编辑 JSON 配置 -4. 实时生效,无需重启 - -#### 手动配置格式 +#### 配置方式 +1. **Docker**:挂载到 `/app/config.json` +2. **Vercel/Cloudflare**:提交到仓库根目录 +3. **管理员界面**:访问 `/admin` 上传配置 +#### 配置格式 ```json { "cache_time": 7200, "api_site": { - "resource1": { - "api": "https://api.example1.com/provide/vod", - "name": "优质资源站1", - "detail": "https://example1.com", - "type": 1, - "playMode": "parse" - }, - "resource2": { - "api": "https://api.example2.com/provide/vod", - "name": "高清资源站2", - "detail": "https://example2.com", - "type": 2, - "playMode": "direct" + "site1": { + "api": "https://api.example.com/provide/vod", + "name": "资源站名称", + "is_adult": false } } } ``` -**字段说明**: - -- `cache_time`:缓存时间(秒) -- `api`:资源站 API 接口地址 -- `name`:资源站显示名称 -- `detail`:资源站主页地址 -- `type`:资源类型(1=电影电视,2=直播等) -- `playMode`:播放模式(parse=解析播放,direct=直接播放) - --- ## 📱 高级功能使用指南