Skip to Content

Odoo Online vs Odoo.sh vs On-Premise: Hosting, Installation and How to Choose in 2026

The three ways to run Odoo, compared side by side - what each one lets you do, what it costs you, how upgrades work, how to install Odoo 20 on your own server, and how to move between them.

Before you choose apps, plans or a partner, there is a more basic question: where will your Odoo run? Odoo gives you three options - Odoo Online, Odoo.sh and on-premise (your own server or cloud). They run the same software, but they differ a lot in what you are allowed to customise, who looks after the servers, how upgrades happen and what you end up paying. This guide compares them in plain language, shows how to install Odoo 20 on your own server, and ends with a simple way to decide.

Key takeaways

  • Odoo Online is Odoo's software-as-a-service: nothing to install or maintain, but no custom code and no Odoo Apps Store modules, and upgrades are mandatory.
  • Odoo.sh is Odoo's cloud platform for customised Odoo: your own modules from GitHub, staging and development branches, and Odoo runs the servers. It needs the Custom plan and is priced by workers, storage and staging environments on top of the licence.
  • On-premise gives you full control - Odoo Community for free, or Enterprise with the Custom plan - and full responsibility for the server, security, backups and upgrades.
  • On Odoo 20 your own server needs Python 3.12 or newer and PostgreSQL 16 or newer; Ubuntu 24.04 LTS meets both out of the box, Debian 12 does not.
  • You can move between the three later, with a few rules: Odoo Online does not accept non-standard apps, and its intermediate versions must be upgraded to the next major version before leaving it.

The three ways to run Odoo

It helps to separate two things that are often mixed up: the edition (Odoo Community, free and open source, or Odoo Enterprise, the paid edition with more apps and features) and the hosting (where the database runs). Odoo Online and Odoo.sh always run Odoo Enterprise. On-premise can run either edition.

Odoo OnlineOdoo.shOn-premise
What it isSoftware as a service, hosted by OdooPlatform as a service for Odoo, hosted by OdooOdoo installed on a server you run
EditionEnterpriseEnterpriseCommunity or Enterprise
Who runs the serversOdooOdooYou (or your IT partner)
Custom Python modulesNoYes, from your GitHub repositoryYes
Odoo Apps Store modulesNoYesYes
Studio (no-code customisation)Yes, Custom planYesEnterprise only
Server and shell accessNoShell and SSH, online editorFull root access
Test copiesDuplicates in test mode (up to five, kept 15 days)Staging and unlimited development branchesWhatever you set up
BackupsDaily, by Odoo; download from the database managerBy Odoo, stored on three servers in different locationsYour responsibility
UpgradesMandatory and scheduled by OdooWithin the support window, done by you with Odoo's upgrade serviceWhen you choose, or never
Licence neededOne App Free, Standard or Custom planCustom planCommunity: none. Enterprise: Custom plan
Hosting costIncluded in the licenceWorkers + storage + staging, on top of the licenceYour server or cloud bill, plus your time
Best forStandard processes, fast start, no IT teamCustom development without running serversFull control, data residency, Community edition

Odoo Online: Odoo as software-as-a-service

Odoo Online is the simplest way to run Odoo. You sign up at odoo.com, choose your apps and you have a working database in a few minutes. There is nothing to install: Odoo runs the servers, applies security fixes, takes a backup every day and upgrades the database for you.

Odoo describes Online databases as private databases accessed through a web browser that can be used for long-term production or as a test environment. The database manager lets you download a backup as a ZIP file, duplicate a database for testing (a duplicate in test mode switches off emails and payments, you can keep up to five and they expire after 15 days), rename it, connect your own domain name, see administrator activity logs, transfer ownership and change plan.

The limits of Odoo Online

  • No custom code. In Odoo's own words, Odoo Online is "incompatible with custom modules or modules from the Odoo Apps Store". You can customise with configuration, Studio and automation rules, but not with Python modules.
  • Mandatory upgrades. A major version upgrade is mandatory every two years, and Online databases on an intermediate version must move to the next one a few weeks after it is released. You get a notice in the database a few weeks before; if you do nothing, the upgrade runs automatically.
  • No server access. No shell, no direct database access, no control over the timing of maintenance.

In return, Online databases get new features first: between major releases, Odoo Online runs intermediate "SaaS" versions that the other two hosting types do not receive.

Choose Odoo Online if your processes fit standard Odoo, possibly with Studio customisations, and you do not want to manage servers or upgrades.

Odoo.sh: the cloud platform for customised Odoo

