Odoo è una popolare suite open source di app aziendali che aiuta le aziende a gestire e gestire la propria attività. Include un'ampia gamma di applicazioni come 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 gli APTrepositories ufficiali di Odoo.
L'installazione di Odoo in un ambiente virtuale o la distribuzione come Dockercontainer 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 Ubuntu 20.04. Scaricheremo Odoo dal repository GitHub ufficiale e utilizzeremo Nginx come proxy inverso.
Installazione dei prerequisiti #
Il comando seguente installa Git, Pip, Node.js e gli [strumenti richiesti per costruire](https://linuxize.com/post/how-to-install-gcc-on-ubuntu-20-04/ 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
Creazione di un utente di sistema #
L'esecuzione di Odoo con l'utente root non è consentita, poiché rappresenta un rischio per la sicurezza. Creeremo un nuovo utente e gruppo di sistema con la directory home /opt/odoo14
che eseguirà il servizio Odoo. Per farlo, inserisci il seguente comando:
sudo useradd -m -d /opt/odoo14 -U -r -s /bin/bash odoo14
Puoi nominare l'utente come vuoi, purché crei un utente PostgreSQL con lo stesso nome.
Installazione e configurazione di PostgreSQL #
Odoo utilizza PostgreSQL come back-end del database. PostgreSQL è incluso nei repository standard di Ubuntu. Per installarlo, esegui:
sudo apt install postgresql
Al termine dell'installazione, creare un utente PostgreSQL con lo stesso nome dell'utente di sistema creato in precedenza. In questo esempio, è odoo14
:
sudo su - postgres -c "createuser -s odoo14"
Installazione di 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 rapporti PDF in Odoo, devi installare wkhtmltox
pacchetto. La versione consigliata per Odoo è la versione 0.12.5
, che può essere scaricato 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
Installazione e configurazione di Odoo 14 #
Installeremo Odoo dal sorgente all'interno di un ambiente virtuale Python isolato.
Per prima cosa, passa a user“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
Crea un nuovo ambiente virtuale Python per Odoo:
cd /opt/odoo14
python3 -m venv odoo-venv
Attiva l'ambiente virtuale:
source odoo-venv/bin/activate
Installa tutti i moduli Python richiesti con pip3:
Se riscontri un errore di compilazione durante l'installazione, assicurati che tutte le dipendenze richieste siano elencate inpip3 install wheel
pip3 install -r odoo/requirements.txt
Installing Prerequisites
sezione sono installati. Una volta terminato, disattiva l'ambiente digitando:
deactivate
Crea una nuova directory che conterrà i componenti aggiuntivi di terze parti:
mkdir /opt/odoo14/odoo-custom-addons
Aggiungeremo questa directory a addons_path
parametro. Questo parametro definisce un elenco di directory in cui Odoo ricerca i moduli.
Torna al tuo utente sudo:
exit
Crea un file di configurazione con il seguente contenuto:
sudo nano /etc/odoo14.conf
/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 modificare il my_admin_passwd
a qualcosa di più sicuro. Creazione del file Systemd Unit #
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
/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
Avvia il servizio Odoo e abilitalo all'avvio all'avvio eseguendo:
sudo systemctl enable --now odoo14
Verifica lo stato del servizio:
sudo systemctl status odoo14
L'output dovrebbe essere simile a quello di seguito, mostrando 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 Fri 2020-10-16 19:05:32 UTC; 3s ago
...
Per vedere i messaggi registrati dal servizio Odoo, usa il comando seguente:
sudo journalctl -u odoo14
Test dell'installazione #
Apri il browser e digita:http://<your_domain_or_IP_address>:8069
Supponendo che l'installazione abbia esito positivo, 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 più sicura la distribuzione di Odoo, 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 trasmetterà le richieste non crittografate al servizio interno (Odoo). Il traffico tra Nginx e Odoo non verrà crittografato (HTTP).
L'utilizzo di un proxy inverso offre molti vantaggi come bilanciamento del carico, terminazione SSL, memorizzazione nella cache, compressione, pubblicazione 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 tuo server pubblico. Useremo
example.com
. - Nginx installato.
- 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/sites-enabled/example.com.conf
La configurazione seguente imposta la terminazione SSL, il reindirizzamento da HTTP a HTTPS, il reindirizzamento da WWW a non WWW, i file statici nella cache e abilita la compressione GZip.
/etc/nginx/sites-enabled/example.com.conf# 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;
}
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 vengono creati in questa guida. Al termine, riavvia il servizio Nginx:
sudo systemctl restart nginx
Successivamente, dobbiamo dire a Odoo di utilizzare il proxy. Per farlo, apri il file di configurazione e aggiungi la seguente riga:
/etc/odoo14.confproxy_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
.
Modifica dell'interfaccia di rilegatura #
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 forza Odoo ad ascoltare solo sull'interfaccia locale.
Configureremo Odoo per l'ascolto solo su 127.0.0.1
. Apri la configurazione aggiungi le seguenti due righe alla fine del file:
xmlrpc_interface = 127.0.0.1
netrpc_interface = 127.0.0.1
Salva il file di configurazione e riavvia il server Odoo per rendere effettive le modifiche:
sudo systemctl restart odoo14
Abilitazione multielaborazione #
Per impostazione predefinita, Odoo funziona in modalità multithreading. Per le implementazioni di produzione, si consiglia di passare al server multiprocessing in quanto aumenta la stabilità e fa un migliore utilizzo delle risorse di sistema.
Per abilitare il multiprocessing, devi modificare la configurazione di Odoo e impostare un numero di processi di lavoro diverso da zero. 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 di lavoratori e la dimensione della memoria RAM richiesta, puoi utilizzare le seguenti formule e ipotesi:
Calcolo del numero di lavoratori
- Numero massimo teorico di lavoratore =(system_cpus * 2) + 1
- 1 lavoratore può servire ~=6 utenti simultanei
- Anche i lavoratori Cron richiedono CPU
Calcolo della dimensione della memoria RAM
- Riterremo 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 grep
comando:
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 sopra, puoi utilizzare 5 lavoratori + 1 lavoratore per il lavoratore cron che è un totale di 6 lavoratori.
Calcola il consumo di memoria 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à multielaborazione, apri il file di configurazione e aggiungi i valori calcolati:
/etc/odoo14.conflimit_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 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.