Odoo Installation · 23 min read · Nov 17, 2025

Como Instalar o Software Odoo 17 ERP no Rocky Linux 9

Odoo (anteriormente conhecido como OpenERP) é um conjunto auto-hospedado de mais de 10.000 aplicações de código aberto para diversas necessidades empresariais, incluindo CRM, eCommerce, contabilidade, inventário, gerenciamento de projetos e ponto de venda. Essas aplicações são totalmente integradas e acessadas através de uma interface web familiar.

Este tutorial nos ensinará a instalar o Odoo 16 Stack em um servidor Rocky Linux 9.

Pré-requisitos

  1. Um servidor Rocky Linux 9 com um mínimo de 2GB de RAM para hospedar o Odoo Stack.
  2. Um segundo servidor Rocky Linux 9 com um mínimo de 2GB de RAM para hospedar o banco de dados PostgreSQL. Você pode, no entanto, instalar o banco de dados no mesmo servidor que o Odoo, mas para ambientes de produção, é altamente recomendável que você o instale em um servidor separado. Você também pode escolher qualquer uma das opções de banco de dados gerenciadas disponíveis de qualquer provedor de sua escolha.
  3. O requisito de RAM dependerá do número de usuários simultâneos que estarão usando o stack. Um guia detalhado sobre como calcular os requisitos do sistema pode ser encontrado na documentação do Odoo.
  4. Mantenha seus sistemas atualizados. $ sudo dnf update
  5. Um usuário não-root com privilégios sudo em ambos os servidores.
  6. O Fail2Ban deve estar instalado. Esta etapa é opcional. Você pode seguir nosso guia sobre como instalar o Fail2Ban no Rocky Linux para o mesmo.
  7. O SELinux deve estar desativado.
  8. Alguns pacotes que seus sistemas precisam. $ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y Alguns desses pacotes podem já estar instalados em seu sistema.

Passo 1 - Configurar regras de Firewall

O primeiro passo é configurar o firewall. O Rocky Linux usa o Firewalld Firewall. Para este tutorial, assumiremos que você tem o firewall Firewalld instalado em ambos os servidores.

Verifique o status do firewall.

$ sudo firewall-cmd --state
running

O firewall funciona com diferentes zonas, e a zona pública é a padrão que usaremos. Liste todos os serviços e portas ativos no firewall.

$ sudo firewall-cmd --zone=public --list-all

Deve mostrar a seguinte saída.

public
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

No servidor Odoo, precisaremos que as portas 22, 80, 443, 6010, 5432 e 8069 estejam abertas. A porta 22 é usada para SSH, 80 é para HTTP, 443 é para HTTPS, 6010 é usada para comunicação do Odoo, 5432 é usada pelo PostgreSQL e 8069 é usada para a aplicação do servidor Odoo.

Execute os seguintes comandos para abrir as portas necessárias no servidor Odoo.

$ sudo firewall-cmd --zone=public --add-port={6010,5432,8069,8072}/tcp
$ sudo firewall-cmd --zone=public --add-service=http
$ sudo firewall-cmd --zone=public --add-service=https

Verifique o status do firewall.

$ sudo firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: cockpit dhcpv6-client http https ssh
  ports: 6010/tcp 5432/tcp 8069/tcp 8072/tcp
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

No servidor PostgreSQL, precisamos abrir as portas 22, 6010 e 5432. Abra-as usando os seguintes comandos.

$ sudo firewall-cmd --zone=public --add-port={6010,5432}/tcp

Torne todas as alterações permanentes e recarregue o firewall para habilitar as mudanças.

$ sudo firewall-cmd --runtime-to-permanent
$ sudo firewall-cmd --reload

Passo 2 - Atribuir Nomes de Host

Você pode usar os endereços IP dos servidores ou usar seus Nomes de Domínio Totalmente Qualificados (FQDN), se disponíveis. Para nosso tutorial, usaremos FQDNs e para isso, precisamos definir nomes de host em ambos os servidores.

Defina o nome do host no servidor Odoo usando o seguinte comando.

$ sudo hostnamectl set-hostname odoo.seudominio.com

Defina o nome do host no servidor PostgreSQL usando o seguinte comando.

$ sudo hostnamectl set-hostname postgresql.seudominio.com

No servidor Odoo, abra o arquivo /etc/hosts.

$ sudo nano /etc/hosts

