# 🚀 部署指南

## 生产环境部署

### 使用 Gunicorn（推荐）

#### 1. 安装 Gunicorn

```bash
pip3 install gunicorn
```

#### 2. 创建 Gunicorn 配置文件

创建 `gunicorn.conf.py`:

```python
# Gunicorn配置
bind = "0.0.0.0:5000"
workers = 4
worker_class = "sync"
timeout = 120
keepalive = 5

# 日志
accesslog = "logs/access.log"
errorlog = "logs/error.log"
loglevel = "info"

# 进程命名
proc_name = "ai-assistant-web-client"

# 后台运行
daemon = False
```

#### 3. 启动服务

```bash
# 创建日志目录
mkdir -p logs

# 启动Gunicorn
gunicorn -c gunicorn.conf.py app:app
```

### 使用 uWSGI

#### 1. 安装 uWSGI

```bash
pip3 install uwsgi
```

#### 2. 创建 uWSGI 配置文件

创建 `uwsgi.ini`:

```ini
[uwsgi]
module = app:app
master = true
processes = 4
socket = 0.0.0.0:5000
protocol = http
chmod-socket = 660
vacuum = true
die-on-term = true
```

#### 3. 启动服务

```bash
uwsgi --ini uwsgi.ini
```

## Docker 部署

### 1. 创建 Dockerfile

创建 `Dockerfile`:

```dockerfile
FROM python:3.12-slim

WORKDIR /app

# 复制依赖文件
COPY requirements.txt .

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt gunicorn

# 复制应用文件
COPY . .

# 暴露端口
EXPOSE 5000

# 启动命令
CMD ["gunicorn", "-b", "0.0.0.0:5000", "-w", "4", "app:app"]
```

### 2. 创建 docker-compose.yml

```yaml
version: '3.8'

services:
  web-client:
    build: .
    ports:
      - "5000:5000"
    environment:
      - DEBUG=False
      - PORT=5000
    volumes:
      - ./logs:/app/logs
    restart: unless-stopped
```

### 3. 构建和运行

```bash
# 构建镜像
docker-compose build

# 启动服务
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose down
```

## Nginx 反向代理

### 配置示例

创建 `/etc/nginx/sites-available/ai-assistant-web`:

```nginx
server {
    listen 80;
    server_name your-domain.com;

    # 静态文件
    location /static {
        alias /path/to/web_client/static;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    # 代理到Flask应用
    location / {
        proxy_pass http://127.0.0.1:5000;
        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;
        
        # WebSocket支持（如果需要）
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
```

启用配置：

```bash
sudo ln -s /etc/nginx/sites-available/ai-assistant-web /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
```

## Systemd 服务

### 创建服务文件

创建 `/etc/systemd/system/ai-assistant-web.service`:

```ini
[Unit]
Description=AI Assistant Web Client
After=network.target

[Service]
Type=notify
User=www-data
Group=www-data
WorkingDirectory=/path/to/web_client
Environment="PATH=/path/to/venv/bin"
ExecStart=/path/to/venv/bin/gunicorn -c gunicorn.conf.py app:app
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=mixed
TimeoutStopSec=5
PrivateTmp=true

[Install]
WantedBy=multi-user.target
```

### 管理服务

```bash
# 重载systemd配置
sudo systemctl daemon-reload

# 启动服务
sudo systemctl start ai-assistant-web

# 开机自启
sudo systemctl enable ai-assistant-web

# 查看状态
sudo systemctl status ai-assistant-web

# 查看日志
sudo journalctl -u ai-assistant-web -f
```

## 性能优化

### 1. 启用 Gzip 压缩

在 Nginx 配置中添加：

```nginx
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript application/javascript application/json;
```

### 2. 静态文件缓存

```nginx
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
}
```

### 3. 使用 CDN

将静态资源（CSS、JS、字体）托管到CDN。

## 安全建议

### 1. 使用 HTTPS

```bash
# 使用 Let's Encrypt
sudo certbot --nginx -d your-domain.com
```

### 2. 设置安全头

在 Nginx 配置中添加：

```nginx
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
```

### 3. 限制请求速率

```nginx
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;

location /api/ {
    limit_req zone=api burst=20 nodelay;
}
```

## 监控和日志

### 1. 日志轮转

创建 `/etc/logrotate.d/ai-assistant-web`:

```
/path/to/web_client/logs/*.log {
    daily
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data www-data
    sharedscripts
    postrotate
        systemctl reload ai-assistant-web > /dev/null 2>&1 || true
    endscript
}
```

### 2. 健康检查

使用 `/api/health` 端点进行健康检查。

## 故障排查

### 查看日志

```bash
# Gunicorn日志
tail -f logs/error.log

# Nginx日志
tail -f /var/log/nginx/error.log

# Systemd日志
journalctl -u ai-assistant-web -f
```

### 常见问题

1. **502 Bad Gateway** - 检查Flask应用是否运行
2. **静态文件404** - 检查Nginx静态文件路径配置
3. **CORS错误** - 检查Flask-CORS配置

---

**部署成功后，记得测试所有功能！** ✅

