Docker Odoo 部署:生产就绪容器设置
Docker 已成为 Odoo 在生产环境中的标准部署方法,在 Docker Hub 上拉取了超过 1000 万个 Odoo Docker 镜像。 容器化部署提供了可重复的环境、轻松扩展、简化的备份以及 Odoo 实例之间的清晰分离。本指南涵盖了完整的生产就绪 Docker Odoo 设置。
要点
- Docker Compose 将 Odoo、PostgreSQL 和 Nginx 编排为连接服务
- 持久卷确保数据在容器重新启动和更新后仍然存在
- Nginx 反向代理处理 SSL 终止、静态文件缓存和负载平衡
- 自动备份以最少的手动干预防止数据丢失
架构概述
生产 Odoo Docker 部署由三个核心服务组成:
- Odoo应用程序服务器:运行Web服务器和应用程序逻辑的Odoo容器
- PostgreSQL数据库:存储所有Odoo数据的专用数据库容器
- Nginx 反向代理:处理 SSL、提供静态文件并将请求代理到 Odoo
可选服务包括 Redis(用于缓存和会话存储)、备份容器(自动数据库转储)和监控(Prometheus + Grafana)。
Docker Compose 配置
部署的基础是定义所有服务的 docker-compose.yml 文件:
version: "3.8"
services:
odoo:
image: odoo:17.0
depends_on:
- db
ports:
- "8069:8069"
- "8072:8072"
volumes:
- odoo-data:/var/lib/odoo
- ./config:/etc/odoo
- ./addons:/mnt/extra-addons
environment:
- HOST=db
- PORT=5432
- USER=odoo
- PASSWORD=odoo_db_password
restart: unless-stopped
db:
image: postgres:16
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=odoo
- POSTGRES_PASSWORD=odoo_db_password
- PGDATA=/var/lib/postgresql/data/pgdata
volumes:
- postgres-data:/var/lib/postgresql/data/pgdata
restart: unless-stopped
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
- ./certbot/conf:/etc/letsencrypt
- ./certbot/www:/var/www/certbot
depends_on:
- odoo
restart: unless-stopped
volumes:
odoo-data:
postgres-data:
Odoo 配置文件
使用生产优化设置创建 config/odoo.conf:
[options]
addons_path = /mnt/extra-addons,/usr/lib/python3/dist-packages/odoo/addons
admin_passwd = your_strong_admin_password
db_host = db
db_port = 5432
db_user = odoo
db_password = odoo_db_password
db_name = production_db
dbfilter = ^production_db$
list_db = False
proxy_mode = True
workers = 4
max_cron_threads = 2
limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_time_cpu = 600
limit_time_real = 1200
log_level = warn
关键设置说明:
proxy_mode = True:在 Nginx 后面运行时需要正确处理转发的标头workers = 4:工作进程数量(经验法则:每个 CPU 核心 2 个工作进程)max_cron_threads = 2:用于计划操作的专用线程list_db = False:防止登录页面上列出数据库(安全)dbfilter:限制对单个数据库的访问
Nginx 反向代理配置
upstream odoo {
server odoo:8069;
}
upstream odoochat {
server odoo:8072;
}
server {
listen 80;
server_name your-domain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
client_max_body_size 200m;
proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;
location /websocket {
proxy_pass http://odoochat;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location / {
proxy_pass http://odoo;
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_set_header X-Real-IP $remote_addr;
}
location ~* /web/static/ {
proxy_cache_valid 200 90m;
proxy_buffering on;
expires 864000;
proxy_pass http://odoo;
}
}
备份策略
自动数据库备份
创建一个每天通过 cron 运行的备份脚本:
#!/bin/bash
BACKUP_DIR=/backups/odoo
DATE=$(date +%Y%m%d_%H%M%S)
docker exec odoo-db pg_dump -U odoo production_db | gzip > $BACKUP_DIR/odoo_$DATE.sql.gz
find $BACKUP_DIR -name "*.sql.gz" -mtime +30 -delete
文件存储备份
Odoo 文件存储(上传的文档、附件)位于 odoo-data 卷中。将其与数据库一起备份:
docker run --rm -v odoo-data:/data -v /backups:/backup alpine \
tar czf /backup/odoo-filestore_$DATE.tar.gz /data
安全加固
- 将 odoo.conf 中的默认
admin_passwd更改为强随机密码 - 设置
list_db = False以防止数据库枚举 - 使用
dbfilter限制对单个数据库的数据库访问 - 尽可能以非 root 用户身份运行容器
- 使用安全补丁更新 Docker 镜像
- 使用 Docker 机密或环境变量文件(不是内联密码)
- 使用 Docker 网络限制容器网络访问
常见问题
问:单个 Odoo 容器可以处理多少个并发用户?
一个 Odoo 容器有 4 名工作人员,可以轻松处理大约 20-30 个并发用户。为了获得更高的并发性,请增加工作线程(受 CPU/RAM 限制)或在负载均衡器后面部署多个 Odoo 容器。
问:如何在 Docker 中更新 Odoo?
拉取新映像,停止当前容器,使用现有卷运行新映像。持久卷在映像更新期间保留您的数据和文件存储。
问:我应该使用官方 Odoo Docker 镜像还是构建自己的镜像?
官方映像适用于标准部署。当您需要特定的 Python 包、自定义模块的系统依赖项或预安装的社区模块时,构建自定义映像。
问:如何在 Docker 中处理 Odoo Enterprise?
Odoo Enterprise 不作为公共 Docker 映像提供。将企业插件目录挂载为卷并在 addons_path 配置中引用它。您需要有效的 Odoo Enterprise 订阅。
下一步是什么
Docker 部署为您提供可重复、可扩展且可维护的 Odoo 生产环境。从此配置开始,并根据您的使用模式调整工作线程计数、内存限制和缓存。
联系 ECOSIRE 获取 Odoo 部署帮助,或探索我们的 Odoo 支持服务 进行托管。
由 ECOSIRE 发布——帮助企业利用企业软件解决方案进行扩展。
作者
ECOSIRE Research and Development Team
在 ECOSIRE 构建企业级数字产品。分享关于 Odoo 集成、电商自动化和 AI 驱动商业解决方案的洞见。
相关文章
Allegro Marketplace 与 Odoo 集成:波兰领先的电子商务平台
将 Allegro 市场与 Odoo ERP 集成的完整指南,涵盖波兰电子商务的 REST API 设置、Allegro Smart、出价和运输。
Odoo 的应付账款自动化:从发票到付款
在 Odoo 中自动化应付账款,从发票捕获到审批工作流程再到付款执行。降低处理成本并消除逾期付款罚款。
2026 年如何为您的企业选择合适的 CRM
2026 年选择正确 CRM 平台的完整指南,比较 Odoo CRM、Salesforce、HubSpot、GoHighLevel 和 Zoho 的功能、定价、可扩展性和行业契合度。