Odoo Installazione · 22 min read · Nov 17, 2025

Come installare il software ERP Odoo 17 su Rocky Linux 9

Odoo (precedentemente noto come OpenERP) è una suite auto-ospitata di oltre 10.000 applicazioni open-source per varie esigenze aziendali, tra cui CRM, eCommerce, contabilità, inventario, gestione progetti e punto vendita. Queste applicazioni sono completamente integrate e accessibili tramite un’interfaccia web familiare.

Questo tutorial ci insegnerà a installare Odoo 16 Stack su un server Rocky Linux 9.

Prerequisiti

  1. Un server Rocky Linux 9 con un minimo di 2GB di RAM per ospitare Odoo Stack.
  2. Un secondo server Rocky Linux 9 con un minimo di 2GB di RAM per ospitare il database PostgreSQL. Puoi, tuttavia, installare il database sullo stesso server di Odoo, ma per ambienti di produzione, è altamente raccomandato installarlo su un server separato. Puoi anche scegliere una delle opzioni di database gestito disponibili da qualsiasi fornitore di tua scelta.
  3. Il requisito di RAM dipenderà dal numero di utenti concorrenti che utilizzeranno lo stack. Una guida dettagliata su come calcolare i requisiti di sistema può essere trovata nella documentazione di Odoo.
  4. Mantieni i tuoi sistemi aggiornati. $ sudo dnf update
  5. Un utente non root con privilegi sudo su entrambi i server.
  6. Fail2Ban dovrebbe essere installato. Questo passaggio è facoltativo. Puoi seguire la nostra guida su come installare Fail2Ban su Rocky Linux per lo stesso.
  7. SELinux dovrebbe essere disabilitato.
  8. Alcuni pacchetti di cui i tuoi sistemi hanno bisogno. $ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y Alcuni di questi pacchetti potrebbero già essere installati sul tuo sistema.

Passo 1 - Configurare le regole del firewall

Il primo passo è configurare il firewall. Rocky Linux utilizza Firewalld Firewall. Per questo tutorial, presumeremo che tu abbia installato il firewall Firewalld su entrambi i server.

Controlla lo stato del firewall.

$ sudo firewall-cmd --state
running

Il firewall funziona con diverse zone, e la zona pubblica è quella predefinita che utilizzeremo. Elenca tutti i servizi e le porte attive sul firewall.

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

Dovrebbe mostrare il seguente output.

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:

Sul server Odoo, avremo bisogno che le porte 22, 80, 443, 6010, 5432 e 8069 siano aperte. La porta 22 è utilizzata per SSH, la 80 è per HTTP, la 443 è per HTTPS, la 6010 è utilizzata per la comunicazione di Odoo, la 5432 è utilizzata da PostgreSQL e la 8069 è utilizzata per l’applicazione server di Odoo.

Esegui i seguenti comandi per aprire le porte richieste sul server 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

Controlla lo stato del 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:

Sul server PostgreSQL, dobbiamo aprire le porte 22, 6010 e 5432. Aprile utilizzando i seguenti comandi.

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

Rendi tutte le modifiche permanenti e ricarica il firewall per abilitare le modifiche.

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

Passo 2 - Assegna nomi host

Puoi utilizzare gli indirizzi IP dei server o utilizzare i loro Nomi di Dominio Completi (FQDN), se disponibili. Per il nostro tutorial, utilizzeremo FQDN e per questo, dobbiamo impostare i nomi host su entrambi i server.

Imposta il nome host sul server Odoo utilizzando il seguente comando.

$ sudo hostnamectl set-hostname odoo.yourdomain.com

Imposta il nome host sul server PostgreSQL utilizzando il seguente comando.

$ sudo hostnamectl set-hostname postgresql.yourdomain.com

Sul server Odoo, apri il file /etc/hosts.

$ sudo nano /etc/hosts

Assicurati che appaia come segue.

