Introduzione

Odoo è una popolare suite open-source di app aziendali. Offre una vasta gamma di applicazioni, tra cui CRM, e-Commerce, creazione di siti Web, fatturazione, contabilità, produzione, magazzino, gestione dei progetti, inventario e molto altro, il tutto perfettamente integrato.

Odoo può essere installato in diversi modi a seconda del caso d'uso e delle tecnologie disponibili. Il modo più semplice e veloce per installare Odoo è utilizzare i repository APT Odoo ufficiali.

L'installazione di Odoo in un ambiente virtuale o la distribuzione come contenitore Docker, consente di avere un maggiore controllo sulla configurazione del sistema ed eseguire più versioni di Odoo sullo stesso sistema.

In questa guida, ti guideremo attraverso l'installazione e la distribuzione di Odoo 14 all'interno di un ambiente virtuale Python su Ubuntu 20.04 LTS. Scaricheremo Odoo dal loro repository Github e useremo Nginx come proxy inverso.

Se desideri installare Odoo su un server in remoto continua a leggere, altrimenti salta il primo paragrafo "Connessione al Server" e leggi il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh [email protected]_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh [email protected]_DEL_SERVER -p PORTA

Prerequisiti per l'installazione

Accedi a Ubuntu come utente sudo per poter completare correttamente questo tutorial.

Dopo aver effettuato il login come utente sudo non root, aggiorna la cache Apt:

sudo apt update

Installa Git, Pip, Node.js e gli strumenti necessari per creare dipendenze Odoo:

sudo apt install git python3-pip build-essential wget python3-dev python3-venv python3-wheel libxslt-dev libzip-dev libldap2-dev libsasl2-dev python3-setuptools node-less

Creare un utente di sistema

Crea un utente di sistema con il comando useradd che eseguirà Odoo, chiamato odoo14 con home directory /opt/odoo14:

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

Puoi impostare il nome dell'utente che preferisci, purché crei un utente PostgreSQL con lo stesso nome.

Installare e configurare PostgreSQL

Odoo utilizza PostgreSQL come back-end del database. Per installare PostgreSQL eseguire il comando seguente:

sudo apt install postgresql

Una volta completata l'installazione, crea un utente PostgreSQL con lo stesso nome dell'utente di sistema precedentemente creato, nel nostro caso odoo14:

sudo su - postgres -c "createuser -s odoo14"

Installare Wkhtmltopdf

Il pacchetto wkhtmltox fornisce una serie di strumenti da riga di comando open source in grado di eseguire il rendering HTML in PDF e vari formati di immagine. Per poter stampare report PDF, è necessario installare lo strumento wkhtmltopdf. La versione consigliata per Odoo è 0.12.6, che non è disponibile nei repository Ubuntu 20.04 predefiniti.

Scarica il pacchetto usando il seguente comando wget:

sudo wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.bionic_amd64.deb

Una volta completato il download, installa il pacchetto digitando:

sudo apt install ./wkhtmltox_0.12.6-1.bionic_amd64.deb

Installare e configurare Odoo 14

Come accennato in precedenza, installeremo Odoo dal sorgente all'interno di un ambiente virtuale Python isolato.

Innanzitutto, passa all'utente odoo14:

sudo su - odoo14

Clona il codice sorgente di Odoo 14 da GitHub:

git clone https://www.github.com/odoo/odoo --depth 1 --branch 14.0 /opt/odoo14/odoo

Una volta completato il download, crea un nuovo ambiente virtuale Python per Odoo:

cd /opt/odoo14
python3 -m venv odoo-venv

Attiva l'ambiente con il seguente comando:

source odoo-venv/bin/activate

Installa tutti i moduli Python richiesti con pip3:

pip3 install wheel
pip3 install -r odoo/requirements.txt

Se si riscontra un errore di compilazione durante l'installazione, assicurarsi che tutte le dipendenze richieste elencate nella sezione Installing Prerequisites siano installate.

Una volta fatto, disattiva l'ambiente digitando:

deactivate

Ci creiamo una nuova cartella che conterrà i 3rd addons partito.

mkdir /opt/odoo14/odoo-custom-addons

Successivamente, aggiungeremo questa directory al parametro addons_path. Questo parametro definisce un elenco di directory in cui Odoo cerca i moduli.

Torna al tuo utente sudo:

exit

Creare un file di configurazione con il seguente contenuto:

