L'installazione di Odoo è uno degli argomenti più dibattuti in rete. 
Vediamo come effettuare un'installazione professionale, manutenibile e replicabile.

Odoo, installazione e prima configurazione

L'installazione di Odoo è uno degli argomenti più dibattuti in rete. Vediamo come effettuare un'installazione professionale, manutenibile e replicabile.

Perché chi ben comincia è a metà dell'opera 

Come per qualsiasi altro software enterprise, installare correttamente Odoo è il modo migliore per iniziare un progetto. Che sia per uso personale, aziendale o per un proprio cliente, la procedura di installazione è ugualmente importante.

Usanze e costumi

Soprattutto in ambiente GNU/Linux, le guerre di religione sono sempre all'ordine del giorno, anche quando si parla di Odoo.

La casa madre mette a disposizione diverse soluzioni descritte nella sezione Installing Odoo della documentazione ufficiale.

Le principali sono ovviamente i sorgenti e i pacchetti di installazione, in formato deb o rpm, in base alla distribuzione GNU/Linux utilizzata.

Come se non bastasse, anche quando si parla di sorgenti le strade percorribili sono molte, poiché Python offre parecchie possibilità.

Senza voler sconsigliare (o forse si) le varie strade descritte nella documentazione ufficiale, menzionate sui forum o reperibili sotto forma di how-to in rete, oggi voglio parlarvi di Buildout.

Buildout

Come descritto sul sito del progetto (http://www.buildout.org), Buildout è uno strumento Python-based con il quale possiamo creare installazioni di software che possono contenere varie componenti eterogenee (ad esempio, database server e application server) non per forza legate al mondo Python.

Spiegato nel modo più semplice possibile, Buildout è un'utility che, dato un file di configurazione, si preoccupa di creare all'interno di una precisa struttura di cartelle tutto l'ambiente necessario per far vivere e coesistere i software di cui abbiamo bisogno.

Preso il nostro file di configurazione Buildout, siamo in altre parole in grado di replicare un'intera installazione.

Le ricette

Quando parliamo di Buildout, sentiamo spesso parlare di recipes (ricette). Le recipe sono una sorta di plugin per Buildout. Possiamo ad esempio trovare recipe per installare librerie, per creare files e cartelle, recipe per configurare automaticamente determinati software e... recipe per installare e configurare Odoo.

La recipe più famosa all'interno dell'ecosistema Odoo è sicuramente anybox.recipe.openerp, creata e mantenuta da Anybox.

Questa ricetta si occupa di scaricare Odoo e le sue dipendenze, creare il file di configurazione e di metterci a disposizione dei comodi comandi per far partire il servizio, per aggiornare moduli ed altro ancora.

Passi preliminari

Assolutamente non necessari, ma Anybox ci mette a disposizione dei meta-pacchetti in formati deb per Ubuntu, Debian e derivate che si occupano di scaricare automaticamente buona parte delle dipendenze direttamente dai repository della nostra distribuzione.

Siccome potreste non essere utenti Ubuntu/Debian (ad esempio io uso la recipe di Anybox su Mac OSX), ricordatevi che questo passo è facoltativo e che potete installare le varie dipendenze (header di sviluppo, librerie, etc) nel modo che più preferite (ad esempio con HomeBrew su Mac OSX).

Ma facciamo le cose per bene e quindi usiamo anche questi pacchetti.

I prossimi passi e le schermate che vi mostrerò sono stati eseguiti su Ubuntu 14.04 LTS, ma sono pressoché identici su versioni differenti o su altre distribuzioni derivate da Debian.

Repository Anybox

La prima cosa da fare è configurare il repository APT di Anybox.

Per installare la chiave pubblica con la quale APT verificherà l'identità dei pacchetti è necessario eseguire il seguente comando:

sudo apt-key adv --keyserver hkp://subkeys.pgp.net --recv-keys 0xE38CEB07

Ciò che dovreste ottenere deve assomigliare a quanto segue:

gpg: requesting key E38CEB07 from hkp server subkeys.pgp.net
gpg: key E38CEB07: public key "Anybox Packagers <packagers@anybox.fr>" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)

Nel caso otteniate errori di timeout, server non raggiungibile o simili, provate a usare un altro server invece di subkeys.pgp.net, come ad esempio keyserver.ubuntu.com.