Odoo.sh sits between the two other options. Odoo still runs and monitors the servers, but you work like a development team: your custom modules live in a GitHub repository connected to Odoo.sh, and every branch becomes an Odoo environment.

  • Development branches (unlimited) build a fresh database with demo data and run your tests on every push.
  • Staging branches run on a copy of your production data, so you can test a change or an upgrade on real data before releasing it.
  • Production is the live database; merging into the production branch deploys your code.
  • Included: continuous integration and testing, GitHub and Odoo Apps integration, shell and SSH access, an online editor, 24/7 monitoring, automatic DNS and email, live storage replication and backups on three servers in different locations.

How Odoo.sh is priced

Odoo.sh hosting is billed separately from the Odoo licence, and Odoo states that the hosting price does not include the Enterprise licence, which you need on the Custom plan. You size three things:

  • Workers - the server processes that answer users and run scheduled jobs, from 1 to 16 on shared hosting.
  • Storage - database and file storage, from 1 to 512 GB.
  • Staging environments - from 0 to 20.

Above 16 workers or 512 GB you move to a dedicated server. Prices depend on billing period and currency, so use the calculator on Odoo.sh's pricing page for current figures.

For upgrades, a major version on Odoo.sh is supported for three years, after which you have another two years to complete the upgrade. Your custom modules must be ported to the target version first - Odoo's upgrade service upgrades the standard data, not your code.

Choose Odoo.sh if you need custom modules or Apps Store modules but do not want to run servers, and you want proper development, staging and production environments.

On-premise: Odoo on your own server

On-premise means you install Odoo yourself - on a physical server in your office, a virtual machine, or any cloud provider such as AWS, DigitalOcean, Hetzner or Azure. "On-premise" in Odoo's vocabulary simply means "not hosted by Odoo".

  • Any edition. Odoo Community is free and open source (LGPL), with fewer apps and no Studio. Odoo Enterprise on your own server needs the Custom plan.
  • Full control. Any module, any integration, direct database access, your choice of region and data residency, your own maintenance windows.
  • No forced upgrades. Odoo says you can stay on the same version indefinitely, although it does not recommend it. With Enterprise, upgrades through Odoo's upgrade service are free; custom and third-party modules remain your responsibility.
  • Full responsibility. Server sizing, operating system updates, security, SSL, monitoring and backups are yours - or your partner's.

Choose on-premise if you want Odoo Community, need full control or a specific location for your data, already run your own infrastructure, or want to avoid per-environment hosting fees.

Licences and cost: what you actually pay for

Every option has two parts - the licence and the hosting:

LicenceHostingOther costs to plan for
Odoo OnlineOne App Free, Standard (all apps) or Custom (all apps plus Studio, multi-company and external API)IncludedImplementation and training
Odoo.shCustom planWorkers, storage and staging environmentsDevelopment, module maintenance, upgrades of custom code
On-premise EnterpriseCustom planYour server or cloud providerSystem administration, backups, monitoring, upgrades
On-premise CommunityNoneYour server or cloud providerAs above, and you build or buy what Community lacks

On Odoo's US price list in October 2026, Standard costs US$24.90 and Custom US$49.00 per user per month with yearly billing for the first 12 months. Only the Custom plan can be used on Odoo.sh or on-premise. Our article on Odoo Enterprise pricing per user in 2026 covers all plans, renewal prices and the new Light User in detail.

How to start on Odoo Online

  1. Go to odoo.com (affiliate link), choose your apps and start the free trial.
  2. Pick your country, language and the region of your database.
  3. Configure your company, import your data and invite your users.
  4. Before the trial ends, choose a plan. You can connect your own domain name from the database manager.

How to start on Odoo.sh

  1. Get an Odoo Enterprise subscription on the Custom plan.
  2. Sign in to odoo.sh with your GitHub account and create a project: name it, link or create the GitHub repository, and enter your subscription code.
  3. Choose the hosting location, the Odoo version, and size the workers and storage.
  4. Push your custom modules to a development branch, test them on a staging branch with a copy of production, then merge into production.

How to install Odoo 20 on your own server

These steps install Odoo 20 Community on Ubuntu 24.04 LTS. Odoo 20 needs Python 3.12 to 3.14 and PostgreSQL 16 or newer; Ubuntu 24.04 ships Python 3.12 and PostgreSQL 16, so it works out of the box. Debian 12 ships Python 3.11 and PostgreSQL 15, both too old for Odoo 20.

