Files
KatelyaTV/CLOUDFLARE_PAGES_DEPLOYMENT.md
katelya fb5be70529 fix: 添加缺失的PASSWORD环境变量以修复500错误
- 在 wrangler.toml 中为生产和预览环境添加 PASSWORD 变量
- PASSWORD 是中间件验证的必需变量,缺失会导致500错误
- 更新部署指南,强调 PASSWORD 必须设置为 Plain text 类型
- 添加详细的环境变量类型设置说明和故障排除步骤
- PASSWORD 用于用户认证和签名验证,是系统核心安全机制
2025-10-01 23:39:02 +08:00

285 lines
6.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Cloudflare Pages 部署指南
## 🚨 500 Internal Server Error 解决方案
### 问题:部署成功但运行时500错误
**原因分析:**
部署日志显示构建成功,但访问网站时出现500错误,通常是由于环境变量配置问题导致的运行时错误。
**主要原因:**
1. **USERNAME 环境变量缺失** - 这是最常见的原因
2. D1 数据库绑定问题
3. 其他关键环境变量未设置
### 🎯 解决步骤
#### 第一步:设置必需的环境变量
在 Cloudflare Pages 控制台中:
1. 进入您的项目设置
2. 点击 "Settings" → "Environment variables"
3. 添加以下**必需**环境变量:
**USERNAME 变量:**
- **Variable name**: `USERNAME`
- **Value**: `katelya` (您的站长用户名)
- **Type**: Plain text
- **Environment**: Production 和 Preview 都要添加
**PASSWORD 变量:****关键变量**
- **Variable name**: `PASSWORD`
- **Value**: `您设置的访问密码`
- **Type**: Plain text (**重要:不要选择密码类型**)
- **Environment**: Production 和 Preview 都要添加
4. 点击 "Save"
5. 重新部署项目
#### 第二步:验证其他环境变量
确保以下环境变量已正确设置:
```bash
# ⭐ 关键必需变量(缺一不可)
USERNAME=katelya # 站长用户名
PASSWORD=your-secure-password # 访问密码
NEXT_PUBLIC_STORAGE_TYPE=d1 # 存储类型
NEXT_PUBLIC_SITE_NAME=KatelyaTV # 站点名称
NODE_ENV=production # 运行环境
# 推荐设置
NEXTAUTH_URL=https://your-domain.pages.dev
IMAGE_PROXY_ENABLED=true
```
**⚠️ 重要提醒:**
- `PASSWORD` 必须设置为 "Plain text" 类型,不要选择 "Secret" 或 "Password" 类型
- `PASSWORD` 的值应该与您之前在本地或其他环境中使用的密码一致
#### 第三步:检查 D1 数据库绑定
1. 确保在 Cloudflare Pages 中绑定了 D1 数据库
2. 绑定名称应为 `DB`
3. 数据库应已初始化(运行过初始化脚本)
## 部署问题修复
### 问题1Edge Runtime 配置错误
**错误信息:**
```text
The following routes were not configured to run with the Edge Runtime:
- /api/test/simple
Please make sure that all your non-static routes export the following edge runtime route segment config:
export const runtime = 'edge';
```
**解决方案:**
✅ 已修复:删除了空的 `/api/test/simple/route.ts` 文件和相关目录。
**验证:**
所有API路由现在都正确配置了 `export const runtime = 'edge';`
### 问题2Windows环境下的bash依赖问题
**错误信息:**
```text
Error: spawn bash ENOENT
```
**原因:**
`@cloudflare/next-on-pages` 在Windows环境下需要bash来执行构建过程。
**解决方案选项:**
#### 选项1:使用 WSL (推荐)
1. 安装 Windows Subsystem for Linux (WSL)
2. 在WSL环境中运行构建命令
#### 选项2:使用 Git Bash
1. 确保已安装 Git for Windows
2. 在Git Bash中运行构建命令:
```bash
pnpm run pages:build
```
#### 选项3:云端构建
直接在Cloudflare Pages的CI/CD环境中构建,因为云环境通常是Linux系统。
## 正确的部署步骤
### 1. 本地验证构建
```bash
# 生成运行时配置
pnpm run gen:runtime
# 生成manifest
pnpm run gen:manifest
# Next.js 构建
npx next build
# Cloudflare Pages 适配 (在Linux/WSL环境中)
npx @cloudflare/next-on-pages
```
### 2. Cloudflare Pages 配置
在Cloudflare Pages控制台中设置:
**构建配置:**
- 构建命令: `pnpm install --frozen-lockfile && pnpm run pages:build`
- 构建输出目录: `.vercel/output/static`
- Node.js 版本: `20.x`
**环境变量:** (已在 `wrangler.toml` 中配置)
- `NEXT_PUBLIC_STORAGE_TYPE=d1`
- `NEXT_PUBLIC_SITE_NAME=KatelyaTV`
- 其他变量见 `wrangler.toml`
### 3. 验证部署
部署成功后,检查:
1. 所有API路由是否正常工作
2. 静态页面是否正确生成
3. Edge Runtime是否正常运行
## 常见问题排查
### API路由问题
确保所有API文件都包含:
```typescript
export const runtime = 'edge';
```
### 构建失败
1. 检查所有依赖是否安装完整
2. 确认TypeScript编译无错误
3. 验证环境变量配置
### 性能优化
- 已启用默认代码分割
- PWA缓存策略已配置
- 静态资源优化已开启
## 部署状态验证
部署完成后,访问以下端点验证:
- `/api/server-config` - 服务器配置
- `/api/debug/env` - 环境变量 (开发时)
- 主页 `/` - 前端页面
## 🔧 完整故障排除指南
### 500错误诊断清单
#### 1. 环境变量检查
```bash
# 在 Cloudflare Pages 控制台检查这些变量
USERNAME=katelya # ❌ 经常缺失
PASSWORD=your-password # ❌ 最关键,经常缺失或类型错误
NEXT_PUBLIC_STORAGE_TYPE=d1 # ✅ 通常已设置
NEXT_PUBLIC_SITE_NAME=KatelyaTV # ✅ 通常已设置
NODE_ENV=production # ✅ 通常已设置
```
**特别注意 PASSWORD 变量:**
- ✅ 正确:类型选择 "Plain text"
- ❌ 错误:类型选择 "Secret" 或 "Password"
- ❌ 错误:值为空或包含特殊字符
#### 2. D1 数据库检查
- [ ] D1 数据库是否已创建
- [ ] 数据库是否正确绑定到 Pages 项目
- [ ] 绑定名称是否为 `DB`
- [ ] 数据库是否已初始化
#### 3. 常见错误模式
| 错误现象 | 原因 | 解决方案 |
|---------|------|----------|
| 500 错误 | PASSWORD 未设置或类型错误 | 设置 PASSWORD 为 Plain text 类型 |
| 500 + 管理页面无法访问 | USERNAME 未设置 | 添加 USERNAME 环境变量 |
| 重定向到 /warning 页面 | PASSWORD 环境变量缺失 | 检查 PASSWORD 变量设置 |
| 500 + 数据库相关错误 | D1 绑定问题 | 检查数据库绑定配置 |
| 构建成功但运行失败 | 关键环境变量缺失 | 检查 USERNAME 和 PASSWORD |
### 验证部署成功
部署完成后访问以下端点验证:
```bash
# 1. 基本页面
https://your-domain.pages.dev/ # 主页
https://your-domain.pages.dev/login # 登录页
# 2. API 端点
https://your-domain.pages.dev/api/server-config # 服务器配置
https://your-domain.pages.dev/api/debug/env # 环境变量(开发时)
# 3. 管理功能
https://your-domain.pages.dev/admin # 管理后台(需要正确的 USERNAME)
```
### 紧急恢复方案
如果新部署出现问题:
1. **立即回滚**
```bash
# 在 Cloudflare Pages 控制台
Deployments → 选择之前的工作版本 → Rollback
```
2. **保留环境变量**
```bash
# 记录当前所有环境变量配置
# 在新部署前先备份设置
```
3. **分步部署**
```bash
# 1. 先部署代码(不修改环境变量)
# 2. 验证基本功能
# 3. 逐步添加/修改环境变量
```
## 后续维护
1. 定期更新依赖
2. 监控部署日志
3. 备份数据库配置
4. 关注Cloudflare Pages更新
5. 定期检查环境变量配置
6. 监控网站运行状态