Odoo 20.0 Enterprise · checked 24 September 2026

How to install Odoo 20 Enterprise on Ubuntu.

A fresh Enterprise server, or an existing Community database moved to Enterprise without losing a record. Both paths, step by step, with the three places Odoo’s own docs trip you up on 20.0.

The short answer

Odoo 20 Enterprise is the Community server plus Odoo’s Enterprise add-ons, under a paid subscription. On Ubuntu 24.04, install the Enterprise .deb from Odoo’s download page with apt. Already on Community? Back up, install Enterprise over it, run -i web_enterprise, and enter your subscription code.

what the server loads, in order
  1. 1 · first in --addons-path Enterprise add-ons odoo/enterprise · 20.0 · web_enterprise
  2. 2 Community add-ons and server odoo/odoo · 20.0 · the same for both editions
  3. 3 · weekly Subscription check services.odoo.com · port 80 or 443
odoo-bin --addons-path=../enterprise,addons
Per Odoo’s 20.0 docs: the Enterprise repository is not a separate server, only extra add-ons that must load first.

Before you start

Four things Enterprise needs that Community does not.

Subscription Custom plan

Odoo’s pricing page lists self-hosting Enterprise, on your servers or Odoo.sh, under the Custom plan.

Packages Login only

Enterprise .deb, .rpm, and .exe files come from Odoo’s download page for paying customers and partners. No nightly repository.

Outbound services.odoo.com

Port 80, or 443 with publisher_warranty_url set. The subscription check runs weekly.

One code One database

Each subscription registers one database. For a test copy, duplicate it with Neutralize ticked.

Everything else matches Community: Ubuntu 24.04, Python 3.12 or newer, PostgreSQL 16 or newer, and the localhost-only default. Our tested Odoo 20 install guide covers those.

Path one · a new server

Install Odoo 20 Enterprise on Ubuntu 24.04.

Six steps from a clean Ubuntu 24.04 server to a registered Enterprise database. Tick each one off as you go; your progress stays in this browser.

Enterprise steps from Odoo’s docs 6 steps
  1. Install PostgreSQL

    Odoo 20 needs PostgreSQL 16 or newer, and Ubuntu 24.04 ships 16.

    bash
    sudo apt update
    sudo apt install postgresql -y
  2. Download the Odoo 20 Enterprise package

    Log in to Odoo’s download page with the account that holds your subscription, choose version 20.0, Enterprise, and the Debian/Ubuntu package. Odoo only serves Enterprise packages to paying on-premise customers and partners, and there is no package repository for Enterprise, so this is a file you download.

  3. Install it with apt

    Run this in the folder you saved the file to. apt installs every dependency, creates the odoo system user and its PostgreSQL role, and starts Odoo as a service.

    bash
    cd ~/Downloads
    sudo apt install ./odoo_20.0*.deb
    Check it
    systemctl status odoo --no-pager Active: active (running)
  4. Install wkhtmltopdf for PDF reports

    The 0.12.6 build with patched Qt, for headers and footers on invoices and quotations.

    bash
    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
    Check it
    wkhtmltopdf --version wkhtmltopdf 0.12.6.1 (with patched qt)
  5. Create your database

    On the server, open http://localhost:8069. Note the master password Odoo generates, then create the database. Odoo 20 listens on 127.0.0.1 only, so from your laptop use an SSH tunnel until nginx with HTTPS is in front.

    on your laptop
    ssh -L 8069:localhost:8069 you@your-server
  6. Register it with your subscription code

    Enter the code from your subscription email in the banner on the app dashboard. When it works, the banner turns green and shows the database expiration date, also shown at the bottom of Settings.

    Registration needs your server to reach services.odoo.com on port 80, every week, not just once. If only 443 is allowed out, add the line below to /etc/odoo/odoo.conf and restart.

    /etc/odoo/odoo.conf
    publisher_warranty_url = https://services.odoo.com/publisher-warranty/

From source instead

For developers: clone both 20.0 repositories side by side (the Enterprise one needs access through your subscription or partnership), install the dependencies, and put the Enterprise folder first.