RequirementOdoo 20Odoo 19
Python3.12 to 3.143.10 to 3.14
PostgreSQL16 or newer13 or newer
Reference platformUbuntu 24.04 LTS packages
PDF reportswkhtmltopdf 0.12.6 with patched Qt

For a small company, a server with 2 to 4 CPU cores, 4 to 8 GB of RAM and SSD storage is a sensible start; size up with the number of users, the website traffic and how much you automate.

Option 1: Odoo's packages (quickest)

Odoo publishes nightly Debian packages. This installs Odoo as a service with its configuration file in /etc/odoo/odoo.conf:

# PostgreSQL first
sudo apt update && sudo apt install -y postgresql

# Odoo's signing key and repository for 20.0
wget -qO - 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

# Install and start
sudo apt update && sudo apt install -y odoo
sudo systemctl status odoo

Odoo now answers on port 8069. Open http://your-server:8069 to create the first database, then put Odoo behind a reverse proxy with HTTPS (see below).

Option 2: from source (more control)

Installing from Git is what most partners use in production: you pin the exact code, add your own module folders and update with a simple git pull.

# System packages
sudo apt install -y git python3-venv python3-dev build-essential postgresql \
    libpq-dev libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev libjpeg-dev zlib1g-dev

# A system user for Odoo and a matching PostgreSQL role
sudo adduser --system --group --home /opt/odoo odoo
sudo -u postgres createuser -d odoo

# Odoo 20 source and a Python virtual environment
sudo -u odoo git clone --depth 1 --branch 20.0 https://github.com/odoo/odoo.git /opt/odoo/odoo
sudo -u odoo python3 -m venv /opt/odoo/venv
sudo -u odoo /opt/odoo/venv/bin/pip install -r /opt/odoo/odoo/requirements.txt

Then a configuration file, /etc/odoo.conf:

[options]
; master password for the database manager - make it long
admin_passwd = change-me-to-a-long-random-string
db_user = odoo
addons_path = /opt/odoo/odoo/addons,/opt/odoo/custom-addons
; behind nginx: listen locally only, trust the proxy headers
http_interface = 127.0.0.1
proxy_mode = True
; multi-process mode for production
workers = 4
max_cron_threads = 1
list_db = False
logfile = /var/log/odoo/odoo.log

And a systemd service, /etc/systemd/system/odoo.service:

[Unit]
Description=Odoo 20
After=network.target postgresql.service

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

[Install]
WantedBy=multi-user.target
sudo install -d -o odoo -g odoo /var/log/odoo /opt/odoo/custom-addons
sudo systemctl daemon-reload && sudo systemctl enable --now odoo

For PDF reports, install the patched-Qt build of wkhtmltopdf 0.12.6 from the wkhtmltopdf project's packaging releases; the version in Ubuntu's own repository is built without the patched Qt and leaves out report headers and footers. For Odoo Enterprise on your own server, add the Enterprise add-ons from your subscription to addons_path (before the Community add-ons) and register the database with your subscription code.

Reverse proxy, HTTPS and the live-chat websocket

Put nginx in front of Odoo and get a free certificate from Let's Encrypt. In multi-process mode Odoo serves its real-time features (live chat, notifications, the "loading" indicator for signed-in users) on a separate port, 8072, at the path /websocket. A common mistake is to forget it - signed-in users then see Odoo trying to reconnect forever.

upstream odoo     { server 127.0.0.1:8069; }
upstream odoochat { server 127.0.0.1:8072; }

