Twilioapp-admin/DEPLOYMENT.md

368 lines
6.4 KiB
Markdown
Raw Permalink Normal View History

# 部署指南
## 概述
本文档介绍如何将口译服务管理后台部署到生产环境。项目支持多种部署方式,推荐使用 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. 联系技术支持
---
**注意**: 请确保在生产环境中使用强密码和安全的配置。定期更新依赖包和安全补丁。