This guide shows how to install Odoo 20 on Linux (Ubuntu) and Windows, for both Community and Enterprise editions. You will get the requirements, copy-paste commands, a production-style Linux setup with a service and HTTPS, and the common fixes when something goes wrong.

โ„น๏ธ
Last reviewed: October 2026. Odoo 20 is new and requirements can change. Confirm versions in Odoo's official 20.0 documentation. Commands below are for Ubuntu 24.04 LTS; use a test server first.

Which Installation Method Should You Choose?

MethodBest forNotes
Linux โ€” from source (Git)Production and custom modulesMost control; recommended for most teams. Covered below.
Linux โ€” Odoo package (apt/deb)Quick standard installFast to start; less flexible for custom code.
Windows โ€” installerTesting, learning, single userBundles Python and PostgreSQL. Not for production.
Windows โ€” WSL2 + UbuntuDevelopers on WindowsUse the Linux steps inside WSL2.
DockerContainers, repeatable setupsCheck that an official Odoo 20 image is available.
Odoo.sh / Odoo OnlineNo server to manageHosted by Odoo; no installation needed.

Odoo 20 System Requirements

  • Operating system: Ubuntu 24.04 LTS or Debian (production); Windows for testing.
  • Python: 3.12 or later.
  • PostgreSQL: 16 or later.
  • wkhtmltopdf: 0.12.6 patched build (for PDF reports).
  • Node.js and rtlcss: only for right-to-left languages such as Arabic or Hebrew.
  • Hardware: 2 GB RAM to evaluate; about 4 GB RAM and 2 vCPUs for a small production instance.

Install Odoo 20 on Linux (Ubuntu 24.04)

Step 1: Update the server and install dependencies

sudo apt update && sudo apt upgrade -y
sudo apt install -y git python3-pip python3-venv python3-dev build-essential \
  libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev libpq-dev libjpeg-dev \
  zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev libharfbuzz-dev \
  libfribidi-dev libxcb1-dev node-less npm
python3 --version   # should show 3.12 or later

Step 2: Install PostgreSQL and create a database user

sudo apt install -y postgresql postgresql-client
sudo systemctl enable --now postgresql
psql --version      # should show 16 or later
sudo -u postgres createuser -s odoo20

Step 3: Create a system user for Odoo

sudo adduser --system --home=/opt/odoo20 --group --shell=/bin/bash odoo20

Step 4: Install wkhtmltopdf (for PDF reports)

Do not use the version from Ubuntu's own repositories โ€” it is not the patched build and can break report headers and footers. Download the 0.12.6.1 package from the wkhtmltopdf packaging releases page (the jammy package works on Ubuntu 24.04):

wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.jammy_amd64.deb
sudo apt install -y ./wkhtmltox_0.12.6.1-3.jammy_amd64.deb
wkhtmltopdf --version

Step 5: Get the Odoo 20 source code

Community edition:

sudo -u odoo20 git clone https://github.com/odoo/odoo.git --depth 1 --branch 20.0 --single-branch /opt/odoo20/odoo

Enterprise edition (additional step): Enterprise is not a separate server โ€” it is extra addons placed on top of Community. Access to the Enterprise repository requires a valid Odoo subscription or partner access.

sudo -u odoo20 git clone https://github.com/odoo/enterprise.git --depth 1 --branch 20.0 --single-branch /opt/odoo20/enterprise

Step 6: Create a virtual environment and install Python packages

cd /opt/odoo20
sudo -u odoo20 python3 -m venv venv
sudo -u odoo20 /opt/odoo20/venv/bin/pip install wheel
sudo -u odoo20 /opt/odoo20/venv/bin/pip install -r /opt/odoo20/odoo/requirements.txt
๐Ÿ’ก
If pip fails building psycopg2 or python-ldap, re-check that the libpq-dev, libldap2-dev and libsasl2-dev packages from Step 1 are installed.

Step 7: Create the configuration file

sudo mkdir -p /opt/odoo20/custom-addons /var/log/odoo20
sudo chown -R odoo20:odoo20 /opt/odoo20 /var/log/odoo20
sudo nano /etc/odoo20.conf

Community configuration:

