Skip to main content
iVentureTeam
Updated 26 Sep 2026

How to install Odoo 20on Ubuntu, Windows, macOS and Docker

Odoo 20 needs Python 3.12 or later and PostgreSQL 16 or later. Pick the install method that fits your job, copy commands checked against Odoo's 20.0 documentation, and go from a test install to a production server behind Nginx.

Choose your install method
Siddharth JambukiyaOdoo Techno-Functional ConsultantChecked against Odoo's 20.0 docs and source18 min read
Ubuntu 24.04 LTS
# Ubuntu 24.04 ships Python 3.12 and PostgreSQL 16sudo apt install -y git postgresqlsudo -u postgres createuser -d -R -S $USERgit clone --branch 20.0 --single-branch --depth 1 https://github.com/odoo/odoo.gitcd odoo && sudo ./setup/debinstall.shpython3 odoo-bin --addons-path=addons -d odoo20INFO odoo20 odoo.modules.loading: Modules loaded.
Open http://localhost:8069 and sign in with admin / admin
The short version, using Odoo's preferred dependency route. The full steps, including the pip option, are below.

Odoo 20 at a glance

Python
3.12 or later
Raised from 3.10 in Odoo 20
PostgreSQL
16 or later
Raised from 13 in Odoo 20
Best server OS
Ubuntu 24.04 LTS
Debian 13 also meets both minimums
Default ports
8069 and 8072
Web client, plus live chat with workers

Is Odoo 20 available yet?

Checked 26 Sep 2026 against the official channels

Which Odoo 20 installation method should you choose?

Choose by the job, not by the shortest command list. A source install suits development, Ubuntu 24.04 behind Nginx suits production, the Windows installer suits a quick evaluation, and Odoo Online or Odoo.sh suit teams that do not want to run servers.

What are the Odoo 20 system requirements?

Odoo 20 requires Python 3.12 or later and PostgreSQL 16 or later. Odoo's installation documentation records both changes for version 20: Python moves up from 3.10, and PostgreSQL moves up from 13. Check these two before you type anything else.

  • Python

    Required

    3.12 or later

    The 20.0 requirements.txt also carries pins for Python 3.13 and 3.14.

  • PostgreSQL

    Required

    16.0 or later

    Up from PostgreSQL 13 in Odoo 19.

  • wkhtmltopdf

    For PDF reports

    0.12.6

    Not installed by pip. Needed for headers and footers on printed reports.

  • pgvector

    AI features only

    PostgreSQL extension

    Works with PostgreSQL 15 and up, so any Odoo 20 database qualifies.

  • rtlcss

    Right-to-left only

    Node.js package

    For Arabic, Hebrew and Persian interfaces.

  • Ports

    Defaults

    8069 and 8072

    8069 serves the web client. 8072 carries live chat and notifications when workers are on.

Which operating systems meet the minimums out of the box?

The 20.0 requirements file is pinned against the Python packages in Ubuntu 24.04 (Noble) and Debian 13 (Trixie). Those two give a clean install with no extra repositories.

  • Ubuntu 24.04 LTS

    Ready

    Python 3.12PostgreSQL 16

  • Debian 13 (Trixie)

    Ready

    Python 3.13PostgreSQL 17

  • macOS with Homebrew

    Ready for development

    Python python@3.12PostgreSQL postgresql@16

  • Windows 10 and 11

    Testing only

    Python InstallerPostgreSQL Installer

  • Ubuntu 22.04 LTS

    Needs newer packages

    Python 3.10PostgreSQL 14

  • Debian 12 (Bookworm)

    Needs newer packages

    Python 3.11PostgreSQL 15

Debian 12 catches people

It ran Odoo 19 fine, but it ships PostgreSQL 15 (opens in a new tab) and Python 3.11 (opens in a new tab), both below the Odoo 20 minimum. For production, use Ubuntu 24.04 LTS or Debian 13. On a host you cannot rebuild, add the PostgreSQL apt repository (opens in a new tab) for PostgreSQL 16 and treat the Python gap as a reason to migrate the server.

Sizing a server

A laptop with 2 cores and 4 GB of RAM is enough for learning and module development. For production, size by workers and users: Odoo's deployment guide (opens in a new tab) gives a rule of thumb of (CPUs × 2) + 1 workers, with one worker serving about 6 concurrent users. PostgreSQL needs its own memory on top.

