CodeReview/docs/DEPLOYMENT.md

447 lines
8.9 KiB
Markdown
Raw 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.

# 部署指南
本文档详细介绍 XCodeReviewer 的各种部署方式,包括 Docker Compose 一键部署、生产环境部署和本地开发环境搭建。
## 目录
- [快速开始](#快速开始)
- [Docker Compose 部署(推荐)](#docker-compose-部署推荐)
- [生产环境部署](#生产环境部署)
- [本地开发部署](#本地开发部署)
- [常见部署问题](#常见部署问题)
---
## 快速开始
最快的方式是使用 Docker Compose 一键部署:
```bash
# 1. 克隆项目
git clone https://github.com/lintsinghua/XCodeReviewer.git
cd XCodeReviewer
# 2. 配置后端环境变量
cp backend/env.example backend/.env
# 编辑 backend/.env配置 LLM API Key
# 3. 启动所有服务
docker-compose up -d
# 4. 访问应用
# 前端: http://localhost:5173
# 后端 API: http://localhost:8000/docs
```
---
## Docker Compose 部署(推荐)
完整的前后端分离部署方案,包含前端、后端和 PostgreSQL 数据库。
### 系统要求
- Docker 20.10+
- Docker Compose 2.0+
- 至少 2GB 可用内存
- 至少 5GB 可用磁盘空间
### 部署步骤
```bash
# 1. 克隆项目
git clone https://github.com/lintsinghua/XCodeReviewer.git
cd XCodeReviewer
# 2. 配置后端环境变量
cp backend/env.example backend/.env
```
编辑 `backend/.env` 文件,配置必要参数:
```env
# 数据库配置Docker Compose 会自动处理)
POSTGRES_SERVER=db
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=xcodereviewer
# 安全配置(生产环境请修改)
SECRET_KEY=your-super-secret-key-change-this-in-production
# LLM 配置(必填)
LLM_PROVIDER=openai
LLM_API_KEY=sk-your-api-key
LLM_MODEL=gpt-4o-mini
# 可选API 中转站
# LLM_BASE_URL=https://your-proxy.com/v1
```
```bash
# 3. 启动所有服务
docker-compose up -d
# 4. 查看服务状态
docker-compose ps
# 5. 查看日志
docker-compose logs -f
```
### 服务说明
| 服务 | 端口 | 说明 |
|------|------|------|
| `frontend` | 5173 | React 前端应用(开发模式,支持热重载) |
| `backend` | 8000 | FastAPI 后端 API |
| `db` | 5432 | PostgreSQL 15 数据库 |
### 访问地址
- 前端应用: http://localhost:5173
- 后端 API: http://localhost:8000
- API 文档 (Swagger): http://localhost:8000/docs
- API 文档 (ReDoc): http://localhost:8000/redoc
### 常用命令
```bash
# 停止所有服务
docker-compose down
# 停止并删除数据卷(清除数据库)
docker-compose down -v
# 重新构建镜像
docker-compose build --no-cache
# 查看特定服务日志
docker-compose logs -f backend
# 进入容器调试
docker-compose exec backend bash
docker-compose exec db psql -U postgres -d xcodereviewer
```
---
## 生产环境部署
生产环境建议使用 Nginx 提供前端静态文件服务,并配置 HTTPS。
### 方式一:使用预构建 Docker 镜像
```bash
# 拉取最新镜像
docker pull ghcr.io/lintsinghua/xcodereviewer-frontend:latest
docker pull ghcr.io/lintsinghua/xcodereviewer-backend:latest
# 启动后端和数据库
docker-compose up -d db backend
# 启动前端Nginx 生产镜像)
docker run -d \
--name xcodereviewer-frontend \
-p 80:80 \
--network xcodereviewer-network \
ghcr.io/lintsinghua/xcodereviewer-frontend:latest
```
### 方式二:本地构建生产镜像
```bash
# 构建前端生产镜像(使用 Nginx
docker build -t xcodereviewer-frontend .
# 运行前端容器
docker run -d \
-p 80:80 \
--name xcodereviewer-frontend \
xcodereviewer-frontend
# 后端和数据库仍使用 docker-compose
docker-compose up -d db backend
```
### 方式三:手动部署
#### 前端部署
```bash
cd frontend
# 安装依赖
pnpm install
# 构建生产版本
pnpm build
# 将 dist 目录部署到 Nginx/Apache 等 Web 服务器
```
Nginx 配置示例:
```nginx
server {
listen 80;
server_name your-domain.com;
root /var/www/xcodereviewer/dist;
index index.html;
# 前端路由支持
location / {
try_files $uri $uri/ /index.html;
}
# API 代理
location /api {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```
#### 后端部署
```bash
cd backend
# 创建虚拟环境
python -m venv .venv
source .venv/bin/activate
# 安装依赖
pip install -r requirements.txt
# 配置环境变量
cp env.example .env
# 编辑 .env 文件
# 初始化数据库
alembic upgrade head
# 使用 Gunicorn 启动(生产环境)
gunicorn app.main:app -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000
```
### 生产环境安全建议
1. **修改默认密钥**:务必修改 `SECRET_KEY` 为随机字符串
2. **配置 HTTPS**:使用 Let's Encrypt 或其他 SSL 证书
3. **限制 CORS**:在生产环境配置具体的前端域名
4. **数据库安全**:修改默认数据库密码,限制访问 IP
5. **API 限流**:配置 Nginx 或应用层限流
6. **日志监控**:配置日志收集和监控告警
---
## 本地开发部署
适合需要开发或自定义修改的场景。
### 环境要求
| 依赖 | 版本要求 | 说明 |
|------|---------|------|
| Node.js | 18+ | 前端运行环境 |
| Python | 3.13+ | 后端运行环境 |
| PostgreSQL | 15+ | 数据库 |
| pnpm | 8+ | 推荐的包管理器 |
| uv | 最新版 | 推荐的 Python 包管理器 |
### 数据库准备
```bash
# 方式一:使用 Docker 启动 PostgreSQL
docker run -d \
--name xcodereviewer-db \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=postgres \
-e POSTGRES_DB=xcodereviewer \
-p 5432:5432 \
postgres:15-alpine
# 方式二:使用本地 PostgreSQL
# 创建数据库
createdb xcodereviewer
```
### 后端启动
```bash
# 1. 进入后端目录
cd backend
# 2. 创建虚拟环境(推荐使用 uv
uv venv
source .venv/bin/activate # Linux/macOS
# 或 .venv\Scripts\activate # Windows
# 3. 安装依赖
uv pip install -e .
# 或使用 pip
pip install -r requirements.txt
# 4. 配置环境变量
cp env.example .env
# 编辑 .env 文件,配置数据库和 LLM 参数
# 5. 初始化数据库
alembic upgrade head
# 6. 启动后端服务(开发模式,支持热重载)
uvicorn app.main:app --reload --port 8000
```
### 前端启动
```bash
# 1. 进入前端目录
cd frontend
# 2. 安装依赖
pnpm install
# 或 npm install / yarn install
# 3. 配置环境变量(可选,也可使用运行时配置)
cp .env.example .env
# 4. 启动开发服务器
pnpm dev
# 5. 访问应用
# 浏览器打开 http://localhost:5173
```
### 开发工具
```bash
# 前端代码检查
cd frontend
pnpm lint
pnpm type-check
# 前端代码格式化
pnpm format
# 后端类型检查
cd backend
mypy app
# 后端代码格式化
ruff format app
```
---
## 数据存储
XCodeReviewer 采用前后端分离架构,所有数据存储在后端 PostgreSQL 数据库中。
### 数据管理
`/admin` 页面的"数据库管理"标签页中,可以:
- **导出数据**: 将所有数据导出为 JSON 文件备份
- **导入数据**: 从 JSON 文件恢复数据
- **清空数据**: 删除所有数据(谨慎操作)
- **健康检查**: 检查数据库连接状态和数据完整性
### 数据库备份
```bash
# 导出 PostgreSQL 数据
docker-compose exec db pg_dump -U postgres xcodereviewer > backup.sql
# 恢复数据
docker-compose exec -T db psql -U postgres xcodereviewer < backup.sql
```
---
## 常见部署问题
### Docker 相关
**Q: 容器启动失败,提示端口被占用**
```bash
# 检查端口占用
lsof -i :5173
lsof -i :8000
lsof -i :5432
# 停止占用端口的进程,或修改 docker-compose.yml 中的端口映射
```
**Q: 数据库连接失败**
```bash
# 检查数据库容器状态
docker-compose ps db
# 查看数据库日志
docker-compose logs db
# 确保数据库健康检查通过后再启动后端
docker-compose up -d db
docker-compose exec db pg_isready -U postgres
docker-compose up -d backend
```
### 后端相关
**Q: PDF 导出功能报错WeasyPrint 依赖问题)**
WeasyPrint 需要系统级依赖Docker 镜像已包含。本地开发时:
```bash
# macOS
brew install pango cairo gdk-pixbuf libffi
# Ubuntu/Debian
sudo apt-get install libpango-1.0-0 libpangoft2-1.0-0 libcairo2 libgdk-pixbuf2.0-0
# Windows - 参见 FAQ.md 中的详细说明
```
**Q: LLM API 请求超时**
```env
# 增加超时时间
LLM_TIMEOUT=300
# 降低并发数
LLM_CONCURRENCY=1
# 增加请求间隔
LLM_GAP_MS=3000
```
### 前端相关
**Q: 前端无法连接后端 API**
检查 `frontend/.env` 中的 API 地址配置:
```env
# 本地开发
VITE_API_BASE_URL=http://localhost:8000/api/v1
# Docker Compose 部署
VITE_API_BASE_URL=/api
```
---
## 更多资源
- [配置说明](CONFIGURATION.md) - 详细的配置参数说明
- [LLM 平台支持](LLM_PROVIDERS.md) - 各 LLM 平台的配置方法
- [常见问题](FAQ.md) - 更多问题解答
- [贡献指南](../CONTRIBUTING.md) - 参与项目开发