Implantação do Docker Odoo: configuração de contêiner pronto para produção
O Docker se tornou o método de implantação padrão do Odoo em ambientes de produção, com mais de 10 milhões de pulls de imagens do Odoo Docker no Docker Hub. A implantação em contêineres fornece ambientes reproduzíveis, escalonamento fácil, backups simplificados e separação limpa entre instâncias do Odoo. Este guia cobre uma configuração completa do Docker Odoo pronta para produção.
Principais conclusões
- Docker Compose orquestra Odoo, PostgreSQL e Nginx como serviços conectados
- Volumes persistentes garantem que os dados sobrevivam a reinicializações e atualizações de contêineres
- O proxy reverso Nginx lida com terminação SSL, cache de arquivos estáticos e balanceamento de carga
- Backups automatizados protegem contra perda de dados com intervenção manual mínima
Visão geral da arquitetura
Uma implantação de produção do Odoo Docker consiste em três serviços principais:
- Servidor de aplicativos Odoo: o contêiner Odoo executando o servidor web e a lógica do aplicativo
- Banco de dados PostgreSQL: um contêiner de banco de dados dedicado que armazena todos os dados Odoo
- Proxy reverso Nginx: lida com SSL, fornece arquivos estáticos e faz proxy de solicitações para Odoo
Os serviços opcionais incluem Redis (para cache e armazenamento de sessão), um contêiner de backup (despejos automatizados de banco de dados) e monitoramento (Prometheus + Grafana).
Configuração do Docker Compose
A base da implantação é um arquivo docker-compose.yml que define todos os serviços:
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:
Arquivo de configuração Odoo
Crie config/odoo.conf com configurações otimizadas para produção:
[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
Configurações principais explicadas:
proxy_mode = True: Obrigatório ao executar atrás do Nginx para lidar corretamente com cabeçalhos encaminhadosworkers = 4: Número de processos de trabalho (regra prática: 2 trabalhadores por núcleo de CPU)max_cron_threads = 2: Threads dedicados para ações agendadaslist_db = False: Impede a listagem do banco de dados na página de login (segurança)dbfilter: Restringe o acesso a um único banco de dados
Configuração de proxy reverso 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;
}
}
Estratégia de backup
Backups automatizados de banco de dados
Crie um script de backup que seja executado diariamente via 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
Backup do armazenamento de arquivos
O armazenamento de arquivos Odoo (documentos carregados, anexos) reside no volume odoo-data. Faça backup junto com o banco de dados:
docker run --rm -v odoo-data:/data -v /backups:/backup alpine \
tar czf /backup/odoo-filestore_$DATE.tar.gz /data
Fortalecimento de segurança
- Altere o
admin_passwdpadrão em odoo.conf para uma senha aleatória forte - Defina
list_db = Falsepara evitar a enumeração do banco de dados - Use
dbfilterpara restringir o acesso ao banco de dados a um único banco de dados - Execute contêineres como usuários não-root sempre que possível
- Mantenha as imagens do Docker atualizadas com patches de segurança
- Use segredos do Docker ou arquivos de variáveis de ambiente (não senhas embutidas)
- Restringir o acesso à rede de contêineres usando redes Docker
Perguntas frequentes
P: Quantos usuários simultâneos um único contêiner Odoo pode manipular?
Com 4 trabalhadores, um contêiner Odoo lida confortavelmente com aproximadamente 20 a 30 usuários simultâneos. Para maior simultaneidade, aumente os trabalhadores (limitados por CPU/RAM) ou implante vários contêineres Odoo atrás de um balanceador de carga.
P: Como atualizo o Odoo no Docker?
Extraia a nova imagem, pare o contêiner atual, execute a nova imagem com os volumes existentes. Os volumes persistentes retêm seus dados e armazenamento de arquivos durante as atualizações de imagem.
P: Devo usar a imagem oficial do Odoo Docker ou criar a minha própria?
A imagem oficial funciona para implantações padrão. Crie uma imagem personalizada quando precisar de pacotes Python específicos, dependências de sistema para módulos personalizados ou módulos comunitários pré-instalados.
P: Como lidar com o Odoo Enterprise no Docker?
Odoo Enterprise não está disponível como imagem pública do Docker. Monte o diretório de complementos corporativos como um volume e faça referência a ele na configuração addons_path. Você precisa de uma assinatura válida do Odoo Enterprise.
O que vem a seguir
A implantação do Docker oferece um ambiente de produção Odoo reproduzível, escalonável e de fácil manutenção. Comece com esta configuração e ajuste as contagens de trabalhadores, os limites de memória e o cache com base nos seus padrões de uso.
Entre em contato com a ECOSIRE para obter assistência na implantação do Odoo ou explore nossos serviços de suporte Odoo para hospedagem gerenciada.
Publicado pela ECOSIRE – ajudando empresas a escalar com soluções 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 seu negócio com o Odoo ERP
Implementação, personalização e suporte especializado do Odoo para agilizar suas operações.
Artigos Relacionados
Como adicionar um botão personalizado a uma visualização de formulário Odoo (2026)
Adicione botões de ação personalizados às visualizações de formulário do Odoo 19: método de ação Python, herança de visualização, visibilidade condicional, caixas de diálogo de confirmação. Testado em produção.
Como adicionar um campo personalizado no Odoo sem Studio (2026)
Adicione campos personalizados por meio de módulo personalizado no Odoo 19: herança de modelo, extensão de visualização, campos computados, decisões de loja/não loja. Código primeiro, controlado por versão.
Como adicionar um relatório personalizado no Odoo usando layout externo
Crie um relatório PDF de marca no Odoo 19 usando web.external_layout: modelo QWeb, formato de papel, vinculação de ação. Com logotipo impresso + substituições de rodapé.