Certifique-se de que ele se pareça com o seguinte.

127.0.0.1  localhost
127.0.0.1  odoo.seudominio.com  odoo
10.1.1.10  postgresql.seudominio.com  postgresql

No servidor PostgreSQL, abra o arquivo e certifique-se de que ele se pareça com o seguinte.

127.0.0.1  localhost
127.0.0.1  postgresql.seudominio.com  postgresql
10.1.2.10  odoo.seudominio.com  odoo

Pressione Ctrl + X para fechar o editor e pressione Y quando solicitado a salvar o arquivo.

Passo 3 - Instalar e Configurar o PostgreSQL

O Rocky Linux 9 vem com o PostgreSQL 13 por padrão e o PostgreSQL 15 como o stream do módulo postgresql:15. No entanto, instalaremos a versão mais recente disponível no momento da redação deste tutorial, o PostgreSQL 16 de seu repositório oficial.

Instale o RPM do repositório do PostgreSQL.

$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

Desative o módulo PostgreSQL embutido.

$ sudo dnf -qy module disable postgresql

Instale o PostgreSQL 16.

$ sudo dnf install -y postgresql16-server postgresql16-contrib

Inicialize o banco de dados.

$ sudo /usr/pgsql-16/bin/postgresql-16-setup initdb

Habilite e inicie o serviço PostgreSQL.

$ sudo systemctl enable postgresql-16
$ sudo systemctl start postgresql-16

Verifique o status do serviço.

$ sudo systemctl status postgresql-16

Você deve obter uma saída semelhante.

? postgresql-16.service - PostgreSQL 16 database server
     Loaded: loaded (/usr/lib/systemd/system/postgresql-16.service; enabled; preset: disabled)
     Active: active (running) since Sun 2024-04-07 02:22:42 UTC; 3s ago
       Docs: https://www.postgresql.org/docs/16/static/
    Process: 8673 ExecStartPre=/usr/pgsql-16/bin/postgresql-16-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
   Main PID: 8678 (postgres)
      Tasks: 7 (limit: 10819)
     Memory: 17.4M
        CPU: 60ms
     CGroup: /system.slice/postgresql-16.service
             ??8678 /usr/pgsql-16/bin/postgres -D /var/lib/pgsql/16/data/
             ??8679 "postgres: logger "
             ??8680 "postgres: checkpointer "
             ??8681 "postgres: background writer "
             ??8683 "postgres: walwriter "
             ??8684 "postgres: autovacuum launcher "
             ??8685 "postgres: logical replication launcher "

Apr 07 02:22:42 postgresql systemd[1]: Starting PostgreSQL 16 database server...
Apr 07 02:22:42 postgresql postgres[8678]: 2024-04-07 02:22:42.370 UTC [8678] LOG:  redirecting log output to logging collector process
Apr 07 02:22:42 postgresql postgres[8678]: 2024-04-07 02:22:42.370 UTC [8678] HINT:  Future log output will appear in directory "log".
Apr 07 02:22:42 postgresql systemd[1]: Started PostgreSQL 16 database server.

Em seguida, precisamos criar um usuário de banco de dados odoo. Você será solicitado a fornecer uma senha para o papel. Digite uma senha forte de sua escolha.

$ sudo -u postgres createuser odoo -U postgres -dP

A opção -u executa o comando como usuário postgres.

A opção -U indica o nome do usuário para se conectar.

A opção -d concede ao usuário permissão para criar bancos de dados.

A opção -p solicita a senha do novo usuário.

Configurar Autenticação Baseada em Host

Precisamos conceder permissão ao serviço PostgreSQL para poder se conectar ao servidor Odoo.

Primeiro, pare o serviço PostgreSQL.

$ sudo systemctl stop postgresql-16

Para encontrar onde o PostgreSQL armazena o arquivo de Autenticação do Cliente, execute o seguinte comando para iniciar o shell do PostgreSQL.

$ sudo -u postgres psql

Execute a seguinte consulta para encontrar a localização do arquivo.

postgres=# SHOW hba_file;

Você receberá a seguinte saída.

              hba_file              
------------------------------------
 /var/lib/pgsql/16/data/pg_hba.conf
(1 row)

Digite exit para sair do shell.

Abra o arquivo /var/lib/pgsql/16/data/pg_hba.conf para edição.

$ sudo nano /var/lib/pgsql/16/data/pg_hba.conf

