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 Research and Development Team
Construindo produtos digitais de nível empresarial na ECOSIRE. Compartilhando insights sobre integrações Odoo, automação de e-commerce e soluções de negócios com IA.
Artigos Relacionados
Integração do Allegro Marketplace com Odoo: a plataforma de comércio eletrônico líder da Polônia
Guia completo para integração do mercado Allegro com Odoo ERP, cobrindo configuração da API REST, Allegro Smart, licitação e envio para comércio eletrônico polonês.
Automação de contas a pagar com Odoo: da fatura ao pagamento
Automatize contas a pagar no Odoo, desde a captura de faturas, passando pelo fluxo de trabalho de aprovação até a execução do pagamento. Reduza os custos de processamento e elimine multas por atraso no pagamento.
Como escolher o CRM certo para o seu negócio em 2026
A complete guide to selecting the right CRM platform in 2026, comparing Odoo CRM, Salesforce, HubSpot, GoHighLevel, and Zoho across features, pricing, scalability, and industry fit.