server {
    server_name erp.example.com;
    client_max_body_size 100m;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host $host;

    location /websocket {
        proxy_pass http://odoochat;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    location / { proxy_pass http://odoo; }
}
sudo apt install -y nginx certbot python3-certbot-nginx
sudo certbot --nginx -d erp.example.com --redirect

Production checklist

  • Workers: Odoo's rule of thumb for the maximum is (CPU cores x 2) + 1; each worker also needs memory, so check RAM before raising it.
  • Close port 8069 to the internet. With http_interface = 127.0.0.1 and a firewall allowing only SSH, HTTP and HTTPS (for example ufw allow OpenSSH, ufw allow 'Nginx Full', ufw enable), every visitor goes through nginx and HTTPS.
  • Protect the database manager: a long admin_passwd and list_db = False once your database exists.
  • Back up both parts: the PostgreSQL database (pg_dump -Fc) and the filestore (attachments) - and copy them off the server. Test a restore now and then.
  • Stay patched: apply Odoo's updates (apt upgrade or git pull followed by a restart) and your operating system's security updates.
  • Monitor: disk space, memory, the Odoo log and the expiry of your SSL certificate.

Moving between Odoo Online, Odoo.sh and on-premise

Your first choice is not final. Odoo documents every direction:

FromToHow
On-premiseOdoo OnlineOnly standard apps: duplicate the database, uninstall non-standard apps on the copy, download a dump with filestore and send it to Odoo support. The version must still be supported.
On-premiseOdoo.shImport the database into your Odoo.sh project.
Odoo OnlineOn-premise or Odoo.shDownload a backup from the database manager and restore it. Intermediate (SaaS) versions are not supported outside Odoo Online, so upgrade to the next major version first.
Odoo.shOdoo OnlineUninstall non-standard apps in a staging build, then ask Odoo support to migrate the branch. The database is not reachable during the migration.
Odoo.shOn-premiseDownload a backup of production and restore it on your server.

If your database also needs a version upgrade, read our notes on upgrading to Odoo 20 and the Odoo 20 release notes.

How to choose

If this describes youStart with
Standard processes, small or no IT team, you want to go live quicklyOdoo Online
You need custom modules or Apps Store modules, but not servers to look afterOdoo.sh
You want Odoo Community, full control, a specific data location, or you already run serversOn-premise
You start simple but expect custom development laterOdoo Online now, then Odoo.sh or on-premise when the first custom module is needed

Two questions settle most cases. First: will you need custom Python code? If yes, rule out Odoo Online. Second: who will look after the server at 2 a.m.? If nobody, rule out on-premise - or have a partner do it for you.

Frequently asked questions

What is the difference between Odoo Online and Odoo.sh?

Both are hosted by Odoo. Odoo Online is software-as-a-service for standard Odoo: no custom code or Apps Store modules, and upgrades are scheduled by Odoo. Odoo.sh is a platform for customised Odoo: you deploy your own modules from GitHub and get development, staging and production environments, and you pay for hosting on top of the Custom plan.

Can I install custom modules on Odoo Online?

No. Odoo Online is incompatible with custom modules and with modules from the Odoo Apps Store. You can customise it with settings, Studio and automation rules. For custom Python code you need Odoo.sh or on-premise.

Is Odoo free to self-host?

Odoo Community is free and open source, and you can install it on your own server at no licence cost; you pay only for the server and its upkeep. Odoo Enterprise on your own server needs a subscription on the Custom plan.

Which plan do I need for Odoo.sh or on-premise Enterprise?

The Custom plan. The Standard plan includes all apps but only on Odoo Online; the Custom plan adds Studio, multi-company and external API access and can be hosted on Odoo Online, Odoo.sh or on-premise.

Can I move from Odoo Online to my own server later?

Yes. Download a backup from the Odoo Online database manager and restore it on-premise or on Odoo.sh. Intermediate versions that exist only on Odoo Online must first be upgraded to the next major version.

Are Odoo upgrades mandatory?

On Odoo Online, yes: a major upgrade every two years and intermediate versions a few weeks after the next is released, done automatically if you do not act. On Odoo.sh a version is supported for three years, followed by two years to complete the upgrade. On-premise you can stay on a version indefinitely, although Odoo does not recommend it.

What server do I need for Odoo 20?

A Linux server with Python 3.12 to 3.14 and PostgreSQL 16 or newer. Ubuntu 24.04 LTS provides both out of the box. For a small company, 2 to 4 CPU cores and 4 to 8 GB of RAM is a sensible start.

How many Odoo workers should I configure?

Odoo's rule of thumb for the maximum is (CPU cores x 2) + 1, limited by the memory available. A 2-core server can run up to 5 workers if it has the RAM; start lower and watch memory and response times.

See Odoo for yourself

Start a free Odoo trial and click through Sales, Inventory, Accounting and the website builder with your own data. When you want it set up around how your business works, that is where we come in.

Start a free Odoo trial

Not sure which hosting fits your business?

We set up and run Odoo on all three - Odoo Online, Odoo.sh and our clients' own servers - and move databases between them. We will look at your processes and customisation needs and recommend the option that costs you least over the next few years.

Get a hosting recommendation

Sources: Odoo documentation (Hosting, Odoo Online, Upgrade), Odoo.sh pricing page, Odoo pricing page, the Odoo 20 source code and Odoo's package repository, all read in October 2026. Prices and limits change - check Odoo's pages for current figures.

Odoo as a CMS: Websites, eCommerce and Multi-Website on One Platform
How Odoo 20 builds and runs websites and online stores, manages several sites from one database, and imports your existing WordPress, Shopify or WooCommerce site.