Posts Tagged ‘postgresql’

openERP

Mercredi, février 2nd, 2011

Installation d’openERP 6.0.1 sur un serveur debian 6.0 squeeze virtuel (KVM) hébergé sur un serveur proxmox 1.7

Ayant déjà installé openERP pour un client sur un « Desktop » kubuntu, je me suis vite aperçu que cette solution n’est pas viable. Un « upgrade » de la version peut détruire en quelques secondes des heures de travail. Je ne parlerai pas, non plus, des risques liés à un crash disque, ni même de l’installation de logiciels tiers par le client qui « cassent » la configuration. Bref, je devais envisager une autre solution. Et pourquoi pas virtualiser openERP ?

Depuis quelques temps déjà, je m’intéressais à un produit open source : proxmox. Je vous conseille donc ce produit car il est simple, efficace et fiable. J’expliquerai dans un article comment installer proxmox et virtualiser entièrement son infrastructure informatique (firewall, machines virtuelle, NAS virtualisé etc)

Après avoir installé proxmox, vous devez installer une machine virtuelle openvz ou kvm. J’ai opté pour une machine kvm debian 6.0 installée à partir d’une images de CD au format carte de visite (quelques Mo).

Nous pouvons alors commencer l’installation :

1. Installation des outils

dexter@openerp-cosmic:~$ su -
root@openerp-cosmic:~# apt-get install -y mc vim sudo

Editez /etc/sudoers et sous la ligne root… ajoutez la ligne en rouge en remplaçant votreuser par le user avec lequel vous travaillez :

root@openerp-cosmic:~# vim /etc/sudoers
# User privilege specification
root    ALL=(ALL) ALL
votreuser  ALL=(ALL) ALL

2. Installation des packages pour le serveur

dexter@openerp-cosmic:~$ sudo apt-get install postgresql python python-psycopg2 python-reportlab python-egenix-mxdatetime python-tz python-pychart python-pydot python-vobject python-setuptools python-matplotlib python-hippocanvas
dexter@openerp-cosmic:~$ sudo easy_install PyYaml
dexter@openerp-cosmic:~$ sudo easy_install mako

3. Installation des packages pour le client

Note : je n’utiliserai pas le client GTK mais uniquement le serveur web donc vous pouvez allez au 4.

dexter@openerp-cosmic:~$ sudo apt-get install python python-gtk2 python-glade2 python-matplotlib python-egenix-mxdatetime python-lxml python-hippocanvas

4. Créer un compte utilisateur pour OpenERP

dexter@openerp-cosmic:~$ sudo adduser openerp --disabled-login --gecos OpenERP
dexter@openerp-cosmic:~$ su - openerp -c "ssh-keygen -f /home/openerp/.ssh/id_rsa -q -N \"\""

5. Paramétrage de Postgres

5.1. Créer un utilisateur Postgres

L’étape suivante consiste à paramétrer l’accès à la base de donnée Postgresql, pour cela il faut créer un utilisateur openerp :

Manuellement
dexter@openerp-cosmic:~$ sudo su - postgres
postgres@openerp-cosmic:~$ createuser openerp
Le nouveau rôle est-il super-utilisateur ? (o/n) n
Le nouveau rôle est-il autorisé à créer des bases de données ? (o/n) o
Le nouveau rôle est-il autorisé à créer de nouveaux rôles ? (o/n) n
Automatiquement
dexter@openerp-cosmic:~$ su - postgres -c "createuser --createdb --no-createrole --no-superuser openerp"

5.2. Modification des droits et password

dexter@openerp-cosmic:~$ echo "ALTER USER openerp WITH PASSWORD 'openerp';" | su postgres -c psql

5.3. Modification du fichier pg_hba.conf

dexter@openerp-cosmic:~$ sudo vim /etc/postgresql/8.4/main/pg_hba.conf
# Database administrative login by UNIX sockets
local   all         postgres                          ident

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
#local   all         all                               ident
local   all         all                               md5

# IPv4 local connections:
host    all         all         127.0.0.1/32          md5

# IPv6 local connections:
host    all         all         ::1/128               md5

5.4. Modification du fichier posgresql.conf

dexter@openerp-cosmic:~$ sudo vim /etc/postgresql/8.4/main/posgresql.conf
#listen_addresses = 'localhost'         # what IP address(es) to listen on;
listen_addresses = '*'          # what IP address(es) to listen on;

6. Installation d’openERP

Ensuite procéder au téléchargement de la dernière version de OpenERP :

