Skip to content

Latest commit

 

History

History
290 lines (223 loc) · 7.56 KB

File metadata and controls

290 lines (223 loc) · 7.56 KB
title 部署
sidebarTitle 部署
description 安装并在生产环境运行 Mycel
icon cloud
keywords
部署
安装
生产
Docker
配置
故障排查

前置条件

必须:

  • Python 3.11+
  • uv 包管理器 — 安装指南
  • Node.js 18+(Web UI 需要)
  • Git

可选(按沙箱提供商):

  • Docker daemon — 用于 Docker 沙箱提供商
  • E2B API Key — e2b.dev
  • Daytona API Key — daytona.io 或自建实例
  • AgentBay API Key 和区域访问权限

安装

```bash git clone https://github.com/OpenDCAI/Mycel.git cd Mycel ``` ```bash # 核心依赖 uv sync
# 按需安装沙箱提供商
uv sync --extra e2b        # E2B
uv sync --extra daytona    # Daytona
uv sync --extra sandbox    # AgentBay
uv sync --extra all        # 全部
```

Docker 开箱即用,只需安装 Docker 本体。
```bash cd frontend/app && npm install && cd ../.. ```

配置

运行时配置

Mycel 服务配置来自进程环境变量和显式 server 配置。Agent config、Skill、thread、Library resource、用户 profile 都是产品状态,必须通过已配置的后端存储保存。

快速配置

在 shell 中导出变量,或用 ENV_FILE 指向一个明确的 env 文件:

ANTHROPIC_API_KEY=sk-ant-xxx
# 或使用 OpenAI 兼容格式:
# OPENAI_API_KEY=your-key
# OPENAI_BASE_URL=https://api.openai.com/v1
# MODEL_NAME=gpt-4o

启动服务

本地通信后端

之前的 deploy/local-communication/compose.yml 路径已经移除,因为它从手写 schema 分叉启动。那条路径只能作为历史证明,不能作为自部署契约。

