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 Research and Development Team
Construyendo productos digitales de nivel empresarial en ECOSIRE. Compartiendo perspectivas sobre integraciones Odoo, automatización de eCommerce y soluciones empresariales impulsadas por IA.
Artículos relacionados
Integración de Allegro Marketplace con Odoo: la plataforma de comercio electrónico líder en Polonia
Guía completa para integrar el mercado de Allegro con Odoo ERP que cubre la configuración de API REST, Allegro Smart, ofertas y envíos para el comercio electrónico polaco.
Automatización de cuentas por pagar con Odoo: de la factura al pago
Automatice las cuentas por pagar en Odoo desde la captura de facturas hasta el flujo de trabajo de aprobación y la ejecución del pago. Reduzca los costos de procesamiento y elimine las multas por pagos atrasados.
Cómo elegir el CRM adecuado para su negocio en 2026
Una guía completa para seleccionar la plataforma CRM adecuada en 2026, comparando Odoo CRM, Salesforce, HubSpot, GoHighLevel y Zoho en cuanto a características, precios, escalabilidad y adecuación a la industria.