Cole a seguinte linha no final.

host    all        odoo        odoo.seudominio.com        scram-sha-256

Esta linha concede permissão ao usuário odoo para se conectar a todos os bancos de dados dentro deste servidor. Você também pode especificar o nome dos bancos de dados em vez de usar a palavra-chave all.

Pressione Ctrl + X para fechar o editor e pressione Y quando solicitado a salvar o arquivo.

Configurar Endereço de Escuta do PostgreSQL

Em seguida, precisamos permitir que o servidor de banco de dados escute conexões remotas.

Inicie o shell do PostgreSQL e execute o seguinte comando para localizar o arquivo de configuração do PostgreSQL.

$ sudo -u postgres psql
postgres=# SHOW config_file;

Você receberá a seguinte saída.

              config_file               
----------------------------------------
 /var/lib/pgsql/16/data/postgresql.conf
(1 row)

Digite exit para sair do shell.

Abra o arquivo /var/lib/pgsql/16/data/postgresql.conf para edição.

$ sudo nano /var/lib/pgsql/16/data/postgresql.conf

Altere a linha listen_addresses de

#listen_addresses = 'localhost' # what IP address(es) to listen on;

para.

listen_addresses = '*'

O * significa que ele ouvirá todos os endereços IP. Você pode alterá-lo para o endereço IP de sua instância do Odoo.

listen_addresses = 'localhost, '

Pressione Ctrl + X para fechar o editor e pressione Y quando solicitado a salvar o arquivo.

Habilitar e Iniciar o Serviço PostgreSQL

Como nossa configuração está concluída, é hora de iniciar o serviço PostgreSQL.

$ sudo systemctl start postgresql-16    

Passo 4 - Instalar o Odoo

Instalar Python 3.10

O Rocky Linux 9 vem com Python 3.9, enquanto o Odoo 17 requer Python 3.10 ou superior. Portanto, precisamos instalar isso primeiro.

Você pode verificar a versão atualmente disponível primeiro.

$ python --version
Python 3.9.18

Instale as dependências necessárias para o Python.

$ sudo dnf groupinstall "Development Tools"
$ sudo dnf install readline-devel ncurses-devel openssl-devel sqlite-devel tk-devel gdbm-devel libc6-dev libbz2-dev libffi-dev zlib1g-dev
$ sudo dnf install -y openssl-devel bzip2-devel libffi-devel readline-devel ncurses-devel sqlite-devel tk-devel

Baixe o código-fonte do site do Python. No momento da redação deste tutorial, a versão mais recente disponível é a 3.10.14, que é a que usamos.

$ wget https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz

Extraia o arquivo.

$ tar xzf Python-3.10.14.tgz

Mude para o diretório extraído.

$ cd Python-3.10.14

Configure o código-fonte.

$ ./configure --enable-optimizations

Instale o Python 3.10.14. O comando altinstall é usado para que não sobrescreva a versão do Python do sistema.

$ sudo make altinstall

Confirme a instalação.

$ python3.10 -V
OR
$ python3.10 --version

Você deve obter a seguinte saída.

Python 3.10.14

Em seguida, precisamos definir o Python 3.10 como a versão padrão do Python. Crie links simbólicos para cada versão do Python instalada em seu servidor. Ao criar a versão simbólica, você deve incluir a versão exata do Python em seus comandos. Execute os seguintes comandos para criar os links simbólicos.

$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.10 1
$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 2

Para visualizar as versões disponíveis do Python, use o seguinte comando.

$ sudo update-alternatives --config python3

Você deve ver a seguinte saída.

There are 2 programs which provide 'python3'.

  Selection    Command
-----------------------------------------------
   1           /usr/local/bin/python3.10
*+ 2           /usr/bin/python3.9

Enter to keep the current selection[+], or type selection number:

Selecione o número 1 para mudar para o Python 3.10.

Desconecte e faça login novamente no terminal para mudar para a versão do Python. Você pode agora usar o Python 3.10.14 usando python diretamente.

Instalar dependências e Preparar para instalação

Crie um novo usuário do sistema para gerenciar os processos do Odoo no servidor Odoo com o diretório home como /opt/odoo. Isso é para evitar qualquer risco de segurança executando-o sob o usuário root.

$ sudo useradd -m -d /opt/odoo -U -r -s /bin/bash odoo

