Resumen: Crear varias instancias de Odoo 10 en Ubuntu 16.04.7 LTS. Con ligeros cambios debería funcionar con cualquier versión de Odoo y de Ubuntu.
Partimos de la base de que tenemos instalada una versión determinada de Odoo en su Servidor, en nuestro caso tenemos instalado Odoo 10 en un contenedor de Proxmox con Ubuntu.
Paso 1. Crear múltiples instancias de Postgressql 9.5
Este paso es fundamental para que las instancias de Odoo sean totalmente independientes, para ello debemos crear una instancia de nuestro Postgresql y hacer que sea accesible por un puerto diferente, en nuestro caso será el puerto 5433, recordad que el puerto por defecto es el 5432, esto permitirá que la bases de datos creadas por una instancia de Odoo ERP no sean visible por las otras instancias.
1.1 Averiguar la versión de postgressql que tenemos instalada.
# locate bin/postgres
1.2 Habrimos nuestra terminal e iniciamos sesión como root y ejecutamos los siguientes comandos:
# pg_createcluster -p 5433 9.5 desa
pg_createcluster: Comando para crear una nueva instancia
5433: Nuevo puerto en la que correra la nueva instancia de postgresql
9.5: Versión de Postgresql
desa: Nombre de la nueva instancia de Postgresql
1.3 Ahora vamos a listar las instancias que tenemos:
# pg_lsclusters Ver Cluster Port Status Owner Data directory Log file 9.5 desa 5433 down postgres /var/lib/postgresql/9.5/desa /var/log/postgresql/postgresql-9.5-desa.log 9.5 main 5432 online postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log
1.4 Editamos el archivo de configuración de la nueva instancia de Postgresql
# nano /etc/postgresql/9.5/desa/postgresql.conf
Descomentamos la siguiente línea:
listen_addresses = 'localhost'
1.5 Reiniciamos Postgresql, al reiniciar lo estaremos haciendo para ambas instancias
# /etc/init.d/postgresql restart
1.6 Creamos un nuevo usuario para la nueva instancia de postgresql y colocamos su respectiva clave, para nuestro ejemplo estamos cogiendo el mismo usuario creado anteriormente para primera instancia de Postgresql, la diferencia es que al final agregamos: –cluster 9.5/desa
# su - postgres $ createuser --createdb --username postgres --no-createrole --no-superuser --pwprompt odoo --cluster 9.5/desa Enter password for new role: Enter it again:
1.7 Salimos de inicio de sesion de postgres
$ exit
Paso 2. Crear múltiples instancias de Odoo
2.1 Cuando instalamos Odoo por lo general lo hacemos dentro del directorio /opt/odoo, dentro de ella esta el directorio server que contiene todo los archivos de nuestro Odoo, lo que haremos es copiar y renombrarlo a odoo-desa o el nombre que deseamos.
En nuestro caso nuestra instalación está en la carpeta raíz del servidor Odoo, por lo que tenemos odoo/odoo-server y copiaremos y renombraremos a odoo/odoo-server-desa:
# cp -a /odoo/odoo-server /odoo/odoo-server-desa
También podemos copiar la carpeta custom y renombraremos a custom-desa, así tenemos también una carpeta de addons por separado por si tenemos addons diferentes en la nueva instancia:
# cp -a /odoo/custom /odoo/custom-desa
2.2 Creamos una copia del archivo de configuración de Odoo.
# cp -a /etc/odoo-server.conf /etc/odoo-server-desa.conf
2.3 Editamos el archivo que acabamos de crear
# nano /etc/odoo-server-desa.conf
El archivo lo modificamos dejándolo así, hemos de tener en cuenta de poner nuestro admin_passwd y db_password:
[options] ; This is the password that allows database operations: admin_passwd = nuestroadminpassword db_host = localhost db_port = 5433 db_user = odoo db_password = nuestropassword addons_path = /usr/lib/python2.7/dist-packages/odoo/addons [options] logfile = /var/log/odoo/odoo-server-desa.log addons_path=/odoo/odoo-server-desa/addons,/odoo/custom-desa/addons xmlrpc_port = 8080
2-4 Creamos una copia del archivo de inicio, para que se reinicie la nueva instancia de odoo con nuestro servidor:
# cp -a /etc/init.d/odoo-server /etc/init.d/odoo-server-desa
Editamos el archivo y colocamos las rutas(NAME,DAEMON y CONFIGFILE) respectivas de la nueva instancia de Odoo:
# nano /etc/init.d/odoo-server-desa
En mi caso el archivo ha quedado así:
#!/bin/sh ### BEGIN INIT INFO # Provides: odoo-server-desa # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Should-Start: $network # Should-Stop: $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Enterprise Business Applications # Description: ODOO Business Applications ### END INIT INFO PATH=/bin:/sbin:/usr/bin DAEMON=/odoo/odoo-server-desa/odoo-bin NAME=odoo-server-desa DESC=odoo-server-desa # Specify the user name (Default: odoo). USER=odoo # Specify an alternate config file (Default: /etc/openerp-server.conf). CONFIGFILE="/etc/odoo-server-desa.conf" # 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 } case "${1}" in start) echo -n "Starting ${DESC}: " start-stop-daemon --start --quiet --pidfile $PIDFILE --chuid $USER --background --make-pidfile --exec $DAEMON -- $DAEMON_OPTS echo "${NAME}." ;; stop) echo -n "Stopping ${DESC}: " start-stop-daemon --stop --quiet --pidfile $PIDFILE --oknodo echo "${NAME}." ;; restart|force-reload) echo -n "Restarting ${DESC}: " start-stop-daemon --stop --quiet --pidfile $PIDFILE --oknodo sleep 1 start-stop-daemon --start --quiet --pidfile $PIDFILE --chuid $USER --background --make-pidfile --exec $DAEMON -- $DAEMON_OPTS echo "${NAME}." ;; *) N=/etc/init.d/$NAME echo "Usage: $NAME {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0
2.5 Finalmente iniciamos el servicio
# /etc/init.d/odoo-server-desa restart
y podemos mirar el log a ver si todo ha ido bien:
# tail -f /var/log/odoo/odoo-server-desa.log
NOTA IMPORTANTE: En mi instalación de ubuntu he tenido que habilitar el servicio de la nueva instancia de odoo con el siguiente comando:
# /lib/systemd/systemd-sysv-install enable odoo-server-desa
Hasta que no he hecho esto solo funcionaba la primera instancia.