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.