Before you install Odoo 20: decide where it will run

Answer three questions first: where Odoo will run, how it will be installed, and whether this environment is for development, testing or production. A laptop is a good learning environment and a poor production architecture.

  1. Q1

    Where will it run?

    A laptop, a VPS, a container host, or Odoo's own cloud.

  2. Q2

    How will it be installed?

    From source, from an official package, or as a container.

  3. Q3

    What is it for?

    Development, testing, or production. Each needs different safeguards.

Four terms this guide uses

Source installation
Odoo running directly from a Git checkout with odoo-bin, instead of from an installed package. Odoo's documentation calls it the convenient choice for module developers: the code is directly accessible and several versions can run side by side.
Packaged installation
Odoo installed as a system service from a .deb, .rpm or Windows installer. The Linux packages expect PostgreSQL on the same host by default.
Odoo Enterprise
A set of additional addons that run on top of the Odoo Community server. It is not a separate server, which changes how you install it.
Filestore
The folder where Odoo keeps attachments and binary fields on disk. A backup that only covers PostgreSQL is not a complete backup.

How do you install Odoo 20 on Ubuntu 24.04 from source?

Five steps: PostgreSQL 16, a database role, the 20.0 source, the Python dependencies, and the first run. Ubuntu 24.04 ships Python 3.12 and PostgreSQL 16, so no third-party repositories are needed. This is the setup we recommend for anyone writing custom modules.

  • 5 steps
  • Ubuntu 24.04 LTS
  • Python 3.12
  • PostgreSQL 16
  1. Step 1: Check Python and install PostgreSQL 16

    Confirm the Python version, then install and start PostgreSQL. On Ubuntu 22.04 psql --version prints 14.x, which means you need the PostgreSQL apt repository before you continue.

    bash
    python3 --version        # Ubuntu 24.04 ships Python 3.12
    sudo apt update
    sudo apt install -y postgresql postgresql-client
    sudo systemctl enable --now postgresql
    psql --version           # should print 16.x
  2. Step 2: Create a PostgreSQL role for Odoo

    Odoo refuses to connect as the postgres superuser, so it needs its own role. Naming the role after your Linux login lets Odoo connect locally without a password: right for a development machine, wrong for production.

    bash
    sudo -u postgres createuser -d -R -S $USER
    createdb $USER
  3. Step 3: Clone the Odoo 20 source

    --single-branch skips every other version and --depth 1 skips the history, which keeps the clone small. Drop --depth 1 if you plan to send patches upstream. On a production server, pin a specific commit so an untested upstream change cannot arrive with a routine pull.

    bash
    sudo apt install -y git
    mkdir -p ~/odoo20 && cd ~/odoo20
    git clone --branch 20.0 --single-branch --depth 1 https://github.com/odoo/odoo.git
    cd odoo
  4. Step 4: Install the Python dependencies

    Pick one route and stay with it. Mixing apt packages and pip gives you two copies of every library and no certainty about which one loads.

    bash
    # from the odoo folder
    sudo ./setup/debinstall.sh

    Odoo's documentation names distribution packages as the preferred way to install dependencies. The script reads debian/control and installs the matching python3-* packages with apt.

  5. Step 5: Run Odoo 20 and sign in

    If you used the virtual environment, activate it first. Wait for the log line odoo.modules.loading: Modules loaded., open http://localhost:8069, and sign in with email admin and password admin. Change that password before anything else, even on a laptop.

    bash
    python3 odoo-bin --addons-path=addons -d odoo20

    To stop the server press Ctrl+C. To start it again, activate the virtual environment if you use one, then run the same command from the odoo folder.

How do you install Odoo 20 with the official Linux package?

Install PostgreSQL, then install the Odoo 20 package from Odoo's nightly repository or a downloaded file, and Odoo runs as a system service. Odoo's documentation states the 20 .deb supports Ubuntu 24.04 (Noble) and the .rpm supports Fedora 42.

Ubuntu 24.04 · bash
sudo apt install -y postgresql
wget -q -O - https://nightly.odoo.com/odoo.key | sudo gpg --dearmor -o /usr/share/keyrings/odoo-archive-keyring.gpg
echo 'deb [signed-by=/usr/share/keyrings/odoo-archive-keyring.gpg] https://nightly.odoo.com/20.0/nightly/deb/ ./' | sudo tee /etc/apt/sources.list.d/odoo.list
sudo apt-get update && sudo apt-get install odoo