Instale as dependências do sistema necessárias para a configuração do Odoo 17.

$ sudo dnf install -y git libxslt-devel bzip2-devel openldap-devel libjpeg-devel freetype-devel libpq-devel

Instale o Nodejs. O Rocky Linux 9 vem com o Node 18.x, que é a versão LTS atual do Nodejs. No entanto, usaremos o repositório oficial do Nodesource para isso.

Adicione o repositório do Node 20.

$ curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -

Instale o Nodejs.

$ sudo dnf -y install nodejs

Confirme a versão do Node.

$ node --version
v20.12.1

Instale o pacote Less CSS usando o Node. Se você estiver usando um idioma com interface da direita para a esquerda, instale também o pacote rtlcss.

$ sudo npm install -g less rtlcss

Instale o wkhtmltopdf. Usaremos o pacote RPM do repositório de empacotamento do Wkhtmltopdf no GitHub. A versão mais recente disponível no momento da redação deste tutorial é 0.12.6.1 r3.

Baixe o RPM do Wkhtmltopdf.

$ cd ~
$ wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox-0.12.6.1-3.almalinux9.x86_64.rpm

Instale as fontes necessárias pelo Wkhtmltopdf.

$ sudo dnf install xorg-x11-fonts-75dpi.noarch xorg-x11-fonts-Type1.noarch

Instale o Wkhtmltopdf.

$ sudo rpm -i wkhtmltox-0.12.6.1-3.almalinux9.x86_64.rpm

Verifique a versão do wkhtmltopdf instalada.

$ wkhtmltopdf --version
wkhtmltopdf 0.12.6.1 (with patched qt)

Baixar Arquivos do Odoo

Mude para o usuário do sistema Odoo.

$ sudo su - odoo

Clone o repositório do Github do Odoo em seu sistema.

$ git clone https://github.com/odoo/odoo.git --depth 1 --branch 17.0 --single-branch

Para nosso propósito, estamos copiando o Odoo para o diretório /opt/odoo, de onde será instalado. Isso criará o diretório /opt/odoo/odoo, que usaremos para a instalação.

Configurar Ambiente Python Virtual

Esta etapa é opcional, mas é recomendada, pois um ambiente Python virtual para o Odoo ajudará a evitar conflitos com os módulos Python do sistema operacional, especialmente ao realizar atualizações do SO.

Para isso, usaremos o virtualenv.

  1. Crie um novo ambiente virtualenv para o Odoo. $ python3 -m venv odoo-env
  2. Ative o ambiente virtual. Estamos criando um ambiente sob o diretório home do usuário do sistema. Você é livre para escolher qualquer local que desejar. $ source odoo-env/bin/activate
  3. Atualize o PIP, só por precaução. (odoo-env) $ pip3 install --upgrade pip
  4. Instale o wheel do Python no ambiente virtual. $ pip3 install wheel

Instalar Dependências do Python

Instale as dependências do Python necessárias para o Odoo 17.

$ pip3 install -r /opt/odoo/odoo/requirements.txt

Os requisitos levarão algum tempo para serem instalados, então seja paciente.

Verifique se os requisitos estão instalados corretamente verificando a lista de módulos Python instalados.

$ pip3 list
Package           Version
----------------- --------
attrs             23.2.0
Babel             2.9.1
beautifulsoup4    4.12.3
cached-property   1.5.2
certifi           2024.2.2
cffi              1.16.0
chardet           4.0.0
cryptography      3.4.8
decorator         4.4.2
docopt            0.6.2
docutils          0.17
ebaysdk           2.1.5
freezegun         1.1.0
geoip2            2.9.0
gevent            21.8.0
greenlet          1.1.2
idna              2.10
isodate           0.6.1
Jinja2            3.0.3
libsass           0.20.1
lxml              4.8.0
MarkupSafe        2.0.1
maxminddb         2.6.0
num2words         0.5.10
ofxparse          0.21
passlib           1.7.4
Pillow            9.0.1
pip               24.0
platformdirs      4.2.0
polib             1.1.1
psutil            5.9.0
psycopg2          2.9.2
pyasn1            0.6.0
pyasn1_modules    0.4.0
pycparser         2.22
pydot             1.4.2
pyOpenSSL         21.0.0
pyparsing         3.1.2
PyPDF2            1.26.0
pyserial          3.5
python-dateutil   2.8.1
python-ldap       3.4.0
python-stdnum     1.17
pytz              2024.1
pyusb             1.2.1
qrcode            7.3.1
reportlab         3.6.8
requests          2.25.1
requests-file     2.0.0
requests-toolbelt 1.0.0
rjsmin            1.1.0
setuptools        65.5.0
six               1.16.0
soupsieve         2.5
urllib3           1.26.5
vobject           0.9.6.1
Werkzeug          2.0.2
wheel             0.43.0
xlrd              1.2.0
XlsxWriter        3.0.2
xlwt              1.3.0
zeep              4.1.0
zope.event        5.0
zope.interface    6.2