127.0.0.1  localhost
127.0.0.1  odoo.yourdomain.com  odoo
10.1.1.10  postgresql.yourdomain.com  postgresql

Sul server PostgreSQL, apri il file e assicurati che appaia come segue.

127.0.0.1  localhost
127.0.0.1  postgresql.yourdomain.com  postgresql
10.1.2.10  odoo.yourdomain.com  odoo

Premi Ctrl + X per chiudere l’editor e premi Y quando richiesto di salvare il file.

Passo 3 - Installa e configura PostgreSQL

Rocky Linux 9 viene fornito con PostgreSQL 13 di default e PostgreSQL 15 come stream del modulo postgresql:15. Tuttavia, installeremo l’ultima versione disponibile al momento della scrittura di questo tutorial, PostgreSQL 16 dal suo repository ufficiale.

Installa il repository RPM di PostgreSQL.

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

Disabilita il modulo PostgreSQL integrato.

$ sudo dnf -qy module disable postgresql

Installa PostgreSQL 16.

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

Inizializza il database.

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

Abilita e avvia il servizio PostgreSQL.

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

Controlla lo stato del servizio.

$ sudo systemctl status postgresql-16

Dovresti ricevere un output simile.

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

Successivamente, dobbiamo creare un utente database odoo. Ti verrà chiesto di inserire una password per il ruolo. Inserisci una password forte a tua scelta.

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

L’opzione -u esegue il comando come utente postgres.

L’opzione -U indica il nome utente con cui connettersi.

L’opzione -d concede all’utente il permesso di creare database.

L’opzione -p richiede la password del nuovo utente.

Configura l’autenticazione basata su host

Dobbiamo concedere il permesso al servizio PostgreSQL di poter connettersi al server Odoo.

Prima di tutto, ferma il servizio PostgreSQL.

$ sudo systemctl stop postgresql-16

Per trovare dove PostgreSQL memorizza il file di autenticazione client, esegui il seguente comando per avviare la shell di PostgreSQL.

$ sudo -u postgres psql

Esegui la seguente query per trovare la posizione del file.

postgres=# SHOW hba_file;

Riceverai il seguente output.

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

Digita exit per uscire dalla shell.

Apri il file /var/lib/pgsql/16/data/pg_hba.conf per la modifica.

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

Incolla la seguente riga alla fine.

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

Questa riga concede il permesso all’utente odoo di connettersi a tutti i database all’interno di questo server. Puoi specificare anche il nome dei database invece di utilizzare la parola chiave all.

Premi Ctrl + X per chiudere l’editor e premi Y quando richiesto di salvare il file.

Configura l’indirizzo di ascolto di PostgreSQL

Successivamente, dobbiamo consentire al server database di ascoltare le connessioni remote.

Avvia la shell di PostgreSQL e esegui il seguente comando per localizzare il file di configurazione di PostgreSQL.

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

Riceverai il seguente output.

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

Digita exit per uscire dalla shell.

Apri il file /var/lib/pgsql/16/data/postgresql.conf per la modifica.

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

Cambia la riga listen_addresses da

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

a.

listen_addresses = '*'

Il * significa che ascolterà tutti gli indirizzi IP. Puoi cambiarlo con l’indirizzo IP della tua istanza odoo.

listen_addresses = 'localhost, '

Premi Ctrl + X per chiudere l’editor e premi Y quando richiesto di salvare il file.

Abilita e avvia il servizio PostgreSQL

Poiché la nostra configurazione è terminata, è tempo di avviare il servizio PostgreSQL.

$ sudo systemctl start postgresql-16    

Passo 4 - Installa Odoo

Installa Python 3.10

Rocky Linux 9 viene fornito con Python 3.9 mentre Odoo 17 richiede Python 3.10 e versioni superiori. Pertanto, dobbiamo installare prima quello.

Puoi controllare prima la versione attualmente disponibile.

$ python --version
Python 3.9.18

Installa le dipendenze richieste per 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

