Deploy
Odoo self hosted. The open source ERP on a dedicated server we run.
Odoo is an open source ERP and business suite covering CRM, accounting, inventory, manufacturing and more. This template deploys Odoo 18 Community with its own PostgreSQL 16 onto a dedicated server that Selfhost.dev provisions, secures and runs for you. It wants 8 GB, which is $0.03 an hour in our EU locations, about $23 a month if you leave it running. Users are free.
One click. Two containers, a dedicated Postgres, TLS and a domain.
no signup
+$5.00 added at signup · deployment choice preserved · no card
What is Odoo self hosted?
The ERP you own.
On hardware you control.
What it is. Odoo self hosted means running Odoo Community on your own server rather than on Odoo's SaaS. You get the full application, your database, and the file store, all on infrastructure you control. The software is free and open source. What you pay for here is a server that arrives already configured to run it properly.
Who it is for. Teams who want their operational data on a server they control, who need custom modules that Odoo Online does not allow, or whose per-user Odoo bill has started scaling faster than the value of the seats.
When to use it. From the first paid user, once you compare a flat server rate against a per-user subscription. And immediately, if you need custom addons, since Odoo Online does not permit them at all.
Odoo self hosted requirements
What Odoo needs, and what we already provide.
Odoo self hosted means two containers, the application and a PostgreSQL database, behind a reverse proxy with TLS. The template ships all of it on one server, so the only requirement you choose is the server size.
| What Odoo needs | This deployment |
|---|---|
| Odoo version | 18 Community |
| Database | PostgreSQL 16, included and dedicated |
| Containers | Odoo, PostgreSQL |
| Recommended server | 8 GB RAM |
| Architecture | x86 or ARM, both supported |
| Filestore | Persistent volume, attachments and generated PDFs |
| Custom modules | Supported, via a mounted addons volume |
| SMTP is not configured. Set it inside Odoo | |
| Enterprise modules | Not included. This is Community edition |
| What Selfhost.dev provides | Detail |
|---|---|
| Locations | Falkenstein, Nuremberg, Helsinki, Ashburn, Hillsboro, Singapore |
| HTTPS | Automatic, on a generated hostname or your own domain |
| Backups | Optional daily whole-server backups, +20% of the server price |
| Bandwidth | Included, no egress charges |
| Monitoring | Health checked every 60 seconds, metrics and logs in the console |
| MCP tools | 189 across 31 modules |
Specifications current as of September 2026.
What's in the Odoo deployment
Two containers. One click.
Two containers on one project server, deployed together, with a dedicated database rather than a shared one.
| Component | Version | What it does |
|---|---|---|
| Odoo | odoo:18.0-20260817 | The ERP application: CRM, accounting, inventory, manufacturing, website and the rest of the suite |
| PostgreSQL | postgres:16-alpine | Odoo's own database. Odoo connects as superuser and creates its databases itself |
| TLS and routing | Managed by Selfhost.dev | Public HTTPS URL, certificate provisioned and renewed automatically |
Your own Postgres, not a shared one
Odoo gets a dedicated PostgreSQL 16 container on your project server. Not a database on a cluster shared with other customers. It is included in the server price with no separate fee.
Three volumes that outlive the containers
odoo-web-data holds the filestore, which is every attachment and every generated PDF. odoo-extra-addons is where your custom modules live. postgresql-data holds the database. All three survive a redeploy.
Custom modules are supported
The odoo-extra-addons volume is mounted and on the addons path from the first boot. Odoo Online does not allow custom modules at all, and most low-cost Odoo hosting is a locked panel that does not either.
What we configure before Odoo starts
The four settings that break a DIY install.
Odoo behind a reverse proxy needs specific configuration or it fails in ways that are hard to diagnose. Selfhost.dev writes all of it into /etc/odoo/odoo.conf before the first boot.
| Setting | Why it matters |
|---|---|
admin_passwd | Your master password, set before first boot. Odoo has no command-line flag for this, so it can only be done by writing the config file |
proxy_mode = True | Without it, Odoo builds every absolute URL wrong behind a proxy: broken links, broken redirects, broken password resets |
list_db = True | Keeps the database manager available, which is Odoo's own backup, restore and duplicate interface |
data_dir, addons_path | Points the filestore and custom addons at the persistent volumes rather than the container |
| Database credentials | Host, user and password wired to your dedicated Postgres container |
On every deployment we run
A default-deny firewall with only ports 22, 80 and 443 open. A Let's Encrypt certificate per hostname, renewed automatically. Per-service DNS names, so no two stacks on the platform can resolve each other's database. One virtual machine per project, one customer per machine.
No default password, ever
Odoo's master password is generated and injected before the container starts. If that seeding ever fails, the instance boots locked on a random secret rather than open. Locked beats open, deliberately.
How to self host Odoo in 5 steps
From zero to live.
No server to set up.
No Docker Compose, no Postgres to install, no certificate to renew.
1. Create a project
Name it and pick a server. Odoo runs two containers including its own Postgres, so 8 GB is what we recommend. We provision it. There is no cloud account to connect.
2. Add the Odoo template · about 8 minutes
Add service → Template → Odoo. Both containers deploy together. You can watch the six provisioning stages and the live log. We do not report it as deployed until the URL actually answers.
3. Create your first database · do it now
Odoo ships with no database. Open the URL, enter the master password from your console, and create one. The first person to do this owns the instance, so do it immediately, before you share the address.
4. Configure SMTP · before you invite anyone
Email is not set up. Add your mail provider in Odoo's settings, or invitations and password resets will not send.
5. Point your domain
Keep the generated hostname or add your own. Set DNS, verify a TXT record, and HTTPS provisions and renews automatically.
An 8 GB server runs Odoo for about $23 a month in our EU locations, whatever your headcount.
Deploy OdooWhat we run, and what you run
The honest split.
We manage the infrastructure. You own what happens inside Odoo. This is managed hosting, not managed ERP administration.
| We run | You run |
|---|---|
| Server provisioning and capacity | Your databases, records and workflows |
| The PostgreSQL 16 container | Your Odoo users and access rights |
| Reverse proxy, TLS and renewals | Your custom modules and addons |
| Firewall and network rules | Your SMTP configuration |
| Optional daily whole-server backups | When to move to a bigger server |
| Metrics and logs | Odoo version upgrades |
What size server does Odoo need?
Odoo is a heavy app. Here is what that means.
The platform classes Odoo as a heavy workload, which means it wants more free memory and disk available before it will deploy. We recommend 8 GB. That is a recommendation rather than a hard floor, so you can choose 4 GB, but Odoo runs its application and its own Postgres on the same box and 4 GB is tight for both.
| Server | What fits alongside Odoo |
|---|---|
| 4 GB | Odoo and one light app, and it will be tight |
| 8 GB (recommended) | Odoo plus two more heavy apps, or Odoo with room to grow |
| 16 GB and above | Up to five workloads, which is the per-project cap |
An 8 GB server has 6,656 MB available after the host reserves memory for the operating system, Docker and the proxy. A heavy workload reserves 2,048 MB of that, a light one 512 MB. A project holds at most five workloads whatever its size.
Odoo self hosted cost
One server rate. No seats to count.
You pay for the server and nothing else. The Odoo template, its PostgreSQL container, HTTPS and your custom domain add nothing to the bill, and adding users never changes it.
| Server | Cores | RAM | Disk | Where | Rate | Monthly at 730 hrs |
|---|---|---|---|---|---|---|
cx33 (recommended) | 4 | 8 GB | 80 GB | EU | $0.03/hr | $23.36 |
cax21 (ARM) | 4 | 8 GB | 80 GB | EU | $0.04/hr | $29.20 |
cpx31 | 4 | 8 GB | 160 GB | EU | $0.07/hr | $47.89 |
cpx31 | 4 | 8 GB | 160 GB | Singapore | $0.12/hr | $90.08 |
ccx13 | 2 dedicated | 8 GB | 80 GB | US | $0.16/hr | $119.28 |
Monthly figures assume 730 hours. Europe is Falkenstein, Nuremberg and Helsinki. The console picks the cheapest server in stock that clears Odoo's memory floor in your nearest location; bigger sizes and every other location are priced live in the calculator.
| What else you pay for | Cost |
|---|---|
| Odoo template and PostgreSQL 16 | $0 |
| HTTPS and custom domain | $0 |
| Users | $0, no per-user fee |
| Bandwidth | $0, traffic included |
| Daily whole-server backups | Optional, +20% of the server price |
If your balance runs out
Your server is powered off, not deleted, and you get 24 hours and an email. Topping up inside that window restarts the project. After 24 hours at zero the resources are destroyed, and because backups live with the server they go too. Keep a card on file, and keep a recent export of your own, the same as you would anywhere.
Every size in every location is priced in the pricing calculator, with no signup.
What every Odoo deployment gets
Five commitments, all of them built into the platform.
Health checked every 60 seconds
Every service on your project server, continuously, with metrics and logs in your console.
A stalled deploy is retried, not abandoned
If a deployment hangs, the platform re-queues it automatically with a fresh window rather than leaving it stuck.
Deployed means the URL answers
We do not call a deployment live because a container reports itself healthy. We fetch your public address, re-wire the proxy if it needs it, wait out the certificate, and only then mark it done.
Retrying never bills you twice
A retried create adopts the resource that already exists instead of building a second one alongside it.
Your version never moves on its own
Every image is pinned to an exact tag, so a restart, a redeploy or a platform update always brings back the same Odoo 18. A new template build applies to new deployments; yours stays where you put it.
Odoo's template deploys in about eight minutes. That is the platform's own budget, not an estimate.
Working out what a self hosted ERP costs?
Tell us your team size and which Odoo apps you need, and we will send back the server size, the monthly cost, and what it replaces on your current bill. One email, no newsletter.
Odoo self hosted vs Odoo Online and Odoo.sh
Where the two models cross over.
Odoo sells two hosted options. Odoo Online is the SaaS, priced per user per month. Odoo.sh is their managed platform, which carries hosting fees on top of the subscription. Both run Odoo Enterprise. Self hosting runs Community, on one flat server rate.
| Odoo Online, Standard | Odoo self hosted here (8 GB, EU) | |
|---|---|---|
| Pricing model | Per user, per month | Per server hour |
| Edition | Enterprise | Community |
| Free tier | One app, unlimited users, on Odoo Online only | None. You pay for the server from the first hour |
| List price | $31.10/user/mo, billed yearly | $0.03/hr, about $23/mo in the EU |
| 1 user | $31.10/mo | $23.36/mo |
| 5 users | $155.50/mo | $23.36/mo |
| 20 users | $622/mo | $23.36/mo |
| Adding a user | Increases the bill | No change |
| Custom modules | Not permitted | Supported |
| Enterprise-only apps | Included | Not available |
| Where data lives | Odoo's infrastructure | Your dedicated server |
Odoo Online list prices as published on yearly billing, checked 8 September 2026. First-year pricing is discounted to $24.90 per user on initial users; the figures above are the renewal rate. Source: Odoo pricing.
Odoo.sh alternative
Odoo.sh is a development platform: staging branches, GitHub integration, and Odoo's own build pipeline, with hosting billed on top of a Custom-tier subscription. If what you actually need is a place to run Odoo rather than a place to build it, a project server is the simpler alternative. You get root SSH, a dedicated Postgres and a mounted addons volume at a flat hourly rate, without the subscription underneath it.
Odoo self hosted on a VPS, versus here
Same hardware. Different amount of your evening.
We run on Hetzner and we say so, which lets us be specific about the difference. It is the same machine in the same datacentre. What you are paying for is that it is already wired up.
| Doing it yourself | Here |
|---|---|
| Provision a VPS, harden it, configure a firewall | Done at provisioning |
| Install Docker, write a compose file, pin versions | Two pinned containers, deployed |
| Install and secure PostgreSQL | Dedicated Postgres 16, credentials wired |
Set proxy_mode, or debug broken URLs for an hour | Written before first boot |
| Install a reverse proxy, get a certificate, automate renewal | Traefik and Let's Encrypt, automatic |
| Write the master password into a config file Odoo will not accept from the CLI | Injected before the container starts |
When Odoo Online is the better choice
One case where you should buy from Odoo instead.
If you need Enterprise apps, buy from Odoo. This template runs Odoo Community, and Enterprise-only modules are licence-gated: no hosting arrangement, ours or anyone's, unlocks them. Studio, some accounting localisations and a handful of apps only exist on a paid Odoo subscription. Check whether a module you depend on is Enterprise-only before you move, because that is the one thing a server cannot fix. Everything else that pushes people towards Odoo Online, the setup, the database, the certificate, the proxy configuration, is what this page is about.
Odoo self hosted limitations
Six things worth knowing before you deploy.
Real constraints, easier to plan around than to discover.
- Community edition. Enterprise-only Odoo modules are licence-gated and not included.
- Claim the instance immediately. Odoo ships with no database and no pre-set login. The first person to open the URL with the master password becomes the owner, so create your database before you share the address.
- SMTP is not configured. Add a mail provider inside Odoo before you invite anyone, or invitations and password resets will not send. This is true of self hosted Odoo anywhere, not just here.
- Your version is pinned, which cuts both ways. A restart or a redeploy never moves you to a new Odoo, which is the point. It also means upgrades and in-container security updates are yours to run, on your schedule.
- Pick your size at the start. A server cannot be resized in place, so moving to a bigger box means a new project and a data migration. Odoo and its Postgres share one machine, and 8 GB is what we recommend.
- Five workloads per project, counting apps and databases together, and only one heavy template fits on a 4 GB server.
Backups, exports and getting your data out
What is protected, and what is not.
Backups
Optional, daily, and they cover the whole server, which means every container, the database and every volume in one image. The last seven are kept. They cost 20% of the server price.
They do not survive deletion
Backup images live with the server. If the server is destroyed, they are destroyed with it. Backups protect you from mistakes, not from an unpaid bill.
Your own export, three ways
Odoo's database manager stays enabled, so you can back up, restore and duplicate databases from Odoo's own interface. You can add an SSH key and take a pg_dump directly. Or you can tar the volumes wholesale.
No lock-in
The database manager produces a portable Odoo backup any time you want one, and root SSH gives you everything byte for byte. Nothing here is designed to make leaving hard.
Moving an existing Odoo here
Odoo's own backup and restore, still switched on.
Your existing Odoo moves in through Odoo's own database manager. Take a backup from your current instance, restore it here through the same interface, and the database and the filestore come across together. No export tickets, no support queue, no waiting on us. That works because we leave the database manager enabled. Odoo Online does not expose it, and most low-cost Odoo hosting is a locked panel that does not either. It is also why you can duplicate a database to make a staging copy whenever you want one.
One thing to check first
If you are coming from Odoo Online or Odoo.sh you are coming from Enterprise, and Enterprise-only modules will not load on Community. Confirm which of your installed apps are Enterprise before you move the database.
Related guides.
Frequently asked questions
Is Odoo Community enough, or do I need Enterprise?
Can I install custom Odoo modules?
Can I run more than one Odoo database on the same server?
Who updates Odoo?
Do email invitations work out of the box?
Is this Odoo.sh?
Can I use Odoo just for the CRM?
What happens to my Odoo data if my credit balance reaches zero?
Can I start on 4 GB and move up later?
About Selfhost.dev
Selfhost.dev is a managed self hosting platform for developers and small teams. Open source apps and databases on dedicated servers you control, billed by the hour with no subscription tiers.
Best for: Odoo, Twenty CRM, n8n, Supabase and managed PostgreSQL, MySQL, Redis and ClickHouse.