A questo punto possiamo procedere ad informare APT dell'esistenza del repository di Anybox.

Andiamo quindi a creare un file che chiameremo anybox.list in /etc/apt/sources.list.d, nel quale incolleremo la seguente stringa:

deb http://apt.anybox.fr/openerp common main

A questo punto potremo aggiornare la lista di pacchetti ed installare il meta-pacchetto messo a disposizione da Anybox:

sudo apt-get update
sudo apt-get install openerp-server-system-build-deps

Il meta pacchetto sfortunatamente installerà parecchie dipendenze, eventualmente disinstallabili una volta terminata l'installazione di Odoo. Si tratta comunque principalmente di header di sviluppo necessarie per la compilazione delle dipendenze di Odoo stesso.

Utente e path

Dopo aver installato le dipendenze della recipe Anybox, il prossimo passo consiste nel creare l'utente odoo, con in quale avvieremo Odoo.

Senza specificare un percorso alternativo, Ubuntu creerebbe la home dell'utente odoo sotto /home appunto, ma è prassi NON installare software sotto il percorso /home.

Quando si tratta di software legacy e/o di terze parti non forniti dalla distribuzione, il percorso consigliato dal Filesystem Hierarchy Standard (FHS) è /opt ma ormai anche /srv è diventata una folder molto usata (non sempre presente su tutte le distribuzioni però), anche se il suo scopo sarebbe contenere pagine o files serviti da software vari come webservers.

In questa guida installeremo Odoo nella cartella /opt, ma potete benissimo scegliere una qualsiasi altra folder di vostra scelta.

Procediamo quindi a creare l'utente specificando il path dalla sua home:

$ sudo adduser odoo --home /opt/odoo

Il sistema ci porrà le solite domande, compresa la richiesta della password (è spesso usanza non impostare la password degli utenti con i quali vengono eseguiti i servizi. A voi la scelta).

A questo punto potremo autenticarci come utente odoo per finalmente concentrarci sull'installazione di Buildout.

All'interno della home dell'utente odoo possiamo quindi creare una folder che ospiterà l'intera installazione oppure una struttura di cartelle, nel caso in volessimo installare più versioni di odoo. Ad esempio potremmo procedere a creare diversi buildout differenti per gli ambienti di sviluppo e quelli di produzione. Oppure buildout differenti per poter testare la versione 8.0 e la versione master (futura 9.0).

Creiamo quindi la cartella che ospiterà il nostro ambiente buildout:

$ sudo su - odoo
$ mkdir buildout
$ cd buildout

Possiamo ora procedere con la creazione dei due files che ci servono per inizializzare il nostro Buildout.

buildout.cfg

Questo è il files di configurazione principale di Buildout.

Quello che segue è un esempio, molto semplice, di configurazione di Odoo 8.0 con localizzazione italiana. Il tutto preso da GitHub.

Creiamo quindi un file di nome buildout.cfg e copiamo al suo interno quando segue.

[buildout]
parts = odoo
find-links = http://download.gna.org/pychart/

[odoo]
recipe = anybox.recipe.openerp:server
version = git http://github.com/odoo/odoo.git odoo 8.0
addons = git https://github.com/OCA/l10n-italy.git parts/l10n-italy 8.0
options.admin_passwd = admin
eggs = codicefiscale

Approfondiremo in un altro articolo dedicato i dettagli di buildout.cfg e le sue varie possibilità, ma è necessario comprendere le basi per personalizzare eventualmente la vostra installazione.

Tra parentesi quadre troviamo le sezioni del nostro file di configurazione.

Nella prima, [buildout], vengono elencate le sezioni che buildout deve leggere tramite il parametro parts.

Con find-links possiamo specificare l'url ed eventualmente il percorso completo del tar.gz, zip o altro, di una dipendenza nel caso questa non fosse presente ad esempio su pypi.

Nella sezione [odoo] troviamo il nome della recipe da usare per l'installazione di Odoo.

In version troviamo il riferimento ai sorgenti, in questo caso su GitHub di Odoo.
Con il parametro addons possiamo specificare repository git, bazaar o altro con i sorgenti per addons di terze parti, ad esempio il repository OCA della localizzazione italiana.