deploy/cli-minimal/compose.yml 是当前的 CLI-minimal 本地通信配置形态。它复用正式 Mycel app schema/init path,运行 PostgreSQL + PostgREST,通过很薄的 nginx gateway 暴露 /rest/v1/*,并用 MYCEL_RUNTIME_PROFILE=communication 启动后端。

它不是完整 Mycel 平台。完整部署目前仍由根目录 docker-compose.yml 加 operator 管理的 Supabase/Coolify 配置表示,还没有被提升为 deploy/full 这个公开自部署契约。

启动仅本机访问的配置形态:

python3 deploy/cli-minimal/generate-env.py > deploy/cli-minimal/.env
docker compose --env-file deploy/cli-minimal/.env -f deploy/cli-minimal/compose.yml up

如果要让另一台机器连接,显式发布 URL,然后让 cel 连接它:

python3 deploy/cli-minimal/generate-env.py \
  --bind-host 0.0.0.0 \
  --public-url http://<host-or-lan-ip>:8042 \
  > deploy/cli-minimal/.env
docker compose --env-file deploy/cli-minimal/.env -f deploy/cli-minimal/compose.yml up
cel connect http://<host-or-lan-ip>:8042

完整开发栈

# 终端 1:后端
uv run python -m backend.web.main
# → http://localhost:8001

# 终端 2:前端
cd frontend/app && npm run dev
# → http://localhost:5173

覆盖后端端口:

PORT=9000 uv run python -m backend.web.main
#
LEON_BACKEND_PORT=9000 uv run python -m backend.web.main

沙箱提供商配置

完整配置参见沙箱文档,以下为快速参考:

Docker

设置 LEON_SANDBOXES_DIR 指向沙箱提供商配置目录,然后在该目录下创建 docker.json

{
  "provider": "docker",
  "on_exit": "pause",
  "docker": {
    "image": "python:3.12-slim",
    "mount_path": "/workspace"
  }
}

E2B

{
  "provider": "e2b",
  "on_exit": "pause",
  "e2b": {
    "api_key": "${E2B_API_KEY}",
    "template": "base",
    "cwd": "/home/user",
    "timeout": 300
  }
}

Daytona(SaaS)

{
  "provider": "daytona",
  "on_exit": "pause",
  "daytona": {
    "api_key": "${DAYTONA_API_KEY}",
    "api_url": "https://app.daytona.io/api",
    "cwd": "/home/daytona"
  }
}

Daytona(自建)

{
  "provider": "daytona",
  "on_exit": "pause",
  "daytona": {
    "api_key": "${DAYTONA_API_KEY}",
    "api_url": "http://localhost:3986/api",
    "target": "us",
    "cwd": "/workspace"
  }
}

自建环境要求:

  1. Runner 容器镜像中 bash 路径为 /usr/bin/bash
  2. 工作区镜像中 bash 路径为 /usr/bin/bash
  3. Runner 必须同时在 compose 网络和 Docker bridge 网络上

Docker Compose 网络配置:

services:
  daytona-runner:
    image: your-runner-image-with-bash
    environment:
      - RUNNER_DOMAIN=runner  # 不能是 localhost
    networks:
      - default
      - bridge

networks:
  bridge:
    external: true

在 Runner 的 /etc/hosts 中添加:

127.0.0.1 proxy.localhost

Daytona Proxy(端口 4000)必须从 Runner 可访问,文件操作依赖它。

AgentBay

{
  "provider": "agentbay",
  "on_exit": "pause",
  "agentbay": {
    "api_key": "${AGENTBAY_API_KEY}",
    "region_id": "ap-southeast-1",
    "context_path": "/home/wuying"
  }
}

验证

打开 Web UI http://localhost:5173,注册账号,确认 Agent 正常响应。

生产注意事项

数据库

Mycel runtime storage 是显式配置的。当前本地通信 compose 使用 PostgreSQL 和 PostgREST,并通过与线上后端相同的 Supabase-style storage client 访问。完整生产部署应提供自己的 Supabase-compatible storage 和密钥。

请使用对应数据库的工具进行备份。不要把本地通信 compose 的数据当成生产存储。

安全

  • API Key 存储在部署密钥系统或明确指定的 env 文件中,不要写入代码或版本控制
  • 在 JSON 配置文件中使用 ${VAR} 引用而不是硬编码 Key
  • 使用 env 文件时限制文件权限:chmod 600 /path/to/mycel.env
  • block_dangerous_commands 配置项(默认 true)可屏蔽 rm -rf 等危险命令

代理环境

若环境中有 HTTP 代理:

# 防止代理影响 LLM 客户端或 Docker CLI
env -u ALL_PROXY -u all_proxy uv run python -m backend.web.main

故障排查

- 确认当前在正确目录 - 确认虚拟环境已激活:`source .venv/bin/activate` - 尝试使用完整路径:`.venv/bin/python -m backend.web.main` Shell 中设置了 `all_proxy=socks5://...`,启动前取消设置: ```bash env -u ALL_PROXY -u all_proxy uv run python -m backend.web.main ``` Docker CLI 继承了代理环境变量。Mycel 会自动清理这些变量,若问题仍然存在,检查 `$LEON_SANDBOXES_DIR/docker.json` 中的 `docker_host` 配置。 按顺序逐项检查:
1. 工作区镜像中 bash 路径为 `/usr/bin/bash` — 用 `docker run <image> /usr/bin/bash -c "echo ok"` 验证
2. Runner 中 bash 路径为 `/usr/bin/bash`
3. Runner 在 Docker bridge 网络上(参见上方 Docker Compose 配置)
4. Daytona Proxy(端口 4000)从 Runner 可访问 — 用 `curl http://proxy.localhost:4000` 验证

常见错误信息:
- `fork/exec /usr/bin/bash: no such file or directory` → 工作区镜像缺少 bash
- `Failed to create sandbox within 60s` → 网络隔离问题,检查 Runner 网络配置
- 文件操作静默失败 → Daytona Proxy 不可达