apt-get upgrade keeps the install current. The repository carries the Community edition only.

What the package sets up for you

Service
odoo, running as the odoo system user
Config file
/etc/odoo/odoo.conf
Log file
/var/log/odoo/odoo-server.log
Data and filestore
/var/lib/odoo
Database role
odoo, created during install
Check the service
sudo systemctl status odoo
sudo tail -f /var/log/odoo/odoo-server.log

Installing Enterprise from a package?

There is no nightly repository for Odoo Enterprise. Download the Enterprise package from the Odoo download page while logged in as a paying customer or partner.

How do you set up Odoo 20 Enterprise from source?

Clone two repositories and put the Enterprise path first in --addons-path. The Enterprise repository holds extra addons only; the server itself lives in the Community repository. GitHub access to Enterprise comes with an Odoo subscription or partner account.

bash
cd ~/odoo20
git clone --branch 20.0 --single-branch https://github.com/odoo/odoo.git
git clone --branch 20.0 --single-branch https://github.com/odoo/enterprise.git
cd odoo
python3 odoo-bin --addons-path=../enterprise,addons -d odoo20

Why the order matters

--addons-path=1../enterprise2addons3custom-addons

Odoo's documentation requires the Enterprise path to come before the other paths so the right modules load. If Enterprise apps are missing from the Apps menu, check this first.

Licensing differences are covered in our Odoo Community vs Enterprise guide.

How do you install Odoo 20 on Windows?

Use the official Odoo 20 Windows installer for testing, and keep production on Linux. Odoo's documentation offers Windows packaging for testing or single-user local instances and discourages production deployment on Windows.

For testing and single-user use

Odoo's deployment guide also notes that the multi-processing (workers) server is not available on Windows, so a Windows install always runs the single-process threaded server.

  1. Download the installer

    Get the Community build from the nightly server (opens in a new tab), or any edition from the Odoo download page (opens in a new tab).

  2. Run it

    On Windows 8 and later a "Windows protected your PC" warning may appear. Choose More info, then Run anyway.

  3. Finish the wizard

    Accept the UAC prompt and go through the steps. Odoo launches automatically at the end of the installation.

  4. Open Odoo

    Go to http://localhost:8069 and create your first database.

Developing custom modules on Windows

A source install works on Windows too: Python 3.12 from python.org with Add Python to PATH ticked, PostgreSQL 16, the Build Tools for Visual Studio when a dependency needs compiling, then the 20.0 clone and pip install -r requirements.txt. In practice, most Windows developers we work with run Odoo in WSL2 with Ubuntu 24.04 and follow the Ubuntu steps above.

How do you install Odoo 20 on macOS?

macOS is a solid Odoo 20 development platform, with Homebrew supplying Python 3.12, PostgreSQL 16 and Git. Odoo's source installation documentation supports macOS and recommends a package manager for both Python and non-Python dependencies.

Install the tools

bash
brew update
brew install python@3.12 postgresql@16 git
brew services start postgresql@16
python3.12 --version
psql --version

Homebrew's PostgreSQL usually creates a role named after your macOS user. Confirm with psql postgres -c '\du', and create it with createuser -d -R -S $USER if it is missing.

Clone, install and run

bash
mkdir -p ~/odoo20 && cd ~/odoo20
git clone --branch 20.0 --single-branch --depth 1 https://github.com/odoo/odoo.git
cd odoo
python3.12 -m venv ../venv
source ../venv/bin/activate
python -m pip install --upgrade pip setuptools wheel
pip install -r requirements.txt
python3 odoo-bin --addons-path=addons -d odoo20

If a package fails to build, install the Command Line Tools with xcode-select --install and the matching Homebrew library (libpq for psycopg2, openldap for python-ldap), then re-run pip. On Apple Silicon keep everything arm64: Homebrew Python with Homebrew PostgreSQL.

How do you run Odoo 20 with Docker?

Run one container for Odoo, one for PostgreSQL 16, a private network between them, and named volumes for the database and the filestore. The official image is maintained in the odoo/docker repository (opens in a new tab) and published on Docker Hub (opens in a new tab).