sudo nano /etc/odoo14.conf
[options]
; This is the password that allows database operations:
admin_passwd = my_admin_passwd
db_host = False
db_port = False
db_user = odoo14
db_password = False
addons_path = /opt/odoo14/odoo/addons,/opt/odoo14/odoo-custom-addons

Non dimenticare di cambiare my_admin_passwd in qualcosa di più sicuro.

Creare un file di unità Systemd

Apri l'editor di testo e crea un file di unità di servizio chiamato odoo14.service con il seguente contenuto:

sudo nano /etc/systemd/system/odoo14.service
[Unit]
Description=Odoo14
Requires=postgresql.service
After=network.target postgresql.service

[Service]
Type=simple
SyslogIdentifier=odoo14
PermissionsStartOnly=true
User=odoo14
Group=odoo14
ExecStart=/opt/odoo14/odoo-venv/bin/python3 /opt/odoo14/odoo/odoo-bin -c /etc/odoo14.conf
StandardOutput=journal+console

[Install]
WantedBy=multi-user.target

Notifica a systemd che esiste un nuovo file di unità:

sudo systemctl daemon-reload

Avviare il servizio Odoo e abilitarlo per l'avvio all'avvio eseguendo:

sudo systemctl enable --now odoo14

Verifica lo stato del servizio:

sudo systemctl status odoo14

L'output dovrebbe essere simile al seguente, a indicare che il servizio Odoo è attivo e in esecuzione.

