第四十二章 安装与配置

篇别:第十一篇 部署与运维

本章学习目标

  • 完成 源码 / 包 / 容器 安装,并理解 odoo.conf 关键项
  • 配置 Nginx 反向代理HTTPS、WebSocket、头转发)。
  • 理解 多 worker长连接 / 长请求容量关系
  • 了解 Odoo.sh分支、构建、staging/production 分工。

导读:部署决定「可用性与安全基线」

同一套代码在 开发机单进程生产多 worker + PostgreSQL 主从 上行为不同:会话粘性、文件存储、日志、升级窗口 都要重排。本章给出 可操作的检查项具体参数以官方部署文档与硬件为准从零在 Ubuntu / Windows / macOS 装 PostgreSQL 与源码树逐步命令第四十九章


42.1 安装配置

42.1.1 知识要点

  • 源码Python 版本 与 Odoo 官方要求 对齐;虚拟环境 隔离依赖。
  • addons_path企业版、社区版、自定义 顺序;重复模块名先匹配路径 为准。
  • dbfilter多库 场景 防串库;正则与 Host 头 配合(慎用 不安全 Host)。
  • proxy_mode=True:置于 反向代理之后 时开启,信任 X-Forwarded-*代理必须覆盖非法头)。
  • workers>0 启用 preforkmax_cron_threads 独立 cron 进程
  • data_dirfilestore、session(视配置);备份须含

42.1.2 案例

[options]
addons_path = /opt/odoo/enterprise,/opt/odoo/community,/opt/odoo/custom
data_dir = /var/lib/odoo
db_host = db.internal
db_user = odoo
db_password = ***
proxy_mode = True
workers = 4
max_cron_threads = 1
limit_memory_hard = 2684354560
limit_time_cpu = 120

42.1.3 截图占位

图 42-1 odoo.conf 关键项

42.1.4 本节练习

  1. 实操:新增 自定义 addons 路径-u my_module 验证加载。
  2. 简答不设 dbfilter 在多子域部署时的 风险

参考答案提示:2. 用户可能通过 Host/db 列表访问非预期数据库


42.2 Nginx 反向代理

42.2.1 知识要点

  • X-Forwarded-Host X-Forwarded-Proto X-Forwarded-Forproxy_mode 配套
  • WebSocketUpgrade ConnectionDiscuss / 长轮询 依赖正确转发。
  • TLS证书链完整中间件 HSTSHTTP/2(视场景)。
  • 静态文件:大流量站点可考虑 Nginx 直出 filestore/静态权限与缓存策略 需谨慎)。

42.2.2 案例

location / {
    proxy_pass http://127.0.0.1:8069;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_redirect off;
}

WebSocket 段需 proxy_http_version 1.1Upgrade(以官方示例为准)。

42.2.3 截图占位

图 42-2 Nginx site 配置片段

42.2.4 本节练习

  1. 简答proxy_mode=True转发头 的关系?
  2. 判断:可在公网 直接暴露 8069 而不走 Nginx。( )

参考答案提示:2. 不推荐(TLS、限速、WAF 缺失)。


42.3 多 Worker 部署

42.3.1 知识要点

  • workers=0单进程调试友好无并发利用多核
  • workers>0多进程会话 可能 跨 workersticky session无状态 JSON-RPC 策略)。
  • 长请求报表、导入 占用 worker过少 worker 导致 排队超时
  • 经验公式(粗估):worker ≈ 1 + (CPU 核心 × 2) 上限受 内存 约束;以压测为准

42.3.2 案例

现象4 worker大 PDF 导出 偶发 502增加 limit_time_real 或 独立报表队列(架构向)。

42.3.3 截图占位

图 42-3 htop 中 odoo worker 进程

42.3.4 本节练习

  1. 简答workers=0>0长请求 / 调试 的影响?
  2. 实操:记录一次 limit_memory_hard 触发 的日志关键字(测试环境 刻意调低)。

参考答案提示:1. 单进程 易断点;多进程 需更多 RAM调试断点难


42.4 容器化部署

42.4.1 知识要点

  • 镜像官方或可信构建固定 tag定期安全更新
  • PostgreSQL 数据filestore自定义 addons 持久化容器只读层 不放上传文件。
  • 编排健康检查 /web/health(若启用)或 自定义依赖顺序 db → odoo
  • 秘密K8s Secret / docker secrets镜像层

42.4.2 案例

docker-composevolumes: odoo-web-data:/var/lib/odoo验证附件 重启容器后 仍存在

42.4.3 截图占位

图 42-4 docker compose ps

42.4.4 本节练习

  1. 实操卷挂载 filestore,上传附件后 docker compose restart 验证 持久化
  2. 简答容器内 workersK8s pod CPU limit 如何一起考虑?

参考答案提示:2. 避免 worker 总和超过 throttling 后全部饥饿调 limit 或减 worker


42.5 Odoo.sh 云平台(新增)

42.5.1 知识要点

  • 分支production / staging / dev构建 自动 pip、依赖、测试(以平台文档为准)。
  • 数据staging 从生产匿名化副本 在 dev 存真实客户数据
  • 模块Git 推送 触发 安装/升级失败回滚 策略需 团队约定

42.5.2 案例

发布检查合并到 production 前 staging 跑关键用例 + 人工点验

42.5.3 截图占位

图 42-5 Odoo.sh 分支构建界面

42.5.4 本节练习

  1. 简答stagingproduction 数据隔离 策略?
  2. 判断:Odoo.sh 可替代 自建备份与 DR 演练。( )

参考答案提示:2. 错;仍须 理解 RPO/RTO自有备份


本章综合练习

  1. 容量规划CPU / 内存与 worker 数 经验公式 + 一条反例(何时公式失效)。
  2. 备份每日全量 + WAL 归档(若启用)策略概述filestoreDB 一致性 注意点。
  3. 综合502 频繁五条 排查(Nginx、worker、PG、磁盘、超时)。
  4. 实操:画出 生产拓扑用户 → CDN → Nginx → Odoo workers → PG)。

本章对应白皮书目录:第四十二章 安装与配置。