bash
git clone --branch 20.0 --single-branch --depth 1 https://github.com/odoo/odoo.git
git clone --branch 20.0 --single-branch --depth 1 https://github.com/odoo/enterprise.git
bash
cd odoo
sudo ./setup/debinstall.sh
bash
python3 odoo-bin --addons-path=../enterprise,addons -d mydb

With our Docker setup

Using the Dockerfile and compose.yaml from the install guide? Put the Enterprise add-ons in an enterprise folder next to them and add this to compose.yaml, keeping the Enterprise path first.

compose.yaml · odoo service
services:
  odoo:
    volumes:
      - ./enterprise:/mnt/enterprise:ro
    command: ["odoo", "--http-interface=0.0.0.0",
              "--db_host=db", "--db_user=odoo", "--db_password=odoo",
              "--addons-path=/mnt/enterprise,/usr/lib/python3/dist-packages/odoo/addons,/mnt/extra-addons"]

Path two · already on Community

How to upgrade Odoo 20 Community to Enterprise.

Same version, new edition. Your database stays, and Enterprise is installed into it. Odoo calls this a switch, not an upgrade: its upgrade service moves versions, not editions.

Shown for a Community install from the Ubuntu package, as in our install guide. Replace mydb with your database name.

Odoo’s procedure, corrected for 20.0 6 steps
  1. Back up the database and its files

    The simplest backup is the database manager at http://localhost:8069/web/database/manager: choose Backup, keep the zip format, and include the filestore. From the shell, this saves both halves:

    bash
    sudo -u postgres pg_dump -Fc mydb > mydb.dump
    sudo tar czf mydb-filestore.tgz -C /var/lib/odoo/.local/share/Odoo/filestore mydb

    Replace mydb with your database name. The filestore path is where the 20.0 package keeps attachments.

  2. Remove the Community package repository

    If you installed Community from Odoo’s nightly repository, drop it first, so a later apt upgrade can never put the Community package back over Enterprise.

    bash
    sudo rm /etc/apt/sources.list.d/odoo.list
    sudo apt-get update
  3. Stop Odoo

    Nothing should write to the database while the edition changes.

    bash
    sudo systemctl stop odoo
  4. Install the Enterprise package over Community

    Download the 20.0 Enterprise .deb from Odoo’s download page, then install it in place of the Community package. The second line pulls in any dependency dpkg reports as missing.

    bash
    sudo dpkg -i ./odoo_20.0*.deb
    sudo apt-get -f install
  5. Install web_enterprise in your database

    This turns the existing database into an Enterprise database. It runs as the odoo user with the package’s own config, exactly like the service, so it reaches PostgreSQL the same way. On a large database it takes a while.

    Odoo’s switch guide prints python3 /usr/bin/odoo-bin. The Odoo 20 package installs the command as /usr/bin/odoo, and there is no odoo-bin, so that line fails as written.

    bash
    sudo -u odoo odoo --config /etc/odoo/odoo.conf -d mydb -i web_enterprise --stop-after-init
  6. Start Odoo and enter your subscription code

    Log in as usual, then enter the code from your subscription email in the banner on the app dashboard.

    bash
    sudo systemctl start odoo

Running from source

Stop the server and back up first. Then clone the Enterprise add-ons, install web_enterprise into the database, and restart with the new add-ons path.

bash
git clone --branch 20.0 --single-branch --depth 1 https://github.com/odoo/enterprise.git ../enterprise
python3 odoo-bin --addons-path=../enterprise,addons -d mydb -i web_enterprise --stop-after-init
python3 odoo-bin --addons-path=../enterprise,addons -d mydb

On Windows

Back up, uninstall Odoo Community with the Uninstall program in its folder (PostgreSQL stays), run the Enterprise installer into the same folder with Start Odoo unticked, then run this from the server subfolder. The service starts by itself.

Command Prompt
..\python\python.exe odoo-bin -d mydb -i web_enterprise --stop-after-init

Keep it registered

An Enterprise database that stays green.

