# Docker 部署

Docker 是推荐的部署方式，可以快速启动服务并确保环境一致性。

## 前提条件

- Docker 20.10+
- Docker Compose 2.0+（可选）

## 构建镜像

### Web 前端

```bash
docker build -t ai-video-assistant-web ./web
```

### API 服务

```bash
docker build -t ai-video-assistant-api ./api
```

### Engine 服务

```bash
docker build -t ai-video-assistant-engine ./engine
```

## 运行容器

### 单独运行

```bash
# Web 前端
docker run -d \
  --name ai-assistant-web \
  -p 3000:80 \
  ai-video-assistant-web

# API 服务
docker run -d \
  --name ai-assistant-api \
  -p 8080:8080 \
  ai-video-assistant-api

# Engine 服务
docker run -d \
  --name ai-assistant-engine \
  -p 8000:8000 \
  ai-video-assistant-engine
```

## Docker Compose

推荐使用 Docker Compose 管理多个服务：

```yaml
version: '3.8'

services:
  web:
    build: ./web
    ports:
      - "3000:80"
    environment:
      - VITE_API_URL=http://api:8080
    depends_on:
      - api

  api:
    build: ./api
    ports:
      - "8080:8080"
    environment:
      - DATABASE_URL=postgresql://postgres:password@db:5432/ai_assistant
    depends_on:
      - db

  engine:
    build: ./engine
    ports:
      - "8000:8000"
    environment:
      - BACKEND_URL=http://api:8080

  db:
    image: postgres:15
    environment:
      - POSTGRES_DB=ai_assistant
      - POSTGRES_PASSWORD=password
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:
```

### 启动服务

```bash
# 启动所有服务
docker-compose up -d

# 查看日志
docker-compose logs -f

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

## 镜像优化

### 多阶段构建

Web 前端 Dockerfile 示例：

```dockerfile
# 构建阶段
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# 运行阶段
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
```

## 健康检查

```yaml
services:
  api:
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 30s
      timeout: 10s
      retries: 3
```

## 常见问题

### 容器启动失败

```bash
# 查看容器日志
docker logs ai-assistant-web

# 进入容器调试
docker exec -it ai-assistant-web sh
```

### 端口冲突

修改 `docker-compose.yml` 中的端口映射，例如 `3001:80`。
