CoPaw Docker 镜像完整构建教程 - 从零到生产环境部署

前言

CoPaw 是一款强大的 AI 智能助手,支持多种大模型接入和丰富的技能扩展。本文详细介绍如何基于 CoPaw 官方安装脚本构建 Docker 镜像,并提供完整的生产环境部署方案。

官方安装脚本https://copaw.agentscope.io/install.sh

一、项目文件结构

copaw-docker/
├── Dockerfile           # Docker 镜像构建文件
├── docker-compose.yml   # Docker Compose 配置
├── .env.example         # 环境变量示例
├── .env                 # 实际环境变量(需自行创建)
├── build.sh             # 构建和测试脚本
├── README_DOCKER.md     # 详细文档
├── data/                # 数据目录
├── logs/                # 日志目录
├── config/              # 配置目录
└── skills/              # 技能目录

二、Dockerfile 详解

2.1 基础镜像选择

# 使用 Python 3.12 slim 版本(与官方安装脚本一致)
FROM python:3.12-slim

2.2 环境变量配置

ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    PIP_NO_CACHE_DIR=1 \
    COPAW_HOME="/root/.copaw" \
    COPAW_VENV="/root/.copaw/venv" \
    COPAW_BIN="/root/.copaw/bin" \
    PATH="/root/.copaw/bin:$PATH"

2.3 系统依赖安装

