Pular para o conteúdo principal

Implantação do Docker Odoo: configuração de contêiner pronto para produção

Implante Odoo em contêineres Docker para produção. Guia completo que cobre a configuração do Docker Compose, configuração do PostgreSQL, proxy reverso Nginx, SSL, backups e escalonamento.

E
ECOSIRE Research and Development Team
|5 de março de 20265 min de leitura983 Palavras|

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.

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:

  1. Servidor de aplicativos Odoo: o contêiner Odoo executando o servidor web e a lógica do aplicativo
  2. Banco de dados PostgreSQL: um contêiner de banco de dados dedicado que armazena todos os dados Odoo
  3. 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 encaminhados
  • workers = 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 agendadas
  • list_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_passwd padrão em odoo.conf para uma senha aleatória forte
  • Defina list_db = False para evitar a enumeração do banco de dados
  • Use dbfilter para 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.

E

Escrito por

ECOSIRE Team

Technical 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.