Saia do ambiente virtual Python.

$ deactivate

Criar um diretório para addons de terceiros

$ mkdir /opt/odoo/odoo/custom-addons

Este diretório deve ser adicionado ao parâmetro addons_path que define os diretórios onde o Odoo procura por módulos. Saia do usuário do sistema Odoo.

$ exit

Passo 5 - Configurar o Odoo

Copie o arquivo de configuração padrão do Odoo para criar um novo.

$ sudo cp /opt/odoo/odoo/debian/odoo.conf /etc/odoo.conf

Abra o arquivo para edição.

$ sudo nano /etc/odoo.conf

Edite o arquivo para que fique assim:

[options]
; Esta é a senha que permite operações no banco de dados:
admin_passwd = admin
db_host = postgresql.seudominio.com
db_port = False
db_user = odoo
db_password = senha_odoo
addons_path = /opt/odoo/odoo/addons, /opt/odoo/odoo/custom-addons
xmlrpc_port = 8069
default_productivity_apps = True

Pressione Ctrl + X para fechar o editor e pressione Y quando solicitado a salvar o arquivo.

A opção admin_passwd é a senha que permite operações administrativas dentro da GUI do Odoo. Certifique-se de escolher uma senha segura.

A opção db_host é o FQDN ou o endereço IP do servidor PostgreSQL.

A opção db_port está definida como falsa, uma vez que a porta padrão do PostgreSQL 5432 está sendo usada. Se você quiser usar uma porta diferente, precisará atualizar este valor.

A opção db_user é o nome do usuário do PostgreSQL.

A opção db_password é a senha do usuário ‘odoo’ do PostgreSQL que criamos anteriormente no servidor PostgreSQL.

A opção addons_path é o caminho padrão dos Addons. Você também pode adicionar um caminho personalizado para Addons separando-os com vírgulas.

A opção xmlrpc_port é a porta que o Odoo escuta.

A opção default_productivity_apps garante que os aplicativos de produtividade padrão (nomeadamente Funcionários, Marketing por Email, Projeto e Pesquisas) permaneçam habilitados. Esses quatro aplicativos são os padrões na Edição Community do Odoo. Na edição Enterprise, há aplicativos de produtividade adicionais que podem ser habilitados por padrão, que são Agendamentos, Conhecimento, Planejamento e Assinatura.

Criar serviço Odoo

Para garantir que o Odoo continue em execução mesmo após uma reinicialização do sistema, precisamos criar um serviço para ele.

Crie um arquivo /lib/systemd/system/odoo-server.service e abra-o para edição.

$ sudo nano /lib/systemd/system/odoo-server.service

Cole o seguinte código nele.

[Unit]
Description=Odoo Open Source ERP and CRM
Requires=postgresql-16.service
After=network.target postgresql-16.service

[Service]
Type=simple
SyslogIdentifier=odoo-server
User=odoo
Group=odoo
ExecStart=/opt/odoo/odoo-env/bin/python3 /opt/odoo/odoo/odoo-bin --config=/etc/odoo.conf --addons-path=/opt/odoo/odoo/addons/ --logfile /var/log/odoo/odoo-server.log
WorkingDirectory=/opt/odoo/odoo/
StandardOutput=journal+console
KillMode=mixed

[Install]
WantedBy=multi-user.target

Substitua /home/ pelo local que você escolheu para instalar o Ambiente Virtual Python.

Pressione Ctrl + X para fechar o editor e pressione Y quando solicitado a salvar o arquivo.

Criar um diretório de Log para o Odoo

$ sudo mkdir /var/log/odoo

Definir Permissões de Arquivo

Defina permissões no arquivo odoo-server.service para que apenas usuários do Odoo possam lê-lo ou executá-lo.

