# Chat-Room 部署文档
## 📋 概述
Chat-Room支持多种部署方式,包括本地开发部署、生产环境部署、Docker容器化部署和云平台部署。本文档提供详细的部署指南、配置说明和运维建议。
## 🏗️ 部署架构
### 部署架构图
```mermaid
graph TB
subgraph "客户端层"
WEB[Web客户端
浏览器]
TUI[TUI客户端
终端]
MOBILE[移动客户端
App]
end
subgraph "负载均衡层"
LB[负载均衡器
Nginx/HAProxy]
end
subgraph "应用层"
APP1[Chat-Room服务器1
主节点]
APP2[Chat-Room服务器2
备用节点]
APP3[Chat-Room服务器3
扩展节点]
end
subgraph "数据层"
DB[(SQLite数据库
主数据库)]
BACKUP[(备份数据库
定期备份)]
FILES[文件存储
共享存储]
end
subgraph "外部服务"
AI[智谱AI
GLM-4-Flash]
MONITOR[监控服务
Prometheus]
LOG[日志服务
ELK Stack]
end
WEB --> LB
TUI --> LB
MOBILE --> LB
LB --> APP1
LB --> APP2
LB --> APP3
APP1 --> DB
APP2 --> DB
APP3 --> DB
APP1 --> FILES
APP2 --> FILES
APP3 --> FILES
DB --> BACKUP
APP1 --> AI
APP2 --> AI
APP3 --> AI
APP1 --> MONITOR
APP2 --> MONITOR
APP3 --> MONITOR
APP1 --> LOG
APP2 --> LOG
APP3 --> LOG
```
### 部署流程
```mermaid
flowchart TD
START([开始部署]) --> ENV_CHECK[环境检查]
ENV_CHECK --> DEPS[安装依赖]
DEPS --> CONFIG[配置系统]
CONFIG --> DB_INIT[初始化数据库]
DB_INIT --> TEST[运行测试]
TEST --> DEPLOY[部署应用]
DEPLOY --> HEALTH_CHECK[健康检查]
HEALTH_CHECK --> MONITOR[配置监控]
MONITOR --> BACKUP[配置备份]
BACKUP --> COMPLETE([部署完成])
TEST --> TEST_FAIL{测试失败?}
TEST_FAIL -->|是| FIX_ISSUES[修复问题]
FIX_ISSUES --> TEST
HEALTH_CHECK --> HEALTH_FAIL{健康检查失败?}
HEALTH_FAIL -->|是| DEBUG[调试问题]
DEBUG --> HEALTH_CHECK
```
## 🖥️ 本地开发部署
### 环境要求
```bash
# 系统要求
- 操作系统: Windows 10+, macOS 10.15+, Ubuntu 18.04+
- Python: 3.8+
- 内存: 最少2GB,推荐4GB+
- 存储: 最少1GB可用空间
- 网络: 稳定的互联网连接(AI功能需要)
```
### 快速部署
```bash
# 1. 克隆项目
git clone https://github.com/your-repo/Chat-Room.git
cd Chat-Room
# 2. 创建虚拟环境
python -m venv venv
# Windows
venv\Scripts\activate
# Linux/macOS
source venv/bin/activate
# 3. 安装依赖
pip install -r requirements.txt
# 4. 配置环境
cp config/server_config.template.yaml config/server_config.yaml
cp config/client_config.template.yaml config/client_config.yaml
# 5. 初始化数据库
python -c "from server.database.connection import init_database; init_database()"
# 6. 启动服务器
python -m server.main
# 7. 启动客户端(新终端)
python -m client.main
```
### 开发环境配置
```yaml
# config/server_config.yaml (开发环境)
server:
host: "localhost"
port: 8888
debug: true
max_connections: 10
database:
path: "server/data/dev_chatroom.db"
logging:
level: "DEBUG"
console_output: true
ai:
enabled: false # 开发时可关闭AI功能
```
## 🏭 生产环境部署
### 系统要求
```bash
# 生产环境要求
- 操作系统: Ubuntu 20.04 LTS / CentOS 8+
- Python: 3.9+
- 内存: 最少4GB,推荐8GB+
- CPU: 最少2核,推荐4核+
- 存储: 最少10GB,推荐50GB+
- 网络: 稳定的公网IP和域名
```
### 系统准备
```bash
# 1. 更新系统
sudo apt update && sudo apt upgrade -y
# 2. 安装Python和依赖
sudo apt install python3.9 python3.9-venv python3.9-dev -y
sudo apt install build-essential libssl-dev libffi-dev -y
# 3. 创建应用用户
sudo useradd -m -s /bin/bash chatroom
sudo usermod -aG sudo chatroom
# 4. 创建应用目录
sudo mkdir -p /opt/chatroom
sudo chown chatroom:chatroom /opt/chatroom
```
### 应用部署
```bash
# 1. 切换到应用用户
sudo su - chatroom
# 2. 部署应用
cd /opt/chatroom
git clone https://github.com/your-repo/Chat-Room.git .
# 3. 创建虚拟环境
python3.9 -m venv venv
source venv/bin/activate
# 4. 安装依赖
pip install -r requirements.txt
pip install gunicorn supervisor
# 5. 配置生产环境
cp config/server_config.template.yaml config/server_config.yaml
# 编辑配置文件...
# 6. 初始化数据库
python -c "from server.database.connection import init_database; init_database()"
# 7. 运行测试
pytest test/
# 8. 创建日志目录
mkdir -p logs/server logs/client
```
### 生产配置
```yaml
# config/server_config.yaml (生产环境)
server:
host: "0.0.0.0"
port: 8888
debug: false
max_connections: 1000
database:
path: "/opt/chatroom/data/chatroom.db"
backup_enabled: true
backup_interval: 3600
security:
enable_rate_limiting: true
max_requests_per_minute: 100
enable_ip_blacklist: true
logging:
level: "INFO"
file: "/opt/chatroom/logs/server/server.log"
max_size: 10485760
backup_count: 10
monitoring:
enabled: true
metrics_interval: 60
webhook_url: "https://your-monitoring-webhook"
ai:
enabled: true
api_key: "your-production-api-key"
rate_limit:
requests_per_minute: 60
requests_per_hour: 1000
```
### 进程管理 (Supervisor)
```ini
# /etc/supervisor/conf.d/chatroom.conf
[program:chatroom-server]
command=/opt/chatroom/venv/bin/python -m server.main
directory=/opt/chatroom
user=chatroom
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/opt/chatroom/logs/supervisor.log
environment=PYTHONPATH="/opt/chatroom"
[program:chatroom-monitor]
command=/opt/chatroom/venv/bin/python tools/monitor.py
directory=/opt/chatroom
user=chatroom
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/opt/chatroom/logs/monitor.log
```
```bash
# 启动Supervisor服务
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start chatroom-server
sudo supervisorctl status
```
## 🐳 Docker部署
### Dockerfile
```dockerfile
# Dockerfile
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 安装系统依赖
RUN apt-get update && apt-get install -y \
build-essential \
&& rm -rf /var/lib/apt/lists/*
# 复制依赖文件
COPY requirements.txt .
# 安装Python依赖
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 创建数据目录
RUN mkdir -p data logs
# 设置环境变量
ENV PYTHONPATH=/app
ENV CHATROOM_CONFIG_PATH=/app/config/server_config.yaml
# 暴露端口
EXPOSE 8888
# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD python tools/health_check.py || exit 1
# 启动命令
CMD ["python", "-m", "server.main"]
```
### Docker Compose
```yaml
# docker-compose.yml
version: '3.8'
services:
chatroom-server:
build: .
ports:
- "8888:8888"
volumes:
- ./data:/app/data
- ./logs:/app/logs
- ./config:/app/config
environment:
- CHATROOM_DEBUG=false
- ZHIPU_AI_API_KEY=${ZHIPU_AI_API_KEY}
restart: unless-stopped
healthcheck:
test: ["CMD", "python", "tools/health_check.py"]
interval: 30s
timeout: 10s
retries: 3
networks:
- chatroom-network
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./ssl:/etc/nginx/ssl
depends_on:
- chatroom-server
restart: unless-stopped
networks:
- chatroom-network
prometheus:
image: prom/prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
restart: unless-stopped
networks:
- chatroom-network
grafana:
image: grafana/grafana
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
volumes:
- grafana-data:/var/lib/grafana
restart: unless-stopped
networks:
- chatroom-network
networks:
chatroom-network:
driver: bridge
volumes:
grafana-data:
```
### Docker部署命令
```bash
# 1. 构建镜像
docker build -t chatroom:latest .
# 2. 运行容器
docker run -d \
--name chatroom-server \
-p 8888:8888 \
-v $(pwd)/data:/app/data \
-v $(pwd)/logs:/app/logs \
-e ZHIPU_AI_API_KEY=your-api-key \
chatroom:latest
# 3. 使用Docker Compose
docker-compose up -d
# 4. 查看日志
docker-compose logs -f chatroom-server
# 5. 停止服务
docker-compose down
```
## ☁️ 云平台部署
### AWS部署
```bash
# 1. 创建EC2实例
aws ec2 run-instances \
--image-id ami-0c55b159cbfafe1d0 \
--count 1 \
--instance-type t3.medium \
--key-name your-key-pair \
--security-group-ids sg-xxxxxxxxx \
--subnet-id subnet-xxxxxxxxx
# 2. 配置安全组
aws ec2 authorize-security-group-ingress \
--group-id sg-xxxxxxxxx \
--protocol tcp \
--port 8888 \
--cidr 0.0.0.0/0
# 3. 部署应用
ssh -i your-key.pem ubuntu@your-ec2-ip
# 然后按照生产环境部署步骤...
```
### 阿里云部署
```bash
# 1. 创建ECS实例
aliyun ecs CreateInstance \
--RegionId cn-hangzhou \
--ImageId ubuntu_20_04_x64_20G_alibase_20210420.vhd \
--InstanceType ecs.t6-c1m2.large \
--SecurityGroupId sg-xxxxxxxxx
# 2. 配置域名解析
aliyun domain AddDomainRecord \
--DomainName your-domain.com \
--RR chat \
--Type A \
--Value your-server-ip
```
## 🔧 负载均衡配置
### Nginx配置
```nginx
# /etc/nginx/sites-available/chatroom
upstream chatroom_backend {
server 127.0.0.1:8888;
server 127.0.0.1:8889 backup;
}
server {
listen 80;
server_name chat.yourdomain.com;
# 重定向到HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name chat.yourdomain.com;
# SSL配置
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
# WebSocket支持
location / {
proxy_pass http://chatroom_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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;
# 超时设置
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# 静态文件
location /static/ {
alias /opt/chatroom/static/;
expires 30d;
add_header Cache-Control "public, immutable";
}
# 健康检查
location /health {
proxy_pass http://chatroom_backend/health;
access_log off;
}
}
```
## 📊 监控和日志
### Prometheus配置
```yaml
# prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'chatroom'
static_configs:
- targets: ['localhost:8888']
metrics_path: '/metrics'
scrape_interval: 30s
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
rule_files:
- "chatroom_rules.yml"
alerting:
alertmanagers:
- static_configs:
- targets:
- alertmanager:9093
```
### 告警规则
```yaml
# chatroom_rules.yml
groups:
- name: chatroom
rules:
- alert: ChatRoomDown
expr: up{job="chatroom"} == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Chat-Room服务器宕机"
description: "Chat-Room服务器已宕机超过1分钟"
- alert: HighCPUUsage
expr: cpu_usage_percent > 80
for: 5m
labels:
severity: warning
annotations:
summary: "CPU使用率过高"
description: "CPU使用率超过80%已持续5分钟"
- alert: HighMemoryUsage
expr: memory_usage_percent > 85
for: 5m
labels:
severity: warning
annotations:
summary: "内存使用率过高"
description: "内存使用率超过85%已持续5分钟"
```
## 🔄 备份和恢复
### 自动备份脚本
```bash
#!/bin/bash
# backup.sh
BACKUP_DIR="/opt/chatroom/backups"
DB_PATH="/opt/chatroom/data/chatroom.db"
DATE=$(date +%Y%m%d_%H%M%S)
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份数据库
sqlite3 $DB_PATH ".backup $BACKUP_DIR/chatroom_$DATE.db"
# 备份配置文件
tar -czf $BACKUP_DIR/config_$DATE.tar.gz config/
# 备份文件存储
tar -czf $BACKUP_DIR/files_$DATE.tar.gz server/data/files/
# 清理旧备份(保留30天)
find $BACKUP_DIR -name "*.db" -mtime +30 -delete
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete
echo "备份完成: $DATE"
```
### 恢复脚本
```bash
#!/bin/bash
# restore.sh
BACKUP_FILE=$1
RESTORE_DIR="/opt/chatroom"
if [ -z "$BACKUP_FILE" ]; then
echo "用法: $0 <备份文件>"
exit 1
fi
# 停止服务
sudo supervisorctl stop chatroom-server
# 恢复数据库
cp $BACKUP_FILE $RESTORE_DIR/data/chatroom.db
# 重启服务
sudo supervisorctl start chatroom-server
echo "恢复完成"
```
## 🚀 部署检查清单
### 部署前检查
- [ ] 系统环境满足要求
- [ ] Python版本正确
- [ ] 依赖包安装完成
- [ ] 配置文件正确设置
- [ ] 数据库初始化完成
- [ ] 测试用例全部通过
- [ ] SSL证书配置正确
- [ ] 防火墙规则设置
- [ ] 域名解析配置
### 部署后检查
- [ ] 服务正常启动
- [ ] 端口监听正常
- [ ] 健康检查通过
- [ ] 日志输出正常
- [ ] 监控指标正常
- [ ] 备份任务运行
- [ ] 负载均衡工作
- [ ] SSL证书有效
- [ ] 性能测试通过
这个部署文档提供了完整的部署指南,涵盖了从开发环境到生产环境的各种部署场景,帮助开发者和运维人员成功部署Chat-Room系统。