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
- Um servidor Rocky Linux 9 com um mínimo de 2GB de RAM para hospedar o Odoo Stack.
- 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.
- 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.
- Mantenha seus sistemas atualizados.
$ sudo dnf update - Um usuário não-root com privilégios sudo em ambos os servidores.
- O Fail2Ban deve estar instalado. Esta etapa é opcional. Você pode seguir nosso guia sobre como instalar o Fail2Ban no Rocky Linux para o mesmo.
- O SELinux deve estar desativado.
- Alguns pacotes que seus sistemas precisam.
$ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -yAlguns 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.
- Crie um novo ambiente
virtualenvpara o Odoo.$ python3 -m venv odoo-env - 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 - Atualize o PIP, só por precaução.
(odoo-env) $ pip3 install --upgrade pip - 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:// 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.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.