$ sudo chmod 755 /lib/systemd/system/odoo-server.service
$ sudo chown odoo: /lib/systemd/system/odoo-server.service

Defina a propriedade no ambiente Python, na instalação do Odoo e no diretório de log.

$ sudo chown -R odoo: /opt/odoo/
$ sudo chown -R odoo: /opt/odoo/odoo-env
$ sudo chown -R odoo: /var/log/odoo

Restringa o arquivo de configuração do Odoo.

$ sudo chown odoo: /etc/odoo.conf
$ sudo chmod 640 /etc/odoo.conf

Iniciar o servidor Odoo

Inicie e habilite o servidor Odoo.

$ sudo systemctl start odoo-server
$ sudo systemctl enable odoo-server

Verifique o status do servidor.

$ sudo systemctl status odoo-server
? odoo-server.service - Odoo Open Source ERP and CRM
     Loaded: loaded (/usr/lib/systemd/system/odoo-server.service; enabled; preset: disabled)
     Active: active (running) since Tue 2024-04-09 23:59:38 UTC; 1s ago
   Main PID: 102598 (python3)
      Tasks: 4 (limit: 10736)
     Memory: 69.6M
        CPU: 895ms
     CGroup: /system.slice/odoo-server.service
             ??102598 /opt/odoo/odoo-env/bin/python3 /opt/odoo/odoo/odoo-bin --config=/etc/odoo.conf --addons-path=/opt/odoo/odoo/addons/ --logfile /var/log/odoo/odoo-server.log

Apr 09 23:59:38 odoo.seudominio.com systemd[1]: Started Odoo Open Source ERP and CRM.

Passo 6 - Instalar e Configurar o Nginx

O Rocky Linux 9 vem com uma versão mais antiga do Nginx. Você precisa usar o repositório oficial do Nginx para instalar a versão mais recente.

Crie e abra o arquivo /etc/yum.repos.d/nginx.repo para edição.

$ sudo nano /etc/yum.repos.d/nginx.repo

Cole o seguinte código nele.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Uma vez que você tenha terminado, salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado. Usaremos a versão mainline do Nginx e, portanto, habilitamos o repositório mainline no arquivo acima usando enabled=1 sob a seção mainline em vez da estável. Você pode escolher qualquer um dos dois.

Instale o Nginx.

$ sudo dnf install -y nginx

Verifique a instalação.

$ nginx -v
nginx version: nginx/1.25.4

Habilite e inicie o serviço do servidor Nginx.

$ sudo systemctl enable nginx --now

Verifique o status do serviço.

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
     Active: active (running) since Wed 2024-04-10 06:52:14 UTC; 3s ago
       Docs: http://nginx.org/en/docs/
    Process: 103452 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 103453 (nginx)
      Tasks: 3 (limit: 10736)
     Memory: 3.1M
        CPU: 17ms
     CGroup: /system.slice/nginx.service
             ??103453 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??103454 "nginx: worker process"
             ??103455 "nginx: worker process"

Passo 7 - Instalar SSL

Precisamos instalar o Certbot para gerar certificados SSL gratuitos oferecidos pelo Let’s Encrypt. Usaremos o instalador de pacotes Snapd para isso. Ele requer o repositório EPEL (Extra Packages for Enterprise Linux) para funcionar.

Instale o repositório EPEL.

$ sudo dnf install -y epel-release

O Rocky Linux 9 não vem com o Snapd instalado. Instale o pacote Snapd.

$ sudo dnf install -y snapd

Habilite e inicie o serviço Snap.

$ sudo systemctl enable snapd --now

Instale o pacote core do Snap e certifique-se de que sua versão do Snapd esteja atualizada.

$ sudo snap install core
$ sudo snap refresh core

Crie os links necessários para o Snapd funcionar.

$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

Instale o Certbot.

$ sudo snap install --classic certbot

Use o seguinte comando para garantir que o comando Certbot possa ser executado criando um link simbólico para o diretório /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Verifique se o Certbot está funcionando corretamente.

$ certbot --version
certbot 2.10.0

Gere o certificado. Também precisamos criar um certificado DHParams.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d odoo.seudominio.com

Gere um certificado de troca de chave Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Verifique o serviço agendador de renovação do Certbot.

$ sudo systemctl list-timers

Você encontrará snap.certbot.renew.service como um dos serviços agendados para execução.

