Introduzione
Odoo è il software aziendale all-in-one più popolare al mondo. Offre una gamma di applicazioni aziendali, tra cui CRM, sito Web, e-commerce, 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 è usare i repository APT ufficiali di Odoo.
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 spiega come installare e distribuire Odoo 14 all'interno di un ambiente virtuale Python su CentOS 8. Scaricare Odoo dal repository ufficiale di GitHub e utilizzare 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 i prerequisiti
Odoo è scritto in Python. Il primo passo è installare Python 3, Git, pip e tutte le librerie e gli strumenti necessari per creare Odoo dai sorgenti:
sudo dnf install python3 python3-devel git nano gcc redhat-rpm-config libxslt-devel bzip2-devel openldap-devel libjpeg-devel freetype-devel
Creare un utente di sistema
Non è consentito eseguire Odoo sotto l'utente root, poiché rappresenta un rischio per la sicurezza. Crea un nuovo utente e gruppo di sistema con la home directory /opt/odoo
che eseguirà il servizio Odoo:
sudo useradd -m -U -r -d /opt/odoo14 -s /bin/bash odoo14
Puoi nominare l'utente come preferisci; assicurati solo di creare un utente PostgreSQL con lo stesso nome.
Installare e configurare PostgreSQL
Odoo utilizza PostgreSQL come back-end del database. Installiamo PostgreSQL 12 dai repository standard di CentOS 8:
sudo dnf install @postgresql:12
Una volta completata l'installazione, crea un nuovo cluster di database PostgreSQL:
sudo postgresql-setup initdb
Abilita e avvia il servizio PostgreSQL:
sudo systemctl enable --now postgresql
Crea un utente PostgreSQL con lo stesso nome dell'utente di sistema creato in precedenza. In questo esempio, ovvero odoo14
:
sudo su - postgres -c "createuser -s odoo14"
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 consigliata per Odoo è la versione 0.12.5
, che può essere scaricata e installata da Github:
sudo dnf install https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox-0.12.5-1.centos8.x86_64.rpm
Installare e configurare Odoo 14
Installeremo Odoo dal sorgente all'interno di un ambiente virtuale Python isolato.
Innanzitutto, passa all'utente odoo14
con il comando su:
sudo su - odoo14
Clona il codice sorgente di Odoo 14 dal repository GitHub di Odoo:
git clone https://www.github.com/odoo/odoo --depth 1 --branch 14.0 /opt/odoo14/odoo
Passa alla directory /opt/odoo14
e crea un nuovo ambiente virtuale Python per l'installazione di Odoo:
cd /opt/odoo14
python3 -m venv venv
Attiva l'ambiente utilizzando il comando source
:
source venv/bin/activate
Installa i moduli Python richiesti:
pip3 install -r odoo/requirements.txt
Se si verificano errori 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
Crea una nuova directory con il comando mkdir, per i componenti aggiuntivi personalizzati:
mkdir /opt/odoo14/odoo-custom-addons
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/odoo14.conf
[options]
admin_passwd = password
db_host = False
db_port = False
db_user = odoo14
db_password = False
addons_path = /opt/odoo14/odoo/addons, /opt/odoo14/odoo-custom-addons
Salva e chiudi il file.
Non dimenticare di cambiare password
con qualcosa di più sicuro.
Creare il file di unità Systemd
Apri il tuo 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
Incolla il seguente contenuto:
[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/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
Avvia e abilita il servizio Odoo:
sudo systemctl enable --now odoo14
Verifica che Odoo sia in esecuzione con il seguente comando:
sudo systemctl status odoo14
L'output dovrebbe essere simile a quello riportato di seguito, a indicare che il servizio Odoo è attivo e in esecuzione:
● odoo14.service - Odoo14
Loaded: loaded (/etc/systemd/system/odoo14.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2020-11-02 23:50:36 CET; 2s ago
...
Per vedere i messaggi registrati dal servizio Odoo, usa il seguente comando:
sudo journalctl -u odoo14
Testare l'installazione
Apri il browser e digita: http://TUO_DOMINIO_O_IP:8069
Supponendo che l'installazione sia andata a buon fine, apparirà una la prima schermata di Odoo con un form di richiesta dati.
Se non riesci ad accedere alla pagina, assicurati che la porta 8069
sia aperta nel firewall:
sudo firewall-cmd --permanent --zone=public --add-port=8069/tcp
sudo firewall-cmd --reload
Configurare Nginx come proxy Termination Proxy e SSL
Il server web Odoo predefinito serve il traffico su HTTP. Per rendere l'istanza di Odoo più sicura, configureremo Nginx come un 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 entrata (HTTPS) e trasmetterà 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 bilanciamento del carico, terminazione SSL, memorizzazione nella cache, compressione, offerta di contenuto statico e altro ancora.
Assicurati di aver soddisfatto i seguenti prerequisiti prima di continuare con questa sezione:
- Nome di dominio che punta all'IP del server pubblico. Useremo
example.com
. - Nginx installato.
- Virtual Host di Nginx del proprio dominio attivo e funzionante
- Certificato SSL per il tuo dominio. Puoi installare un certificato SSL Let's Encrypt gratuito.
Apri il tuo editor di testo e crea/modifica il blocco del server di dominio:
sudo nano /etc/nginx/conf.d/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;
}
server {
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;
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = www.example.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = example.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name www.example.com example.com;
return 404; # managed by Certbot
}
Non dimenticare di sostituire example.com
con il tuo dominio Odoo e impostare il percorso corretto dei file del certificato SSL.
Al termine, riavvia il servizio Nginx :
sudo systemctl restart nginx
Successivamente, dobbiamo dire a Odoo di usare 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 affinché le modifiche abbiano effetto:
sudo systemctl restart odoo14
A questo punto, il proxy inverso è configurato e puoi accedere alla tua istanza Odoo all'indirizzo 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 di Odoo, puoi bloccare la porta 8069
per tutte le interfacce pubbliche o forzare Odoo ad ascoltare solo sull'interfaccia locale.
Configureremo Odoo per ascoltare solo su 127.0.0.1
. Apri la 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
Salva il file di configurazione e riavvia il server Odoo affinché le modifiche abbiano effetto:
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 multiprocessing poiché aumenta la stabilità e utilizza meglio le 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 worker viene calcolato in base al numero di core della CPU e alla RAM disponibile.
Secondo la documentazione ufficiale di Odoo, per calcolare il numero di lavoratori e la dimensione della memoria RAM richiesta, è possibile utilizzare le seguenti formule e ipotesi:
Calcolo del numero di lavoratori
- Numero massimo teorico di worker = (system_cpus * 2) + 1
- 1 lavoratore può servire ~ = 6 utenti simultanei
- Anche i lavoratori 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 lavoratori necessari)(4 * 2) + 1 = **9**
(9 è il numero massimo teorico di lavoratori)
In base al calcolo precedente, puoi utilizzare 5 worker + 1 worker per cron worker, per un totale di 6 worker.
Calcola il consumo di RAM in base al numero di lavoratori:
RAM = 6 * ((0.8*150) + (0.2*1024)) ~= 2 GB of RAM
Il calcolo mostra che l'installazione di Odoo avrà bisogno di 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 affinché le modifiche abbiano effetto:
sudo systemctl restart odoo14
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 configurazione, potresti avere anche altri servizi in esecuzione sul tuo server.
Conclusione
Questo articolo ti ha guidato attraverso l'installazione di Odoo 14 su CentOS 8 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 leggere il nostro tutorial su come creare backup giornalieri automatici dei database Odoo.