You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ErrorDetecting/backend/docs/deployment_guide.md

593 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Hadoop Fault Detecting API 部署手册
## 1. 项目概述
Hadoop Fault Detecting API是一个基于FastAPI开发的后端服务用于监控和管理Hadoop集群提供集群管理、节点监控、日志分析、故障检测等功能。
## 2. 环境要求
### 2.1 硬件要求
| 配置项 | 最低要求 | 推荐配置 |
|--------|----------|----------|
| CPU | 4核 | 8核 |
| 内存 | 8GB | 16GB |
| 磁盘 | 100GB | 200GB |
| 网络 | 千兆网卡 | 万兆网卡 |
### 2.2 软件要求
| 软件 | 版本 | 说明 |
|------|------|------|
| Python | 3.13+ | 开发和运行环境 |
| PostgreSQL | 14+ | 数据库 |
| Redis | 6.0+ | 可选,用于缓存 |
| Git | 2.0+ | 版本控制 |
| Nginx | 1.18+ | 反向代理(可选) |
| Docker | 20.10+ | 容器化部署(可选) |
| Docker Compose | 1.29+ | 容器编排(可选) |
## 3. 部署准备
### 3.1 克隆代码
```bash
# 克隆代码到本地
git clone https://github.com/your-repo/hadoop-fault-detecting.git
cd hadoop-fault-detecting
```
### 3.2 安装Python依赖
```bash
# 创建虚拟环境
python -m venv venv
# 激活虚拟环境
# Windows
venv\Scripts\activate
# Linux/Mac
source venv/bin/activate
# 安装依赖
pip install -r requirements.txt
```
### 3.3 配置环境变量
创建`.env`文件,配置以下环境变量:
```env
# 数据库配置
DATABASE_URL=postgresql+asyncpg://username:password@localhost:5432/hadoop_fault
# JWT配置
JWT_SECRET=your_jwt_secret_key
JWT_EXPIRE_MINUTES=30
# LLM配置
OPENAI_API_KEY=your_openai_api_key
# Hadoop节点配置
HADOOP_NODES={"hadoop-master": "192.168.1.100", "hadoop-node1": "192.168.1.101"}
# 日志配置
LOG_LEVEL=INFO
LOG_FILE=app.log
```
## 4. 数据库部署
### 4.1 安装PostgreSQL
#### Ubuntu
```bash
sudo apt update
sudo apt install postgresql postgresql-contrib -y
# 启动PostgreSQL服务
sudo systemctl start postgresql
sudo systemctl enable postgresql
```
#### CentOS
```bash
sudo dnf install postgresql-server postgresql-contrib -y
# 初始化数据库
sudo postgresql-setup initdb
# 启动PostgreSQL服务
sudo systemctl start postgresql
sudo systemctl enable postgresql
```
#### Windows
下载安装包https://www.postgresql.org/download/windows/
按照安装向导进行安装,记住设置的密码。
### 4.2 创建数据库和用户
```bash
# 登录PostgreSQL
sudo -u postgres psql
# 创建数据库
CREATE DATABASE hadoop_fault;
# 创建用户
CREATE USER username WITH PASSWORD 'password';
# 授权用户访问数据库
GRANT ALL PRIVILEGES ON DATABASE hadoop_fault TO username;
# 退出PostgreSQL\q
```
### 4.3 初始化数据库
```bash
# 运行数据库迁移(如果有)
# alembic upgrade head
# 或直接启动服务FastAPI会自动创建表
python -m uvicorn app.main:app --reload
```
## 5. 服务部署
### 5.1 直接部署
#### 开发环境
```bash
# 激活虚拟环境
# Windows
venv\Scripts\activate
# Linux/Mac
source venv/bin/activate
# 启动开发服务器
python -m uvicorn app.main:app --reload
```
访问地址:
- API文档http://localhost:8000/docs
- ReDochttp://localhost:8000/redoc
#### 生产环境
```bash
# 激活虚拟环境
source venv/bin/activate
# 启动生产服务器
python -m uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4
```
### 5.2 使用systemd部署
创建systemd服务文件`/etc/systemd/system/hadoop-fault-api.service`
```ini
[Unit]
Description=Hadoop Fault Detecting API
After=network.target postgresql.service
[Service]
User=your_user
Group=your_group
WorkingDirectory=/path/to/hadoop-fault-detecting
Environment="PATH=/path/to/hadoop-fault-detecting/venv/bin"
ExecStart=/path/to/hadoop-fault-detecting/venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4
Restart=on-failure
[Install]
WantedBy=multi-user.target
```
启动服务:
```bash
sudo systemctl daemon-reload
sudo systemctl start hadoop-fault-api
sudo systemctl enable hadoop-fault-api
```
查看服务状态:
```bash
sudo systemctl status hadoop-fault-api
sudo journalctl -u hadoop-fault-api -f
```
### 5.3 使用Docker部署
#### 构建Docker镜像
创建`Dockerfile`
```dockerfile
FROM python:3.13-slim
WORKDIR /app
# 安装系统依赖
RUN apt-get update && apt-get install -y \
build-essential \
libpq-dev \
&& rm -rf /var/lib/apt/lists/*
# 复制依赖文件
COPY requirements.txt .
# 安装Python依赖
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 8000
# 启动服务
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "4"]
```
创建`.dockerignore`文件:
```
__pycache__
venv
.env
*.log
.git
```
构建镜像:
```bash
docker build -t hadoop-fault-api .
```
#### 使用Docker Compose
创建`docker-compose.yml`文件:
```yaml
version: '3.8'
services:
db:
image: postgres:14
environment:
POSTGRES_DB: hadoop_fault
POSTGRES_USER: username
POSTGRES_PASSWORD: password
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
api:
build: .
environment:
DATABASE_URL: postgresql+asyncpg://username:password@db:5432/hadoop_fault
JWT_SECRET: your_jwt_secret_key
JWT_EXPIRE_MINUTES: 30
OPENAI_API_KEY: your_openai_api_key
ports:
- "8000:8000"
depends_on:
- db
restart: unless-stopped
volumes:
postgres_data:
```
启动服务:
```bash
docker-compose up -d
```
查看日志:
```bash
docker-compose logs -f
```
停止服务:
```bash
docker-compose down
```
## 6. 配置说明
### 6.1 主要配置文件
| 配置文件 | 作用 | 位置 |
|----------|------|------|
| .env | 环境变量配置 | 项目根目录 |
| app/config.py | 应用配置 | app/ |
| requirements.txt | Python依赖 | 项目根目录 |
### 6.2 环境变量说明
| 环境变量 | 类型 | 说明 | 示例 |
|----------|------|------|------|
| DATABASE_URL | 字符串 | 数据库连接URL | postgresql+asyncpg://username:password@localhost:5432/hadoop_fault |
| JWT_SECRET | 字符串 | JWT密钥 | your_jwt_secret_key |
| JWT_EXPIRE_MINUTES | 整数 | JWT令牌有效期分钟 | 30 |
| OPENAI_API_KEY | 字符串 | OpenAI API密钥 | sk-xxxxxxxxxxxxxxxxxx |
| HADOOP_NODES | JSON字符串 | Hadoop节点配置 | {"hadoop-master": "192.168.1.100"} |
| LOG_LEVEL | 字符串 | 日志级别 | INFO |
| LOG_FILE | 字符串 | 日志文件路径 | app.log |
### 6.3 应用配置说明
在`app/config.py`中可以配置应用的各种参数:
```python
# 应用配置
APP_TITLE = "Hadoop Fault Detecting API"
APP_VERSION = "v1"
# 数据库配置
DATABASE_URL = os.getenv("DATABASE_URL")
# JWT配置
JWT_SECRET = os.getenv("JWT_SECRET")
JWT_EXPIRE_MINUTES = int(os.getenv("JWT_EXPIRE_MINUTES", 30))
# LLM配置
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
# Hadoop节点配置
HADOOP_NODES = json.loads(os.getenv("HADOOP_NODES", "{}"))
# 日志配置
LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO")
LOG_FILE = os.getenv("LOG_FILE", "app.log")
```
## 7. 反向代理配置
### 7.1 使用Nginx
创建Nginx配置文件`/etc/nginx/conf.d/hadoop-fault-api.conf`
```nginx
server {
listen 80;
server_name api.example.com;
# 日志配置
access_log /var/log/nginx/hadoop-fault-api.access.log;
error_log /var/log/nginx/hadoop-fault-api.error.log;
location / {
proxy_pass http://localhost:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
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;
}
# 静态文件配置(如果有)
location /static/ {
alias /path/to/hadoop-fault-detecting/static/;
expires 30d;
}
}
```
测试并重启Nginx
```bash
sudo nginx -t
sudo systemctl restart nginx
```
### 7.2 使用HTTPS
生成SSL证书
```bash
sudo certbot certonly --nginx -d api.example.com
```
更新Nginx配置
```nginx
server {
listen 80;
server_name api.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name api.example.com;
# SSL证书配置
ssl_certificate /etc/letsencrypt/live/api.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# 其他配置...
location / {
proxy_pass http://localhost:8000;
# 其他proxy配置...
}
}
```
## 8. 监控和维护
### 8.1 日志监控
应用日志默认保存在项目根目录的`app.log`文件中,可以通过以下命令查看日志:
```bash
# 实时查看日志
tail -f app.log
# 查看错误日志
grep -i error app.log
# 查看特定时间段的日志
grep "2025-12-18" app.log
```
### 8.2 健康检查
应用提供了健康检查接口,可以通过以下命令检查服务状态:
```bash
curl http://localhost:8000/api/v1/health
```
响应示例:
```json
{
"status": "ok",
"database": "connected"
}
```
### 8.3 数据库备份
定期备份数据库:
```bash
# 备份数据库
pg_dump -U username -d hadoop_fault > hadoop_fault_backup_$(date +%Y%m%d_%H%M%S).sql
# 恢复数据库
psql -U username -d hadoop_fault < hadoop_fault_backup.sql
```
### 8.4 性能监控
可以使用以下工具监控服务性能:
- **Prometheus + Grafana**:监控系统和应用性能
- **New Relic**:应用性能监控
- **ELK Stack**:日志收集和分析
## 9. 常见问题和解决方案
### 9.1 数据库连接失败
**问题**:启动服务时提示数据库连接失败
**解决方案**
1. 检查数据库服务是否正在运行
2. 检查数据库连接URL是否正确
3. 检查数据库用户权限是否正确
4. 检查防火墙设置是否允许连接
### 9.2 端口被占用
**问题**启动服务时提示端口8000已被占用
**解决方案**
1. 查找占用端口的进程:`lsof -i :8000`
2. 终止占用端口的进程:`kill -9 <PID>`
3. 或修改服务端口:`uvicorn app.main:app --port 8001`
### 9.3 依赖安装失败
**问题**:安装依赖时出现错误
**解决方案**
1. 确保Python版本符合要求
2. 更新pip`pip install --upgrade pip`
3. 安装系统依赖:
- Ubuntu`apt install build-essential libpq-dev`
- CentOS`yum install gcc gcc-c++ postgresql-devel`
4. 尝试使用国内镜像源:`pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt`
### 9.4 JWT令牌无效
**问题**请求API时提示"Invalid credentials"
**解决方案**
1. 检查JWT_SECRET是否正确配置
2. 检查令牌是否过期
3. 检查令牌格式是否正确
4. 检查请求头中是否正确携带令牌
### 9.5 500服务器错误
**问题**请求API时返回500错误
**解决方案**
1. 查看应用日志,定位错误原因
2. 检查数据库连接是否正常
3. 检查代码中是否有未处理的异常
4. 检查依赖版本是否兼容
## 10. 更新和升级
### 10.1 代码更新
```bash
# 拉取最新代码
git pull
# 安装新依赖
pip install -r requirements.txt
# 重启服务
# 直接部署重启uvicorn服务
# systemd部署sudo systemctl restart hadoop-fault-api
# Docker部署docker-compose up -d --build
```
### 10.2 数据库迁移
如果使用Alembic进行数据库迁移
```bash
# 创建迁移脚本
alembic revision --autogenerate -m "描述"
# 执行迁移
alembic upgrade head
```
## 11. 安全最佳实践
1. **使用HTTPS**生产环境中使用HTTPS加密传输
2. **定期更新依赖**定期更新Python依赖修复安全漏洞
3. **限制访问权限**:设置适当的文件和目录权限
4. **配置防火墙**限制只有特定IP可以访问服务
5. **使用强密码**:数据库和用户密码使用强密码
6. **定期备份**:定期备份数据库和配置文件
7. **监控日志**:实时监控日志,及时发现异常
8. **使用VPN**如果服务部署在公网考虑使用VPN访问
## 12. 联系方式
- **开发团队**Hadoop故障检测团队
- **文档地址**`docs/deployment_guide.md`
- **版本历史**
- v1.0 (2025-12-18):初始版本
---
**注意**:本部署手册将根据项目的更新不断完善,建议定期查看最新版本。