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.
Which Installation Method Should You Choose?
| Method | Best for | Notes |
|---|---|---|
| Linux โ from source (Git) | Production and custom modules | Most control; recommended for most teams. Covered below. |
| Linux โ Odoo package (apt/deb) | Quick standard install | Fast to start; less flexible for custom code. |
| Windows โ installer | Testing, learning, single user | Bundles Python and PostgreSQL. Not for production. |
| Windows โ WSL2 + Ubuntu | Developers on Windows | Use the Linux steps inside WSL2. |
| Docker | Containers, repeatable setups | Check that an official Odoo 20 image is available. |
| Odoo.sh / Odoo Online | No server to manage | Hosted 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
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)
- Download the installer. Get the Odoo 20 Windows installer (.exe) from Odoo's download page. Community is free; Enterprise needs a subscription login.
- Run the installer. If Windows shows a "protected your PC" notice, choose More info โ Run anyway, then accept the admin prompt.
- Choose components. Keep "Odoo Server" and the bundled PostgreSQL. The installer includes Python, so you do not install it separately.
- Finish and open Odoo. Open
http://localhost:8069and create your first database.
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:
- Install prerequisites. Python 3.12+, PostgreSQL 16+, Git, Microsoft C++ Build Tools, and wkhtmltopdf 0.12.6.
- Clone Odoo 20. Use branch
20.0(and theenterpriserepository too if you have access). - Create a virtual environment and install packages. See commands below.
- Create a PostgreSQL user and config file, then run Odoo. Point
addons_pathto 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
| Community | Enterprise | |
|---|---|---|
| Code | odoo/odoo branch 20.0 | odoo/odoo plus odoo/enterprise branch 20.0 |
| Access | Free and public | Requires subscription or partner access |
| addons_path | Odoo addons + your custom addons | Enterprise folder first, then Odoo addons, then custom |
| Activation | None | Register database with subscription code |
| Extra apps | Core apps | Studio, 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 = Falsein 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
| Problem | Likely cause | Fix |
|---|---|---|
| Odoo does not start; Python error about version | Python older than 3.12 | Use Ubuntu 24.04 or install Python 3.12 and recreate the virtual environment |
pip install fails on psycopg2 or ldap | Missing system libraries | Install the dev packages from Step 1 |
| PDF reports have wrong headers or no styling | Wrong wkhtmltopdf build | Install the patched 0.12.6.1 package |
| "Address already in use" | Another Odoo or service on port 8069 | Stop the other process or change http_port |
| Role "odoo20" does not exist | PostgreSQL user not created | Run sudo -u postgres createuser -s odoo20 |
| Enterprise apps missing | Wrong addons_path order or no update | Put the enterprise folder first and update the apps list |
| Live chat or websocket not working behind Nginx | Missing websocket proxy or workers | Use 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.