# Stock Monitor Docker部署指南

## 快速开始

### 1. 环境要求
- Docker 20.10+
- Docker Compose 1.29+
- 4GB+ 可用内存
- 10GB+ 可用磁盘空间

### 2. 配置环境变量
```bash
# 复制环境变量文件到项目根目录
cp ../.env.example ../.env
# 编辑.env文件，设置必要的配置参数
```

### 3. 快速部署
```bash
# 进入docker目录
cd docker

# 使用部署脚本
./deploy.sh

# 或者手动部署
docker-compose up -d
```

### 4. 访问应用
- 应用地址: http://localhost:8000
- API文档: http://localhost:8000/docs

## 部署模式

### 开发模式
```bash
cd docker
docker-compose up -d
```
包含服务：
- stock-monitor (主应用)
- redis (可选缓存)
- postgres (可选数据库)

### 生产模式
```bash
cd docker
docker-compose -f docker-compose.prod.yml up -d
```
包含服务：
- stock-monitor (主应用)
- redis (缓存)
- postgres (数据库)
- nginx (反向代理)

## 配置说明

### 环境变量
| 变量名 | 说明 | 默认值 |
|--------|------|--------|
| TUSHARE_TOKEN | Tushare API令牌 | 必填 |
| DB_HOST | 数据库主机 | postgres |
| DB_PORT | 数据库端口 | 5432 |
| DB_NAME | 数据库名称 | stock_monitor |
| DB_USER | 数据库用户 | stock_user |
| DB_PASSWORD | 数据库密码 | stock_password |
| REDIS_HOST | Redis主机 | redis |
| REDIS_PORT | Redis端口 | 6379 |

### 端口映射
| 服务 | 容器端口 | 主机端口 |
|------|----------|----------|
| stock-monitor | 8000 | 8000 |
| redis | 6379 | 6379 |
| postgres | 5432 | 5432 |
| nginx | 80/443 | 80/443 |

## 数据持久化

### 卷映射
- `../logs:/app/logs` - 应用日志
- `../data:/app/data` - 数据文件
- `../config.json:/app/config.json` - 配置文件
- `postgres_data:/var/lib/postgresql/data` - 数据库数据
- `redis_data:/data` - Redis数据

### 备份策略
```bash
# 备份数据库
docker exec stock-postgres pg_dump -U stock_user stock_monitor > backup.sql

# 备份Redis
docker exec stock-redis redis-cli save
docker cp stock-redis:/data/dump.rdb ./redis_backup.rdb
```

## 监控和维护

### 查看日志
```bash
# 查看所有服务日志
docker-compose logs -f

# 查看特定服务日志
docker-compose logs -f stock-monitor
```

### 性能监控
```bash
# 查看容器资源使用
docker stats

# 查看容器状态
docker-compose ps
```

### 更新应用
```bash
# 拉取最新镜像
docker-compose pull

# 重新部署
docker-compose up -d

# 清理旧镜像
docker image prune -f
```

## 故障排查

### 常见问题

1. **容器启动失败**
```bash
# 查看详细日志
docker-compose logs [service-name]

# 检查配置文件
ls -la ../config.json ../.env
```

2. **数据库连接失败**
```bash
# 检查数据库状态
docker-compose exec postgres pg_isready -U stock_user

# 检查网络连接
docker-compose exec stock-monitor ping postgres
```

3. **端口冲突**
```bash
# 检查端口占用
netstat -tulpn | grep :8000

# 修改端口映射
# 编辑docker-compose.yml文件
```

### 健康检查
```bash
# 检查服务健康状态
curl http://localhost:8000/health

# 检查数据库连接
docker-compose exec stock-monitor python -c "import psycopg2; psycopg2.connect(host='postgres', user='stock_user', password='stock_password', database='stock_monitor')"
```

## 安全建议

1. **修改默认密码**
   - 修改数据库密码
   - 修改Redis密码
   - 修改应用密钥

2. **配置SSL证书**
   - 将证书文件放置在`./ssl/`目录
   - 配置nginx.conf文件

3. **限制访问**
   - 配置防火墙规则
   - 使用VPN访问
   - 配置访问白名单

## 卸载

```bash
# 停止并删除所有容器
docker-compose down

# 删除数据卷（谨慎操作）
docker-compose down -v

# 删除镜像
docker image rm docker_stock-monitor
```