postgres@openerp-cosmic:~$ exit
dexter@openerp-cosmic:~$ sudo su - openerp
openerp@openerp-cosmic:~$ wget <a href="http://www.openerp.com/download/stable/source/openerp-server-6.0.1.tar.gz" target="_blank">http://www.openerp.com/download/stable/source/openerp-server-6.0.1.tar.gz</a>
openerp@openerp-cosmic:~$ wget <a href="http://www.openerp.com/download/stable/source/openerp-web-6.0.1.tar.gz" target="_blank">http://www.openerp.com/download/stable/source/openerp-web-6.0.1.tar.gz</a>

Une fois le téléchargement achevé, déziper les deux fichiers dans le répertoire de travail :

openerp@openerp-cosmic:~$ tar -zvxf openerp-server-6.0.1.tar.gz
openerp@openerp-cosmic:~$ tar -zvxf openerp-web-6.0.1.tar.gz

On peut maintenant installer les deux serveurs :

openerp@openerp-cosmic:~$ cd openerp-server-6.0.1
openerp@openerp-cosmic:~/openerp-server-6.0.1$ python setup.py install
openerp@openerp-cosmic:~/openerp-server-6.0.1$ cd ..
openerp@openerp-cosmic:~$ cd openerp-web-6.0.1
openerp@openerp-cosmic:~/openerp-web-6.0.1$ python setup.py install
openerp@openerp-cosmic:~/openerp-server-6.0.1$ cd ..

maintenant vous êtes prêt a lancer le serveur par la commande :

openerp@openerp-cosmic:~$ openerp-server  --db_user=openerp -- db_password=openerp

et le serveur web par la commande :

openerp@openerp-cosmic:~$ openerp-web

En procédant ainsi, on peut suivre dans chaque terminal les erreurs générées par chaque serveur.

7. Quelques tests

Ou sont installés les serveurs ?

dexter@openerp-cosmic:~$ sudo su openerp
[sudo] password for dexter:
openerp@openerp-cosmic:/home/dexter$ which openerp-web
/usr/local/bin/openerp-web
openerp@openerp-cosmic:/home/dexter$ which openerp-server
/usr/local/bin/openerp-server

Les logs…

dexter@openerp-cosmic:~$ sudo cat /var/log/openerp-server.log
dexter@openerp-cosmic:~$ sudo cat /var/log/openerp-web.log
dexter@openerp-cosmic:~$ sudo tail -f /var/log/postgresql/postgresql-8.4-main.l

Normalement, OpenERP fonctionne, connecté à Postgres sur le port 5432 et en ecoute sur les ports 8069 et 8070. On peut le vérifier :

dexter@openerp-cosmic:~$ ps uaxww | grep -i openerp
openerp  17393  0.0  3.6  60848 18956 ?        Sl   19:13   0:00 /usr/bin/python ./openerp-server.py --config=/etc/openerp-server.conf
root     17443  0.0  0.1   3320   816 pts/3    S+   19:22   0:00 grep -i openerp
dexter@openerp-cosmic:~$ sudo lsof -i :8069
COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  17393 openerp    3u  IPv4  84964      0t0  TCP *:8069 (LISTEN)
dexter@openerp-cosmic:~$ sudo lsof -i :8070
COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  17393 openerp    5u  IPv4  84972      0t0  TCP *:8070 (LISTEN)
dexter@openerp-cosmic:~$ sudo su postgres
postgres@openerp-cosmic:~$ psql template1 -c "SELECT * from pg_user"
postgres@openerp-cosmic:~$ psql template1 -c "SELECT * from pg_shadow"
postgres@openerp-cosmic:~$ createdb -U postgres -W test
postgres@openerp-cosmic:~$ dropdb -U postgres -W test

Pour tester votre installation sur une page web accéder à l’adresse http://ipduserveuropener:8080 si l’installation a était faite localement ou bien http://<ip_machine>:8080 si OpenERP Web existe sur une autre machine. Veillez à lancer openerp-server avant pour permettre au client web d’accéder à vos base de données.

7. openERP servers init script

7.1. openerp-server init script

dexter@openerp-cosmic:~$ su -
root@openerp-cosmic:~$ vim /etc/init.d/openerp-server
#!/bin/sh
 