Con options. possiamo personalizzare i parametri classici del files di configurazione di Odoo. Nell'esempio vediamo che con options.admin_passwd andremo a settare la password di superadmin nel file di configurazione di Odoo, che Buildout creerà per noi.

Infine in eggs possiamo specificare i moduli python necessari per il corretto funzionamento di Odoo e dipendenze, se questi non sono già stati specificati altrove, come nel file setup.py di Odoo, che la recipe Anybox andrà a leggere per sapere quali moduli python installare.

bootstrap.py

Questo script python leggerà il contenuto di buildout.cfg e creerà la struttura di cartelle e files del nostro ambiente.

Possiamo scaricare lo script direttamente dalla rete con il seguente comando:

$ wget https://raw.github.com/buildout/buildout/master/bootstrap/bootstrap.py

Dobbiamo ora eseguire questo script.
Al termine dell'esecuzione troveremo il nostro ambiente Buildout pronto all'uso:

$ python bootstrap.py

Se otteniamo il risultato seguente potremo eseguire buildout e attendere il messaggio di conferma.

[...]
Creating directory '/opt/odoo/buildout/bin'.
Creating directory '/opt/odoo/buildout/parts'.
Creating directory '/opt/odoo/buildout/eggs'.
Creating directory '/opt/odoo/buildout/develop-eggs'.
Generated script '/opt/odoo/buildout/bin/buildout'.

I tempi di esecuzione dipendono da molti fattori. Ricordatevi che buildout scaricherà i sorgenti di Odoo, quindi il download potrebbe durare parecchio tempo.

Lanciamo quindi buildout con:

$ bin/buildout -v

Il parametro -v ci permetterà di vedere a schermo i dettagli delle operazioni svolte da buildout ed eventualmente individuare problemi. Al termine otterremo questo messaggio:

Generated script '/opt/odoo/buildout/bin/gevent_odoo'.
Generated script '/opt/odoo/buildout/bin/start_odoo'.
Generated script '/opt/odoo/buildout/bin/upgrade_odoo'.
Generated script '/opt/odoo/buildout/bin/odoo_command'.
anybox.recipe.openerp.base: Creating config file: etc/odoo.cfg

Complimenti, avete appena installato Odoo :-)

Ovviamente manca ancora almeno un passo prima di poter usare Odoo.

PostgreSQL

A meno che non abbiate un server PostgreSQL esterno, dovete installarlo sulla vostra macchina.

Generalmente la versione disponibile sia su Debian che su Ubuntu, perlomeno per le versioni LTS, non è l'ultimissima, quindi vi consiglio di utilizzare i repository APT ufficiali di PostgreSQL.

Quindi usciamo dalla sezione dell'utente odoo con il comando exit (altrimenti non possiamo usare sudo) e lanciamo i seguenti comandi per installare PostgreSQL e creare l'utente odoo:

$ exit
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
$ sudo apt-get install wget ca-certificates
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install postgresql-9.4
$ sudo su - postgres -c "createuser -d odoo"
$ sudo su - odoo

Se tutto è andato a buon fine, dovremo poter utilizzare psql senza dover digitare la password, siccome il sistema di autenticazione di default di PostgreSQL (perlomeno su Ubuntu) è peer, ovvero basta usare un utente di sistema con lo stesso nome di un utente PostgreSQL valido:

$ psql -l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(3 rows)

Se vedete l'elenco dei database, allora siete autenticati e pronti per avviare Odoo:

$ cd ~/buildout
$ bin/start_odoo
2015-02-14 16:42:09,971 3042 INFO ? openerp: OpenERP version 8.0
2015-02-14 16:42:09,972 3042 INFO ? openerp: addons paths: ['/opt/odoo/.local/share/Odoo/addons/8.0', u'/opt/odoo/buildout/parts/odoo/openerp/addons', u'/opt/odoo/buildout/parts/odoo/addons', u'/opt/odoo/buildout/parts/l10n-italy']
2015-02-14 16:42:09,974 3042 INFO ? openerp: database hostname: localhost
2015-02-14 16:42:09,974 3042 INFO ? openerp: database port: 5432
2015-02-14 16:42:09,975 3042 INFO ? openerp: database user: odoo
2015-02-14 16:42:10,147 3042 INFO ? openerp.service.server: HTTP service (werkzeug) running on 0.0.0.0:8069

Complimenti!