[options]
admin_passwd = CHANGE_THIS_MASTER_PASSWORD
db_host = False
db_port = False
db_user = odoo20
db_password = False
addons_path = /opt/odoo20/odoo/addons,/opt/odoo20/custom-addons
logfile = /var/log/odoo20/odoo20.log
http_port = 8069

Enterprise configuration โ€” only the addons_path changes, and the Enterprise folder must come first:

addons_path = /opt/odoo20/enterprise,/opt/odoo20/odoo/addons,/opt/odoo20/custom-addons
sudo chown odoo20: /etc/odoo20.conf
sudo chmod 640 /etc/odoo20.conf

Replace the master password with a strong one. It controls creating, backing up and deleting every database on the server.

Step 8: Test run

sudo -u odoo20 /opt/odoo20/venv/bin/python3 /opt/odoo20/odoo/odoo-bin -c /etc/odoo20.conf

When the log shows that modules loaded, open http://YOUR_SERVER_IP:8069. Stop it with Ctrl+C once you have confirmed it starts.

Step 9: Run Odoo as a service (starts on boot)

sudo nano /etc/systemd/system/odoo20.service
[Unit]
Description=Odoo 20
Requires=postgresql.service
After=network.target postgresql.service

[Service]
Type=simple
User=odoo20
Group=odoo20
ExecStart=/opt/odoo20/venv/bin/python3 /opt/odoo20/odoo/odoo-bin -c /etc/odoo20.conf
Restart=on-failure

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now odoo20
sudo systemctl status odoo20
sudo journalctl -u odoo20 -f       # live logs

Step 10: Add Nginx and HTTPS (recommended for production)

Do not expose port 8069 to the internet. Put Nginx in front, use a domain name and a free Let's Encrypt certificate.

sudo apt install -y nginx certbot python3-certbot-nginx
sudo nano /etc/nginx/sites-available/odoo20
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    listen 80;
    server_name erp.yourdomain.com;
    client_max_body_size 200m;

    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;
        proxy_read_timeout 720s;
    }

    location /websocket {
        proxy_pass http://127.0.0.1:8072;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header Host $host;
    }
}
sudo ln -s /etc/nginx/sites-available/odoo20 /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d erp.yourdomain.com

Then add these lines to /etc/odoo20.conf and restart Odoo. Workers improve performance for several users; with workers enabled, live chat and websocket use port 8072:

proxy_mode = True
workers = 2
gevent_port = 8072
sudo systemctl restart odoo20

Step 11: Create your first database

Open your site, click Create Database, and enter the master password, a database name, your administrator email and password, language and country. Untick "Demo data" for a real company. For Enterprise, register the database with your subscription code when asked (or later from Settings).

Install Odoo 20 on Windows

Option A: Windows installer (testing and learning)

  1. Download the installer. Get the Odoo 20 Windows installer (.exe) from Odoo's download page. Community is free; Enterprise needs a subscription login.
  2. Run the installer. If Windows shows a "protected your PC" notice, choose More info โ†’ Run anyway, then accept the admin prompt.
  3. Choose components. Keep "Odoo Server" and the bundled PostgreSQL. The installer includes Python, so you do not install it separately.
  4. Finish and open Odoo. Open http://localhost:8069 and create your first database.
โš ๏ธ
The Windows installer is for testing or single-user use, not for production. Multi-worker mode is not available on Windows. For real company data, use a Linux server.

Option B: From source on Windows (developers)

For custom module development, the easiest path is WSL2 with Ubuntu 24.04 โ€” then follow the Linux steps above. If you prefer native Windows:

  1. Install prerequisites. Python 3.12+, PostgreSQL 16+, Git, Microsoft C++ Build Tools, and wkhtmltopdf 0.12.6.
  2. Clone Odoo 20. Use branch 20.0 (and the enterprise repository too if you have access).
  3. Create a virtual environment and install packages. See commands below.
  4. Create a PostgreSQL user and config file, then run Odoo. Point addons_path to your folders.
git clone https://github.com/odoo/odoo.git --depth 1 --branch 20.0 --single-branch C:\odoo20\odoo
cd C:\odoo20\odoo
python -m venv venv
venv\Scripts\activate
pip install wheel
pip install -r requirements.txt
; C:\odoo20\odoo.conf
[options]
admin_passwd = CHANGE_THIS_MASTER_PASSWORD
db_host = localhost
db_port = 5432
db_user = odoo20
db_password = YOUR_DB_PASSWORD
; Enterprise folder first, if you use Enterprise:
addons_path = C:\odoo20\enterprise,C:\odoo20\odoo\addons,C:\odoo20\custom-addons
python odoo-bin -c C:\odoo20\odoo.conf

