# Docker Compose 部署

> 一键部署全套服务（前端+后端+数据库+AI），本地与云端通用。

## 🐳 什么是 Docker Compose？

Docker Compose 是一个工具，用于定义和运行多容器 Docker 应用。通过一个 `docker-compose.yml` 文件，你可以一键启动所有相关服务。

## 📋 前提条件

- Docker 20.10+
- Docker Compose 2.0+
- 至少 4GB 内存

## 🚀 快速开始

### 第一步：下载模板

```bash
# 克隆模板仓库
git clone https://github.com/websopy/deploy-templates.git websopy-deploy
cd websopy-deploy

# 选择版本
git checkout v2.3.0
```

### 第二步：配置环境

```bash
# 复制环境变量文件
cp .env.example .env

# 编辑配置
nano .env
```

关键配置：

```env
# 版本
WEBSOPY_VERSION=2.3.0

# 数据库
POSTGRES_DB=websopy
POSTGRES_USER=websopy
POSTGRES_PASSWORD=your-strong-password

# Redis
REDIS_PASSWORD=your-redis-password

# JWT 密钥（生成随机字符串）
JWT_SECRET=$(openssl rand -hex 32)

# 域名（可选）
DOMAIN=your-domain.com
```

### 第三步：启动服务

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

# 查看服务状态
docker-compose ps

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

### 第四步：验证部署

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

# 预期输出
{"status":"ok","version":"2.3.0","services":{"db":"up","redis":"up","ai":"up"}}
```

## 🏗️ 服务架构

```
                    ┌─────────────┐
                    │   Nginx     │
                    │  (反向代理)   │
                    └──────┬──────┘
                           │
           ┌───────────────┼───────────────┐
           │               │               │
      ┌────▼────┐    ┌─────▼────┐    ┌────▼────┐
      │  Web    │    │   API    │    │  Worker │
      │ (前端)   │    │ (后端)    │    │ (异步)   │
      └─────────┘    └─────┬────┘    └─────────┘
                           │
              ┌────────────┼────────────┐
              │            │            │
         ┌────▼───┐  ┌─────▼────┐  ┌───▼────┐
         │Postgres│  │  Redis   │  │  AI    │
         │(数据库) │  │ (缓存)    │  │(AI服务) │
         └────────┘  └──────────┘  └────────┘
```

## 📁 目录结构

```
websopy-deploy/
├── docker-compose.yml     # 服务编排文件
├── .env                   # 环境变量
├── nginx/
│   └── conf.d/           # Nginx 配置
├── postgres/
│   └── init.sql          # 数据库初始化脚本
└── backups/              # 备份目录
```

## 🔧 常用命令

### 启动与停止

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

# 停止所有服务
docker-compose down

# 重启所有服务
docker-compose restart

# 重启指定服务
docker-compose restart api
```

### 日志查看

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

# 查看特定服务日志
docker-compose logs -f api
docker-compose logs -f web

# 查看最近 100 行
docker-compose logs --tail=100
```

### 进入容器

```bash
# 进入 API 容器
docker-compose exec api sh

# 进入数据库
docker-compose exec postgres psql -U websopy
```

## 💾 数据持久化

数据存储在 Docker volumes 中：

```bash
# 查看 volumes
docker volume ls | grep websopy

# 备份数据
docker-compose exec postgres pg_dump -U websopy > backup.sql

# 恢复数据
docker exec -i $(docker-compose ps -q postgres) psql -U websopy < backup.sql
```

## 🔄 常用配置

### 调整资源

```yaml
# docker-compose.yml
services:
  api:
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 4G

  worker:
    deploy:
      resources:
        limits:
          cpus: '4'
          memory: 8G
```

### 自定义端口

```yaml
services:
  nginx:
    ports:
      - "80:80"
      - "443:443"
  # 改成本地其他端口
  # - "8080:80"
```

### 启用 HTTPS

```bash
# 复制 SSL 证书
mkdir -p nginx/ssl
cp your-cert.crt nginx/ssl/cert.pem
cp your-cert.key nginx/ssl/key.pem

# 编辑 nginx 配置
nano nginx/conf.d/default.conf
```

## 🐛 故障排查

### 服务无法启动

```bash
# 1. 检查 Docker 是否运行
docker info

# 2. 查看详细日志
docker-compose up

# 3. 检查端口占用
lsof -i :80
```

### 数据库连接失败

```bash
# 1. 检查 postgres 是否运行
docker-compose ps postgres

# 2. 查看数据库日志
docker-compose logs postgres

# 3. 测试连接
docker-compose exec postgres psql -U websopy -c "SELECT 1"
```

### 前端无法访问

```bash
# 1. 检查 nginx 日志
docker-compose logs nginx

# 2. 检查 web 容器
docker-compose logs web

# 3. 重建前端
docker-compose up -d --force-recreate web
```

## 🧹 清理

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

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

# 完全清理
docker system prune -a
```

---

**上一步：** [AI 工作流配置](./workflow.md)  
**下一步：** [版本升级与回滚](./upgrade.md)