● odoo14.service - Odoo14
     Loaded: loaded (/etc/systemd/system/odoo14.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2020-10-17 19:25:47 CEST; 2s ago
   Main PID: 11987 (python3)
      Tasks: 4 (limit: 2286)
     Memory: 82.2M
     CGroup: /system.slice/odoo14.service
             └─11987 /opt/odoo14/odoo-venv/bin/python3 /opt/odoo14/odoo/odoo-bin -c /etc/odoo14.conf

Per visualizzare i messaggi registrati dal servizio Odoo, utilizzare il comando seguente:

sudo journalctl -u odoo14

Test dell'installazione

Apri il tuo browser e digita: http://TUO_DOMINIO_O_IP:8069 dovresti visualizzare la pagina di configurazione di Odoo 14.

Configurare Nginx come proxy di terminazione SSL

Il server Web Odoo predefinito offre traffico su HTTP. Per rendere più sicura la distribuzione di Odoo configureremo Nginx come proxy di terminazione SSL che servirà il traffico su HTTPS.

Il proxy di terminazione SSL è un server proxy che gestisce la crittografia/decrittografia SSL. Ciò significa che il proxy di terminazione (Nginx) elaborerà e decodificherà le connessioni TLS in arrivo (HTTPS) e passerà le richieste non crittografate al servizio interno (Odoo). Il traffico tra Nginx e Odoo non sarà crittografato (HTTP).

L'uso di un proxy inverso offre numerosi vantaggi come Bilanciamento del carico, Terminazione SSL, Memorizzazione nella cache, Compressione, Pubblicazione di contenuti statici e altro ancora.

Assicurarsi di aver soddisfatto i seguenti prerequisiti prima di continuare con questa sezione:

Apri il tuo editor di testo e crea/modifica il blocco del server di dominio:

sudo nano /etc/nginx/sites-enabled/example.com

La seguente configurazione imposta la terminazione SSL, il reindirizzamento da HTTP a HTTPS , il reindirizzamento da WWW a non WWW, memorizza nella cache i file statici e abilita la compressione GZip.

# Odoo servers
upstream odoo {
 server 127.0.0.1:8069;
}

upstream odoochat {
 server 127.0.0.1:8072;
}

server {
    listen 80;
    server_name www.example.com example.com;

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

    # Proxy headers
    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;


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

    # Handle longpoll requests
    location /longpolling {
        proxy_pass http://odoochat;
    }


    # Handle / requests
    location / {
       proxy_redirect off;
       proxy_pass http://odoo;
    }

    # Cache static files
    location ~* /web/static/ {
        proxy_cache_valid 200 90m;
        proxy_buffering on;
        expires 864000;
        proxy_pass http://odoo;
    }


    # Gzip
    gzip_types text/css text/less text/plain text/xml application/xml 	   application/json application/javascript;
    gzip on;
}

Non dimenticare di sostituire example.com con il tuo dominio.

Adesso è necessario installare i certificati SSL con Let's Encrypt su Nginx. I certificati verrano installati e configurati automaticamente.

Al termine, riavvia il servizio Nginx:

sudo systemctl restart nginx

Successivamente, dobbiamo configurare Odoo in modo che utilizzi il proxy. Per fare ciò, apri il file di configurazione e aggiungi la seguente riga:

sudo nano /etc/odoo14.conf
proxy_mode = True

Riavvia il servizio Odoo per rendere effettive le modifiche:

sudo systemctl restart odoo14

A questo punto, il proxy inverso è configurato e puoi accedere alla tua istanza Odoo su: https://example.com

Modificare l'interfaccia di associazione (Binding Interface)

Questo passaggio è facoltativo, ma è una buona pratica di sicurezza.

Per impostazione predefinita, il server Odoo ascolta la porta 8069 su tutte le interfacce. Per disabilitare l'accesso diretto all'istanza Odoo, è possibile bloccare la porta 8069 per tutte le interfacce pubbliche o forzare Odoo ad ascoltare solo sull'interfaccia locale.

Configureremo Odoo per l'ascolto solo su 127.0.0.1. Apri il file di configurazione e aggiungi le seguenti due righe alla fine del file:

sudo nano /etc/odoo14.conf
xmlrpc_interface = 127.0.0.1
netrpc_interface = 127.0.0.1

Salvare il file di configurazione e riavviare il server Odoo per rendere effettive le modifiche:

sudo systemctl restart odoo14

Abilitare il multiprocessing

Per impostazione predefinita, Odoo funziona in modalità multithreading. Per le distribuzioni di produzione, si consiglia di passare al server multiprocessore in quanto aumenta la stabilità e consente un migliore utilizzo delle risorse di sistema.

Per abilitare il multiprocessing è necessario modificare la configurazione Odoo e impostare un numero diverso da zero di processi di lavoro. Il numero di workers viene calcolato in base al numero di core della CPU nel sistema e alla memoria RAM disponibile.

Secondo la documentazione ufficiale di Odoo per calcolare il numero dei workers e la dimensione della memoria RAM richiesta , è possibile utilizzare le seguenti formule e ipotesi:

Calcolo del numero di workers

  • Numero massimo teorico del worker= (system_cpus * 2) + 1
  • 1 worker può servire ~ = 6 utenti simultanei
  • Anche i cron richiedono CPU

Calcolo della dimensione della memoria RAM

  • Considereremo che il 20% di tutte le richieste sono richieste pesanti e l'80% sono richieste più leggere. Le richieste pesanti utilizzano circa 1 GB di RAM mentre quelle più leggere utilizzano circa 150 MB di RAM
  • RAM necessaria = number_of_workers * ( (light_worker_ratio * light_worker_ram_estimation) + (heavy_worker_ratio * heavy_worker_ram_estimation) )

Se non sai quante CPU hai sul tuo sistema, usa il seguente comando grep:

grep -c ^processor /proc/cpuinfo

Supponiamo che tu abbia un sistema con 4 core CPU, 8 GB di memoria RAM e 30 utenti Odoo simultanei.

  • 30 users / 6 = **5** (5 è il numero teorico di workers necessari)
  • (4 * 2) + 1 = **9** (9 è il numero massimo teorico di workers)

Sulla base del calcolo di cui sopra, è possibile utilizzare 5 workers + 1 worker per il cron per un totale di 6 workers.

Calcola il consumo di memoria RAM in base al numero di workers:

  • RAM = 6 * ((0.8*150) + (0.2*1024)) ~= 2 GB of RAM

Il calcolo mostra che l'installazione di Odoo richiederà circa 2 GB di RAM.

Per passare alla modalità multiprocessing, aprire il file di configurazione e aggiungere i valori calcolati:

sudo nano /etc/odoo14.conf
limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_request = 8192
limit_time_cpu = 600
limit_time_real = 1200
max_cron_threads = 1
workers = 5

Riavvia il servizio Odoo per rendere effettive le modifiche:

sudo systemctl restart odoo14

Il resto delle risorse di sistema verrà utilizzato da altri servizi in esecuzione su questo sistema. In questa guida, abbiamo installato Odoo insieme a PostgreSQL e Nginx sullo stesso server. A seconda della configurazione, è possibile che sul server siano in esecuzione altri servizi.

Conclusione

Questo tutorial ti ha guidato attraverso l'installazione di Odoo 14 su Ubuntu 20.04 LTS in un ambiente virtuale Python usando Nginx come proxy inverso. Ti abbiamo anche mostrato come abilitare il multiprocessing e ottimizzare Odoo per un ambiente di produzione.