# Docker部署

## 环境要求

| 组件 | 版本 |
|------|------|
| Docker | 24+ |
| Docker Compose | 2.0+ |

## 快速部署

### 1. 克隆项目

```bash
git clone http://8.153.107.96/fischer/geo.git
cd geo
```

### 2. 配置环境变量

```bash
cp .env.example .env
# 编辑.env配置必要参数
```

### 3. 启动服务

```bash
# 开发环境
docker-compose up -d

# 生产环境
docker-compose -f docker-compose.prod.yml up -d
```

### 4. 验证服务

```bash
# 检查容器状态
docker-compose ps

# 查看日志
docker-compose logs -f
```

## 容器说明

| 容器名 | 说明 | 端口 |
|--------|------|------|
| geo-frontend | Next.js前端 | 3000 |
| geo-backend | FastAPI后端 | 8000 |
| geo-db | PostgreSQL数据库 | 5432 |
| geo-redis | Redis缓存 | 6379 |
| geo-worker | Celery worker | - |
| geo-nginx | 反向代理 | 80/443 |

## 数据持久化

 volumes:
  - postgres_data:/var/lib/postgresql/data
  - redis_data:/data
  - ./uploads:/app/uploads

## 健康检查

```bash
# 前端健康检查
curl http://localhost:3000/health

# 后端健康检查
curl http://localhost:8000/health

# 数据库健康检查
docker-compose exec db pg_isready
```

## 停止服务

```bash
# 停止服务（保留数据）
docker-compose stop

# 停止并删除容器
docker-compose down

# 停止并删除数据卷（危险！）
docker-compose down -v
```

## 生产环境优化

### 资源限制

```yaml
services:
  backend:
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 2G
        reservations:
          cpus: '0.5'
          memory: 512M
```

### 日志管理

```yaml
services:
  backend:
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
        max-file: "3"
```

### 定期备份

```bash
# 备份数据库
docker-compose exec -T db pg_dump -U postgres geo > backup.sql

# 恢复数据库
cat backup.sql | docker-compose exec -T db psql -U postgres geo
```
