自很早的版本起,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 轉變為 完全私密、零外發、完全離線的企業管理系統。