A registered database checks in with Odoo every week. Three things turn the banner from green to a countdown.

  1. The check cannot get out. A firewall change that blocks services.odoo.com on port 80, or 443 with the config line, stops the weekly check.
  2. More users than the subscription. Odoo’s docs give 30 days to add users or deactivate some. In Odoo 20 that count includes Light Users, and every active employee record without a login. What counts as a Light User.
  3. A second database on the same code. One code, one database. Test copies come from the database manager’s Duplicate, with Neutralize ticked.

Plain answers

Odoo 20 Enterprise, answered.

How do I install Odoo 20 Enterprise on Ubuntu?

Install PostgreSQL (sudo apt install postgresql -y), download the Odoo 20 Enterprise .deb from Odoo’s download page with the account that holds your subscription, and install it with sudo apt install ./ followed by the file name. The package creates the odoo user and database role and starts Odoo as a service on port 8069. Create your database at http://localhost:8069, then enter your subscription code in the banner on the app dashboard.

Can I download Odoo 20 Enterprise for free?

No. Odoo’s documentation says you must be logged in as a paying on-premise customer or partner to download Enterprise packages, and there is no nightly package repository for Enterprise. Odoo 20 Community is free and open source; Enterprise needs a subscription, and self-hosting it falls under the Custom plan on Odoo’s pricing page.

How do I upgrade Odoo 20 Community to Enterprise?

Back up the database and filestore, remove the Community package repository, stop Odoo, install the Enterprise .deb over Community with sudo dpkg -i, then run sudo -u odoo odoo --config /etc/odoo/odoo.conf -d mydb -i web_enterprise --stop-after-init, start Odoo again, and enter your subscription code. Odoo’s own switch guide still prints /usr/bin/odoo-bin, but the Odoo 20 package installs the command as /usr/bin/odoo.

Will switching from Community to Enterprise keep my data?

Yes. Odoo’s procedure installs the web_enterprise module into your existing database, so records, users, and settings stay where they are. Back up the database and the filestore first anyway: it is the step you will be glad you took if anything goes wrong.

Is switching from Community to Enterprise an upgrade?

Not in Odoo’s terms. Odoo’s upgrade documentation says an upgrade does not cover switching editions, for example from Community to Enterprise. Moving between versions, such as Odoo 19 to 20, is the upgrade service; changing edition on the same version is the switch described on this page.

How do I install Odoo 20 Enterprise from source?

Clone both repositories on the 20.0 branch, odoo/odoo and odoo/enterprise (the Enterprise repository needs access through your subscription or partnership), install the dependencies with sudo ./setup/debinstall.sh in the odoo folder, and start Odoo with python3 odoo-bin --addons-path=../enterprise,addons -d mydb. The Enterprise path must come before the others.

Where do I enter my Odoo Enterprise subscription code?

In the banner on the app dashboard of the database. When registration succeeds the banner turns green and shows the expiration date, which also appears at the bottom of the Settings page.

Why does my Odoo Enterprise database say it will expire?

Usually because it is not registered, the subscription is not active, the server cannot reach services.odoo.com, or the database has more users than the subscription covers. For too many users, Odoo’s documentation gives 30 days to add users to the subscription or deactivate some before the database expires. Odoo 20 also counts Light Users, including active employee records without a login.

What ports does Odoo 20 Enterprise need open?

Outbound access from the server to services.odoo.com on port 80, kept open because the subscription check runs weekly. If only port 443 is allowed out, add publisher_warranty_url = https://services.odoo.com/publisher-warranty/ to the Odoo configuration file.

Can I use one Enterprise subscription for production and a test database?

One subscription code registers one database. For testing, duplicate the production database from the database manager with Neutralize ticked. Odoo’s documentation says a neutralized copy has outgoing emails, planned actions, bank synchronization, and payment providers turned off, so tests cannot reach customers.

Enterprise is running

Next: let AI in, on your terms.

Odoo 20’s documentation describes a native MCP server in the AI app, which Community does not include, so Claude, Codex, and other clients can reach your data. Our guide shows how to connect it, every tool it exposes, and what to add before an AI writes to production.

A step behaved differently on your server? Write to hello@nanti.ai and we update the guide.