Instal·lar Odoo

De Jose Castillo Aliaga
Ir a la navegación Ir a la búsqueda

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.

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.

Abans de res, es possible que Debian 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

Asciinema del procés.

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.

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
L'opció --save guarda la configuració en $HOME/.openerp_serverrc, que és un fitxer per a l'usuari odoo. Si volem que siga per a tots els usuaris que puguen executar el servidor odoo, es pot ficar en el fixter de /etc/odoo

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!")
Podem directament entrar en una terminal afegint shell al comandament.


Preparar l'entorn de treball per a SGE

Aquesta ajuda és per que, com a alumnes, vos prepareu correctament per poder programar de manera cómoda en Odoo. No obstant, es poden traure idees per al treball professional o en altres entorns
  • 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

Aquesta part del manual sols està orientada als alumnes del curs, encara que pot ser útil per a qualsevol que vulga en sa casa tindre un contenidor o una màquina virtual amb Odoo i no vulga obrir els ports del router.
  • 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.

Asciinema amb el procés

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.

tutorial del certificat

# 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

Errors documentats

Important

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