使用 Docker 部署 CoPaw - 从源码构建到生产环境完整教程

前言

CoPaw 是一款强大的 AI 智能助手,可以帮助你完成各种自动化任务。本文详细介绍如何使用 Docker 快速部署 CoPaw,包括基础安装、配置优化、数据持久化、反向代理等完整方案,让你 10 分钟内搭建自己的 AI 助手。

一、CoPaw 简介

1.1 什么是 CoPaw?

CoPaw 是一个基于大语言模型的智能助手平台,支持:

  • 🤖 多模型接入(OpenAI、Claude、通义千问等)
  • 🔧 丰富的技能扩展(邮件、日历、文件处理等)
  • 🌐 多渠道集成(钉钉、飞书、微信等)
  • 📊 可视化操作界面
  • 🔒 本地化部署,数据安全

1.2 系统要求

配置项最低要求推荐配置
CPU2 核4 核+
内存4GB8GB+
磁盘10GB50GB+ SSD
Docker20.10+24.0+
网络可访问外网稳定宽带

二、安装 Docker 环境

2.1 Ubuntu/Debian 安装

# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc

# 更新包索引
sudo apt-get update

# 安装依赖
sudo apt-get install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# 添加 Docker GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
    sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 设置稳定版仓库
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
  https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装 Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

# 验证安装
docker --version
docker run hello-world

2.2 CentOS/RHEL 安装

# 卸载旧版本
sudo yum remove -y docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

# 安装 yum 工具
sudo yum install -y yum-utils

# 添加 Docker 仓库
sudo yum-config-manager --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

# 安装 Docker Engine
sudo yum install -y docker-ce docker-ce-cli containerd.io

# 启动 Docker
sudo systemctl start docker
sudo systemctl enable docker

# 验证安装
docker --version

2.3 配置 Docker 用户权限

# 创建 docker 用户组
sudo groupadd docker

# 将当前用户加入 docker 组
sudo usermod -aG docker $USER

# 重新加载组配置
newgrp docker

# 验证(不需要 sudo)
docker run hello-world

2.4 安装 Docker Compose

# 下载 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" \
    -o /usr/local/bin/docker-compose

# 添加执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 验证安装
docker-compose --version

# 或者使用新版 docker compose 命令
docker compose version

三、获取 CoPaw Docker 镜像

3.1 从 Docker Hub 拉取

# 拉取最新版镜像
docker pull copaw/copaw:latest

# 或者拉取指定版本
docker pull copaw/copaw:v1.0.0

# 查看镜像
docker images | grep copaw

3.2 从国内镜像源加速

# 配置 Docker 镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.docker-cn.com"
  ]
}
EOF

# 重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker

# 再次拉取镜像
docker pull copaw/copaw:latest

三、从源码构建 Docker 镜像(重要)

注意:CoPaw 目前未提供官方 Docker 镜像,需要从源码自行构建。以下是完整构建流程。

3.1 获取 CoPaw 源码

# 方式一:从 GitHub 克隆(推荐)
git clone https://github.com/agentscope-ai/CoPaw.git
cd copaw

# 方式二:下载源码包
wget https://github.com/agentscope-ai/CoPaw/archive/refs/heads/main.zip
unzip main.zip
cd copaw-main

3.2 查看项目结构

copaw/
├── Dockerfile              # Docker 构建文件
├── docker-compose.yml      # Docker Compose 配置
├── requirements.txt        # Python 依赖
├── setup.py               # 安装脚本
├── copaw/                 # 主程序目录
│   ├── __init__.py
│   ├── main.py           # 入口文件
│   ├── config/           # 配置文件
│   ├── skills/           # 技能模块
│   └── utils/            # 工具函数
├── config/               # 用户配置目录
│   └── config.yaml
└── scripts/              # 辅助脚本

3.3 创建 Dockerfile

如果项目中没有 Dockerfile,可以自行创建:

# 基础镜像
FROM python:3.11-slim

# 设置工作目录
WORKDIR /app

# 设置环境变量
ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    PIP_NO_CACHE_DIR=1 \
    PIP_DISABLE_PIP_VERSION_CHECK=1

