This question has been flagged
8 Replies
19672 Views

Is that possible?

For example, I mean having:

XMLRPC Port: 8069 // Database: Odoo-demo

XMLRPC Port: 8070 // Database: Odoo-test

For information, I ask this because I like to have two "instances" (Odoo V.8) each having the website builder module installed and it seems that adding the "db" parameter in the URL no longer functions as the V7.

Also, I can do two server instances run in parallel but this is not a solution in my case (performance issue).

Hopping someone could help me!?

Avatar
Discard
Best Answer

Yes you can make many odoo instances in the same machine. I think port 8070 is no longer used for netrpc in version 8, so you can use it safely.

"it seems that adding the "db" parameter in the URL no longer functions as the V7

It still exist in version 8, but in different path which is /web.

"I can do two server instances run in parallel but this is not a solution in my case (performance issue)

I think you miss interpret the database connection and xmlrpc. xmlrpc is a protocol for communicating with odoo server, so if you want to have two xmlrpc port, it means you have to make two odoo server.

Avatar
Discard
Author

You're right, my knowledge is limited about xmlrpc & database connections. Anyway, you answered my question: it is not possible to have multiple ports on a single instance (with many databases). Am I right?

Bertrand, just to clarify. The database that an instance have access to depends on the database ID used by that instance. So, you can have multiple instances accessing to the same list of database just by using the same database/PostgreSQL user ID. Now, corollary to that, you cannot "include" one database into multiple "list", this is due to the fact that OpenERP/Odoo obtain the list of database by selecting the databases that is owned by the user ID used and PostgreSQL databases can only have one owner. You can run the same OpenERP/Odoo sources file several times as multiple services with multiple ports (has to be different port) on the same machine. So if you want to run OpenERP/Odoo several times on the same machine using different port accessing the same list of database (using the same PostgreSQL user ID), it is technically possible. However, there are other things that you need to be concerned about such as locking (if those multiple instances are using updating the same table. I would suspect ir_sequence is one of the many tables that will have that problem). So, even if it is technically possible, you have to be very careful when designing who is going to use which port (e.g. one port for update and another for reporting, etc.)

Best Answer

Hello Everyone, may be it is not quite a setup topicStarter is interested in, but I managed to run two different databases (basically 2 different websites/CRMs) on port 80 on the same physical machine with 2 IPs.

After seaching how to force Odoo 8 rc1 working for 2 separate "instances" on the same Debian machine, I've came up with the folowing idea:

run 2 simultaneous odoo instances / 2 independent Postgres users (security reason) / Apache+mod_proxy

0) install odoo itself. create all the needed Postgress users:

su - postgres

createuser -d -l -P user_A

createuser -d -l -P user_B

1) copy the startup daemon script with:  cp -rp  /etc/init.d/odoo /etc/init.d/odoo_2

 

2) point second daemon to separate config file:   vim /etc/init.d/odoo2

 # diff /etc/init.d/odoo /etc/init.d/odoo_2
16,19c16,19
< NAME=odoo
< DESC=odoo
< CONFIG=/etc/odoo/openerp-server.conf
< LOGFILE=/var/log/odoo/odoo-server.log
---
> NAME=odoo_2
> DESC=odoo_2
> CONFIG=/etc/odoo/openerp-server_2.conf
> LOGFILE=/var/log/odoo/odoo-server_2.log

 

3) edit the configuration file for the second instance : vim /etc/odoo/openerp-server_2.conf

# diff /etc/odoo/openerp-server.conf /etc/odoo/openerp-server_2.conf
3c3
< admin_passwd = passwd_A
---
> admin_passwd = passwd_B
6,7c6,7
< db_user = user_A
< db_password = pass_A
---
> db_user = user_B
> db_password = pass_B
13c13
< xmlrpc_interface = IP_1
---
> xmlrpc_interface = IP_2

 

4) now you should be able to start and achieve two separate odoo instances on IP_1:8069  and IP_2:8069 by running:

service start odoo      and    service start odoo2

5) in order to access them on convinent port 80 it is needed to tune Apache. 

sudo a2enmod proxy_http headers rewrite

6) vim /etc/apache2/sites-enabled/my_main

<VirtualHost IP_1:80>
    ServerName FQDN_1
    ErrorLog /var/log/apache2/httpd-error-fqdn1.log
    CustomLog /var/log/apache2/httpd-error-fqdn1.log combined
    <Proxy IP_1>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyRequests Off
    ProxyPass / http://FQDN_1:8069/
    ProxyPassReverse / http://FQDN_1:8069/
    ProxyVia On
    LogLevel warn
</VirtualHost>

<VirtualHost IP_2:80>
    ServerName FQDN_2
    ErrorLog /var/log/apache2/httpd-error-fqdn2.log
    CustomLog /var/log/apache2/httpd-error-fqdn2.log combined
    <Proxy IP_2>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyRequests Off
    ProxyPass / http://IP_2:8069/
    ProxyPassReverse / http://IP_2:8069/
    ProxyVia On
    LogLevel warn
</VirtualHost>

 

P.S. I know, that it is not the most elegant solution, but it allows to avoid displaying 'select DB' page, provides some additional security and some redundancy. And you can shutdown one instance when needed. + with the "NameVirtualHost IP_n:80" directive in apache config you can bind additional virtual host to IP_n:80 

Useful? Vote! =)

 

 

 

 

 

Avatar
Discard

Nice Blog Nikolay

Best Answer

I am also looking for the same solution with windows server 2012 dedicated server since Hostgator would not support nginx only IIS, how would one apply this?. Thanks. 

Avatar
Discard
Best Answer

You don't need two instances running. You need to enable either db-filter option in Odoo which when you setup will either match domain name with the db or subdomain with the db. In cases you cannot map domain name with an Odoo DB name, you can use dbfilter_from_header module. And pass the appropriate DB name in the header of Apache or Nginx reverse proxy setup.

Avatar
Discard