Community vs Enterprise: Setup Differences

CommunityEnterprise
Codeodoo/odoo branch 20.0odoo/odoo plus odoo/enterprise branch 20.0
AccessFree and publicRequires subscription or partner access
addons_pathOdoo addons + your custom addonsEnterprise folder first, then Odoo addons, then custom
ActivationNoneRegister database with subscription code
Extra appsCore appsStudio, advanced accounting, helpdesk, advanced manufacturing and more

After Installation: Production Checklist

  • Change the master password and never leave defaults.
  • Disable the database manager on public servers by setting list_db = False in the config.
  • Automate backups of the database and filestore, and test restoring them.
  • Use HTTPS and a firewall (open only 22, 80 and 443).
  • Set up email (outgoing SMTP) and test sending an invoice.
  • Monitor disk space, memory and the Odoo log.
  • Test on a copy before every update or module installation.
# Simple nightly database backup (example)
sudo -u postgres pg_dump -Fc mydb > /backups/mydb_$(date +%F).dump
# Also copy the filestore: /opt/odoo20/.local/share/Odoo/filestore/mydb

Common Problems and Fixes

ProblemLikely causeFix
Odoo does not start; Python error about versionPython older than 3.12Use Ubuntu 24.04 or install Python 3.12 and recreate the virtual environment
pip install fails on psycopg2 or ldapMissing system librariesInstall the dev packages from Step 1
PDF reports have wrong headers or no stylingWrong wkhtmltopdf buildInstall the patched 0.12.6.1 package
"Address already in use"Another Odoo or service on port 8069Stop the other process or change http_port
Role "odoo20" does not existPostgreSQL user not createdRun sudo -u postgres createuser -s odoo20
Enterprise apps missingWrong addons_path order or no updatePut the enterprise folder first and update the apps list
Live chat or websocket not working behind NginxMissing websocket proxy or workersUse proxy_mode = True, workers and the /websocket block

Need Help or Planning an Upgrade?

If you are moving from Odoo 19, read our Odoo 19 to Odoo 20 upgrade guide. For setup on your own server, Odoo.sh or a managed cloud โ€” including backups, HTTPS and security โ€” see our Odoo ERP page or send us a quotation request.

Frequently Asked Questions

What are the system requirements for Odoo 20?

Public guides list Python 3.12 or later, PostgreSQL 16 or later, wkhtmltopdf 0.12.6 (patched Qt build) for PDF reports, and about 4 GB RAM with 2 vCPUs for a small production server. Confirm exact minimums in Odoo's official 20.0 documentation.

Should I install Odoo 20 on Linux or Windows?

Use Linux (Ubuntu 24.04 LTS or Debian) for production. Windows is fine for testing, learning or single-user local use; for development on a Windows PC, WSL2 with Ubuntu is the smoother option.

What is the difference between installing Community and Enterprise?

Both run on the same Odoo server. Community uses the odoo/odoo code. Enterprise adds the Enterprise addons on top, which you need to download with a valid subscription, and its folder must come first in addons_path.

What is the default login after installation?

When you create a database in the web interface you choose the administrator email and password. With demo data or when started with -d on an empty database, the default admin credentials may be admin/admin โ€” change them immediately.

Which port does Odoo use?

Port 8069 for the web interface. When you run with workers, live chat and websocket traffic use port 8072. Put Nginx or another reverse proxy in front and expose only 80/443 to the internet.

Can I install Odoo 20 on Ubuntu 22.04?

Ubuntu 22.04 ships Python 3.10, which is too old for Odoo 20. You would need to install Python 3.12 separately. Ubuntu 24.04 LTS includes Python 3.12 and is the simpler choice.

Is there an official Docker image for Odoo 20?

Odoo publishes official Docker images, but availability of the odoo:20 tag can lag behind a new release. Check Docker Hub before relying on it, or use the source install in this guide.

How do I move from the installer to production?

Do not use the Windows installer for production. Set up a Linux server, install Odoo from source or packages, restore your database backup, put a reverse proxy with HTTPS in front, and schedule automated backups.