NEXT                        LEFT          LAST                        PASSED   UNIT                         ACTIVATES
....                        ....          ....                        ......   ....                         ..........
Wed 2024-04-10 13:32:11 UTC 1h 42min left Wed 2024-04-10 11:43:41 UTC 5min ago dnf-makecache.timer          dnf-makecache.service
Wed 2024-04-10 19:08:00 UTC 7h left       -                           -        snap.certbot.renew.timer     snap.certbot.renew.service
Thu 2024-04-11 00:00:00 UTC 12h left      Wed 2024-04-10 00:00:36 UTC 11h ago  logrotate.timer              logrotate.service

Faça um teste do processo para verificar se a renovação do SSL está funcionando corretamente.

$ sudo certbot renew --dry-run

Se você não vir erros, está tudo pronto. Seu certificado será renovado automaticamente.

Passo 8 - Configurar o Nginx

Para executá-lo via Nginx, precisamos executar o Odoo no localhost. Para mudar isso, pare o serviço Odoo.

$ sudo systemctl stop odoo-server

Abra o arquivo de configuração do servidor Odoo.

$ sudo nano /etc/odoo.conf

Adicione as seguintes linhas a ele.

xmlrpc_interface = 127.0.0.1
proxy_mode = True

Crie um arquivo de configuração do Nginx para o Odoo.

$ sudo nano /etc/nginx/conf.d/odoo.conf

Cole o código abaixo.

# servidor odoo
upstream odoo {
 server 127.0.0.1:8069;
}
upstream odoochat {
 server 127.0.0.1:8072;
}
map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}
map $sent_http_content_type $content_type_csp {
    default "";
    ~image/ "default-src 'none'";
}

# http -> https
server {
   listen 80;
   listen [::]:80;
   server_name odoo.seudominio.com;
   return 301 https://$host$request_uri;
}

server {
 listen 443 ssl;
 listen [::]:443 ssl;
 http2 on;
 http3 on;
 quic_retry on;

 server_name odoo.seudominio.com;

 proxy_read_timeout 720s;
 proxy_connect_timeout 720s;
 proxy_send_timeout 720s;

 # Adicionar Cabeçalhos para modo proxy do 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;

 # Parâmetros SSL
 ssl_certificate /etc/letsencrypt/live/odoo.seudominio.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/odoo.seudominio.com/privkey.pem;
 ssl_trusted_certificate /etc/letsencrypt/live/odoo.seudominio.com/chain.pem;

 ssl_session_timeout 30m;
 ssl_session_cache shared:MozSSL:10m;  # cerca de 40000 sessões
 ssl_session_tickets off;

 ssl_protocols TLSv1.2 TLSv1.3;
 ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
 ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
 ssl_prefer_server_ciphers off;
 ssl_stapling on;
 ssl_stapling_verify on;
 ssl_dhparam /etc/ssl/certs/dhparam.pem;

 # log
 access_log /var/log/nginx/odoo.access.log;
 error_log /var/log/nginx/odoo.error.log;

 # Redirecionar solicitações longpoll para a porta de longpolling do odoo
 location /longpolling {
   proxy_pass http://odoochat;
 }

 location /websocket {
   proxy_pass http://odoochat;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection $connection_upgrade;
   proxy_set_header X-Forwarded-Host $http_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;
   proxy_cookie_flags session_id samesite=lax secure;  # requer nginx 1.19.8
 }

 # Redirecionar solicitações para o servidor backend do odoo
 location / {
  # Adicionar Cabeçalhos para modo proxy do odoo
   proxy_set_header X-Forwarded-Host $http_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;
   proxy_redirect off;
   proxy_pass http://odoo;
   proxy_cookie_flags session_id samesite=lax secure;  # requer nginx 1.19.8
 }

 # gzip comum
 gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript;
 gzip on;

 # Servir arquivos estáticos imediatamente
 location ~ ^/[^/]+/static/.+$ {
   # root e try_files dependem dos seus caminhos de addons
   root /opt/odoo/odoo;
   try_files /opt/odoo/odoo/addons$uri @odoo;
   expires 24h;
   add_header Content-Security-Policy $content_type_csp;
 }
}

Pressione Ctrl + X para fechar o editor e pressione Y quando solicitado a salvar o arquivo.

Abra o arquivo /etc/nginx/nginx.conf para edição.

$ sudo nano /etc/nginx/nginx.conf