Official image not published yet (checked 26 Sep 2026)

The odoo/docker repository has version folders up to 19.0 only, and Docker Hub's newest tags are for 19.0. The examples use odoo:20 so they work the day the image ships. Until then, use the source install or stay on Odoo 19 in Docker.

docker-compose.yml
services:
  db:
    image: postgres:16
    environment:
      POSTGRES_DB: postgres
      POSTGRES_USER: odoo
      POSTGRES_PASSWORD: CHANGE_THIS_PASSWORD
    volumes:
      - odoo-db-data:/var/lib/postgresql/data

  odoo:
    image: odoo:20
    depends_on:
      - db
    ports:
      - "8069:8069"
    environment:
      HOST: db
      USER: odoo
      PASSWORD: CHANGE_THIS_PASSWORD
    volumes:
      - odoo-web-data:/var/lib/odoo
      - ./config:/etc/odoo
      - ./addons:/mnt/extra-addons

volumes:
  odoo-db-data:
  odoo-web-data:
  • The official image reads HOST, PORT, USER and PASSWORD to find PostgreSQL, so those variable names are not arbitrary.
  • Start the stack with docker compose up -d and open http://localhost:8069. Custom modules go in ./addons, which maps to /mnt/extra-addons, already on the image's addons path.
  • For Odoo's AI features, swap the database image for pgvector/pgvector:pg16: PostgreSQL 16 with pgvector pre-installed.

Before you run Docker in production

Removing containers without named volumes deletes the data inside them. For production, move passwords into a secrets file, never publish port 5432, put Odoo behind a TLS reverse proxy, and schedule pg_dump and filestore backups from the host.

How should you structure an Odoo 20 development environment?

Keep the Odoo core, Enterprise, your custom addons, the virtual environment and the configuration in separate folders under one version-specific root. The layout keeps Git clean, upgrades predictable, and lets Odoo 19 and Odoo 20 live on the same machine.

Folder layout

  • odoo20/
  • odoo/git clone, branch 20.0
  • enterprise/optional, branch 20.0
  • custom-addons/your modules, own repository
  • venv/Python 3.12 virtual environment
  • config/
  • odoo.confkeep out of public Git
  • logs/
config/odoo.conf
[options]
admin_passwd = CHANGE_THIS_MASTER_PASSWORD
db_host = False
db_port = False
db_user = odoo
db_password = False
addons_path = /home/you/odoo20/enterprise,/home/you/odoo20/odoo/addons,/home/you/odoo20/custom-addons
http_port = 8069
logfile = /home/you/odoo20/logs/odoo.log
bash
python3 odoo-bin -c ../config/odoo.conf -d odoo20 --dev=all
  • --dev=all reloads Python code and XML views as you edit them. Install the watchdog package in the virtual environment so the Python auto-reload works.
  • The master password (admin_passwd) is the key to every database on that server. Keep odoo.conf out of public repositories.
  • New to writing modules? Our Odoo module development guide picks up from this folder layout.

What changes for an Odoo 20 production deployment?

Production adds four things a development install does not have: a reverse proxy with HTTPS, a multi-worker configuration, backups of both PostgreSQL and the filestore, and monitoring. Odoo's system configuration guide (opens in a new tab) covers each in depth; below is the shape we deploy for clients.

  1. Users and integrationsBrowsers, mobile app, API clients
  2. DNS or CDNCloudflare or your DNS provider
  3. Nginx reverse proxyTLS termination, HTTP to HTTPS redirect:443
  4. Odoo 20multi-worker server
    HTTP workersWeb client, API, reports:8069
    Live chat workerEverything under /websocket:8072
  5. PostgreSQL 16Private network or localhost only:5432
Backups of PostgreSQL and the filestore, plus monitoring of CPU, RAM, disk and the Odoo log
Nginx sends normal requests to the HTTP workers on 8069 and anything under /websocket to the live chat worker on 8072. PostgreSQL is never exposed to the internet.

Configuration, service, proxy and backups

Four files turn a working install into a production one. Each tab has the file and what to watch in it.