# 安装系统依赖
RUN apt-get update && apt-get install -y \
    curl \
    git \
    build-essential \
    libpq-dev \
    && rm -rf /var/lib/apt/lists/*

# 复制依赖文件
COPY requirements.txt .

# 安装 Python 依赖
RUN pip install --no-cache-dir -r requirements.txt

# 复制项目文件
COPY . .

# 安装 CoPaw
RUN pip install -e .

# 创建数据目录
RUN mkdir -p /app/data /app/logs /app/config /app/skills

# 暴露端口
EXPOSE 8080

# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
    CMD curl -f http://localhost:8080/health || exit 1

# 启动命令
CMD ["copaw", "app"]

3.4 创建 requirements.txt

如果项目中没有 requirements.txt,创建基础依赖:

# CoPaw 核心依赖
fastapi>=0.104.0
uvicorn[standard]>=0.24.0
pydantic>=2.0.0
pyyaml>=6.0
requests>=2.31.0
aiohttp>=3.9.0

# 数据库支持
psycopg2-binary>=2.9.0
sqlalchemy>=2.0.0
alembic>=1.12.0

# Redis 支持
redis>=5.0.0

# AI 模型 SDK
openai>=1.3.0
anthropic>=0.7.0
dashscope>=1.13.0

# 工具库
python-dotenv>=1.0.0
click>=8.1.0
rich>=13.0.0
playwright>=1.40.0

# 监控和日志
prometheus-client>=0.19.0
python-json-logger>=2.0.0

3.5 构建 Docker 镜像

# 进入项目目录
cd copaw

# 构建镜像
docker build -t copaw:latest .

# 查看构建的镜像
docker images | grep copaw

# 输出示例:
# copaw               latest    abc123def456    2 minutes ago    1.2GB

3.6 测试镜像

# 运行测试容器
docker run -d \
    --name copaw-test \
    -p 8080:8080 \
    copaw:latest

# 查看日志
docker logs -f copaw-test

# 测试健康检查
curl http://localhost:8080/health

# 停止测试容器
docker stop copaw-test
docker rm copaw-test

3.7 推送到私有仓库(可选)

# 登录 Docker Hub
docker login

# 标记镜像
docker tag copaw:latest your-username/copaw:latest

# 推送镜像
docker push your-username/copaw:latest

# 或者推送到私有仓库
docker tag copaw:latest registry.example.com/copaw:latest
docker push registry.example.com/copaw:latest

四、获取 CoPaw Docker 镜像(备选方案)

如果你不想自己构建,可以使用以下备选方案:

4.1 使用社区维护的镜像

# 查看 Docker Hub 上的社区镜像
# 访问:https://hub.docker.com/search?q=copaw

# 拉取社区镜像(如果有的话)
docker pull some-user/copaw:latest

# 注意:使用社区镜像前请确认安全性和更新及时性

4.2 直接安装(不使用 Docker)

# 创建虚拟环境
python3 -m venv copaw-env
source copaw-env/bin/activate

# 克隆项目
git clone https://github.com/agentscope-ai/CoPaw.git
cd copaw

# 安装依赖
pip install -r requirements.txt

# 安装 CoPaw
pip install -e .

# 启动 CoPaw
copaw start --host 0.0.0.0 --port 8080

四、基础部署方案

4.1 快速启动(单容器)

# 创建数据目录
mkdir -p ~/copaw/data
mkdir -p ~/copaw/logs
mkdir -p ~/copaw/config

# 启动容器
docker run -d \
    --name copaw \
    --restart unless-stopped \
    -p 8080:8080 \
    -v ~/copaw/data:/app/data \
    -v ~/copaw/logs:/app/logs \
    -v ~/copaw/config:/app/config \
    -e COPAW_PORT=8080 \
    -e COPAW_ENV=production \
    copaw/copaw:latest

# 查看日志
docker logs -f copaw

# 查看容器状态
docker ps | grep copaw

4.2 使用 Docker Compose 部署(推荐)

创建 docker-compose.yml 文件:

version: '3.8'

services:
  copaw:
    image: copaw/copaw:latest
    container_name: copaw
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - ./data:/app/data
      - ./logs:/app/logs
      - ./config:/app/config
    environment:
      - COPAW_PORT=8080
      - COPAW_ENV=production
      - COPAW_LOG_LEVEL=INFO
      - TZ=Asia/Shanghai
    networks:
      - copaw-network
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

networks:
  copaw-network:
    driver: bridge

启动服务:

# 创建目录
mkdir -p copaw && cd copaw

# 创建 docker-compose.yml(内容如上)

# 启动服务
docker-compose up -d

# 查看状态
docker-compose ps

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose down

# 重启服务
docker-compose restart

五、完整生产环境部署

5.1 完整 Docker Compose 配置

生产环境推荐使用以下完整配置,包含 Redis 缓存和 PostgreSQL 数据库:

version: '3.8'

services:
  # CoPaw 主服务
  copaw:
    image: copaw/copaw:latest
    container_name: copaw
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - ./data:/app/data
      - ./logs:/app/logs
      - ./config:/app/config
      - ./skills:/app/skills
    environment:
      - COPAW_PORT=8080
      - COPAW_ENV=production
      - COPAW_LOG_LEVEL=INFO
      - COPAW_SECRET_KEY=your-secret-key-change-this
      - DATABASE_URL=postgresql://copaw:copaw123@postgres:5432/copaw
      - REDIS_URL=redis://:redis123@redis:6379/0
      - TZ=Asia/Shanghai
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
    networks:
      - copaw-network
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 30s
      timeout: 10s
      retries: 3

  # PostgreSQL 数据库
  postgres:
    image: postgres:15-alpine
    container_name: copaw-postgres
    restart: unless-stopped
    volumes:
      - ./postgres/data:/var/lib/postgresql/data
      - ./postgres/init:/docker-entrypoint-initdb.d
    environment:
      - POSTGRES_USER=copaw
      - POSTGRES_PASSWORD=copaw123
      - POSTGRES_DB=copaw
      - TZ=Asia/Shanghai
    networks:
      - copaw-network
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U copaw"]
      interval: 10s
      timeout: 5s
      retries: 5

  # Redis 缓存
  redis:
    image: redis:7-alpine
    container_name: copaw-redis
    restart: unless-stopped
    command: redis-server --requirepass redis123
    volumes:
      - ./redis/data:/data
    networks:
      - copaw-network
    healthcheck:
      test: ["CMD", "redis-cli", "--pass", "redis123", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5

networks:
  copaw-network:
    driver: bridge

5.2 启动完整服务

# 创建目录结构
mkdir -p copaw/{data,logs,config,skills}
mkdir -p copaw/postgres/{data,init}
mkdir -p copaw/redis/data

# 进入目录
cd copaw

# 创建 docker-compose.yml(内容如上)

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

# 查看服务状态
docker-compose ps

# 查看 CoPaw 日志
docker-compose logs -f copaw

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

六、配置 CoPaw

6.1 访问 Web 界面

浏览器访问:http://your-server-ip:8080

首次访问需要设置管理员账号。

6.2 配置文件说明

CoPaw 配置文件位于 ./config/config.yaml

# CoPaw 配置文件
# ./config/config.yaml

# 服务配置
server:
  port: 8080
  host: 0.0.0.0
  debug: false

# 数据库配置
database:
  type: postgresql
  host: postgres
  port: 5432
  name: copaw
  user: copaw
  password: copaw123

# Redis 配置
redis:
  host: redis
  port: 6379
  password: redis123
  db: 0

# AI 模型配置
llm:
  provider: openai  # 或 claude, qwen, deepseek 等
  api_key: your-api-key
  model: gpt-4
  base_url: https://api.openai.com/v1
  temperature: 0.7
  max_tokens: 4096

# 日志配置
logging:
  level: INFO
  format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
  file: /app/logs/copaw.log

# 技能配置
skills:
  enabled:
    - browser_use
    - execute_shell_command
    - read_file
    - write_file
  browser:
    headless: true
    timeout: 60

6.3 配置 AI 模型

OpenAI 配置

llm:
  provider: openai
  api_key: sk-your-openai-api-key
  model: gpt-4
  base_url: https://api.openai.com/v1

Claude 配置

llm:
  provider: claude
  api_key: your-anthropic-api-key
  model: claude-3-opus-20240229
  base_url: https://api.anthropic.com

通义千问配置

llm:
  provider: qwen
  api_key: your-dashscope-api-key
  model: qwen-max
  base_url: https://dashscope.aliyuncs.com/api/v1

DeepSeek 配置

llm:
  provider: deepseek
  api_key: your-deepseek-api-key
  model: deepseek-chat
  base_url: https://api.deepseek.com

七、Nginx 反向代理

7.1 安装 Nginx

# Ubuntu/Debian
sudo apt install nginx -y

# CentOS/RHEL
sudo yum install nginx -y

# 启动 Nginx
sudo systemctl start nginx
sudo systemctl enable nginx

7.2 配置反向代理

创建 Nginx 配置文件 /etc/nginx/conf.d/copaw.conf

server {
    listen 80;
    server_name copaw.example.com;
    
    # 日志配置
    access_log /var/log/nginx/copaw_access.log;
    error_log /var/log/nginx/copaw_error.log;
    
    # 客户端大小限制
    client_max_body_size 100M;
    
    location / {
        proxy_pass http://localhost:8080;
        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;
        
        # WebSocket 支持
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        
        # 超时设置
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }
}

7.3 配置 HTTPS(可选)

# 使用 Certbot 申请 Let's Encrypt 证书
sudo apt install certbot python3-certbot-nginx -y

# 申请证书
sudo certbot --nginx -d copaw.example.com

# 自动续期证书
sudo certbot renew --dry-run

7.4 验证配置

# 测试 Nginx 配置
sudo nginx -t

# 重载 Nginx
sudo systemctl reload nginx

# 查看状态
sudo systemctl status nginx

八、数据备份与恢复

8.1 备份数据

# 创建备份目录
mkdir -p ~/copaw-backup

# 停止服务
cd ~/copaw
docker-compose down

# 备份数据目录
tar -czvf ~/copaw-backup/data-$(date +%Y%m%d).tar.gz ./data

# 备份数据库
docker exec copaw-postgres pg_dump -U copaw copaw > ~/copaw-backup/db-$(date +%Y%m%d).sql

# 备份配置文件
cp -r ./config ~/copaw-backup/config-$(date +%Y%m%d)

# 启动服务
docker-compose up -d

# 查看备份
ls -lh ~/copaw-backup/

8.2 恢复数据

# 停止服务
cd ~/copaw
docker-compose down

# 恢复数据目录
tar -xzvf ~/copaw-backup/data-20240101.tar.gz -C ./

# 恢复数据库
docker exec -i copaw-postgres psql -U copaw copaw < ~/copaw-backup/db-20240101.sql

# 恢复配置
cp -r ~/copaw-backup/config-20240101/* ./config/

# 启动服务
docker-compose up -d

8.3 定时备份脚本

#!/bin/bash
# backup-copaw.sh

BACKUP_DIR=~/copaw-backup
DATE=$(date +%Y%m%d_%H%M%S)
COPAW_DIR=~/copaw

mkdir -p $BACKUP_DIR

# 备份数据
tar -czvf $BACKUP_DIR/data-$DATE.tar.gz -C $COPAW_DIR data

# 备份数据库
docker exec copaw-postgres pg_dump -U copaw copaw > $BACKUP_DIR/db-$DATE.sql

# 删除 7 天前的备份
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
find $BACKUP_DIR -name "*.sql" -mtime +7 -delete

echo "Backup completed: $DATE"

添加到 crontab:

# 每天凌晨 2 点备份
crontab -e

# 添加以下内容
0 2 * * * /bin/bash /path/to/backup-copaw.sh >> /var/log/copaw-backup.log 2>&1

九、监控与维护

9.1 查看容器状态

# 查看所有容器
docker ps -a

# 查看 CoPaw 容器
docker ps | grep copaw

# 查看资源使用
docker stats copaw

9.2 查看日志

# 实时查看日志
docker-compose logs -f copaw

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

# 导出日志
docker-compose logs copaw > copaw.log

9.3 更新 CoPaw

# 拉取最新镜像
docker pull copaw/copaw:latest

# 停止服务
docker-compose down

# 重启服务(使用新镜像)
docker-compose up -d

# 验证版本
docker exec copaw copaw --version

9.4 清理无用资源

# 删除停止的容器
docker container prune

# 删除悬空镜像
docker image prune

# 删除所有未使用镜像
docker image prune -a

# 查看磁盘使用
docker system df

十、常见问题排查

10.1 容器无法启动

# 查看容器日志
docker logs copaw

# 检查端口占用
netstat -tlnp | grep 8080

# 检查配置文件
cat ./config/config.yaml

# 重新创建容器
docker-compose down
docker-compose up -d

10.2 数据库连接失败

# 检查数据库容器
docker-compose ps postgres

# 测试数据库连接
docker exec -it copaw-postgres psql -U copaw -d copaw

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

10.3 内存不足

# 查看内存使用
free -h
docker stats

# 限制容器内存(docker-compose.yml)
# 添加以下配置:
# deploy:
#   resources:
#     limits:
#       memory: 2G
#     reservations:
#       memory: 1G

10.4 网络问题

# 检查网络
docker network ls
docker network inspect copaw-network

# 测试容器间通信
docker exec copaw ping postgres
docker exec copaw ping redis

# 重启网络
docker-compose down
docker network prune
docker-compose up -d

总结

本文详细介绍了使用 Docker 部署 CoPaw 的完整流程:

  1. Docker 安装:Ubuntu/CentOS 安装教程
  2. 镜像获取:Docker Hub 拉取和国内加速
  3. 基础部署:单容器快速启动
  4. 生产部署:包含 PostgreSQL + Redis 的完整方案
  5. 配置说明:AI 模型、技能、日志等配置
  6. 反向代理:Nginx 配置和 HTTPS 加密
  7. 数据备份:定时备份和恢复方案
  8. 监控维护:日志查看、更新升级、资源清理
  9. 故障排查:常见问题解决方案

通过 Docker 部署 CoPaw,你可以:

  • ✅ 快速搭建,10 分钟完成部署
  • ✅ 环境隔离,不影响系统其他服务
  • ✅ 易于备份,数据持久化存储
  • ✅ 方便升级,一键更新镜像
  • ✅ 资源可控,限制 CPU/内存使用

现在就开始部署你的 CoPaw AI 助手吧!如有问题,欢迎留言讨论!🚀

发表回复

后才能评论