# 🐳 Docker 部署指南

本文档详细说明如何使用 Docker 部署 AI 股票分析系统。

## 📋 前置要求

- Docker 20.10+ 
- Docker Compose 2.0+（可选，但推荐）
- 至少 2GB 可用磁盘空间
- DeepSeek API Key

### 安装 Docker

#### Windows
1. 下载并安装 [Docker Desktop for Windows](https://www.docker.com/products/docker-desktop/)
2. 启动 Docker Desktop
3. 确认安装成功：
```bash
docker --version
docker-compose --version
```

#### macOS
1. 下载并安装 [Docker Desktop for Mac](https://www.docker.com/products/docker-desktop/)
2. 启动 Docker Desktop
3. 确认安装成功：
```bash
docker --version
docker-compose --version
```

#### Linux
```bash
# Ubuntu/Debian
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo systemctl start docker
sudo systemctl enable docker

# 安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# 验证安装
docker --version
docker-compose --version
```

## 🚀 快速开始

### 方法一：使用 Docker Compose（推荐）

1. **克隆或下载项目**
```bash
cd /path/to/agentsstock1
```

2. **配置环境变量**
```bash
# Windows (PowerShell)
Copy-Item .env.example .env

# Linux/macOS
cp .env.example .env
```

3. **编辑 `.env` 文件，填入您的配置**
```env
DEEPSEEK_API_KEY=sk-your-actual-api-key-here
EMAIL_ENABLED=false
# ... 其他配置
```

4. **启动服务**
```bash
docker-compose up -d
```

5. **访问应用**
打开浏览器访问：http://localhost:8503

6. **查看日志**
```bash
docker-compose logs -f
```

7. **停止服务**
```bash
docker-compose down
```

### 方法二：使用 Docker 命令

1. **构建镜像**
```bash
docker build -t agentsstock1:latest .
```

2. **创建数据目录**
```bash
mkdir -p data
```

3. **运行容器**
```bash
docker run -d \
  --name agentsstock1 \
  -p 8501:8501 \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/.env:/app/.env \
  -v $(pwd)/stock_analysis.db:/app/stock_analysis.db \
  -v $(pwd)/stock_monitor.db:/app/stock_monitor.db \
  -e TZ=Asia/Shanghai \
  --restart unless-stopped \
  agentsstock1:latest
```

**Windows PowerShell 用户请使用：**
```powershell
docker run -d `
  --name agentsstock1 `
  -p 8503:8501 `
  -v ${PWD}/data:/app/data `
  -v ${PWD}/.env:/app/.env `
  -v ${PWD}/stock_analysis.db:/app/stock_analysis.db `
  -v ${PWD}/stock_monitor.db:/app/stock_monitor.db `
  -e TZ=Asia/Shanghai `
  --restart unless-stopped `
  agentsstock1:latest
```

4. **查看日志**
```bash
docker logs -f agentsstock1
```

5. **停止容器**
```bash
docker stop agentsstock1
docker rm agentsstock1
```

## 📁 数据持久化

Docker 部署会自动挂载以下目录/文件到宿主机：

- `./data` - 临时数据目录
- `./stock_analysis.db` - 分析历史数据库
- `./stock_monitor.db` - 监测数据库
- `./.env` - 环境变量配置

**重要**：即使删除容器，这些数据也会保留在宿主机上。

## 🔧 常用命令

### Docker Compose

```bash
# 启动服务（后台运行）
docker-compose up -d

# 启动服务（前台运行，可看日志）
docker-compose up

# 停止服务
docker-compose down

# 重启服务
docker-compose restart

# 查看日志
docker-compose logs -f

# 查看服务状态
docker-compose ps

# 重新构建并启动
docker-compose up -d --build

# 完全清理（包括volumes）
docker-compose down -v
```

### Docker 命令

```bash
# 查看运行中的容器
docker ps

# 查看所有容器
docker ps -a

# 查看日志
docker logs agentsstock1
docker logs -f agentsstock1  # 实时日志

# 进入容器
docker exec -it agentsstock1 bash

# 重启容器
docker restart agentsstock1

# 停止容器
docker stop agentsstock1

# 启动已停止的容器
docker start agentsstock1

# 删除容器
docker rm agentsstock1

# 删除镜像
docker rmi agentsstock1:latest

# 查看镜像
docker images

# 查看容器资源使用
docker stats agentsstock1
```

## 🐛 故障排除

### 1. 容器启动失败

**检查日志**：
```bash
docker-compose logs
# 或
docker logs agentsstock1
```

**常见原因**：
- `.env` 文件未配置或配置错误
- 端口 8501 已被占用
- Docker 资源不足

### 2. 端口被占用

修改 `docker-compose.yml` 中的端口映射：
```yaml
ports:
  - "8502:8501"  # 改为其他端口
```

或在 docker run 命令中修改：
```bash
docker run ... -p 8502:8501 ...
```

### 3. 无法访问网页

**检查容器状态**：
```bash
docker ps
```

**检查健康状态**：
```bash
docker inspect agentsstock1 | grep Health -A 10
```

**检查网络**：
```bash
# 确认端口映射
docker port agentsstock1

# 尝试从容器内访问
docker exec agentsstock1 curl http://localhost:8501
```

### 4. 数据库权限问题

Linux/macOS 用户可能遇到权限问题：
```bash
# 修改数据库文件权限
chmod 666 *.db
chmod 777 data/
```

### 5. Node.js 相关错误

如果遇到 pywencai 相关错误，进入容器检查：
```bash
docker exec -it agentsstock1 bash
node --version
npm --version
```

### 6. 内存不足

增加 Docker 可用内存（Docker Desktop → Settings → Resources）：
- 推荐至少 4GB RAM
- 推荐至少 2GB Swap

或在 docker-compose.yml 中限制：
```yaml
services:
  agentsstock:
    # ... 其他配置
    deploy:
      resources:
        limits:
          memory: 2G
        reservations:
          memory: 1G
```

## 🔒 安全建议

1. **保护 .env 文件**
   - 不要提交到 Git
   - 设置适当的文件权限：`chmod 600 .env`

2. **使用 secrets（生产环境）**
```yaml
services:
  agentsstock:
    secrets:
      - deepseek_api_key
    environment:
      - DEEPSEEK_API_KEY_FILE=/run/secrets/deepseek_api_key

secrets:
  deepseek_api_key:
    file: ./secrets/deepseek_api_key.txt
```

3. **定期更新镜像**
```bash
docker-compose pull
docker-compose up -d
```

## 🌐 反向代理（可选）

如需通过域名访问，可配置 Nginx：

```nginx
server {
    listen 80;
    server_name yourdomain.com;

    location / {
        proxy_pass http://localhost:8501;
        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;
    }
}
```

## 📊 性能优化

1. **使用构建缓存**
```bash
docker-compose build --no-cache  # 清除缓存重建
```

2. **多阶段构建（高级）**
可以修改 Dockerfile 使用多阶段构建减小镜像体积。

3. **资源限制**
```yaml
services:
  agentsstock:
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 2G
```

## 📝 生产环境部署建议

1. 使用环境变量管理敏感信息
2. 配置日志轮转
3. 设置健康检查和自动重启
4. 使用 Docker volumes 而非 bind mounts
5. 配置备份策略（数据库文件）
6. 使用 HTTPS（配合 Nginx/Caddy）
7. 配置防火墙规则

## 🆘 获取帮助

如遇到问题：
1. 查看日志：`docker-compose logs -f`
2. 检查容器状态：`docker ps -a`
3. 查看 GitHub Issues
4. 联系：ws3101001@126.com

---

**享受 Docker 带来的便捷部署体验！** 🚀