/etc/odoo20.conf
[options]
admin_passwd = CHANGE_THIS_MASTER_PASSWORD
db_host = 127.0.0.1
db_port = 5432
db_user = odoo
db_password = CHANGE_THIS_DB_PASSWORD
db_name = production
dbfilter = ^production$
list_db = False
addons_path = /opt/odoo20/odoo/addons,/opt/odoo20/custom-addons
data_dir = /var/lib/odoo20
logfile = /var/log/odoo20/odoo.log
log_level = warn
proxy_mode = True
http_port = 8069
gevent_port = 8072
workers = 5
max_cron_threads = 1
limit_memory_soft = 2147483648
limit_memory_hard = 2684354560
limit_time_cpu = 600
limit_time_real = 1200
  • workers = 5 follows the (CPUs × 2) + 1 rule for a 2-CPU host. Tune memory and time limits from measured load, not from a forum post.
  • proxy_mode = True makes Odoo trust the forwarded headers from Nginx, which it needs for correct URLs and client IPs.
  • list_db = False with a strict dbfilter keeps the database manager off the public internet.

Production checklist

Tick items off as you go. Progress stays in this browser.

0 of 10 done

Want this layer run for you?Our DevOps team hosts, hardens and monitors Odoo on your own cloud account.

Do you need wkhtmltopdf, rtlcss and pgvector for Odoo 20?

You need wkhtmltopdf for PDF reports, rtlcss only for right-to-left languages, and pgvector only for Odoo's AI features. Odoo documents all three as separate installs that pip does not cover.

wkhtmltopdf

Needed for PDF reports

Odoo's documentation says it must be installed manually in version 0.12.6 for headers and footers to work. If web pages render but PDF reports fail, fix this binary before touching any other setting.

bash
# download the 0.12.6 build for your distribution from
# github.com/wkhtmltopdf/packaging/releases, then:
sudo apt install ./wkhtmltox_*.deb
wkhtmltopdf --version
Odoo's wkhtmltopdf notes (opens in a new tab)

rtlcss

Right-to-left languages only

For Arabic, Hebrew or Persian interfaces. An English-only install can skip it, but add RTL rendering to your acceptance tests if the business trades in the Gulf.

bash
sudo apt install -y nodejs npm
sudo npm install -g rtlcss

pgvector

Odoo AI features only

Odoo's documentation states the pg-vector extension is required for its AI features and works on PostgreSQL 15 and up. Plan it in from day one if AI is on the roadmap, rather than adding it to a live database later.

bash
sudo apt install -y postgresql-server-dev-16 build-essential
cd /tmp
git clone https://github.com/pgvector/pgvector.git
cd pgvector
make
sudo make install
pgvector repository (opens in a new tab)

How do you verify an Odoo 20 installation?

Check each layer on its own, then run one end-to-end test that touches the web server, PostgreSQL, the filestore and PDF rendering together. Every layer fails with a different error, and you want to meet them one at a time.

bash
python3 --version
psql --version
git --version
sudo systemctl status postgresql

Then run one end-to-end test

  1. Create a test database and install Contacts and Sales.

    Tests: Web server and PostgreSQL
  2. Create a second user and sign in as that user.

    Tests: Access rights
  3. Upload an attachment to any record.

    Tests: Filestore
  4. Print a quotation as PDF.

    Tests: wkhtmltopdf, headers and footers
  5. Read the log for warnings after each step.

    Tests: Everything above

Common Odoo 20 installation errors and fixes

