Come installare Odoo 15 su Ubuntu 20.04

27 ott 2021 8 min di lettura
Come installare Odoo 15 su Ubuntu 20.04
Indice dei contenuti

Introduzione

Odoo è una popolare suite open source di app aziendali che aiuta le aziende a gestire e gestire la propria attività. Include una vasta gamma di applicazioni come CRM, e-Commerce, creazione di siti Web, fatturazione, contabilità, produzione, magazzino, gestione dei progetti, inventario e molto altro, tutte perfettamente integrate.

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 Odoo APT ufficiali.

L'installazione di Odoo in un ambiente virtuale o la distribuzione come contenitore Docker ti offre un maggiore controllo sull'applicazione e ti consente di eseguire più istanze di Odoo sullo stesso sistema.

Questo articolo illustra l'installazione e la distribuzione di Odoo 15 all'interno di un ambiente virtuale Python su Ubuntu 20.04. Scaricheremo Odoo dal repository GitHub ufficiale e utilizzeremo 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 root@IP_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 nome_utente@IP_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 nome_utente@IP_DEL_SERVER -p PORTA

Installare le dipendenze

Il primo passo è installare Git, Pip, Node.js e gli strumenti necessari per compilare Odoo:

sudo apt update
sudo apt install git python3-pip build-essential wget python3-dev python3-venv \
    python3-wheel libfreetype6-dev libxml2-dev libzip-dev libldap2-dev libsasl2-dev \
    python3-setuptools node-less libjpeg-dev zlib1g-dev libpq-dev \
    libxslt1-dev libldap2-dev libtiff5-dev libjpeg8-dev libopenjp2-7-dev \
    liblcms2-dev libwebp-dev libharfbuzz-dev libfribidi-dev libxcb1-dev

Creare un utente di sistema

L'esecuzione di Odoo con l'utente root rappresenta un grande rischio per la sicurezza. Ci creare un nuovo utente di sistema e di gruppo con la home directory /opt/odoo15 che eseguirà il servizio Odoo. Per fare ciò, esegui il seguente comando:

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

Puoi nominare l'utente come vuoi, purché crei un utente PostgreSQL con lo stesso nome.

Installare e configurare PostgreSQL

Odoo utilizza PostgreSQL come back-end del database. PostgreSQL è incluso nei repository standard di Ubuntu. L'installazione è semplice:

sudo apt install postgresql

Una volta installato il servizio, creare un utente PostgreSQL con lo stesso nome dell'utente di sistema creato in precedenza. In questo esempio, cioè odoo15:

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

Installare wkhtmltopdf

wkhtmltopdf è un insieme di strumenti da riga di comando open source per il rendering di pagine HTML in PDF e vari formati di immagine. Per stampare report PDF in Odoo, dovrai installare il pacchetto wkhtmltox.

La versione di wkhtmltopdf inclusa nei repository Ubuntu non supporta intestazioni e piè di pagina. La versione consigliata per Odoo è la versione 0.12.5. Scaricheremo e installeremo il pacchetto da Github:

sudo wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.bionic_amd64.deb

Una volta scaricato il file, installalo digitando:

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

Installare e configurare Odoo 15

Installeremo Odoo dal sorgente all'interno di un ambiente virtuale Python isolato.

Innanzitutto, passa all'utente "odoo15":

sudo su - odoo15

Clona il codice sorgente di Odoo 15 da GitHub:

git clone https://www.github.com/odoo/odoo --depth 1 --branch 15.0 /opt/odoo15/odoo

Crea un nuovo ambiente virtuale Python per Odoo:

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

Attiva l'ambiente virtuale:

source odoo-venv/bin/activate

Le dipendenze di Odoo sono specificate nel file require.txt. Installa tutti i moduli Python richiesti con pip3:

pip3 install wheel
pip3 install -r odoo/requirements.txt
Se si verifica un errore di compilazione durante l'installazione, assicurarsi che tutte le dipendenze richieste elencate nella sezione Installing Prerequisites siano installate.

Una volta fatto, disattivare l'ambiente digitando:

deactivate

Creare una nuova directory una directory separata per il 3° addons parti:

mkdir /opt/odoo15/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

Crea un file di configurazione con il seguente contenuto:

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

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

Creare il file dell'unità Systemd

Un file di unità è un file di configurazione in stile ini che contiene informazioni su un servizio.

Apri il tuo editor di testo e crea un file denominato odoo15.service con il seguente contenuto:

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

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

