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 TeamTechnical Writing
The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.
相关文章
AI 支持的客户细分:从 RFM 到预测聚类
了解 AI 如何将客户细分从静态 RFM 分析转变为动态预测聚类。使用 Python、Odoo 和真实 ROI 数据的实施指南。
用于供应链优化的人工智能:可见性、预测和自动化
利用人工智能改变供应链运营:需求感知、供应商风险评分、路线优化、仓库自动化和中断预测。 2026年指南。
B2B电子商务战略:2026年打造在线批发业务
通过批发定价、帐户管理、信用条款、打孔目录和 Odoo B2B 门户配置策略来掌握 B2B 电子商务。