Most Odoo 20 installation errors come from four causes: the wrong Python, the wrong PostgreSQL, a missing system library, or a path that does not match the config file. Work through them in that order.

  • "Outdated python version" or a syntax error on startup

    Cause:
    The shell is using Python 3.10 or 3.11.
    Fix:
    Create the environment with python3.12 -m venv, activate it, and check which python.
  • psycopg2.OperationalError or "could not connect"

    Cause:
    PostgreSQL is not running, or the role or host is wrong.
    Fix:
    Run systemctl status postgresql, confirm the role exists, then check db_host and db_user.
  • PostgreSQL version error when creating a database

    Cause:
    PostgreSQL 14 or 15 is installed.
    Fix:
    Install PostgreSQL 16 from the PostgreSQL apt repository, or move to Ubuntu 24.04.
  • Port 8069 already in use

    Cause:
    Another Odoo instance is running.
    Fix:
    Find it with sudo lsof -i :8069, stop it, or start Odoo with --http-port 8070.
  • ModuleNotFoundError for a Python package

    Cause:
    The wrong virtual environment is active.
    Fix:
    Run source venv/bin/activate, then pip install -r requirements.txt.
  • PDF reports blank, or missing header and footer

    Cause:
    wkhtmltopdf is missing or the wrong version.
    Fix:
    Install 0.12.6 and check it with wkhtmltopdf --version.
  • Custom module not found

    Cause:
    Wrong addons_path, a missing __manifest__.py, or file permissions.
    Fix:
    Check the path in the config file and the addons list Odoo prints at startup.
  • Enterprise apps missing from the Apps menu

    Cause:
    The Enterprise path is listed after the Community addons.
    Fix:
    Put the Enterprise path first in addons_path.
  • Data gone after docker compose down -v

    Cause:
    The -v flag deletes named volumes.
    Fix:
    Recreate the stack with named volumes and restore from your last backup.
  • Live chat or notifications never arrive behind Nginx

    Cause:
    /websocket is not proxied to port 8072.
    Fix:
    Add the websocket location block and set proxy_mode = True.

Can you run Odoo 19 and Odoo 20 on the same machine?

Yes, as long as every layer is isolated: separate source folders, separate virtual environments, separate databases and separate ports. Source environments and containers make this practical.

  • Source folder

    Odoo 19
    ~/odoo19/odoo
    Odoo 20
    ~/odoo20/odoo
  • Python environment

    Odoo 19
    ~/odoo19/venv
    Odoo 20
    ~/odoo20/venv (3.12)
  • Database

    Odoo 19
    odoo19
    Odoo 20
    odoo20
  • Port

    Odoo 19
    8069
    Odoo 20
    8070
  • Start with

    Odoo 19
    --http-port 8069
    Odoo 20
    --http-port 8070 --db-filter=^odoo20$

One rule you cannot skip

Never point two major versions at the same database, even for a quick test. Schemas change between versions, and only Odoo's upgrade process moves data from one to the other safely.

From our own work

When we compared the 19.0 and 20.0 branches for our Odoo widget reference, the widget registry alone showed 200 additions and 62 removals. A shared database would be exposed to changes on that scale.

Odoo 20 Community vs Enterprise: what changes in the installation?

Only where the code comes from. Enterprise is an extra set of addons on the Community server, so everything else in this guide, from Python 3.12 to the Nginx configuration, is identical for both editions.

Odoo 20 Community

  • One repository: odoo/odoo, branch 20.0
  • Nightly packages for Ubuntu, Fedora and Windows
  • Free, LGPL-licensed

Odoo 20 Enterprise

  • Two repositories: odoo/odoo plus odoo/enterprise
  • Enterprise path first in addons_path
  • Packages from the Odoo download page with a paid login

Odoo Online vs Odoo.sh vs self-hosted Odoo 20

Not every Odoo 20 project needs a manual installation. Odoo's hosting overview (opens in a new tab) sets out three models, and the right one depends on customization, operational responsibility and budget, not on which has the fewest commands.

Odoo Online

Who runs the server
Odoo
Custom server code
No custom server-side code
Best for
Standard apps with minimal IT

Odoo.sh

Who runs the server
Odoo, with your Git branches
Custom server code
Yes, deployed through Git
Best for
Custom modules without server administration
Most control

Self-hosted

Who runs the server
You or your partner
Custom server code
Yes, unrestricted
Best for
Full control, data residency, integrations, cost control at scale

Self-hosting gives the most control and makes you responsible for operating system updates, PostgreSQL, backups, security, monitoring, deployment and disaster recovery. Our own website content is served from a self-hosted Odoo instance behind a reverse proxy, so it is the model we run ourselves, not only the one we recommend. For cost and control in detail, see Odoo Online vs Odoo.sh vs on-premise.

How iVentureTeam installs and hosts Odoo 20 for clients

We set up Odoo environments the way this guide describes, then take responsibility for keeping them running, on your own cloud account, on Odoo.sh or on dedicated servers.

years with Odoo
13+
ERP projects delivered
150+
Odoo specialists
40+
countries served
35+
  1. Environment audit

    Current version, Python and PostgreSQL levels, custom modules, third-party apps and hosting.

  2. Build the tiers

    Development, staging and production, each with the safeguards it needs.

  3. Move custom code

    Port your modules to the Odoo 20 framework and test them against real data.

  4. Cut over safely

    A rehearsed go-live with a written rollback plan and backups verified first.