### BEGIN INIT INFO
# Provides:        openerp-server
# Required-Start:    $syslog
# Required-Stop:    $syslog
# Should-Start:        $network
# Should-Stop:        $network
# Default-Start:    2 3 4 5
# Default-Stop:        0 1 6
# Short-Description:    Enterprise Resource Management software
# Description:        OpenERP is a complete ERP and CRM software.
### END INIT INFO
 
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
DAEMON=/usr/local/bin/openerp-server
NAME=openerp-server
DESC=openerp-server
USER=openerp
 
test -x ${DAEMON} || exit 0
 
set -e
 
case "${1}" in
start)
echo -n "Starting ${DESC}: "
 
start-stop-daemon --start --quiet --pidfile /var/run/${NAME}.pid \
--chuid ${USER} --background --make-pidfile \
--exec ${DAEMON} -- --config=/etc/openerp-server.conf
 
echo "${NAME}."
;;
 
stop)
echo -n "Stopping ${DESC}: "
 
start-stop-daemon --stop --quiet --pidfile /var/run/${NAME}.pid \
--oknodo
 
echo "${NAME}."
;;
 
restart|force-reload)
echo -n "Restarting ${DESC}: "
 
start-stop-daemon --stop --quiet --pidfile /var/run/${NAME}.pid \
--oknodo
 
sleep 1
 
start-stop-daemon --start --quiet --pidfile /var/run/${NAME}.pid \
--chuid ${USER} --background --make-pidfile \
--exec ${DAEMON} -- --config=/etc/openerp-server.conf
 
echo "${NAME}."
;;
 
*)
N=/etc/init.d/${NAME}
echo "Usage: ${NAME} {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
 
exit 0
root@openerp-cosmic:~$ chmod +x /etc/init.d/openerp-server

Create /var/log/openerp with proper ownership:

root@openerp-cosmic:~$ mkdir -p /var/log/openerp
root@openerp-cosmic:~$ touch /var/log/openerp/openerp.log
root@openerp-cosmic:~$ chown -R openerp.root /var/log/openerp/

7.2. openerp-server configuration

root@openerp-cosmic:~$ vim /etc/openerp-server.conf
[options]
without_demo = True
; This is the password that allows database operations:
; admin_passwd = admin
upgrade = False
verbose = False
netrpc = True
; netrpc_interface =
; netrpc_port =
xmlrpc = True
; xmlrpc_interface =
xmlrpc_port = 8069
db_host = False
db_port = False
; Please uncomment the following line *after* you have created the
; database. It activates the auto module check on startup.
; db_name = terp
db_user = openerp
db_password = openerp
; Uncomment these for xml-rpc over SSL
; secure = True
; secure_cert_file = /etc/openerp/server.cert
; secure_pkey_file = /etc/openerp/server.key
root_path = None
soap = False
translate_modules = ['all']
demo = {}
addons_path = None
reportgz = False
 
; Static http parameters
static_http_enable = False
static_http_document_root = /var/www/html
static_http_url_prefix = /root@openerp-cosmic:~#

7.3. openerp-web init script

root@openerp-cosmic:~$ vim /etc/init.d/openerp-web
#!/bin/sh
 
### BEGIN INIT INFO
# Provides:             openerp-web
# Required-Start:       $syslog
# Required-Stop:        $syslog
# Should-Start:         $network
# Should-Stop:          $network
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    OpenERP Web - the Web Client of the OpenERP
# Description:          OpenERP is a complete ERP and CRM software.
### END INIT INFO
 
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
DAEMON=/usr/local/bin/openerp-web
NAME=openerp-web
DESC=openerp-web
 
# Specify the user name (Default: openerp).
USER="openerp"
 
# Specify an alternate config file (Default: /etc/openerp-web.cfg).
CONFIGFILE="/etc/openerp-web.cfg"
 
# pidfile
PIDFILE=/var/run/$NAME.pid
 
# Additional options that are passed to the Daemon.
DAEMON_OPTS="-c $CONFIGFILE"
 
[ -x $DAEMON ] || exit 0
[ -f $CONFIGFILE ] || exit 0
 
checkpid() {
[ -f $PIDFILE ] || return 1
pid=`cat $PIDFILE`
[ -d /proc/$pid ] && return 0
return 1
}
 
if [ -f /lib/lsb/init-functions ] || [ -f /etc/gentoo-release ] ; then
 
do_start() {
start-stop-daemon --start --quiet --pidfile $PIDFILE \
--chuid $USER  --background --make-pidfile \
--exec $DAEMON -- $DAEMON_OPTS
 
RETVAL=$?
sleep 5         # wait for few seconds
 
return $RETVAL
}
 
