Odoo 从很早的版本开始,就默认开启了 Telemetry(远程数据回传/Usage Statistics)。这些数据会周期性上传到 Odoo 官方服务器,包括但不限于:服务器信息、模块使用情况、用户数量、安装情况、系统健康度等。对于部分企业来说,这本身并不是坏事,可以帮助 Odoo 改进产品。然而很多公司出于以下原因,必须禁用所有对外的数据传输:
- 安全合规需求(如国企、能源、金融行业)
- 内网部署
- 不希望外部统计内部系统使用情况
- 禁止 Odoo 自联网检查 License(尤其社区版无影响,但企业版很敏感)
- 自建云或 Docker 生产环境要求隔离
本篇文章将从 Docker Compose 部署场景 出发,用实际文件与配置告诉你:如何彻底切断 Odoo19 的所有官方回传,适用于:
- Odoo 19 CE 社区版
- Odoo 19 EE 企业版(需特别注意 Enterprise Contract)
- Docker Compose 方式部署
- 支持 Nginx + Odoo + PostgreSQL 架构
一、Odoo19 数据回传(Telemetry)到底包含哪些?
官方 Telemetry 机制主要包含:
| 功能 | 目的 | 传输到 |
|---|---|---|
| Telemetry Usage Data | 提交使用习惯、模块启用情况、用户数 | odoo.com |
| Updates Check | 检查版本更新 | odoo.com |
| Enterprise License Ping | 验证许可证 | odoo.com |
| IAP 服务(如邮箱、短信) | 内置购买服务 | iap.odoo.com |
| GeoIP | 解析 IP 归属 | geoip.odoo.com |
如果你部署在公网环境,默认会持续自动上传。
二、Docker Compose 环境中,如何彻底切断回传?
下面提供 四层防御,建议全部启用来确保干净彻底。
方法一:Odoo 配置文件中禁用 Telemetry(最基础)
编辑你的 odoo.conf:
通常 docker-compose 会把配置挂载在:
./config/odoo.conf
在 [options] 中添加:
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 用于关闭 Telemetry 的隐藏配置。
注意:部分版本未公开,但 Odoo19 及部分 Odoo18、17 已可用。
方法二:Docker Compose 内禁用网络访问(iptables/防火墙)
即使 Odoo 层关闭了 Telemetry,为了保险,建议对容器做网络隔离。
例如,如果你的 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 把所有官方域名指向本地,彻底断网。
必须屏蔽的域名:
odoo.com iap.odoo.com services.odoo.com upgrade.odoo.com analytics.odoo.com
这是非常 干净且零副作用 的方式。
方法三:通过防火墙封锁 Telemetry 域名(推荐企业级)
如果你在云服务器或物理机上运行 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
方法四:Odoo 内禁用所有 IAP(如果你使用社区版强烈建议)
在开发者模式中:
进入:设置 > IAP 禁用全部服务。
也可以直接卸载相关模块:
iap iap_mail iap_sms iap_account iap_crm iap_purchase
社区版(CE)不会影响功能,企业版(EE)可能影响部分自动化功能,视情况决定。
三、最推荐的方案:四层组合拳
如果你想 绝对干净、100% 无数据外发:
| 层级 | 方式 | 效果 |
|---|---|---|
| 1 | 配置文件关闭 Telemetry | 70% |
| 2 | extra_hosts 伪装官方域名 | 100% |
| 3 | 防火墙封锁访问 | 绝对彻底 |
| 4 | 禁用所有 IAP | 对社区版特别有效 |
特别提示:
企业版 EE 需要注意许可证验证(企业版合同)
如果你使用 EE,请确保你具备合法 License。
但企业级自建云场景中,很多公司仍必须切断许可证回传,此方法依然有效。
四、完整可用的 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
五、如何验证已经成功阻断回传?
以下是最有效的验证方式:
1. 查看容器日志
docker logs odoo
若看到如下信息,代表回传被阻断:
Failed to reach services.odoo.com Failed to reach analytics.odoo.com
2. 捕获网络包(tcpdump)
sudo tcpdump -i any host odoo.com
没有任何输出 = 已成功。
3. 访问开发者模式 → IAP,显示不可访问
六、如果你使用企业版(EE),注意法律风险
切断 License Ping 可能导致:
- 系统提示未授权
- 官方无法自动验证合同
- 官方在后续版本中可能做更严格验证
如果你是合法授权用户,但因为内网或 security 需要切断,可与官方 Support 说明情况。
七、总结
Docker 环境的 Odoo19 要切断数据回传并不复杂,关键是 掌握 Odoo 的访问点 + docker 网络隔离 + 配置文件参数。
推荐的四层方案:
- odoo.conf:禁用 Telemetry(disable_database_telemetry)
- docker extra_hosts:屏蔽官方域名
- 防火墙切断流量(iptables/ufw)
- 禁用所有 IAP(尤其社区版)
企业内部部署推荐完全使用这一套封锁策略,尤其在:
- 内网隔离部署
- 安全等级高的行业
- 企业云方案
- 客制化开发不希望暴露信息
通过本篇文章,你可以将 Odoo19 打造成一个 完全私有、零外发、纯离线的企业管理系统。