Se tutto è andato per il verso giusto dovresti potervi collegare a http://localhost:8069 (o http://ip:8069) e vedere la schermata di default del database manager di Odoo 8.0.

Avvio automatico

Potreste voler avviare automaticamente Odoo all'avvio del sistema.

Non prenderemo in considerazione in questo how-to l'utilizzo di strumenti quali Supervisord e simili, quindi ci limiteremo a creare un file di init valido per Debian, Ubuntu e derivate, usando quello presente di default nei sorgenti di Odoo.

sudo cp /opt/odoo/buildout/parts/odoo/debian/init /etc/init.d/odoo

Ora apriamo il file creato con il nostro editor preferito, modifichiamo il path del demone (parametro DAEMON), eliminiamo il richiamo al file di configurazione e a quello di log (gestiti da buildout).

Il file risultante dovrebbe assomigliare al seguente:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          odoo.py
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start odoo daemon at boot time
# Description:       Enable service provided by daemon.
# X-Interactive:     true
### END INIT INFO
## more info: http://wiki.debian.org/LSBInitScripts

. /lib/lsb/init-functions

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
DAEMON=/opt/odoo/buildout/bin/start_odoo
NAME=odoo
DESC=odoo
PIDFILE=/var/run/${NAME}.pid
USER=odoo
export LOGNAME=$USER

test -x $DAEMON || exit 0
set -e

function _start() {
    start-stop-daemon --start --quiet --pidfile $PIDFILE --chuid $USER:$USER --background --make-pidfile --exec $DAEMON --
}

function _stop() {
    start-stop-daemon --stop --quiet --pidfile $PIDFILE --oknodo --retry 3
    rm -f $PIDFILE
}

function _status() {
    start-stop-daemon --status --quiet --pidfile $PIDFILE
    return $?
}


case "$1" in
        start)
                echo -n "Starting $DESC: "
                _start
                echo "ok"
                ;;
        stop)
                echo -n "Stopping $DESC: "
                _stop
                echo "ok"
                ;;
        restart|force-reload)
                echo -n "Restarting $DESC: "
                _stop
                sleep 1
                _start
                echo "ok"
                ;;
        status)
                echo -n "Status of $DESC: "
                _status && echo "running" || echo "stopped"
                ;;
        *)
                N=/etc/init.d/$NAME
                echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
                exit 1
                ;;
esac

exit 0

Ora come ultima cosa rendiamo il file di init eseguibile e configuriamolo per avviarsi automaticamente all'avvio del sistema e testiamone il corretto funzionamento:

$ sudo chmod +x /etc/init.d/odoo 
$ sudo update-rc.d odoo defaults
  Adding system startup for /etc/init.d/odoo ...
   /etc/rc0.d/K20odoo -> ../init.d/odoo
   /etc/rc1.d/K20odoo -> ../init.d/odoo
   /etc/rc6.d/K20odoo -> ../init.d/odoo
   /etc/rc2.d/S20odoo -> ../init.d/odoo
   /etc/rc3.d/S20odoo -> ../init.d/odoo
   /etc/rc4.d/S20odoo -> ../init.d/odoo
   /etc/rc5.d/S20odoo -> ../init.d/odoo
$sudo /etc/init.d/odoo start
Starting odoo: ok

Complimenti! Il vostro Odoo 8.0 è installato, configurato e pronto all'uso.

Prossimi step

Nei prossimi articoli esploreremo le potenzialità di buildout e aggiungeremo componenti alla nostra architettura, come supervisord, nginx e altro.

Per il momento potete però divertirvi con il vostro Odoo 8.0

Ah..dimenticavo..

Lo scopo di tutto questo? Presto detto:

$ sudo /etc/init.d/odoo stop
$ sudo su - odoo
$ cd buildout
$ bin/buildout -Nv
[... attendere prego ...]
$ bin/start_odoo -d nome_vostro_database -u all --stop-after-init
[... attendere prego ...]
$ exit
$ sudo /etc/init.d/odoo start

Cosa abbiamo fatto?

Abbiamo aggiornato Odoo (buildout ha scaricato i sorgenti aggiornati per voi) e fatto l'update del vostro database all'ultima revisione di Odoo 8.0.

Ora il perchè dell'utilizzo di Buildout dovrebbe essere più chiaro.

Share this on

Share |

On same topics

Commenti

comments powered by Disqus