本地部署(沙箱与容器)¶
v1.6.0 新增
- 在 Odoo 14.0 至 19.0 上为插件提供 API key:
sandbox up会让 Odoo 为admin用户创建一个 API key,并把它以ODOO_API_KEY保存在.env中,从不打印。它填入插件的 Odoo API key 选项,Odoo password 留空。参见 将插件连接到沙箱。 - 已修复,一个从未启动的沙箱: 大约每 64 个新沙箱中就有一个得到以 "-" 开头的数据库密码,11.0 及更高版本的 Odoo 镜像会把它当作一个选项来读取。生成的密码不再以 "-" 开头。只有用这种密码创建、且从未启动过的 Odoo 11.0 或更高版本的沙箱,才会提示你运行
sandbox destroy --yes,然后运行sandbox up,不会丢失任何东西。10.0 的沙箱,或已经正常运行过的沙箱,保持不变。参见 故障排查。 - 容器模式的镜像为
ghcr.io/transgenia/odoo-mcp-tools:1.6.0。
v1.5.1 新增
- 容器模式的镜像为
ghcr.io/transgenia/odoo-mcp-tools:1.5.1。 - 容器模式会创建标记
${CLAUDE_PLUGIN_DATA}/diagnostics/container-mode,因此在你使用容器服务器期间,插件的会话开始 hook 会保持沉默。
v1.5.0 新增
- 容器模式的镜像为
ghcr.io/transgenia/odoo-mcp-tools:1.5.0。 - 容器模式的
odoo.env文件可以设置权限配置档(ODOO_POLICY,默认standard)、策略文件(ODOO_POLICY_FILE)和审计文件夹(ODOO_AUDIT_DIR)。参见 权限策略。 - 在沙箱中,删除练习和 Studio 风格的改动需要
standard以外的配置档:删除需要full,字段、视图和自动化需要builder。
v1.4.1 新增
容器模式的镜像为 ghcr.io/transgenia/odoo-mcp-tools:1.4.1。容器模式适用于没有 Python 的 Claude Code。
v1.4.0 新增
沙箱覆盖 Odoo Community 10.0 至 19.0(之前为 16.0 至 19.0),每个版本系列使用一个兼容的 PostgreSQL 版本。
v1.3.0 新增
/odoo-tools:deploy-local 会启动由 Transgenia 提供的本地基础设施。只有在你 调用并确认后才会运行:没有任何 hook 会自行运行 Docker。
通常你会从引导路线 /odoo-tools:odoo-setup-mcp 进入这里(第 1 阶段,“我没有可练习的 Odoo”或“我无法安装 Python”)。该命令也可以单独使用。
要求¶
- Docker 与 Compose v2(
docker compose;不支持旧版docker-compose程序):Docker Desktop(Windows/macOS)或 Docker Engine + compose 插件(Linux)。参见 docs.docker.com/get-docker。 - 沙箱需要:
python33.9+(插件本来就需要)以及约 2 GB 磁盘空间。
模式 A:本地 Odoo 沙箱¶
仅限 Odoo Community(CE)
沙箱为 Odoo Community。Transgenia 无法提供 Odoo Enterprise 实例(由 Odoo S.A. 按订阅授权)或 Odoo Online 实例(Odoo S.A. 在 odoo.com 的 SaaS)。如需使用,请连接你自己的 Enterprise 实例或 Online 数据库。对于 Online,其套餐必须包含外部 API 访问:否则即使凭据正确也无法连接(参见 故障排查)。
在你的电脑上启动 PostgreSQL + Odoo Community 10.0 至 19.0,并准备好一个数据库(可选演示数据),让你在不触碰生产环境的情况下练习。
Odoo 10.0 至 16.0:仅用于测试和迁移
Odoo S.A. 只维护最新的三个版本(17.0、18.0 和 19.0);10.0 至 16.0 已不再获得安全补丁。15.0 及以前的官方镜像仅支持 amd64:Docker Desktop(Apple Silicon、Windows ARM)会以模拟方式运行,速度较慢;在 ARM Linux 上使用 Docker Engine 时,需先注册 amd64 模拟(binfmt/QEMU,例如
docker run --privileged --rm tonistiigi/binfmt --install amd64),否则容器会因
"exec format error" 而失败。每个版本使用其兼容的 PostgreSQL:
| Odoo | PostgreSQL |
|---|---|
| 10.0、11.0 | 10 |
| 12.0、13.0 | 12 |
| 14.0、15.0 | 13 |
| 16.0 至 19.0 | 16 |
每周都有一个工作流启动全部十个版本,并通过插件的 MCP 服务器进行验证;服务器按下文所述的方式登录:在 14.0 至 19.0 上使用 API key(在 19.0 上通过 JSON-2),在 10.0 至 13.0 上使用密码。
命令会一次问一件事:Odoo 版本(推荐 18.0)、演示数据、语言(例如 zh_CN)和端口(默认 8069)。然后运行:
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/deploy_local.py" sandbox up --odoo 18.0 --lang zh_CN --port 8069
它按顺序执行:
- 在
~/.odoo-tools/sandbox中写入docker-compose.yml、odoo.conf和.env(文件夹0700,.env0600)。密码(PostgreSQL、Odoo 主密码和admin用户)在本地生成,并且从不打印;自 v1.6.0 起,它们都不以 "-" 开头,11.0 及更高版本的 Odoo 镜像曾把这样的密码当作一个选项来读取。 - 从
ghcr.io/transgenia/odoo和ghcr.io/transgenia/postgres拉取镜像:这些是官方镜像的原样副本,由 Transgenia 每周更新。如果该仓库无法访问,则使用 Docker Hub 上的官方镜像。 - 启动容器,Odoo 仅发布在
127.0.0.1。 - 创建数据库(默认
sandbox)并验证登录。 - 在 Odoo 14.0 及更高版本上,让 Odoo 为
admin用户创建一个 API key:通过沙箱的一次性容器中的odoo shell,并使用 Odoo 自己的res.users.apikeys。它会检查这个 key 能否登录,并把它以ODOO_API_KEY保存在同一个.env中,从不打印。Odoo 在 Preferences > Account Security 中把它列为 "odoo-tools sandbox"。之后的运行会复用它;如果它在 Odoo 中被删除了,就会替换它。Odoo 10.0 至 13.0 没有 API key,继续使用密码;无法创建 key 的沙箱也是如此:脚本会说明原因,下一次sandbox up会再试一次。
完成后会显示 URL、数据库、登录名,以及密码(~/.odoo-tools/sandbox/.env 中的 ODOO_ADMIN_PASSWORD)和在 14.0 及更高版本上的 API key(同一文件中的 ODOO_API_KEY)所在位置;其中的 plugin_credential 字段说明哪项凭据要填入插件选项。请你自己用编辑器打开该文件:Claude 不会读取它,也不会复制密码或 key。切勿把 key 或密码粘贴到聊天中。
将插件连接到沙箱¶
/plugin → odoo-tools → Configure options:
| 选项 | 值 |
|---|---|
| Odoo URL | http://localhost:8069(或你选择的端口) |
| Odoo database | sandbox |
| Odoo login | admin |
| Odoo API key | Odoo 14.0 至 19.0:.env 中 ODOO_API_KEY 的值。在 10.0 至 13.0 上留空 |
| Odoo password (Odoo < 14 only) | Odoo 10.0 至 13.0:ODOO_ADMIN_PASSWORD 的值。在 14.0 至 19.0 上留空 |
如果脚本的汇总信息显示沙箱没有 API key(api_key 以 none: 开头),请像在 10.0 至 13.0 上一样使用密码:在沙箱上,它在 Odoo password 字段中同样有效,尽管该字段的标题写着 Odoo < 14 only。原因就在同一份汇总信息中,下一次 sandbox up 会再次尝试创建 key。
重启 Claude 并用 odoo_version 验证。插件选项只保存一个连接:要回到生产环境,需要重新填写生产环境的值。
在沙箱中,你可以使用 Permission profile builder 来练习字段、视图和自动化,或使用 full 来练习删除。插件中的示例 docs/policy-examples/sandbox-builder.json(配置档 builder)还会开放删除和测试用户。回到生产环境时,请把配置档改回 standard(或 readonly)。参见 示例。
管理沙箱¶
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/deploy_local.py" sandbox status
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/deploy_local.py" sandbox down # 停止,保留数据
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/deploy_local.py" sandbox up # 重新启动;在 14.0+ 上缺少 API key 时会创建
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/deploy_local.py" sandbox logs
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/deploy_local.py" sandbox destroy --yes # 删除数据库与文件
也可以用自然语言请求:/odoo-tools:deploy-local status。
更换 Odoo 版本
用 Odoo 18 创建的数据库无法被 Odoo 17 打开(反之亦然)。脚本会检测到并停止:请先运行 destroy --yes,或用 --dir 使用另一个文件夹。
模式 B:容器中的 MCP 服务器¶
适用于装有 Claude Code 但没有 Python 3.9+ 的电脑。它是同一个 MCP 服务器,由 Transgenia 打包为 Docker 镜像(amd64 和 arm64),连接到你现有的 Odoo:
-
命令会创建
~/.odoo-tools/mcp/odoo.env(仅你的用户可读),其中只有占位符;你在自己的编辑器中填写 URL、数据库、登录名和 API key。该文件还以注释形式带有权限策略和审计的配置行:# ODOO_READONLY=1 # 建议在最初几步使用 # ODOO_POLICY=standard # 配置档:readonly、standard、builder 或 full # ODOO_POLICY_FILE=/policy/policy.json # 可选,以只读方式挂载 # ODOO_AUDIT_DIR=/audit # 不设置时,审计行会写到 docker logs默认配置档是
standard(不删除、不做 Studio 风格的改动、不读取密钥);full保留 1.4 的行为。使用策略文件或审计文件夹时,请在第 2 步命令中的镜像名称之前加上-v <策略文件的绝对路径>:/policy/policy.json:ro和-v <审计文件夹的绝对路径>:/audit。然后把插件的数据文件夹标记为容器模式。这个标记告诉插件的会话开始 hook:正在使用的是容器服务器,因此它不再把插件自带的、保持未使用状态的服务器报告为从未连接:
-
在 Claude Code 中注册它(会先向你展示命令):
-
重启 Claude,并用
odoo-tools-docker服务器的odoo_version验证。如果插件自带的服务器也已配置,工具会出现两次:请只保留一个。撤销此模式:claude mcp remove odoo-tools-docker,以及rm "${CLAUDE_PLUGIN_DATA}/diagnostics/container-mode"。
在 Windows 上,该文件为 %USERPROFILE%\.odoo-tools\mcp\odoo.env;请用你的编辑器创建它。
只要 container-mode 标记存在,插件的会话开始 hook 就不显示任何提示:正在使用的是容器服务器,因此插件自带的服务器保持未使用状态是预期之中的。
从沙箱到生产¶
沙箱用于学习和测试。要把 Odoo + AI 投入生产(托管、安全、迁移、集成、团队培训),Transgenia 通过其官方渠道提供协助部署与支持:dev@transgenia.org · WhatsApp +52 55 8034 0405。参见 支持。