do_stop() {
start-stop-daemon --stop --quiet --pidfile $PIDFILE --oknodo
 
RETVAL=$?
sleep 2         # wait for few seconds
rm -f $PIDFILE  # remove pidfile
 
return $RETVAL
}
 
do_restart() {
start-stop-daemon --stop --quiet --pidfile $PIDFILE --oknodo
 
sleep 2         # wait for few seconds
rm -f $PIDFILE  # remove pidfile
 
start-stop-daemon --start --quiet --pidfile $PIDFILE \
--chuid $USER --background --make-pidfile \
--exec $DAEMON -- $DAEMON_OPTS
 
RETVAL=$?
sleep 5         # wait for few seconds
 
return $RETVAL
}
 
else
 
do_start() {
$DAEMON $DAEMON_OPTS > /dev/null 2>&1 &
 
RETVAL=$?
sleep 5         # wait for few seconds
 
echo $! > $PIDFILE  # create pidfile
 
return $RETVAL
}
 
do_stop() {
 
pid=`cat $PIDFILE`
kill -15 $pid
 
RETVAL=$?
sleep 2         # wait for few seconds
rm -f $PIDFILE  # remove pidfile
 
return $RETVAL
}
 
do_restart() {
 
if [ -f $PIDFILE ]; then
do_stop
fi
 
do_start
 
return $?
}
 
fi
 
start_daemon() {
 
if [ -f $PIDFILE ]; then
echo "pidfile already exists: $PIDFILE"
exit 1
fi
 
echo -n "Starting $DESC: "
 
do_start
 
checkpid
 
if [ $? -eq 1 ]; then
rm -f $PIDFILE
echo "failed."
exit 1
fi
 
echo "done."
}
 
stop_daemon() {
 
checkpid
 
if [ $? -eq 1 ]; then
exit 0
fi
 
echo -n "Stopping $DESC: "
 
do_stop
 
if [ $? -eq 1 ]; then
echo "failed."
exit 1
fi
 
echo "done."
}
 
restart_daemon() {
 
echo -n "Reloading $DESC: "
 
do_restart
 
checkpid
 
if [ $? -eq 1 ]; then
rm -f $PIDFILE
echo "failed."
exit 1
fi
 
echo "done."
}
 
status_daemon() {
 
echo -n "Checking $DESC: "
 
checkpid
 
if [ $? -eq 1 ]; then
echo "stopped."
else
echo "running."
fi
}
 
case "$1" in
start) start_daemon ;;
stop) stop_daemon ;;
restart|force-reload) restart_daemon ;;
status) status_daemon ;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
exit 1
;;
esac
 
exit 0
root@openerp-cosmic:~$ chmod +x /etc/init.d/openerp-web

7.2. openerp-web configuration

root@openerp-cosmic:~$vim /etc/openerp-web.cfg
[global]
server.environment = "development"
 
# Some server parameters that you may want to tweak
server.socket_host = "0.0.0.0"
server.socket_port = 8080
 
# Sets the number of threads the server uses
server.thread_pool = 10
 
tools.sessions.on = True
tools.sessions.persistent = False
 
# Simple code profiling
server.profile_on = False
server.profile_dir = "profile"
 
# if this is part of a larger site, you can set the path
# to the TurboGears instance here
#server.webpath = ""
 
# Set to True if you are deploying your App behind a proxy
# e.g. Apache using mod_proxy
#tools.proxy.on = True
 
# If your proxy does not add the X-Forwarded-Host header, set
# the following to the *public* host url.
#tools.proxy.base = '<a href="http://mydomain.com/" target="_blank">http://mydomain.com</a>'
 
# logging
#log.access_file = "/var/log/openerp-web/access.log"
#log.error_file = "/var/log/openerp-web/error.log"
log.access_level = "INFO"
log.error_level = "INFO"
 
# OpenERP tools
tools.nestedvars.on = True
# Set to false to disable CSRF checks
tools.csrf.on = True
 
# OpenERP Server
openerp.server.host = 'localhost'
openerp.server.port = '8070'
openerp.server.protocol = 'socket'
openerp.server.timeout = 450
 
# Web client settings
[openerp-web]
# filter dblists based on url pattern?
# NONE: No Filter
# EXACT: Exact Hostname
# UNDERSCORE: Hostname_
# BOTH: Exact Hostname or Hostname_
 
dblist.filter = 'NONE'
 
# whether to show Databases button on Login screen or not
dbbutton.visible = True
 
# will be applied on company logo
company.url = ''

C’est fini… rendez-vous prochainement sur mon blog pour la partie proxmox !