Introduzione
Odoo è il software aziendale all-in-one più famoso al mondo. Offre una vasta 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.
Questo tutorial spiega come installare Odoo 13 dal sorgente all'interno di un ambiente virtuale Python su una macchina CentOS 8. Scaricheremo l'origine Odoo da Github e configureremo Nginx come proxy inverso.
Prerequisiti
È necessario accedere come root o utente con i privilegi di sudo per completare l'installazione.
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
Installazione di dipendenze
Installa Python 3 , Git, pip e tutte le librerie e gli strumenti necessari per compilare Odoo dal sorgente:
sudo dnf install python3 python3-devel git gcc redhat-rpm-config libxslt-devel bzip2-devel openldap-devel libjpeg-devel freetype-devel
Creare un utente di sistema
Crea un nuovo utente e gruppo di sistema con home directory /opt/odoo
che eseguirà il servizio Odoo:
sudo useradd -m -U -r -d /opt/odoo13 -s /bin/bash odoo13
Puoi nominare l'utente come preferisci, assicurati solo di creare un utente PostgreSQL con lo stesso nome.
Installare e configurare PostgreSQL
Adesso installiamo PostgreSQL 10 dal repository standard di CentOS 8:
sudo dnf install @postgresql:10
Una volta completata l'installazione, creare un nuovo cluster di database PostgreSQL:
sudo postgresql-setup initdb
Abilitare e avviare il servizio PostgreSQL:
sudo systemctl enable --now postgresql
Crea un utente PostgreSQL con lo stesso nome dell'utente di sistema precedentemente creato, nel nostro caso che è "odoo13":
sudo su - postgres -c "createuser -s odoo13"
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 stampare report PDF, è necessario lo strumento wkhtmltopdf
. La versione consigliata per Odoo è 0.12.5
, che non è disponibile nei repository ufficiali CentOS 8.
Installa il pacchetto rpm
da Github digitando:
sudo dnf install https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox-0.12.5-1.centos8.x86_64.rpm
Installazione e configurazione di Odoo 13
Prima di iniziare con il processo di installazione, passare all'utente "odoo13":
sudo su - odoo13
Inizia clonando il codice sorgente di Odoo 13 dal repository Odoo GitHub:
git clone https://www.github.com/odoo/odoo --depth 1 --branch 13.0 /opt/odoo13/odoo
Passare alla directory /opt/odoo13
e creare un nuovo ambiente virtuale Python per l'installazione di Odoo:
cd /opt/odoo13
python3 -m venv venv
Attiva l'ambiente usando 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 di aver installato tutte le dipendenze richieste elencate nella sezione Installing Dependencies
.
Una volta completata l'installazione, disattiva l'ambiente:
deactivate
Creare una nuova directory per i componenti aggiuntivi personalizzati:
mkdir /opt/odoo13/odoo-custom-addons
Torna al tuo utente sudo:
exit
Quindi, aprire l'editor di testo e creare il file di configurazione. In questo tutorial utilizziamo nano, se preferite potete utilizzare vi installato di default sulla maggior parte delle distribuzioni.
sudo dnf install nano
sudo nano /etc/odoo13.conf
[options]
; This is the password that allows database operations:
admin_passwd = superadmin_passwd
db_host = False
db_port = False
db_user = odoo13
db_password = False
addons_path = /opt/odoo13/odoo/addons, /opt/odoo13/odoo-custom-addons
Salvare e chiudere il file premendo CTRL+X, seguito da Y per salvare le modifiche e quindi ENTER se stai utilizzando nano.
Non dimenticare di cambiare superadmin_passwd
in qualcosa di più sicuro.
Creare il file di unità Systemd
Apri il tuo editor di testo e crea un file chiamato odoo13.service
all'interno della directory /etc/systemd/system/
:
sudo nano /etc/systemd/system/odoo13.service
Incolla il seguente contenuto:
[Unit]
Description=Odoo13
Requires=postgresql.service
After=network.target postgresql.service
[Service]
Type=simple
SyslogIdentifier=odoo13
PermissionsStartOnly=true
User=odoo13
Group=odoo13
ExecStart=/opt/odoo13/venv/bin/python3 /opt/odoo13/odoo/odoo-bin -c /etc/odoo13.conf
StandardOutput=journal+console
[Install]
WantedBy=multi-user.target
Salvare il file e chiudere l'editor.
Notifica a Systemd che esiste un nuovo file di unità:
sudo systemctl daemon-reload
Avviare e abilitare il servizio Odoo eseguendo:
sudo systemctl enable --now odoo13
Puoi controllare lo stato del servizio con il seguente comando:
sudo systemctl status odoo13
● odoo13.service - Odoo13
Loaded: loaded (/etc/systemd/system/odoo13.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2020-01-27 23:42:05 CET; 2s ago
Main PID: 32025 (python3)
Tasks: 4 (limit: 12251)
Memory: 92.0M
CGroup: /system.slice/odoo13.service
└─32025 /opt/odoo13/venv/bin/python3 /opt/odoo13/odoo/odoo-bin -c /etc/odoo13.conf
Per visualizzare i messaggi registrati dal servizio Odoo, utilizzare il comando seguente:
sudo journalctl -u odoo13
Testare l'installazione
Apri il tuo browser e digita: http://DOMINIO_O_INDIRIZZO_IP:8069
Supponendo che l'installazione abbia esito positivo, verrà visualizzata una di configurazione di Odoo.
Se non riesci ad accedere alla pagina, probabilmente il tuo firewall sta bloccando la porta 8069
.
Utilizzare i seguenti comandi per aprire la porta necessaria:
sudo firewall-cmd --permanent --zone=public --add-port=8069/tcp
sudo firewall-cmd --reload
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.
Assicurarsi di aver soddisfatto i seguenti prerequisiti prima di continuare con questa sezione:
- Nome di dominio che punta all'IP del tuo server pubblico. Useremo
example.com
. - Nginx installato.
- Certificato SSL per il tuo dominio. È possibile installare un certificato SSL Let's Encrypt gratuito.
Apri il tuo editor di testo e crea o modifica il blocco del server di dominio:
sudo nano /etc/nginx/conf.d/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;
}
# HTTP -> HTTPS
server {
listen 80;
server_name www.example.com example.com;
location ^~ /.well-known/acme-challenge/ {
allow all;
root /var/lib/letsencrypt/;
default_type "text/plain";
try_files $uri =404;
}
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;
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;
# 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;
}
location ^~ /.well-known/acme-challenge/ {
allow all;
root /var/lib/letsencrypt/;
default_type "text/plain";
try_files $uri =404;
}
# Gzip
gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript;
gzip on;
}
Al termine, riavvia il servizio Nginx:
sudo systemctl restart nginx
Successivamente, dobbiamo impostare Odoo per utilizzare il proxy. Per fare ciò, apri il file di configurazione:
sudo nano /etc/odoo13.conf
Aggiungi la seguente riga:
proxy_mode = True
Salva e chiudi il file.
Riavvia il servizio Odoo per rendere effettive le modifiche:
sudo systemctl restart odoo13
A questo punto, il proxy inverso è configurato e puoi accedere alla tua istanza Odoo su: https://example.com
.
Modificare l'interfaccia di associazione
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 la configurazione:
sudo nano /etc/odoo13.conf
Aggiungi le seguenti due righe alla fine del file:
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 odoo13
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 lavoratori 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 lavoratori e la dimensione della memoria RAM richiesta, è possibile utilizzare le seguenti formule e ipotesi:
Calcolo del numero di lavoratore
- Numero massimo teorico dei worker = (system_cpus * 2) + 1
- 1 worker può servire ~ = 6 utenti simultanei
- Anche i cron worker richiedono CPU
Calcolo della dimensione della memoria RAM
- Considereremo che il 20% delle richieste sono 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:
sudo nano /etc/odoo13.conf
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
Salva e chiudi il file.
Riavvia il servizio Odoo per rendere effettive le modifiche:
sudo systemctl restart odoo13
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 13 su CentOS 8 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.