Adicione a seguinte linha antes da linha include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size 64;

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Teste a configuração do Nginx.

$ sudo nginx -t

Se você não vir erros, significa que está tudo certo. Reinicie o servidor Nginx.

$ sudo systemctl restart nginx

Passo 9 - Iniciar o Odoo

Podemos iniciar o servidor Odoo novamente após tudo estar configurado.

$ sudo systemctl start odoo-server

Acesse o Odoo em seu navegador via https://odoo.seudominio.com. No seu navegador, abra a URL http://:8069 ou http://odoo.seudominio.com:8069. Você deve ver a tela de criação do banco de dados do Odoo se tudo estiver funcionando corretamente.

Escolha seu email e senha para criar suas credenciais de login. A senha mestre é a admin_passwd que você adicionou no arquivo /etc/odoo.conf. Preencha todos os campos restantes.

Marque o campo Dados de Demonstração para preencher o banco de dados com dados de exemplo. Não instale dados de demonstração em servidores expostos à internet. Bancos de dados com dados de demonstração contêm logins e senhas padrão que podem ser usados para acessar seus sistemas e causar problemas significativos, mesmo em sistemas de teste/desenvolvimento. Estamos usando isso apenas para fins de tutorial.

Clique no botão Criar banco de dados para prosseguir e completar a instalação. A primeira vez que você cria um banco de dados, a página de addons levará tempo para carregar, então não atualize a página. Você será redirecionado automaticamente para a seguinte página de login assim que o banco de dados for criado.

Insira as credenciais usadas na etapa anterior para fazer login no Odoo ERP e você será levado à página do painel, conforme mostrado abaixo. Ele será preenchido com dados de demonstração. Se você não tiver marcado a opção de dados de demonstração na página de criação do banco de dados, você receberá um painel diferente e muito mais limpo.

Você pode começar a usar o Odoo para gerenciar seu negócio a partir daqui.

Passo 10 - Atualizar o Odoo

Pare o servidor Odoo.

$ sudo systemctl stop odoo-server

Mude para o usuário do sistema Odoo.

$ sudo su - odoo

Puxe o código-fonte mais recente do GitHub.

$ git fetch
$ git rebase --autostash

O segundo comando pode encontrar conflitos de código-fonte se você alterar manualmente o código-fonte. Você receberá a lista de arquivos em conflito. Você precisará alterar manualmente todos os arquivos e executar o comando novamente para corrigir os problemas.

Se você quiser descartar as alterações conflitantes, pode executar o seguinte comando para redefinir a origem.

$ git reset --hard

Ative o ambiente virtual Python.

$ source odoo-env/bin/activate

Instale as dependências do Python.

$ pip3 install -r /opt/odoo/odoo/requirements.txt

Saia do ambiente virtual Python.

$ deactivate

Inicie o servidor Odoo.

$ sudo systemctl start odoo-server

Passo 11 - Proteger o Odoo usando Fail2Ban

Esta etapa é opcional, mas se você tiver o Fail2Ban instalado, pode adicionar configuração para o Odoo para protegê-lo.

Crie e abra o arquivo odoo-login.conf para edição.

$ sudo nano /etc/fail2ban/jail.d/odoo-login.conf

Cole o seguinte código nele.

[odoo-login]
enabled = true
port = http,https
bantime = 900  ; 15 min ban
maxretry = 10  ; if 10 attempts
findtime = 60  ; within 1 min  /!\ Should be adjusted with the TZ offset
logpath = /var/log/odoo.log  ;  set the actual odoo log path here

Pressione Ctrl + X para fechar o editor e pressione Y quando solicitado a salvar o arquivo.

Crie e abra o arquivo de filtro odoo-login.conf para edição.

$ sudo nano /etc/fail2ban/filter.d/odoo-login.conf

Cole o seguinte código nele.

[Definition]
failregex = ^ \d+ INFO \S+ \S+ Login failed for db:\S+ login:\S+ from 
ignoreregex =

Pressione Ctrl + X para fechar o editor e pressione Y quando solicitado a salvar o arquivo.

Reinicie o Fail2Ban.

$ sudo systemctl restart fail2ban

Conclusão

Isso conclui nosso tutorial sobre como instalar e configurar o Odoo no servidor Rocky Linux 9. Se você tiver alguma dúvida, poste nos comentários abaixo.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.