Implementación de Docker Odoo: configuración de contenedores listos para producción
Docker se ha convertido en el método de implementación estándar para Odoo en entornos de producción, con más de 10 millones de imágenes de Odoo Docker en Docker Hub. La implementación en contenedores proporciona entornos reproducibles, fácil escalamiento, copias de seguridad simplificadas y separación limpia entre instancias de Odoo. Esta guía cubre una configuración completa de Docker Odoo lista para producción.
Conclusiones clave
- Docker Compose organiza Odoo, PostgreSQL y Nginx como servicios conectados
- Los volúmenes persistentes garantizan que los datos sobrevivan a los reinicios y actualizaciones de los contenedores.
- El proxy inverso de Nginx maneja la terminación SSL, el almacenamiento en caché de archivos estáticos y el equilibrio de carga
- Las copias de seguridad automatizadas protegen contra la pérdida de datos con una mínima intervención manual
Descripción general de la arquitectura
Una implementación de producción de Odoo Docker consta de tres servicios principales:
- Servidor de aplicaciones Odoo: el contenedor Odoo que ejecuta el servidor web y la lógica de la aplicación.
- Base de datos PostgreSQL: un contenedor de base de datos dedicado que almacena todos los datos de Odoo
- Proxy inverso de Nginx: maneja SSL, sirve archivos estáticos y envía solicitudes a Odoo.
Los servicios opcionales incluyen Redis (para almacenamiento en caché y sesiones), un contenedor de respaldo (volcados de bases de datos automatizados) y monitoreo (Prometheus + Grafana).
Configuración de composición de Docker
La base de la implementación es un archivo docker-compose.yml que define todos los servicios:
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:
Archivo de configuración de Odoo
Cree config/odoo.conf con configuraciones optimizadas para producción:
[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
Configuraciones clave explicadas:
proxy_mode = True: Required when running behind Nginx to correctly handle forwarded headersworkers = 4: Número de procesos de trabajo (regla general: 2 trabajadores por núcleo de CPU)max_cron_threads = 2: Hilos dedicados para acciones programadaslist_db = False: Impide que la base de datos aparezca en la página de inicio de sesión (seguridad)dbfilter: Restringe el acceso a una única base de datos
Configuración del proxy inverso de 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;
}
}
Estrategia de respaldo
Copias de seguridad de bases de datos automatizadas
Cree un script de respaldo que se ejecute diariamente mediante 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
Copia de seguridad del almacén de archivos
El almacén de archivos de Odoo (documentos cargados, archivos adjuntos) se encuentra en el volumen odoo-data. Haga una copia de seguridad junto con la base de datos:
docker run --rm -v odoo-data:/data -v /backups:/backup alpine \
tar czf /backup/odoo-filestore_$DATE.tar.gz /data
Refuerzo de la seguridad
- Cambie el
admin_passwdpredeterminado en odoo.conf a una contraseña aleatoria segura - Configure
list_db = Falsepara evitar la enumeración de la base de datos. - Utilice
dbfilterpara restringir el acceso a la base de datos a una sola base de datos. - Ejecutar contenedores como usuarios no root siempre que sea posible.
- Mantenga las imágenes de Docker actualizadas con parches de seguridad
- Utilice secretos de Docker o archivos de variables de entorno (no contraseñas en línea)
- Restringir el acceso a la red de contenedores mediante redes Docker
Preguntas frecuentes
P: ¿Cuántos usuarios simultáneos puede manejar un solo contenedor de Odoo?
Con 4 trabajadores, un contenedor Odoo maneja cómodamente entre 20 y 30 usuarios simultáneos. Para una mayor concurrencia, aumente los trabajadores (limitados por CPU/RAM) o implemente múltiples contenedores Odoo detrás de un balanceador de carga.
P: ¿Cómo actualizo Odoo en Docker?
Extraiga la nueva imagen, detenga el contenedor actual, ejecute la nueva imagen con los volúmenes existentes. Los volúmenes persistentes retienen sus datos y su almacén de archivos a través de actualizaciones de imágenes.
P: ¿Debo usar la imagen oficial de Odoo Docker o crear la mía propia?
La imagen oficial funciona para implementaciones estándar. Cree una imagen personalizada cuando necesite paquetes de Python específicos, dependencias del sistema para módulos personalizados o módulos comunitarios preinstalados.
P: ¿Cómo manejo Odoo Enterprise en Docker?
Odoo Enterprise no está disponible como imagen pública de Docker. Monte el directorio de complementos empresariales como un volumen y haga referencia a él en la configuración addons_path. Necesita una suscripción válida de Odoo Enterprise.
¿Qué sigue?
La implementación de Docker le brinda un entorno de producción de Odoo reproducible, escalable y mantenible. Comience con esta configuración y ajuste el número de trabajadores, los límites de memoria y el almacenamiento en caché según sus patrones de uso.
Comuníquese con ECOSIRE para obtener ayuda con la implementación de Odoo, o explore nuestros servicios de soporte de Odoo para alojamiento administrado.
Publicado por ECOSIRE: ayuda a las empresas a escalar con soluciones de software empresarial.
Escrito por
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.
ECOSIRE
Transforme su negocio con Odoo ERP
Implementación, personalización y soporte experto de Odoo para optimizar sus operaciones.
Artículos relacionados
Segmentación de clientes impulsada por IA: del RFM a la agrupación predictiva
Descubra cómo la IA transforma la segmentación de clientes desde el análisis RFM estático hasta la agrupación predictiva dinámica. Guía de implementación con Python, Odoo y datos reales de ROI.
IA para la optimización de la cadena de suministro: visibilidad, predicción y automatización
Transforme las operaciones de la cadena de suministro con IA: detección de demanda, calificación de riesgos de proveedores, optimización de rutas, automatización de almacenes y predicción de interrupciones. Guía 2026.
Estrategia de comercio electrónico B2B: cree un negocio mayorista en línea en 2026
Domine el comercio electrónico B2B con estrategias de precios mayoristas, gestión de cuentas, condiciones de crédito, catálogos perforados y configuración del portal Odoo B2B.