Odoo 是一套功能完整的 ERP 系统,但部署和运维的复杂度也随功能成正比。模块依赖、定时任务、数据库、性能调优——每个环节都有坑。这篇手册把 Odoo 从安装到日常运维的常见问题串起来,遇到问题可以先在这里定位方向。
一、Odoo 架构概览
Odoo 的运行依赖三个组件:Odoo 应用本身(Python)、PostgreSQL 数据库、以及可选的 Nginx 反向代理。常见的故障分布:
- 安装阶段:模块依赖缺失、Python 包版本冲突
- 启动阶段:端口冲突、配置文件错误、数据库连接失败
- 运行阶段:定时任务不执行、系统变慢、数据库需要备份
二、安装阶段:模块依赖问题
Odoo 安装时最常见的问题是 Python 依赖缺失。报错通常是 ModuleNotFoundError 或者 ImportError。解决思路:
- 看报错信息里缺的是哪个模块
- 检查 requirements.txt 里对应的包名
- 用 pip 安装:
pip install -r requirements.txt - 如果是系统级依赖(如 libxml2、libpq),用 apt/yum 安装
详细的依赖排查步骤和常见报错处理,参考 Odoo 模块依赖缺失安装报错怎么办?。
安装完成后,如果自定义模块在后台不显示,通常是模块路径、manifest 文件或者更新列表的问题。排查方法见 Odoo19 自定义模块不显示?4 步排查与解决。
三、启动阶段:无法访问
Odoo 装完了但浏览器打不开,这是部署阶段第二高频问题。排查顺序:
- 确认 Odoo 进程在跑:
systemctl status odoo - 确认端口在监听:
ss -tlnp | grep 8069 - 确认防火墙没拦:
ufw status或iptables -L - 确认配置文件里的地址和端口:
grep -E 'http_interface|http_port' /etc/odoo/odoo.conf - 看 Odoo 日志:
journalctl -u odoo -n 100
常见原因:Odoo 绑定了 127.0.0.1 导致外部无法访问、端口被其他服务占用、防火墙没开放 8069 端口。详细排查步骤见 Odoo 启动后无法访问怎么办?端口与服务排查指南。
四、运行阶段:定时任务不执行
Odoo 的定时任务(Scheduled Actions / ir.cron)不跑,会影响邮件发送、自动确认订单、定期报告等功能。排查路径:
- 确认系统 cron 在运行(Odoo 依赖系统 cron 调用 cron worker)
- 看 Odoo 日志里有没有 cron 相关的输出
- 在后台检查 ir.cron 记录的间隔、激活状态、下次执行时间
- 检查是否有锁卡死(上次任务异常退出,锁没释放)
- 手动触发测试,看报什么错
完整的 cron 排查流程和数据库锁处理方法,参考 Odoo 定时任务不执行怎么办?cron 排查指南。
五、运行阶段:系统变慢
Odoo 用着用着变慢,原因通常在几个方面:
- worker 配置不合理:worker 太少导致请求排队,太多导致内存不够
- 数据库慢查询:数据量增长后某些查询变慢
- 内存不足:Odoo 是内存大户,小 VPS 容易 OOM
- 文件存储过大:附件多了影响 IO
workers 的调优需要根据服务器内存和 CPU 来计算。公式:worker 数 = CPU 核心数 × (1 + 内存GB/2)。详细的计算方法和调优步骤参考 Odoo 系统变慢怎么办?workers 调优与瓶颈排查实操。
如果是前端界面卡顿(比如切换菜单慢),可能是通知设置的问题。Odoo15 的一个已知问题参考 Odoo15 切换菜单卡顿怎么办?通知设置修复。
六、数据库备份与恢复
Odoo 的所有业务数据在 PostgreSQL 里,但备份不能只备数据库——附件文件存在文件系统的 filestore 目录里,必须一起备份。
推荐方案:
- 用
pg_dump -Fc导出数据库(custom 格式,恢复快) - 用 tar 打包 filestore 目录
- 写脚本放 crontab 每天跑
- 把备份传到异地(rsync 或对象存储)
- 定期做恢复测试
完整的备份脚本和恢复流程参考 Odoo 数据库备份与恢复怎么做?实操指南。
七、Odoo 故障速查表
| 现象 | 可能原因 | 首先检查 |
|---|---|---|
| 安装报错 ModuleNotFoundError | Python 依赖缺失 | requirements.txt、pip install |
| 启动后无法访问 | 端口/防火墙/绑定地址 | systemctl status、ss -tlnp、ufw |
| 定时任务不执行 | 系统 cron 没配、ir.cron 锁死 | crontab -l、Odoo 日志、ir.cron 表 |
| 系统变慢 | worker 不够或太多、内存不足 | odoo.conf workers 配置、dmesg OOM |
| 切换菜单卡顿 | 通知设置问题 | 用户偏好设置里的通知 |
| 附件打不开 | filestore 路径不对或丢失 | data_dir 配置、filestore 目录 |
八、日常维护清单
- 每日:检查 Odoo 服务状态和日志有没有报错
- 每周:检查磁盘空间(Odoo 日志和 filestore 会持续增长)
- 每周:确认数据库备份正常执行
- 每月:检查 PostgreSQL 慢查询日志
- 每月:检查 Odoo 版本更新和安全补丁
- 每季度:做一次完整的备份恢复测试
更多 Odoo 运维教程,请访问 fenij.com。
常见问题
问:Odoo 升级大版本怎么做?
答:大版本升级(比如 16→17)不能直接换代码,需要跑数据库迁移。建议在测试环境先用 Odoo 的迁移工具跑一遍,确认没问题再动生产。升级前一定要做完整备份(数据库 + filestore)。
问:多数据库环境怎么管理?
答:在 odoo.conf 里配置 dbfilter,确保每个域名只对应一个数据库。否则 Odoo 会显示数据库选择页面,既不安全也不方便。cron 进程也需要知道操作哪个数据库。
问:Odoo 内存占用太高怎么优化?
答:减少 worker 数量、限制每个 worker 的内存上限、关闭不用的模块。如果用的是 community 版,考虑切到 enterprise 版,资源管理更好。内存实在不够就加 swap 顶着,但长期方案还是加内存。