Scarica il codice sorgente dal sito web di Python. Al momento della scrittura di questo tutorial, l’ultima versione 3.10.x disponibile è 3.10.14, che è quella che abbiamo utilizzato.

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

Estrai l’archivio.

$ tar xzf Python-3.10.14.tgz

Passa alla directory estratta.

$ cd Python-3.10.14

Configura il codice sorgente.

$ ./configure --enable-optimizations

Installa Python 3.10.14. Il comando altininstall è utilizzato in modo che non sovrascriva la versione di Python del sistema.

$ sudo make altinstall

Conferma l’installazione.

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

Dovresti ricevere il seguente output.

Python 3.10.14

Successivamente, dobbiamo impostare Python 3.10 come versione predefinita di Python. Crea collegamenti simbolici per ciascuna versione di Python installata sul tuo server. Durante la creazione della versione simbolica, dovresti includere la versione esatta di Python nei tuoi comandi. Esegui i seguenti comandi per creare i collegamenti simbolici.

$ 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

Per visualizzare le versioni di Python disponibili, utilizza il seguente comando.

$ sudo update-alternatives --config python3

Dovresti vedere il seguente output.

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:

Seleziona il numero 1 per passare a Python 3.10.

Disconnettiti e riconnettiti al terminale per passare alla versione di Python. Ora puoi utilizzare Python 3.10.14 utilizzando python direttamente.

Installa le dipendenze e preparati per l’installazione

Crea un nuovo utente di sistema per gestire i processi di Odoo sul server Odoo con la directory home come /opt/odoo. Questo per prevenire qualsiasi rischio di sicurezza eseguendolo sotto l’utente root.

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

Installa le dipendenze di sistema richieste per la configurazione di Odoo 17.

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

Installa Nodejs. Rocky Linux 9 viene fornito con Node 18.x, che è la versione LTS attuale di Nodejs. Tuttavia, utilizzeremo il repository ufficiale di Nodesource per questo.

Aggiungi il repository Node 20.

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

Installa Nodejs.

$ sudo dnf -y install nodejs

Conferma la versione di Node.

$ node --version
v20.12.1

Installa il pacchetto Less CSS utilizzando Node. Se stai utilizzando un linguaggio con interfaccia da destra a sinistra, installa anche il pacchetto rtlcss.

$ sudo npm install -g less rtlcss

Installa wkhtmltopdf. Utilizzeremo il pacchetto RPM dal repository di packaging di Wkhtmltopdf GitHub. L’ultima versione disponibile al momento della scrittura di questo tutorial è 0.12.6.1 r3.

Scarica il pacchetto RPM di 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

Installa i font richiesti da Wkhtmltopdf.

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

Installa Wkhtmltopdf.

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

Controlla la versione di wkhtmltopdf installata.

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

Scarica i file di Odoo

Passa all’utente di sistema Odoo.

$ sudo su - odoo

Clona il repository GitHub di Odoo sul tuo sistema.

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

Per il nostro scopo, stiamo copiando Odoo nella directory /opt/odoo da cui sarà installato. Questo creerà la directory /opt/odoo/odoo che utilizzeremo per l’installazione.

Configura l’ambiente Python Virtualenv

Questo passaggio è facoltativo ma è consigliato poiché un ambiente Python virtuale per Odoo aiuterà a evitare conflitti con i moduli Python del sistema operativo, specialmente durante gli aggiornamenti del sistema operativo.

Per questo, utilizzeremo virtualenv.

  1. Crea un nuovo ambiente virtualenv per Odoo. $ python3 -m venv odoo-env
  2. Attiva l’ambiente virtuale. Stiamo creando un ambiente sotto la directory home dell’utente di sistema. Sei libero di scegliere qualsiasi posizione tu voglia. $ source odoo-env/bin/activate
  3. Aggiorna PIP giusto per sicurezza. (odoo-env) $ pip3 install --upgrade pip
  4. Installa il wheel di Python nell’ambiente virtuale. $ pip3 install wheel

