- 更新 DashboardLayout 组件,统一使用演示模式布局 - 实现仪表盘页面的完整演示数据和功能 - 完成用户管理页面的演示模式,包含搜索、过滤、分页等功能 - 实现通话记录页面的演示数据和录音播放功能 - 完成翻译员管理页面的演示模式 - 实现订单管理页面的完整功能 - 完成发票管理页面的演示数据 - 更新文档管理页面 - 添加 utils.ts 工具函数库 - 完善 API 路由和数据库结构 - 修复各种 TypeScript 类型错误 - 统一界面风格和用户体验
368 lines
6.4 KiB
Markdown
368 lines
6.4 KiB
Markdown
# 部署指南
|
||
|
||
## 概述
|
||
|
||
本文档介绍如何将口译服务管理后台部署到生产环境。项目支持多种部署方式,推荐使用 Vercel 进行快速部署。
|
||
|
||
## 前置条件
|
||
|
||
### 1. 准备服务账户
|
||
|
||
在部署前,请确保已经配置好以下服务:
|
||
|
||
- **Supabase** - 数据库和身份验证服务
|
||
- **Stripe** - 支付处理服务(可选)
|
||
- **OpenAI** - AI 服务(可选)
|
||
- **Twilio** - 通信服务(可选)
|
||
|
||
### 2. 环境变量配置
|
||
|
||
请准备以下环境变量:
|
||
|
||
```env
|
||
# Supabase 配置
|
||
NEXT_PUBLIC_SUPABASE_URL=https://your-project-id.supabase.co
|
||
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
|
||
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
|
||
|
||
# Stripe 配置
|
||
STRIPE_SECRET_KEY=sk_test_...
|
||
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_...
|
||
|
||
# OpenAI 配置
|
||
OPENAI_API_KEY=sk-...
|
||
|
||
# Twilio 配置
|
||
TWILIO_ACCOUNT_SID=AC...
|
||
TWILIO_API_KEY_SID=SK...
|
||
TWILIO_API_KEY_SECRET=...
|
||
|
||
# 应用配置
|
||
NEXTAUTH_SECRET=your-nextauth-secret
|
||
JWT_SECRET=your-jwt-secret
|
||
NEXTAUTH_URL=https://your-domain.com
|
||
```
|
||
|
||
## 部署方式
|
||
|
||
### 方式一:Vercel 部署(推荐)
|
||
|
||
#### 1. 准备代码仓库
|
||
|
||
```bash
|
||
# 确保代码已提交到 Git 仓库
|
||
git add .
|
||
git commit -m "准备部署"
|
||
git push origin main
|
||
```
|
||
|
||
#### 2. 连接 Vercel
|
||
|
||
1. 访问 [Vercel Dashboard](https://vercel.com/dashboard)
|
||
2. 点击 "New Project"
|
||
3. 导入你的 Git 仓库
|
||
4. 选择 "Next.js" 框架预设
|
||
|
||
#### 3. 配置环境变量
|
||
|
||
在 Vercel 项目设置中添加所有必要的环境变量:
|
||
|
||
1. 进入项目 Settings
|
||
2. 选择 Environment Variables
|
||
3. 添加所有上述环境变量
|
||
|
||
#### 4. 部署
|
||
|
||
1. 点击 "Deploy" 开始部署
|
||
2. 等待构建完成
|
||
3. 访问提供的 URL 验证部署
|
||
|
||
### 方式二:Docker 部署
|
||
|
||
#### 1. 创建 Dockerfile
|
||
|
||
```dockerfile
|
||
FROM node:18-alpine AS deps
|
||
RUN apk add --no-cache libc6-compat
|
||
WORKDIR /app
|
||
|
||
COPY package.json package-lock.json* ./
|
||
RUN npm ci --only=production
|
||
|
||
FROM node:18-alpine AS builder
|
||
WORKDIR /app
|
||
COPY --from=deps /app/node_modules ./node_modules
|
||
COPY . .
|
||
|
||
ENV NEXT_TELEMETRY_DISABLED 1
|
||
RUN npm run build
|
||
|
||
FROM node:18-alpine AS runner
|
||
WORKDIR /app
|
||
|
||
ENV NODE_ENV production
|
||
ENV NEXT_TELEMETRY_DISABLED 1
|
||
|
||
RUN addgroup --system --gid 1001 nodejs
|
||
RUN adduser --system --uid 1001 nextjs
|
||
|
||
COPY --from=builder /app/public ./public
|
||
COPY --from=builder /app/.next/standalone ./
|
||
COPY --from=builder /app/.next/static ./.next/static
|
||
|
||
USER nextjs
|
||
|
||
EXPOSE 3000
|
||
|
||
ENV PORT 3000
|
||
|
||
CMD ["node", "server.js"]
|
||
```
|
||
|
||
#### 2. 构建和运行
|
||
|
||
```bash
|
||
# 构建镜像
|
||
docker build -t interpretation-admin .
|
||
|
||
# 运行容器
|
||
docker run -p 3000:3000 --env-file .env.local interpretation-admin
|
||
```
|
||
|
||
### 方式三:传统服务器部署
|
||
|
||
#### 1. 服务器环境准备
|
||
|
||
```bash
|
||
# 安装 Node.js 18+
|
||
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
|
||
sudo apt-get install -y nodejs
|
||
|
||
# 安装 PM2
|
||
npm install -g pm2
|
||
```
|
||
|
||
#### 2. 代码部署
|
||
|
||
```bash
|
||
# 克隆代码
|
||
git clone https://github.com/your-username/interpretation-admin.git
|
||
cd interpretation-admin
|
||
|
||
# 安装依赖
|
||
npm install
|
||
|
||
# 构建项目
|
||
npm run build
|
||
|
||
# 启动服务
|
||
pm2 start npm --name "interpretation-admin" -- start
|
||
```
|
||
|
||
## 数据库设置
|
||
|
||
### 1. 执行数据库脚本
|
||
|
||
在 Supabase Dashboard 中执行 `database/schema.sql` 脚本:
|
||
|
||
1. 登录 Supabase Dashboard
|
||
2. 进入 SQL Editor
|
||
3. 复制粘贴 `database/schema.sql` 内容
|
||
4. 点击 "Run" 执行
|
||
|
||
### 2. 配置 RLS 策略
|
||
|
||
确保行级安全策略正确配置,保护用户数据安全。
|
||
|
||
### 3. 创建管理员账户
|
||
|
||
```sql
|
||
-- 在 Supabase SQL Editor 中执行
|
||
INSERT INTO users (id, email, name, user_type, status)
|
||
VALUES (
|
||
'your-admin-user-id',
|
||
'admin@example.com',
|
||
'系统管理员',
|
||
'admin',
|
||
'active'
|
||
);
|
||
```
|
||
|
||
## SSL 证书配置
|
||
|
||
### 使用 Let's Encrypt
|
||
|
||
```bash
|
||
# 安装 Certbot
|
||
sudo apt install certbot python3-certbot-nginx
|
||
|
||
# 获取证书
|
||
sudo certbot --nginx -d yourdomain.com
|
||
|
||
# 自动续期
|
||
sudo crontab -e
|
||
# 添加: 0 12 * * * /usr/bin/certbot renew --quiet
|
||
```
|
||
|
||
## 性能优化
|
||
|
||
### 1. 启用缓存
|
||
|
||
```javascript
|
||
// next.config.js
|
||
module.exports = {
|
||
async headers() {
|
||
return [
|
||
{
|
||
source: '/api/:path*',
|
||
headers: [
|
||
{
|
||
key: 'Cache-Control',
|
||
value: 'public, max-age=300, stale-while-revalidate=60'
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 2. 图片优化
|
||
|
||
确保使用 Next.js Image 组件进行图片优化。
|
||
|
||
### 3. 代码分割
|
||
|
||
利用 Next.js 的自动代码分割功能。
|
||
|
||
## 监控和日志
|
||
|
||
### 1. 应用监控
|
||
|
||
推荐使用以下监控服务:
|
||
|
||
- **Vercel Analytics** - 性能监控
|
||
- **Sentry** - 错误监控
|
||
- **LogRocket** - 用户行为监控
|
||
|
||
### 2. 数据库监控
|
||
|
||
- 使用 Supabase Dashboard 监控数据库性能
|
||
- 设置告警规则
|
||
- 定期检查慢查询
|
||
|
||
## 备份策略
|
||
|
||
### 1. 数据库备份
|
||
|
||
```bash
|
||
# 每日自动备份
|
||
0 2 * * * pg_dump $DATABASE_URL > backup_$(date +\%Y\%m\%d).sql
|
||
```
|
||
|
||
### 2. 代码备份
|
||
|
||
- 使用 Git 进行版本控制
|
||
- 定期推送到远程仓库
|
||
- 标记重要版本
|
||
|
||
## 安全配置
|
||
|
||
### 1. 环境变量安全
|
||
|
||
- 使用强密码和随机密钥
|
||
- 定期轮换 API 密钥
|
||
- 不要在代码中硬编码敏感信息
|
||
|
||
### 2. 网络安全
|
||
|
||
- 启用 HTTPS
|
||
- 配置 CORS 策略
|
||
- 使用 CSP 头部
|
||
|
||
### 3. 数据库安全
|
||
|
||
- 启用 RLS 策略
|
||
- 使用最小权限原则
|
||
- 定期更新密码
|
||
|
||
## 故障排除
|
||
|
||
### 常见问题
|
||
|
||
1. **构建失败**
|
||
- 检查依赖版本兼容性
|
||
- 确认环境变量配置
|
||
|
||
2. **数据库连接失败**
|
||
- 验证 Supabase 配置
|
||
- 检查网络连接
|
||
|
||
3. **API 调用失败**
|
||
- 检查 API 密钥
|
||
- 验证服务状态
|
||
|
||
### 调试工具
|
||
|
||
- 使用浏览器开发者工具
|
||
- 检查服务器日志
|
||
- 使用 Supabase 日志功能
|
||
|
||
## 更新和维护
|
||
|
||
### 1. 依赖更新
|
||
|
||
```bash
|
||
# 检查过期依赖
|
||
npm outdated
|
||
|
||
# 更新依赖
|
||
npm update
|
||
```
|
||
|
||
### 2. 安全更新
|
||
|
||
```bash
|
||
# 检查安全漏洞
|
||
npm audit
|
||
|
||
# 修复安全问题
|
||
npm audit fix
|
||
```
|
||
|
||
### 3. 定期维护
|
||
|
||
- 清理日志文件
|
||
- 优化数据库
|
||
- 更新 SSL 证书
|
||
- 检查性能指标
|
||
|
||
## 扩展部署
|
||
|
||
### 负载均衡
|
||
|
||
当流量增加时,可以考虑:
|
||
|
||
- 使用 CDN 加速静态资源
|
||
- 部署多个实例
|
||
- 使用负载均衡器
|
||
|
||
### 微服务架构
|
||
|
||
对于大型应用,可以考虑:
|
||
|
||
- 拆分 API 服务
|
||
- 使用消息队列
|
||
- 实施服务发现
|
||
|
||
## 支持和帮助
|
||
|
||
如果在部署过程中遇到问题,可以:
|
||
|
||
1. 查看项目文档
|
||
2. 检查 GitHub Issues
|
||
3. 联系技术支持
|
||
|
||
---
|
||
|
||
**注意**: 请确保在生产环境中使用强密码和安全的配置。定期更新依赖包和安全补丁。 |