第四十二章 安装与配置
篇别:第十一篇 部署与运维
本章学习目标
- 完成 源码 / 包 / 容器 安装,并理解
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 启用 prefork;max_cron_threads独立 cron 进程。data_dir:filestore、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.4 本节练习
- 实操:新增 自定义 addons 路径 并
-u my_module验证加载。 - 简答:不设
dbfilter在多子域部署时的 风险?
参考答案提示:2. 用户可能通过 Host/db 列表访问非预期数据库。
42.2 Nginx 反向代理
42.2.1 知识要点
- 头:
X-Forwarded-HostX-Forwarded-ProtoX-Forwarded-For;与proxy_mode配套。 - WebSocket:
UpgradeConnection;Discuss / 长轮询 依赖正确转发。 - TLS:证书链完整、中间件 HSTS、HTTP/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.1 与 Upgrade 头(以官方示例为准)。
42.2.3 截图占位

42.2.4 本节练习
- 简答:
proxy_mode=True与 转发头 的关系? - 判断:可在公网 直接暴露 8069 而不走 Nginx。( )
参考答案提示:2. 不推荐(TLS、限速、WAF 缺失)。
42.3 多 Worker 部署
42.3.1 知识要点
workers=0:单进程,调试友好,无并发利用多核。workers>0:多进程;会话 可能 跨 worker(sticky session 或 无状态 JSON-RPC 策略)。- 长请求:报表、导入 占用 worker;过少 worker 导致 排队超时。
- 经验公式(粗估):worker ≈ 1 + (CPU 核心 × 2) 上限受 内存 约束;以压测为准。
42.3.2 案例
现象:4 worker 时 大 PDF 导出 偶发 502 → 增加 limit_time_real 或 独立报表队列(架构向)。
42.3.3 截图占位

42.3.4 本节练习
- 简答:
workers=0与>0对 长请求 / 调试 的影响? - 实操:记录一次
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-compose:volumes: odoo-web-data:/var/lib/odoo;验证附件 重启容器后 仍存在。
42.4.3 截图占位

42.4.4 本节练习
- 实操:卷挂载 filestore,上传附件后
docker compose restart验证 持久化。 - 简答:容器内
workers与 K8s 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.4 本节练习
- 简答:staging 与 production 数据隔离 策略?
- 判断:Odoo.sh 可替代 自建备份与 DR 演练。( )
参考答案提示:2. 错;仍须 理解 RPO/RTO 与 自有备份。
本章综合练习
- 容量规划:CPU / 内存与 worker 数 经验公式 + 一条反例(何时公式失效)。
- 备份:每日全量 + WAL 归档(若启用)策略概述;filestore 与 DB 一致性 注意点。
- 综合:502 频繁 时 五条 排查(Nginx、worker、PG、磁盘、超时)。
- 实操:画出 生产拓扑(用户 → CDN → Nginx → Odoo workers → PG)。
本章对应白皮书目录:第四十二章 安装与配置。