Installa le dipendenze Python

Installa le dipendenze Python richieste da Odoo 17.

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

Le dipendenze richiederanno del tempo per essere installate, quindi sii paziente.

Controlla se le dipendenze sono installate correttamente controllando l’elenco dei moduli Python installati.

$ 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

Esci dall’ambiente virtuale Python.

$ deactivate

Crea una directory per i componenti aggiuntivi di terze parti

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

Questa directory dovrebbe essere aggiunta al parametro addons_path che definisce le directory in cui Odoo cerca i moduli. Esci dall’utente di sistema Odoo.

$ exit

Passo 5 - Configura Odoo

Copia il file di configurazione predefinito di Odoo per crearne uno nuovo.

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

Apri il file per la modifica.

$ sudo nano /etc/odoo.conf

Modifica il file in modo che appaia come segue.

[options]
; Questa è la password che consente operazioni sul database:
admin_passwd = admin
db_host = postgresql.yourdomain.com
db_port = False
db_user = odoo
db_password = odoo_password
addons_path = /opt/odoo/odoo/addons, /opt/odoo/odoo/custom-addons
xmlrpc_port = 8069
default_productivity_apps = True

Premi Ctrl + X per chiudere l’editor e premi Y quando richiesto di salvare il file.

L’opzione admin_passwd è la password che consente operazioni amministrative all’interno dell’interfaccia Odoo. Assicurati di scegliere una password sicura.

L’opzione db_host è il FQDN o l’indirizzo IP del server PostgreSQL.

L’opzione db_port è impostata su false poiché viene utilizzata la porta PostgreSQL predefinita 5432. Se desideri utilizzare una porta diversa, dovrai aggiornare questo valore.

L’opzione db_user è il nome dell’utente PostgreSQL.

L’opzione db_password è la password dell’utente PostgreSQL ‘odoo’ che abbiamo creato in precedenza sul server PostgreSQL.

L’opzione addons_path è il percorso predefinito degli Addons. Puoi anche aggiungere un percorso personalizzato per gli Addons separandoli con virgole.

L’opzione xmlrpc_port è la porta su cui Odoo ascolta.

L’opzione default_productivity_apps assicura che le app di produttività predefinite (vale a dire Dipendenti, Email Marketing, Progetto e Sondaggi) rimangano abilitate. Quattro app sono quelle predefinite nella Community Edition di Odoo. Nella versione Enterprise, ci sono ulteriori app di produttività che possono essere abilitate per impostazione predefinita, che sono Appuntamenti, Conoscenza, Pianificazione e Firma.

Crea il servizio Odoo

Per assicurarti che Odoo continui a funzionare anche dopo un riavvio del sistema, dobbiamo creare un servizio per esso.

Crea un file /lib/systemd/system/odoo-server.service e aprilo per la modifica.

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

Incolla il seguente codice al suo interno.

