Skip to content

How to Run Multiple Odoo Versions on One Server

DeployMonkey Team · March 10, 2026 8 min read

Running multiple Odoo versions on a single server is common for agencies managing different clients, developers testing migrations, and businesses running staging environments alongside production. Docker makes this straightforward by isolating each Odoo version in its own container with a dedicated PostgreSQL instance and port mapping. This guide covers the complete setup.

Why Run Multiple Versions?

  • Migration testing: Run Odoo 18 production alongside Odoo 19 staging to test upgrades
  • Client management: Agencies hosting clients on different Odoo versions
  • Module development: Test custom modules across multiple Odoo versions simultaneously
  • Gradual migration: Move departments one at a time from old to new version

Architecture Overview

Each Odoo version runs as a separate Docker Compose stack with its own PostgreSQL container, data volumes, and port mapping. Nginx serves as a reverse proxy, routing traffic to the correct Odoo instance based on domain name or subdomain.

                    ┌─────────────┐
                │   Nginx     │
                │ (port 80/443)│
                └──────┬──────┘
          ┌────────────┼────────────┐
          ▼            ▼            ▼
    ┌──────────┐ ┌──────────┐ ┌──────────┐
    │ Odoo 17  │ │ Odoo 18  │ │ Odoo 19  │
    │ :8069    │ │ :8070    │ │ :8071    │
    └────┬─────┘ └────┬─────┘ └────┬─────┘
         ▼            ▼            ▼
    ┌──────────┐ ┌──────────┐ ┌──────────┐
    │ PG 15    │ │ PG 15    │ │ PG 16    │
    └──────────┘ └──────────┘ └──────────┘

Step 1: Create Separate Docker Compose Files

Create a directory structure with one compose file per version:

mkdir -p /opt/odoo/{v17,v18,v19}

/opt/odoo/v17/docker-compose.yml:

version: '3.8'
services:
  db17:
image: postgres:15
environment:
  POSTGRES_USER: odoo17
  POSTGRES_PASSWORD: secret17
volumes:
  - pg17-data:/var/lib/postgresql/data
networks:
  - odoo17-net
  odoo17:
image: odoo:17
depends_on:
  - db17
ports:
  - "8069:8069"
environment:
  HOST: db17
  USER: odoo17
  PASSWORD: secret17
volumes:
  - odoo17-data:/var/lib/odoo
  - ./addons:/mnt/extra-addons
networks:
  - odoo17-net
volumes:
  pg17-data:
  odoo17-data:
networks:
  odoo17-net:

Repeat for v18 (port 8070) and v19 (port 8071), changing image tags, port mappings, and volume/network names.

Step 2: Configure Nginx Reverse Proxy

Route each subdomain to the correct Odoo instance:

# /etc/nginx/sites-available/odoo-multi
server {
server_name v17.example.com;
location / {
    proxy_pass http://127.0.0.1:8069;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}
}

server {
server_name v18.example.com;
location / {
    proxy_pass http://127.0.0.1:8070;
    # ... same headers
}
}

server {
server_name v19.example.com;
location / {
    proxy_pass http://127.0.0.1:8071;
    # ... same headers
}
}

Add SSL with Let's Encrypt: certbot --nginx -d v17.example.com -d v18.example.com -d v19.example.com

For detailed Nginx configuration, see our Nginx reverse proxy guide.

Step 3: Resource Management

Multiple Odoo instances consume significant RAM. Plan your server resources:

InstancesMinimum RAMRecommended RAM
2 instances4 GB8 GB
3 instances6 GB12 GB
5+ instances12 GB16+ GB

Use Docker resource limits to prevent one instance from starving others:

services:
  odoo17:
deploy:
  resources:
    limits:
      memory: 2G
      cpus: '1.0'

The Easy Way: DeployMonkey

DeployMonkey natively supports multiple Odoo instances on a single server. Each instance gets its own Docker stack, database, SSL certificate, and backup schedule — all managed through the dashboard. You can deploy Odoo 14 through 19 side by side without touching Docker Compose files or Nginx configs.

Frequently Asked Questions

Can different Odoo versions share the same PostgreSQL?

Technically yes — each Odoo instance uses a different database name. But separate PostgreSQL instances are recommended to avoid version compatibility issues and to isolate performance.

How much RAM do I need for 3 Odoo instances?

Plan for at least 2 GB per instance (Odoo + PostgreSQL). A server with 8-12 GB RAM comfortably runs 3 instances with headroom for spikes.

Can I share custom modules across versions?

Generally no. Custom modules must be adapted for each Odoo version due to API changes. Mount version-specific addons directories in each Docker stack.

How do I back up multiple instances?

Back up each PostgreSQL database and filestore separately. With DeployMonkey, each instance has its own automated S3 backup schedule. See automated S3 backups.