[Install]
WantedBy=multi-user.target

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

sudo systemctl daemon-reload

Avvia il servizio Odoo e abilitalo per l'avvio all'avvio eseguendo:

sudo systemctl enable --now odoo15

Verifica che il servizio sia attivo e funzionante:

sudo systemctl status odoo15

L'output dovrebbe essere simile al seguente, mostrando che il servizio Odoo è attivo e in esecuzione:

● odoo15.service - Odoo15
     Loaded: loaded (/etc/systemd/system/odoo15.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-10-26 04:56:28 UTC; 18s ago
...

Puoi controllare i messaggi registrati dal servizio Odoo usando il comando seguente:

sudo journalctl -u odoo15

Test dell'installazione

Apri il tuo browser e digita: http://<your_domain_or_IP_address>:8069

Supponendo che l'installazione sia andata a buon fine, apparirà una schermata simile alla seguente:

Configurazione di Nginx come proxy di terminazione SSL

Il server Web Odoo predefinito serve il traffico su HTTP. Per rendere la distribuzione di Odoo più sicura, imposteremo 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 decrittograferà le connessioni TLS in entrata (HTTPS) e passerà le richieste non crittografate al servizio interno (Odoo). Il traffico tra Nginx e Odoo non sarà crittografato (HTTP).

L'utilizzo di un proxy inverso offre molti vantaggi come il bilanciamento del carico, la terminazione SSL, la memorizzazione nella cache, la compressione, la pubblicazione di contenuti statici e altro ancora.

Assicurati 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.conf

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;
}

# HTTP -> HTTPS
server {
    listen 80;
    server_name www.example.com example.com;

    include snippets/letsencrypt.conf;
    return 301 https://example.com$request_uri;
}

# WWW -> NON WWW
server {
    listen 443 ssl http2;
    server_name www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name 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;

    # SSL parameters
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    # 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;
}
/etc/nginx/sites-enabled/example.com.conf

Non dimenticare di sostituire example.com con il tuo dominio Odoo e impostare il percorso corretto per i file del certificato SSL. Gli snippet utilizzati in questa configurazione sono creati in questa guida.

Al termine, riavvia il servizio Nginx:

sudo systemctl restart nginx

Successivamente, dobbiamo dire a Odoo di utilizzare il proxy. Per fare ciò, apri il file di configurazione e aggiungi la seguente riga:

proxy_mode = True
/etc/odoo15.conf

Riavvia il servizio Odoo per rendere effettive le modifiche:

sudo systemctl restart odoo15

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

Modificare l'interfaccia Binding

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 di Odoo, puoi bloccare la porta 8069 per tutte le interfacce pubbliche o forzare Odoo ad ascoltare solo sull'interfaccia locale.

Configurare Odoo per ascoltare solo su 127.0.0.1. Aprire la configurazione aggiungere le seguenti due righe alla fine del file:

xmlrpc_interface = 127.0.0.1
netrpc_interface = 127.0.0.1
/etc/odoo15.conf

Salva il file di configurazione e riavvia il server Odoo per rendere effettive le modifiche:

sudo systemctl restart odoo15

Abilitare il multiprocessing

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

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

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

Calcolare la numero di workers

  • Numero massimo teorico di workers = (system_cpus * 2) + 1
  • 1 worker può servire ~= 6 utenti simultanei
  • I workers Cron richiedono anche la CPU

Calcolare la 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 sopra, puoi usare 5 workers + 1 worker  per il worker cron che è un totale di 6 lavoratori.

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:

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
/etc/odoo15.conf

Riavvia il servizio Odoo per rendere effettive le modifiche:

sudo systemctl restart odoo15

Il resto delle risorse di sistema verrà utilizzato da altri servizi eseguiti su questo sistema. In questa guida, abbiamo installato Odoo insieme a PostgreSQL e Nginx sullo stesso server. A seconda della tua configurazione, potresti anche avere altri servizi in esecuzione sul tuo server.

Conclusione

Questo articolo ha spiegato come installare e configurare Odoo 15 su Ubuntu 20.04 in un ambiente virtuale Python utilizzando Nginx come proxy inverso. Ti abbiamo anche mostrato come abilitare il multiprocessing e ottimizzare Odoo per un ambiente di produzione.

Potresti anche voler controllare il nostro tutorial su come creare backup giornalieri automatici dei database Odoo.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.