[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

Sostituisci /home/ con la posizione che hai scelto per installare l’ambiente virtuale Python.

Premi Ctrl + X per chiudere l’editor e premi Y quando richiesto di salvare il file.

Crea una directory di log per Odoo

$ sudo mkdir /var/log/odoo

Imposta i permessi sui file

Imposta i permessi sul file odoo-server.service in modo che solo gli utenti Odoo possano leggerlo o eseguirlo.

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

Imposta la proprietà sull’ambiente Python, sull’installazione di Odoo e sulla directory di log.

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

Limita il file di configurazione di Odoo.

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

Avvia il server Odoo

Avvia e abilita il server Odoo.

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

Controlla lo stato del server.

$ 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.yourdomain.com systemd[1]: Started Odoo Open Source ERP and CRM.

Passo 6 - Installa e configura Nginx

Rocky Linux 9 viene fornito con una versione più vecchia di Nginx. Devi utilizzare il repository ufficiale di Nginx per installare l’ultima versione.

Crea e apri il file /etc/yum.repos.d/nginx.repo per la modifica.

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

Incolla il seguente codice al suo interno.

[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

Una volta terminato, salva il file premendo Ctrl + X e inserendo Y quando richiesto. Utilizzeremo la versione mainline di Nginx e quindi abbiamo abilitato il repository mainline nel file sopra utilizzando enabled=1 sotto la sezione mainline invece di quella stabile. Puoi scegliere entrambe.

Installa Nginx.

$ sudo dnf install -y nginx

Verifica l’installazione.

$ nginx -v
nginx version: nginx/1.25.4

Abilita e avvia il servizio del server Nginx.

$ sudo systemctl enable nginx --now

Controlla lo stato del servizio.

$ 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 - Installa SSL

Dobbiamo installare Certbot per generare certificati SSL gratuiti offerti da Let’s Encrypt. Utilizzeremo l’installer di pacchetti Snapd per questo. Richiede il repository EPEL (Extra Packages for Enterprise Linux) per funzionare.

Installa il repository EPEL.

$ sudo dnf install -y epel-release

Rocky Linux 9 non viene fornito con Snapd installato. Installa il pacchetto Snapd.

$ sudo dnf install -y snapd

Abilita e avvia il servizio Snap.

$ sudo systemctl enable snapd --now

Installa il pacchetto core di Snap e assicurati che la tua versione di Snapd sia aggiornata.

$ sudo snap install core
$ sudo snap refresh core

Crea i collegamenti necessari affinché Snapd funzioni.

$ 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

Installa Certbot.

$ sudo snap install --classic certbot

Utilizza il seguente comando per assicurarti che il comando Certbot possa essere eseguito creando un collegamento simbolico alla directory /usr/bin.

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

Verifica se Certbot funziona correttamente.

$ certbot --version
certbot 2.10.0

Genera il certificato. Dobbiamo anche creare un certificato DHParams.

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

Genera un certificato di scambio di chiavi Diffie-Hellman.

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

Controlla il servizio di pianificazione del rinnovo di Certbot.

$ sudo systemctl list-timers

Troverai snap.certbot.renew.service come uno dei servizi programmati per essere eseguiti.

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

Fai una prova del processo per controllare se il rinnovo SSL funziona correttamente.

$ sudo certbot renew --dry-run

Se non vedi errori, sei a posto. Il tuo certificato si rinnoverà automaticamente.

Passo 8 - Configura Nginx

Per eseguirlo tramite Nginx, dobbiamo eseguire Odoo su localhost. Per cambiare questo, ferma il servizio Odoo.

$ sudo systemctl stop odoo-server

Apri il file di configurazione del server Odoo.

$ sudo nano /etc/odoo.conf

Aggiungi le seguenti righe ad esso.

xmlrpc_interface = 127.0.0.1
proxy_mode = True

Crea un file di configurazione Nginx per Odoo.

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

Incolla il codice qui sotto.

#odoo server
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.yourdomain.com;
   return 301 https://$host$request_uri;
}

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

 server_name odoo.yourdomain.com;

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

 # Add Headers for odoo proxy mode
 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;

 # SSL parameters
 ssl_certificate /etc/letsencrypt/live/odoo.yourdomain.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/odoo.yourdomain.com/privkey.pem;
 ssl_trusted_certificate /etc/letsencrypt/live/odoo.yourdomain.com/chain.pem;

 ssl_session_timeout 30m;
 ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
 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;

 # Redirect longpoll requests to odoo longpolling port
 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;  # requires nginx 1.19.8
 }

 # Redirect requests to odoo backend server
 location / {
  # Add Headers for odoo proxy mode
   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;  # requires nginx 1.19.8
 }

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

 # Serve static files right away
 location ~ ^/[^/]+/static/.+$ {
   # root and try_files both depend on your addons paths
   root /opt/odoo/odoo;
   try_files /opt/odoo/odoo/addons$uri @odoo;
   expires 24h;
   add_header Content-Security-Policy $content_type_csp;
 }
}

