Odoo prod¶
Purtroppo questa sezione non è stata ancora tradotta in inglese a causa della mancanza di tempo, ogni contributo è ben accetto! :)
Questa sezione copre i concetti riguardanti le procedure per l’installazione e la configurazione degli ambienti di odoo di produzione. Per favore leggere prima l’introduzione sulla pagina Odoo.
Per maggiori informazioni riguardanti l’architettura consultare lo schema sulla pagina Odoo e in caso di dubbi rivolgersi al BOFH.
Introduzione¶
L’ambiente di prod gira su 4 nodi su cui è installato podman. Podman è un tool demonless quasi completamente identico a Docker (molti comandi sono identici) che si occupa di gestire le immagini e i container OCI. La maggior parte delle operazioni viene gestira da due script: service_podman e service_scaffold. Entrambi sono reperibili presso la repo https://git.webmonks.org/odoo/server-utils/odoo-service-utilities. Di seguito le procedure per installare odoo nell’ambiente di produzione.
Gitlab¶
Taggare la release del branch interessato su https://git.webmonks.org/odoo/odoo-docker-compose-recipe Solitamente la nomenclatura del tag segue la regola
r.<nomebranch>.<numero release>quindi ad esempio la release 8 del branch monk13 sarà taggata conr.monk13.8.Dopo aver taggato il commit corrispondente alla release che si vuole pubblicare, buildare l’immagine della release per la produzione dal pannello CI/CD di gitlab.
Postgres¶
Creare il database su dbcl01:
~$ sudo -i ~$ su - postgres-odoo ~$ psql
Creare utente e database rispettando la nomenclatura
odoo<nome>per l’utente eodoo<nome>prodper il database:postgres=# CREATE USER odoomonk13 WITH PASSWORD 'asdasdasd'; postgres=# CREATE DATABASE odoomonk13prod OWNER odoomonk13;
Creazione Servizio¶
Per questa procedura si consiglia l’uso di un Terminal multiplexer (Tmux) per sincronizzazione i comandi su tutti e 4 i nodi del cluster di odoo.
Caution
Le azioni di seguito andranno effettuate su tutti e 4 i nodi.
entrare nel nodo, ad es.
odoo-be-prod01e diventare utente odoo:~$ sudo -i ~$ su - odoo
Creare il servizio utilizzando lo script
service_scaffold, ricordarsi di rispettare la nomenclatura per la creazione del servizio (all’inizio vanno messi i primi 2 digit delle porte usate da quell’odoo)<digit>-odoo-<nome>-prod. Quindi se vogliamo creare un nuovo servizio chiamatomonk13e tale servizio sarà in ascolto sulle porte5900e5901(longpolling), allora faremo così:~$ cd /var/lib/odoo ~$ service_scaffold -n 59-odoo-monk13-prod -i docker.repo.localmonks.net/odoo/monk13:r8
Entrare nella directory che è stata creata dallo script:
~$ cd /var/lib/odoo/59-odoo-monk13-prod
controllare che i parametri in
service_conf.shsiano corretti ed editare il fileodoo.conf:aggiungere db
controllare che siano configurati e aggiunti i moduli: redis_session_store, syslog_logger
prima di aggiungere i moduli accertarsi di aver fatto il checkout del tag corrispondente alla versione di odoo che si sta utilizzando (ad es. se si usa odoo12 il tag è
12.0)
che sia impostata la porta di longpolling
che sia impostata l’
admin_passwd
Dare i permessi corretti a
odoo.conf~$ chmod 644 odoo.conf
Caution
Le azioni di seguito andranno effettuate solo su un nodo.
Creazione directory su filestore:
Loggarsi in uno dei quattro nodi, ad es.
odoo-be-prod01e diventare root:~$ sudo -i
Creare delle directory con la stessa struttura e i permessi dell’esempio di sotto in
/var/lib/odoo/data. La directory principale dovrà avere lo stesso nome del servizio che andremo a creare successivamente:permessi utente gruppo directory drwxr-x--- 624388 odoo 59-odoo-monk13-prod drwxr-x--- 624388 odoo └── volumes drwxr-xr-x 624388 odoo └── odoodata
Creare le directory base di odoo nel volume:
mkdir -p /var/lib/odoo/data/xx-odoo-blabla-prod/volumes/odoodata/{addons,filestore}
Dare i permessi adatti alle directory filestore e addons:
chown -R 624388:624388 /var/lib/odoo/data/x-odoo-blabla-prod/volumes/odoodata/filestore chown -R 624388:624388 /var/lib/odoo/data/x-odoo-blabla-prod/volumes/odoodata/addons
Caution
Le azioni di seguito andranno effettuate su tutti e 4 i nodi.
Una volta creato e configurato il sevizio e il datastore, lanciare il servizio usando lo script
service_podmanche si occupa di gestire i containers (aggiornamento, start e stop, up e down):~$ service_podman /var/lib/odoo/59-odoo-monk13-prod up
Caution
Le azioni di seguito andranno effettuate solo su un nodo.
entrare nel nodo, ad es.
odoo-be-prod01e diventare utente odoo:~$ sudo -i ~$ su - odoo
Inizializzare il database creato in precedenza entrando nel container. È possibile vedere i container attivi con il comando
podman ps. Una volta identificato il container aprire una bash all’interno di esso con il comando:~$ podman exec -it 59-odoo-monk13-prod.r8 bash
e lanciare il comando per odoo > 11.0
~$ ./entrypoint.sh --no-http --stop-after-init --workers=0 -i base
altrimenti
~$ ./entrypoint.sh --no-xmlrpc --stop-after-init --workers=0 -i base
Aggiornamento servizio¶
Caution
Le azioni di seguito andranno effettuate su tutti e 4 i nodi.
Per aggiornare un servizio a una nuova release baste modificare la versione dell’immagine all’interno del file
service_conf.sh. Quindi ad esempio modificare il file in/var/lib/odoo/59-odoo-monk13-prod/service_conf.sh.Lanciare poi l’aggiornamento automatico del servizio con il comando:
~$ service_podman /var/lib/odoo/59-odoo-monk13-prod update
Il comando andrà lanciato come utente odoo
Configurazione Nginx¶
Caution
Le azioni di seguito andranno effettuate su tutti e 4 i nodi.
entrare nel nodo, ad es.
nginx-fe01e diventare utente root:~$ newgrp admins ~$ sudo -i
entrare nella directory
/etc/nginx/ed editare il file./conf.d/upstream-odoo.confe creare un nuovo upstream sia per la porta http (odoo-<nome>-prod), che per la porta usata per il longpolling (odoo-<nome>-prod-im) usando lo stesso bilanciamento degli altri upstream di odoo.una volta modificata la configurazione degli upstream testarla con il comando
~$ nginx -t
Caution
Le azioni di seguito andranno effettuate solo su un nodo.
entrare nella directory
/etc/nginx/sites-availablee creare un file con nome<nome>.odoo.monksoftware.itesempio di configurazione nginx per affiancamento.odoo.monksoftware.it:
server { listen 443 ssl; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; server_name affiancamento.odoo.monksoftware.it; access_log /var/log/nginx/affiancamento.odoo.monksoftware.it.log timing; error_log /var/log/nginx/affiancamento.odoo.monksoftware.it_error.log; # You can keep this SSL section as the same for every .odoo.monksoftware.it backend ssl on; ssl_prefer_server_ciphers on; ssl_certificate /etc/nginx/certs/*.odoo.monksoftware.it.cer; ssl_certificate_key /etc/nginx/certs/*.odoo.monksoftware.it.key; proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; send_timeout 300; client_max_body_size 10m; proxy_set_header Host $host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $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; proxy_set_header If-None-Match $http_if_none_match; gzip on; gzip_types text/plain text/xml text/css application/xml application/json application/x-javascript application/javascript; location / { proxy_pass http://odoo-affiancamento-prod; } location /longpolling { proxy_pass http://odoo-affiancamento-prod-im; proxy_connect_timeout 600; proxy_send_timeout 600; proxy_read_timeout 600; send_timeout 600; } }
una volta scritta la configurazione linkarla dentro
/etc/nginx/sites-enablede controllare che sia stata scritta correttamente~$ cd /etc/nginx/sites-enabled ~$ ln -s ../sites-available ~$ nginx -t
Caution
Le azioni di seguito andranno effettuate su tutti e 4 i nodi.
una volta testata la config lanciare su tutti quanti i nodi il comando:
~$ nginx -s reload
Procedura messa in produzione Odoo da preprod¶
Copia del database da preproduzione a produzione
- Fare il dump del db di test in formato plain (non custom):
pg_dump -d dbname > dbname.dmp
(almeno finchè non verranno nuovamente allineate le versioni di postgres su preprod)
Copiarlo su uno dei server del cluster postgres di produzione.
Creare il database e l’utenza su produzione
create user yyyy with encrypted password 'yyyyxxxx' create database xxxxxxxx owner yyyyy grant all privileges on database xxxxxx to yyyyy
Effettuare il restore sul db di produzione
psql -d xxxxx < dbname.dmp
Lanciare lo script utility per sistemare le utenze:
fixdbPermissions dbowner dbname (ad esempio: fixdbPermissions odoosimica odoosimicaprod).
Non possiamo usare REASSIGN OWNED in quanto l’import è stato fatto con l’utenza postgres.
Entrare sul db di produzione e cancellare gli asset per fare in modo che vengano rigenerati
psql -d xxxxxx delete from ir_attachment where res_model='ir.ui.view' and name like '%assets_%';
Copiare il filestore da preproduzione a produzione:¶
Entrare sulla macchina di preproduzione e spostarsi nella directory relativa al container dove gira l’Odoo da migrare, all’interno dei volumi, ad esempio:
/var/lib/docker/volumes/odoosimica-demo_odoodata/_data/filestore/odoosimicatest
Dove odoosimica-demo_odoodata è il nome del container, e la parte “odoosimicatest” è il nome dell’Odoo
Quindi: Sulla macchina di produzione, come utente root, spostarsi dentro
/var/lib/odoo/data/xx-odoo-blabla-prod/volumes/odoodata/filestore
Lanciare:
nc -l -w 10 -p 8080 | tar -vxf -
Sulla macchina di preeproduzione, dalla directory in cui ci eravamo già spostati prima, lanciare:
tar -cvf - * | nc -q 10 odoo-be-prod01 8080
In questo modo copieremo i file su produzione.
Dare i permessi adatti al contenuto del filestore:
chown -R 624388:624388 /var/lib/odoo/data/x-odoo-blabla-prod/volumes/odoodata/filestore
Fare partire il container:
service_podman <nomecontainer> up
Controllare il log su storage:/var/log/odoo/logname-prod
Aggiunta syslog su storage¶
Per far loggare correttamente odoo all’interno di storage.localmonks.net
bisogna editare la config (all’interno di storage) /etc/syslog-ng/syslog-ng.conf
Per maggiori informazioni chiedere aiuto al BOFH.
Comandi utili¶
I comandi di podman sono praticamente gli stessi di docker: solitamente i log di odoo vengono inviati a storage.localmonks.net, ma eventualmente è possibile vedere il log del container con il comando:
podman logs -f 59-odoo-monk13-prod.r8