# 安装基础工具
RUN apt-get update && apt-get install -y --no-install-recommends \
    curl \
    git \
    build-essential \
    libpq-dev \
    # 图像处理支持
    ffmpeg \
    libsm6 \
    libxext6 \
    # Playwright 浏览器依赖
    libnss3 \
    libnspr4 \
    libatk1.0-0 \
    libatk-bridge2.0-0 \
    libcups2 \
    libdrm2 \
    libdbus-1-3 \
    libxkbcommon0 \
    libxcomposite1 \
    libxdamage1 \
    libxfixes3 \
    libxrandr2 \
    libgbm1 \
    libasound2 \
    ca-certificates \
    && rm -rf /var/lib/apt/lists/*

2.4 安装 uv 包管理器

# uv 是 CoPaw 使用的 Python 包管理器
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
ENV PATH="/root/.local/bin:$PATH"

2.5 安装 CoPaw

# 方式一:从源码安装(推荐,获取最新版本)
RUN curl -fsSL https://copaw.agentscope.io/install.sh | bash -s -- --from-source

# 方式二:从 PyPI 安装(稳定版本)
# RUN uv pip install copaw --python /root/.copaw/venv/bin/python --prerelease=allow

2.6 安装 Playwright 浏览器

# 安装 Chromium 浏览器(用于 browser_use 技能)
RUN /root/.copaw/venv/bin/python -m playwright install chromium

2.7 健康检查和端口

# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
    CMD /healthcheck.sh || exit 1

# 暴露端口
EXPOSE 8080

# 数据持久化
VOLUME ["/root/.copaw/data", "/root/.copaw/logs", "/root/.copaw/config", "/root/.copaw/skills"]

# 启动命令
CMD ["copaw", "app", "--host", "0.0.0.0", "--port", "8080"]

三、Docker Compose 配置

3.1 完整配置

version: '3.8'

services:
  copaw:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: copaw
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - ./data:/root/.copaw/data
      - ./logs:/root/.copaw/logs
      - ./config:/root/.copaw/config
      - ./skills:/root/.copaw/skills
    environment:
      - COPAW_PORT=8080
      - COPAW_HOST=0.0.0.0
      - COPAW_ENV=production
      - TZ=Asia/Shanghai
    env_file:
      - .env
    networks:
      - copaw-network
    healthcheck:
      test: ["CMD", "test", "-f", "/root/.copaw/venv/bin/copaw"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s
    deploy:
      resources:
        limits:
          cpus: '4.0'
          memory: 4G

  # Redis 缓存(可选)
  redis:
    image: redis:7-alpine
    container_name: copaw-redis
    restart: unless-stopped
    command: redis-server --requirepass copaw123
    volumes:
      - ./redis/data:/data
    networks:
      - copaw-network

  # PostgreSQL 数据库(可选)
  postgres:
    image: postgres:15-alpine
    container_name: copaw-postgres
    restart: unless-stopped
    volumes:
      - ./postgres/data:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=copaw
      - POSTGRES_PASSWORD=copaw123
      - POSTGRES_DB=copaw
    networks:
      - copaw-network

networks:
  copaw-network:
    driver: bridge

四、环境配置

4.1 创建 .env 文件

# 复制示例文件
cp .env.example .env

# 编辑配置文件
vi .env

4.2 配置 AI 模型 API 密钥

# 至少配置一个 AI 模型的 API Key

# OpenAI(GPT-4、GPT-3.5)
OPENAI_API_KEY=sk-your-openai-api-key-here

# Anthropic(Claude)
ANTHROPIC_API_KEY=sk-ant-your-anthropic-key-here

# 阿里云(通义千问)
DASHSCOPE_API_KEY=sk-your-dashscope-key-here

# DeepSeek
DEEPSEEK_API_KEY=sk-your-deepseek-key-here

五、快速开始

5.1 一键部署

# 创建项目目录
mkdir -p ~/copaw-docker && cd ~/copaw-docker

# 复制配置文件(假设文件在 /root/.copaw)
cp /root/.copaw/Dockerfile .
cp /root/.copaw/docker-compose.yml .
cp /root/.copaw/.env.example .env
cp /root/.copaw/build.sh .

# 配置 API 密钥
vi .env

# 一键构建和启动
chmod +x build.sh
./build.sh all

5.2 分步部署

# 1. 准备环境
./build.sh prepare

# 2. 构建镜像
./build.sh build

# 3. 启动服务
./build.sh start

# 4. 初始化 CoPaw
./build.sh init

# 5. 查看日志
./build.sh logs

5.3 手动部署

# 构建镜像
docker-compose build

# 启动服务
docker-compose up -d

# 查看状态
docker-compose ps

# 初始化
docker exec -it copaw copaw init

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

六、使用指南

6.1 访问 CoPaw

# Web 控制台(如果支持)
http://localhost:8080

# 或者使用 CLI
docker exec -it copaw copaw app

6.2 常用命令

# 进入容器
docker exec -it copaw bash

# 查看 CoPaw 版本
docker exec copaw copaw --version

# 查看帮助
docker exec copaw copaw --help

# 重新初始化
docker exec -it copaw copaw init --force

6.3 技能配置

config/config.yaml 中配置启用的技能:

skills:
  enabled:
    - browser_use
    - execute_shell_command
    - read_file
    - write_file
    - edit_file
    - memory_search

七、数据持久化

7.1 目录结构

copaw-docker/
├── data/           # 数据文件(持久化)
│   ├── memory/     # 记忆数据
│   └── cache/      # 缓存数据
├── logs/           # 日志文件(持久化)
│   └── copaw.log
├── config/         # 配置文件(持久化)
│   └── config.yaml
├── skills/         # 自定义技能(持久化)
├── redis/          # Redis 数据(可选)
│   └── data/
└── postgres/       # PostgreSQL 数据(可选)
    └── data/

7.2 备份数据

# 创建备份脚本
cat > backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR=~/copaw-backup/$(date +%Y%m%d)
mkdir -p $BACKUP_DIR

# 备份 CoPaw 数据
cp -r data $BACKUP_DIR/
cp -r config $BACKUP_DIR/
cp -r logs $BACKUP_DIR/

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

# 备份 Redis
docker exec copaw-redis redis-cli --pass copaw123 SAVE
cp redis/data/dump.rdb $BACKUP_DIR/ 2>/dev/null || true

echo "Backup completed: $BACKUP_DIR"
EOF

chmod +x backup.sh

# 执行备份
./backup.sh

7.3 定时备份

# 添加到 crontab(每天凌晨 2 点备份)
crontab -e

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

八、生产环境部署

8.1 Nginx 反向代理

server {
    listen 80;
    server_name copaw.example.com;
    
    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";
    }
}

8.2 HTTPS 配置

# 使用 Certbot 申请 Let's Encrypt 证书
apt install certbot python3-certbot-nginx -y
certbot --nginx -d copaw.example.com

8.3 监控配置

# Prometheus 配置
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'copaw'
    static_configs:
      - targets: ['copaw:8080']
    metrics_path: /metrics

九、故障排查

9.1 容器无法启动

# 查看详细日志
docker-compose logs copaw

# 检查配置
docker-compose config

# 测试构建
docker-compose build --no-cache

9.2 API 密钥问题

# 检查环境变量
docker exec copaw env | grep API_KEY

# 测试 API 连接
docker exec copaw curl -I https://api.openai.com/v1

9.3 内存不足

# 查看资源使用
docker stats copaw

# 调整限制(编辑 docker-compose.yml)
deploy:
  resources:
    limits:
      memory: 8G  # 增加到 8GB

9.4 Playwright 问题

# 重新安装浏览器
docker exec -it copaw python -m playwright install chromium

# 安装依赖
docker exec -it copaw playwright install-deps chromium

十、性能优化

10.1 镜像优化

# 使用多阶段构建减少镜像大小
FROM python:3.12-slim as builder
# ... 构建步骤 ...

FROM python:3.12-slim
COPY --from=builder /root/.copaw /root/.copaw
# ... 运行配置 ...

10.2 启动优化

# 使用 docker-compose 并行启动
docker-compose up -d --build --force-recreate

# 设置启动依赖
depends_on:
  redis:
    condition: service_healthy
  postgres:
    condition: service_healthy

总结

本文介绍了基于 CoPaw 官方安装脚本构建 Docker 镜像的完整流程:

  1. Dockerfile 编写:基于 Python 3.12,使用 uv 包管理器
  2. Docker Compose 配置:包含 Redis 和 PostgreSQL 的完整方案
  3. 环境配置:AI 模型 API 密钥、服务参数
  4. 快速部署:一键构建脚本和分步指南
  5. 数据持久化:Volume 挂载和定时备份
  6. 生产部署:Nginx 反向代理、HTTPS、监控
  7. 故障排查:常见问题解决方案
  8. 性能优化:镜像优化和启动优化

通过 Docker 部署 CoPaw,你可以:

  • ✅ 环境隔离,不影响宿主机
  • ✅ 快速部署,一键启动
  • ✅ 易于备份,数据持久化
  • ✅ 方便迁移,跨平台运行
  • ✅ 资源可控,限制 CPU/内存

现在就开始部署你的 CoPaw AI 助手吧!🚀


相关链接:

发表回复

后才能评论