Premi Ctrl + X per chiudere l’editor e premi Y quando richiesto di salvare il file.

Apri il file /etc/nginx/nginx.conf per la modifica.

$ sudo nano /etc/nginx/nginx.conf

Aggiungi la seguente riga prima della riga include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size 64;

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Testa la configurazione di Nginx.

$ sudo nginx -t

Se non vedi errori, significa che sei a posto. Riavvia il server Nginx.

$ sudo systemctl restart nginx

Passo 9 - Avvia Odoo

Possiamo avviare nuovamente il server Odoo dopo che tutto è stato configurato.

$ sudo systemctl start odoo-server

Lancia Odoo nel tuo browser tramite https://odoo.yourdomain.com. Nel tuo browser, apri l’URL http://:8069 o http://odoo.yourdomain.com:8069. Dovresti vedere la schermata di creazione del database di Odoo se tutto funziona correttamente.

Scegli la tua email e password per creare le tue credenziali di accesso. La password master è admin_passwd che hai aggiunto nel file /etc/odoo.conf. Compila tutti gli altri campi.

Controlla il campo Demo Data per popolare il database con dati di esempio. Non installare dati demo su server esposti a Internet. I database con dati demo contengono accessi e password predefiniti che possono essere utilizzati per accedere ai tuoi sistemi e causare notevoli problemi, anche sui sistemi di staging/dev. Lo stiamo usando solo per scopi didattici.

Clicca sul pulsante Crea database per procedere e completare l’installazione. La prima volta che crei un database, la pagina degli addon richiederà tempo per caricarsi, quindi non aggiornare la pagina. Sarai reindirizzato automaticamente alla seguente pagina di accesso una volta creato il database.

Inserisci le credenziali utilizzate nel passaggio precedente per accedere all’ERP Odoo e verrai portato alla pagina del dashboard come mostrato di seguito. Sarà precompilato con dati demo. Se non hai selezionato l’opzione dati demo nella pagina di creazione del database, otterrai un dashboard diverso e molto più pulito.

Puoi iniziare a utilizzare Odoo per gestire la tua attività da qui in poi.

Passo 10 - Aggiorna Odoo

Ferma il server Odoo.

$ sudo systemctl stop odoo-server

Passa all’utente di sistema Odoo.

$ sudo su - odoo

Recupera l’ultima versione del codice sorgente da GitHub.

$ git fetch
$ git rebase --autostash

Il secondo comando potrebbe incontrare conflitti nel codice sorgente se modifichi manualmente il sorgente. Ti verrà fornito l’elenco dei file in conflitto. Dovrai modificare manualmente tutti i file e rieseguire il comando per risolvere i problemi.

Se desideri scartare le modifiche in conflitto, puoi eseguire il seguente comando per ripristinare il sorgente.

$ git reset --hard

Attiva l’ambiente virtuale Python.

$ source odoo-env/bin/activate

Installa le dipendenze Python.

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

Esci dall’ambiente virtuale Python.

$ deactivate

Avvia il server Odoo.

$ sudo systemctl start odoo-server

Passo 11 - Sicurezza di Odoo utilizzando Fail2Ban

Questo passaggio è facoltativo, ma se hai installato Fail2Ban, puoi aggiungere la configurazione per Odoo per proteggerlo.

Crea e apri il file odoo-login.conf per la modifica.

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

Incolla il seguente codice al suo interno.

[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

Premi Ctrl + X per chiudere l’editor e premi Y quando richiesto di salvare il file.

Crea e apri il file filtro odoo-login.conf per la modifica.

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

Incolla il seguente codice al suo interno.

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

Premi Ctrl + X per chiudere l’editor e premi Y quando richiesto di salvare il file.

Riavvia Fail2Ban.

$ sudo systemctl restart fail2ban

Conclusione

Questo conclude il nostro tutorial su come installare e configurare Odoo sul server Rocky Linux 9. Se hai domande, pubblicale nei commenti qui sotto.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.