Instal·lar Odoo
Odoo pot ser instal·lat en qualsevol sistema operatiu. No obstant, es desenvolupa pensant en Ubuntu o Debian i és el sistema en el que anem a treballar.
Odoo, en esencia, és un servidor web fet en python que es connecta amb una base de dades postgreSQL. Hi ha moltes maneres d'instal·lar Odoo, de les més avançades que són descarregar per git el repositori i fer que arranque a l'inici a les més simples que són desplegar un docker amb tot funcionant.
Instal·lar en Debian
Abans de res, cal preparar un poc el sistema:
En el cas de Ubuntu o Debian, que és el que ens interessa, Odoo proporciona uns repositoris anomenats Nightly, que poden ser afegits al sources.list per instal·lar de manera automàtica tot. Aquests respositoris són actualitzats cada nit. Per tant, és possible que al llarg del temps, algunes funcions o arxius canvien si actualitzem.
En principi tot ha de funcionar com diuen en els manuals, però si tenim que utilitzar utf-8 per l'idioma, tenim que fer algunes coses abans.
Abans de res, es possible que Debian o ubuntu no tinga bé els locales. Es pot fer en:
# dpkg-reconfigure locales
I seleccionar els de es_ES i el de UTF8 per defecte. Cal eixir de sessió i tornar a entrar.
Si dpkg-reconfigure no mostra un asistent, pots fer:
# locale-gen "es_ES.UTF-8" # dpkg-reconfigure locales
Enllaç als repositoris: https://nightly.odoo.com/
I com en el propi manual diu, es pot fer tot en aquests comandaments (el primer si estem en Debian):
# sudo apt-get install ca-certificates # wget -O - https://nightly.odoo.com/odoo.key | apt-key add - # echo "deb http://nightly.odoo.com/10.0/nightly/deb/ ./" >> /etc/apt/sources.list # apt-get update && apt-get install odoo
Aquests comandaments el que fan és instal·lar els certificats que els navegadors o, en aquest cas, wget necessiten per admetre HTTPS, a continuació, descarrega el certificat, afegeix el repositori i instal·la l'Odoo.
A continuació, cal anar a la direcció en el navegador:
http://<ip o url>:8069
Creació de una base de dades
En l'usuari de odoo, creem una base de dades i li apliquem l'esquema de dades de Odoo:
$ createdb --encoding=UTF-8 --template=template0 testdb $ odoo.py -d testdb
Aixó crea una base de dades amb les dades de prova per començar a treballar.
Per defecte, l'usuari serà admin amb contrasenya admin.
Comandaments bàsics de postgreSQL
Configuració de la ruta dels mòduls
La configuració del servidor Odoo té una opció que es diu addons-path. Nosaltres poden afegir més rutes per als nostres addons personalitzats. Es pot deixar de manera definitiva en el fitxer de configuració o iniciar el servidor indicant quina és la ruta dels addons:
$ odoo -d demodb --addons-path="<ruta>"
Si volem que quede guardat de manera definitiva, cal afegit --save al comandament.
$ odoo -d demodb --addons-path="/var/lib/odoo/modules,./addons" --save
El comandament anterior es deu fer des del directori d'instal·lació d'Odoo.
Exemple en cas de que el home de odoo estiga en un altre lloc i amb rutes absolutes:
$ odoo --addons-path="/home/odoo/modules,/usr/lib/python2.7/dist-packages/odoo/addons" --save
La, provablement, millor solució:
$ odoo --addons-path="/var/lib/odoo/modules,/usr/lib/python2.7/dist-packages/odoo/addons" --save
Depurar Odoo
Per crear mòduls o vorer els problemes que estan passant, cal llegir els fitxers de log, però hi ha una manera més eficient de fer-ho. Si observem el comandament que, realment, està executant odoo:
/usr/bin/python /usr/bin/odoo.py --config /etc/odoo/openerp-server.conf --logfile /var/log/odoo/odoo-server.log
Podem observar que diu que --logofile va a un fitxer. Si parem el servici amb:
# systemctl stop odoo o # /etc/init.d/odoo stop
Podem iniciar sessió amb l'usuari odoo (cal fer que puga iniciar sessió en Linux) i executar:
/usr/bin/python /usr/bin/odoo.py --config /etc/odoo/openerp-server.conf
D'aquesta manera, en temps real, va apareguent els missatges que dona el servidor.
Si volem, amés, actualizar un mòdul al arrancar, podem especificar quina base de dades i quin mòdul a actualitzar:
/usr/bin/python /usr/bin/odoo.py --config /etc/odoo/openerp-server.conf -u mòdul -d empresa
Pot ser que el nostre usuari odoo tinga una configració personalitzada. En aquest cas, cal fer, per exemple:
$ /usr/bin/python /usr/bin/odoo.py --config /var/lib/odoo/.openerp_serverrc -d empresa -u modul
Amés, podem modificar el nivell de log amb l'opció --log-level, per exemple: --log-level=debug
Asccinema amb tots els passos per depurar.
Per saber més, pots anar a l'ajuda:
$ odoo.py --help
O a aquesta web: https://www.odoo.com/documentation/8.0/reference/cmdline.html
Per afegir als nostres mètodes una eixida de log i facilitar la depuració, es pot utilitzar el api de Odoo:
Al principi del fitxer .py:
from openerp import models, fields, api
import logging
_logger = logging.getLogger(__name__)
Per dins de les funcions:
_logger.debug("Use _logger.debug for debugging purposes, nothing else.")
_logger.info("Use _logger.info for information messages. This is used for notifying about something important.")
_logger.warning("Use _logger.warning for minor issues, which will not crash your module.")
_logger.error("Use _logger.error to report a failed operation.")
_logger.critical("Use _logger.critical for critical message: when this goes off the module will not work anymore.")
#Want to include data from your field? Pass it along in the context, get it from the pool or from the dict.
_logger.critical("The name '" + str(record.get('name')) + "' is not okay for us!")
Preparar l'entorn de treball per a SGE
- Instal·lar el contenidor amb Debian 8.0.
- Crear un usuari via consola del Proxmox per poder accedir fàcilment per SSH les primeres vegades i que no siga Odoo.
- Accedir amb eixe usuari per SSH, fer-se root i instal·lar Odoo segons els manuals anteriors.
- Crear una empresa amb dades de demo en la web d'Odoo.
- Fer que l'usuari Odoo tinga shell i fer que es puga accedir a ell per SSH sense contrasenya des del vostre equip.
- Fer-se un compte i un projecte en Github.
- Crear el directori modules i configurar Odoo per utilitzar aquest quant s'inicie en 'mode depuració'.
- Sincronitzar el directori modules en el Github personal.
- Instal·lar ngrok per poder accedir des de casa al contenidor.
- Instal·lar i configurar vim i tmux per poder editar per SSH.
- Configurar el navegador d'arxius per accedir per SSH i editar amb el teu editor preferit.
Accedir des de casa
- Donar-se d'alta en https://ngrok.com
- Dins del contenidor, descarregar en wget l'enllaç que dona ngrok per al seu programa. En el cas nostre és aquest comandament:
$ wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip $ unzip ngrok-stable-linux-amd64.zip
- Dins del contenidor executar ngrok de forma que no es tanque quant tanques la connexió ssh. Per a que funcione cal iniciar-lo dins d'un screen o tmux o nohup:
$ nohup ./ngrok tcp 22
- Això ha obert una connexió al port 22 per a l'ssh.
- Per connectar des de casa:
$ ssh -L 8069:10.20.250.1:8069 lliurex@0.tcp.ngrok.io -p 18489
- Cadascun ha de modificar la IP 10.20.250.1 per la del contenidor propi, l'usuari i el port que diguen en la web de ngrok en l'apartat status.
- Ara tens una terminal SSH i un accés per localhost:8069 a la web d'Odoo.
Accedir amb el navegador d'arxius
Si tens ubuntu, el navegador d'arxius pot acceptar una connexió SSH en el menú ir>lugar i escribint ssh://<url o ip>:<port>
Accedir de forma més còmoda
Si creem un fitxer ~/.ssh/authorized_keys amb la clau pública del nostre client SSH, per exemple: .ssh/id_rsa.pub podem entrar sense escriure contrasenya.
Si accedim i escrivim tmux o screen podem tindre una terminal subdividida i que no es tanca quant tanques la terminal SSH.
Es recomana tindre una terminal per a controlar el servidor amb lletra més menuda i una altra per a la gestió dels fitxers.
Odoo per HTTPS
El servidor Odoo per defecte dona la seua web pel port 8069 i en HTTP sense capa de seguretat SSL.
Per fer que tinga eixa seguretat, necessitem utilitzar un servidor web que faça de proxy i proporcione la connectivitat per HTTPS.
Situació inicial:
------------ ------------ | | 8069| | | Client |<----------->| Server | | | | Odoo | ------------ ------------
Situació que busquem:
------------ -------------------- | | 443 | | | Client |<----------->| Nginx <--┐ | | | | | | ------------ | |8069 | | v | | ------ | | |Odoo| | | ------ | --------------------
Tots els servicis que utilitzen SSL necessiten un certificat. En una situació ideal, tenim un certificat signat per una entitat certificadora. Si no, tenim que crear en nostre autosignat.
# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/odoo-selfsigned.key -out /etc/ssl/certs/odoo-selfsigned.crt Generating a 2048 bit RSA private key ...........................................................................................................+++ ...........................................................................................+++ writing new private key to '/etc/ssl/private/odoo-selfsigned.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:ES State or Province Name (full name) [Some-State]:Valencia Locality Name (eg, city) []: Xàtiva Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []: nom o domini Email Address []: correu@servidor.com
A continuació cal configurar el https en Nginx per a fer de proxy en Odoo. manual oficial
En /etc/odoo.conf:
proxy_mode = True
En /etc/nginx/sites-enabled/odoo.conf:
#odoo server upstream odoo { server 127.0.0.1:8069; } upstream odoochat { server 127.0.0.1:8072; } # S'han definit els upstream a localhost i als port determinats # http -> https (totes les peticions per HTTP se reformulen a HTTPS) server { listen 80; server_name _; # Si tinguerem nom de domini el ficariem, en altre cas: _ rewrite ^(.*) https://$host$1 permanent; } server { listen 443; server_name _; # La _ perquè en l'exemple no tenim domini, com dalt proxy_read_timeout 720s; proxy_connect_timeout 720s; proxy_send_timeout 720s; # Add Headers for odoo proxy mode 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 on; ssl_certificate /etc/ssl/certs/odoo-selfsigned.crt; ssl_certificate_key /etc/ssl/private/odoo-selfsigned.key ; # IMPORTANT: ficar bé les rutes dels certificats ssl_session_timeout 30m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; ssl_prefer_server_ciphers on; # log access_log /var/log/nginx/odoo.access.log; error_log /var/log/nginx/odoo.error.log; # Redirect requests to odoo backend server location / { proxy_redirect off; proxy_pass http://odoo; } location /longpolling { proxy_pass http://odoochat; } # common gzip gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript; gzip on; }
També cal esborrar el default de sites-enables de nginx o modificar-lo per a que no afecte al port 80 d'Odoo.
Ara es reinicien tanmt Odoo com nginx
En Docker
Aquest manual està originalment escrit per a Ubuntu 18.04
Documentació oficial Article sobre Docker i Odoo
En Docker és molt sencill desplegar Odoo, tan sols fa falta aquests comandaments:
# apt install docker.io # docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo --name db postgres:9.4 # docker run -p 8069:8069 --name odoo --link db:db -t odoo # docker stop odoo # docker start -a odoo
El primer comandament instal·la el servei Docker. El segon instal·la un docker PostgreSQL amb una base de dades anomenada odoo i de contrasenya odoo. El tercer crea un docker Odoo vinculat a l'anterior base de dades. Per entrar sols cal anar a la direcció de l'amfitrió:8069 ja que el comandament indica que es redireccione per [Iptables] el port 8069 al del contenidor.
Resultat d'iptables:
# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination DOCKER-USER all -- anywhere anywhere DOCKER-ISOLATION all -- anywhere anywhere ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED DOCKER all -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain DOCKER (1 references) target prot opt source destination ACCEPT tcp -- anywhere 172.17.0.3 tcp dpt:8069 Chain DOCKER-ISOLATION (1 references) target prot opt source destination RETURN all -- anywhere anywhere Chain DOCKER-USER (1 references) target prot opt source destination RETURN all -- anywhere anywhere
Si fem ctrl-C eixim sense parar el contenidor. si volem tornar a entrar per veure els errors:
# docker attach odoo
Per a fer els nostres mòduls podem crear-los en un directori fora del docker i executar-lo d'aquesta manera:
# docker run -v /path/to/addons:/mnt/extra-addons -p 8069:8069 --name odoo --link db:db -t odoo
Si volem entrar en la base de dades postgreSQL per a fer coses manualment, podem executar:
# docker exec -ti db psql -U odoo # docker exec -ti db psql -U postgres
Executem el comandament psql de forma interactiva i amb l'usuari odoo. L'usuari postgres és l'administrador.
Errors documentats
Abans de fer aquests comandaments, consulteu el final del fitxer de log, generalment en /var/log/odoo/odoo-server.log
Si apareix un error similar a:
OperationalError: FATAL: no existe el rol «odoo» OperationalError: FATAL: role "odoo" does not exist
Cal fer el comandament:
su - postgres -c "createuser -s odoo"
Això crea l'usuari odoo amb permís de superusuari (-s)
Moltes vegades, al instal·lar, no configura el template0 de la base de dades en utf-8. [1]
Es soluciona esborrant i tornant a crear la base de dades template1 utilitzant la codificació UTF8. [2]
# su postgres $ psql postgres=# update pg_database set datallowconn = TRUE where datname = 'template0'; postgres=# \c template0 template0=# update pg_database set datistemplate = FALSE where datname = 'template1'; template0=# drop database template1; template0=# create database template1 with template = template0 encoding = 'UTF8'; template0=# update pg_database set datistemplate = TRUE where datname = 'template1'; template0=# \c template1 template1=# update pg_database set datallowconn = FALSE where datname = 'template0';
Pot ser que no es cree el cluster de postgresql. Primer cal reconfigurar els locales y després:
pg_createcluster 9.4 main --start