On an older version? Read whether to upgrade to Odoo 20 on release day, browse the Odoo 20 release notes, or see our Odoo upgrade services.

See DevOps services

The bottom line on installing Odoo 20

  • Choose the architecture first and the commands second.
  • Odoo 20 raises the baseline to Python 3.12 and PostgreSQL 16, so Ubuntu 24.04 LTS or Debian 13 gives a clean install and older releases do not.
  • Developers get the most from a source install with one virtual environment per version.
  • Businesses get the most from Linux behind Nginx with real backups and monitoring, or from Odoo.sh when they would rather not run that layer.
  • Treat Odoo 18 and 19 tutorials as a starting point whose versions need checking, not as a script to paste.

Odoo 20 installation: frequently asked questions

What Python version does Odoo 20 require?

Odoo 20 requires Python 3.12 or later. Odoo's source installation documentation records the change for version 20, up from the Python 3.10 minimum used by Odoo 17 through 19. The 20.0 requirements file also carries pins for Python 3.13 and 3.14, so newer interpreters are covered too.

What PostgreSQL version does Odoo 20 require?

Odoo 20 requires PostgreSQL 16 or later, up from PostgreSQL 13 in Odoo 19. Ubuntu 24.04 and Debian 13 ship a compatible version by default. Ubuntu 22.04 and Debian 12 do not, so add the PostgreSQL apt repository or move to a newer release before installing.

Is Odoo 20 released yet?

Yes. Odoo 20 was released at Odoo Experience 2026 in Brussels, held 24 to 26 September 2026. The 20.0 source branch, the 20.0 documentation and nightly packages for Ubuntu, Fedora and Windows are available. The official Docker image had not been published when we last checked on 26 September 2026.

Can I install Odoo 20 on Ubuntu 22.04?

Yes, but not from the default repositories. Ubuntu 22.04 ships Python 3.10 and PostgreSQL 14, both below the Odoo 20 minimum, so you need PostgreSQL 16 from the PostgreSQL apt repository and a separately installed Python 3.12. The official Odoo 20 package targets Ubuntu 24.04, which is the simpler choice for production.

Can I install Odoo 20 on Windows for production?

Odoo provides a Windows installer, but its documentation describes Windows packaging as meant for testing or single-user local instances and discourages production on Windows. The multi-worker server is also unavailable on Windows. Evaluate locally on Windows and deploy production on Linux, Odoo.sh or Odoo Online.

Is there an official Odoo 20 Docker image?

Not yet. When we checked on 26 September 2026, the odoo/docker repository had version folders up to 19.0 and Docker Hub's newest tags were for 19.0. Expect an odoo:20 tag after the release settles. Until then, use the source install or run Odoo 19 in Docker.

Can I run Odoo 19 and Odoo 20 on the same server?

Yes, with full isolation: separate source folders, virtual environments, databases and ports, for example 8069 for Odoo 19 and 8070 for Odoo 20. Never connect both versions to the same database. Only Odoo's upgrade process moves a database safely from 19 to 20.

How do I install Odoo 20 Enterprise?

Clone both the Community and Enterprise 20.0 repositories and list the Enterprise path first in addons_path, or install the Enterprise package from the Odoo download page while logged in as a paying customer or partner. Enterprise is a set of extra addons on top of the Community server, not a different server.

Do I need pgvector to install Odoo 20?

Only if you use Odoo's AI features. Odoo's documentation states the pg-vector PostgreSQL extension is required for those features and works on PostgreSQL 15 and up. A standard install for sales, inventory or accounting runs without it, though planning for it early avoids a production database change later.

What port does Odoo 20 use?

Odoo 20 serves the web client on port 8069 by default, as earlier versions did. When workers are enabled in production, live chat and notifications run on port 8072, and your reverse proxy must forward /websocket traffic to it.

Sources, and how this guide was checked

Odoo 20, installed properly

Want Odoo 20 installed the right way the first time?

Book a free 30-minute call with an Odoo consultant. We will review your hosting, your custom modules and your timeline, and tell you plainly whether Odoo 20 is the right move now.

Or call +91-90235-15208business@iventureteam.comOr get a free Odoo demo and trial