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 :
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
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 !