自很早的版本起,Odoo 就默认启用了遥测(远程数据收集/使用统计)。这些数据会定期上传到 Odoo 的官方服务器,包括但不限于:服务器信息、模块使用情况、用户数量、安装状态、系统健康状况等。对于某些企业来说,这未必是坏事,因为它有助于 Odoo 改进其产品。然而,许多公司必须禁用所有外部数据传输,原因如下:
- 安全合规要求(例如,国有企业、能源、金融行业)
- 内网部署
- 不希望外部统计内部系统的使用情况
- 禁止 Odoo 自动在线检查许可证(尤其是社区版不受影响,但企业版对此非常敏感)
- 自建云或 Docker 生产环境需要隔离
本文将从 Docker Compose 部署场景 出发,使用实际文件和配置向您展示:如何彻底切断 Odoo19 的所有官方回调,适用于:
- Odoo 19 CE 社区版
- Odoo 19 EE 企业版(企业合同需特别注意)
- 使用 Docker Compose 部署
- 支持 Nginx + Odoo + PostgreSQL 架构
1. Odoo19 数据返回(遥测)具体包括哪些内容?
官方遥测机制主要包括:
| 函数 | 目的 | 传输至 |
|---|---|---|
| 遥测使用数据 | 提交使用习惯、模块激活状态、用户数量 | odoo.com |
| 检查更新 | 检查版本更新 | odoo.com |
| 企业许可证 Ping | 验证许可证 | odoo.com |
| IAP 服务(例如,电子邮件、短信) | 应用内购买服务 | iap.odoo.com |
| GeoIP | 解析 IP 位置 | geoip.odoo.com |
如果在公共网络环境中部署,默认情况下它会继续自动上传。
2. 在 Docker Compose 环境中,如何彻底切断回调?
以下是四层防御,建议将它们全部启用,以确保彻底清洁。
方法 1:在 Odoo 配置文件中禁用遥测(最基础)
编辑你的 odoo.conf:
通常 docker-compose 会将配置挂载在:
./config/odoo.conf
在[选项]中添加:
server_wide_modules = web geoip_database = http_enable = True limit_time_real = 120 disable_outgoing_email = True publisher_warranty = False disable_database_telemetry = True
关键项目:
disable_database_telemetry = True
这是 Odoo 中的一个隐藏配置,用于禁用遥测。
注意:部分版本尚未公开提供,但 Odoo19 以及部分 Odoo18、17 已经可用。
方法 2:在 Docker Compose 中禁用网络访问(iptables/防火墙)
即使 Odoo 层已禁用遥测,作为预防措施,建议对容器实施网络隔离。
例如,如果你的 docker-compose 文件看起来像:
services:
odoo:
image: odoo:19
depends_on:
- db
ports:
- "8069:8069"
networks:
- odoo-net
extra_hosts:
- "odoo.com:127.0.0.1"
- "iap.odoo.com:127.0.0.1"
- "services.odoo.com:127.0.0.1"
使用 extra_hosts 将所有官方域名指向 localhost,从而完全断开与互联网的连接。
必须屏蔽的域名:
odoo.com iap.odoo.com services.odoo.com upgrade.odoo.com analytics.odoo.com
这是一个非常干净且无副作用的方法。
方法 3:通过防火墙阻止遥测域名(推荐用于企业)
如果你在云服务器或物理机上运行 Docker,可以直接使用防火墙进行阻止:
ufw
sudo ufw deny out to odoo.com sudo ufw deny out to iap.odoo.com sudo ufw deny out to services.odoo.com
iptables
iptables -A OUTPUT -p tcp -d odoo.com -j DROP iptables -A OUTPUT -p tcp -d iap.odoo.com -j DROP iptables -A OUTPUT -p tcp -d services.odoo.com -j DROP
进一步探讨:封锁 IP 地址范围
如果企业网络合规要求严格,则可以实施全面阻断:
# 阻止所有 Odoo IP iptables -A OUTPUT -p tcp -m string --string "odoo" --algo kmp -j DROP
方法 4:在 Odoo 中禁用所有 IAP(如果您使用社区版,强烈建议这样做)
在开发者模式下:
转到:设置 > IAP并禁用所有服务。
您也可以直接卸载相关模块:
iap iap_mail iap_sms iap_account iap_crm iap_purchase
社区版(CE)不影响功能,而企业版(EE)可能会影响某些自动化功能,具体取决于情况。
3. 最推荐的解决方案:四层组合
如果你想要绝对干净、100% 无数据外泄:
| 等级 | 方法 | 效果 |
|---|---|---|
| 1 | 配置文件禁用遥测 | 70% |
| 2 | extra_hosts 伪装成官方域名 | 100% |
| 3 | 防火墙阻止访问 | 绝对彻底 |
| 4 | 禁用所有应用内购买 | 对社区版尤其有效 |
特别通知:
企业版 EE 需要注意许可证验证(企业版合同)
如果您使用 EE,请确保您拥有有效的许可证。
然而,在企业级私有云场景中,许多公司仍不得不切断许可证回调,而这种方法依然有效。
4. 完整且可用的 docker-compose.yml 示例(包括所有块)
以下是您可以直接复制并使用的版本:
version: '3.1'
services:
web:
image: odoo:19
depends_on:
- db
ports:
- "8069:8069"
volumes:
- ./config:/etc/odoo
- ./addons:/mnt/extra-addons
networks:
- odoo-net
extra_hosts:
- "odoo.com:127.0.0.1"
- "iap.odoo.com:127.0.0.1"
- "services.odoo.com:127.0.0.1"
- "upgrade.odoo.com:127.0.0.1"
- "analytics.odoo.com:127.0.0.1"
db:
image: postgres:15
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=odoo
- POSTGRES_PASSWORD=odoo
networks:
- odoo-net
networks:
odoo-net:
同时,你需要一个 odoo.conf:
[options] addons_path = /usr/lib/python3/dist-packages/odoo/addons,/mnt/extra-addons data_dir = /var/lib/odoo db_filter = .* disable_database_telemetry = True publisher_warranty = False
5. 如何验证回调已被成功拦截?
以下是最有效的验证方法:
1. 查看容器日志
docker logs odoo
如果您看到以下消息,则意味着返回传输被阻止了:
无法连接到 services.odoo.com 无法连接到 analytics.odoo.com
2. 捕获网络数据包(tcpdump)
sudo tcpdump -i any host odoo.com
无输出 = 成功。
3. 访问开发者模式 → IAP,显示为不可访问
6. 如果您使用企业版(EE),请注意法律风险
禁用许可证 Ping 可能导致:
- 系统提示:未授权
- 官员无法自动核实合同。
- 官方可能会在后续版本中实施更严格的验证。
如果您是合法的授权用户,但因内网或安全要求需要断开连接,请向官方支持说明情况。
VII. 总结
在 Docker 环境中切断 Odoo 19 的数据回传并不复杂;关键在于掌握 Odoo 的访问点 + Docker 网络隔离 + 配置文件参数。
推荐的四层解决方案:
- odoo.conf: 禁用遥测 (disable_database_telemetry)
- docker extra_hosts:阻止官方域名
- 防火墙阻止流量(iptables/ufw)
- 禁用所有 IAP(尤其是社区版)
建议在企业内部部署中全面实施这套阻断策略,尤其是在:
- 内网隔离部署
- 安全级别高的行业
- 企业云解决方案
- 定制开发不希望公开信息
通过本文,你可以将 Odoo19 转变为 完全私密、零外发、完全离线的企业管理系统。
