October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsWindows FixRecommendedWindows errors stealing your time? Find the fix fastScan stability, cleanup and performance issues.Fix NowOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
VGSources
Blog

Which VPS Plan Do You Need to Self-Host Odoo (OpenERP)? A 2026 Sizing Guide

A practical 2026 guide to sizing the VPS for self-hosted Odoo: calculate workers from peak concurrency, budget RAM for Odoo and PostgreSQL, decide when to separate the database, and configure Docker, HTTPS, storage and backups correctly.
Length9 min Posted Quest giverVGSources Team

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

For a small Odoo deployment, one VPS can run Odoo and PostgreSQL together. Choose the size from peak concurrent users and workload—not total employee accounts—then leave RAM and CPU headroom for the database, operating system, reverse proxy, scheduled jobs, and monitoring. Odoo’s 2026 documentation gives a useful ceiling: (CPU count × 2) + 1 theoretical workers, roughly six concurrent users per worker in its example, about 1 GB RAM for a heavy worker and 150 MB for a lighter worker. These are planning estimates, not a guaranteed minimum or a provider performance promise.

The short answer: start with workload, not a package name

There is no universal “Odoo VPS plan.” A database-heavy accounting installation, a sales database with large PDF reports, and a lightly used internal instance can have very different requirements even when they have the same number of named users.

As an Amazon Associate I earn from qualifying purchases.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

For a small production installation, keeping Odoo and PostgreSQL on one Linux VPS is usually the simplest architecture. A practical starting point is a modern multi-core VPS with enough memory for both services and fast SSD or NVMe storage. Treat a 2-vCPU/4-GB machine as an illustrative pilot or very light production starting point, not as an Odoo-certified minimum. For the worked example in Odoo’s 2026 documentation—4 CPUs, 8 threads and 60 concurrent users—Odoo configures eight HTTP workers plus one cron worker and estimates approximately 3 GB of RAM for Odoo itself. An 8-GB VPS gives that example room for PostgreSQL and the operating system; actual usage must be measured under your workload.

Move to a larger VPS when CPU saturation, swapping, database contention, slow reports, or attachment growth appears. Move PostgreSQL to a separate host only when isolation, scaling, policy, or contention makes the added network and operational complexity worthwhile.

What Odoo’s worker guidance actually tells you

Production Odoo should run its multi-process server. The default threaded mode is intended for simple development or demonstrations, not a production service handling several requests at once.

The worker-count rule

Odoo documents the rule of thumb (#CPU * 2) + 1. “CPU” means the CPU count available to the Odoo process, not the number of users. The result is a theoretical ceiling and a sanity check; it is not a promise that every worker will deliver the same throughput on every VPS.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Odoo’s example guidance also says “1 worker ~= 6 concurrent users.” Concurrent means users actively making requests at the same time, not the number of accounts in the database. Ten people who log in occasionally may create less load than three people running imports and complex reports simultaneously.

Memory estimates per worker

The 2026 documentation estimates a heavy worker at about 1 GB of RAM and a lighter worker at about 150 MB. Its planning assumption is 20% heavy requests and 80% light requests. A simple weighted estimate is therefore:

(0.20 × 1 GB) + (0.80 × 0.15 GB) ≈ 0.32 GB per worker

This is an estimate for Odoo workers, not the total VPS requirement. PostgreSQL shared buffers and connections, the Linux kernel, the reverse proxy, cron jobs, file-cache needs, monitoring, and temporary report data all require additional memory. Leave enough unused RAM to avoid swap; swapping can turn a tolerable report into a system-wide slowdown.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

How the 60-user example maps to a VPS

Odoo’s worked example uses eight HTTP workers and one cron worker on a 4-CPU/8-thread system for 60 users, with about 3 GB estimated for Odoo itself. The example is valuable because it shows the relationship between worker count, concurrency, and memory, but it is not a capacity guarantee. Your modules, custom code, SQL quality, report complexity, imports, and attachment traffic can change the result substantially.

A repeatable sizing method

  1. Count peak concurrent users. Record the busiest five- or 15-minute period, not merely the number of licensed or registered users.
  2. List enabled modules and customizations. Manufacturing, inventory valuation, accounting, subscriptions, website features, and custom add-ons can have very different query and memory profiles.
  3. Inventory scheduled work. Include mail queues, automated actions, imports, synchronization jobs, invoice generation, and backups. A quiet daytime system can still need CPU and I/O headroom at night.
  4. Characterize reports and requests. Large spreadsheet exports, PDF batches, dashboards, and searches over large tables are “heavy” compared with a short form save.
  5. Estimate workers with Odoo’s rule. Use (CPU × 2) + 1 as a ceiling and sanity check. Allocate a cron worker separately where appropriate, then test whether the resulting worker count serves your peak concurrency.
  6. Estimate Odoo memory. Apply the documented heavy/light figures, then reserve additional memory for PostgreSQL, the operating system, proxy, cron, and monitoring. Do not allocate the entire VPS to Odoo workers.
  7. Allow for growth. Database tables, filestore attachments, logs, indexes, and backups grow over time. Select storage with both capacity and I/O headroom.
  8. Benchmark before committing. Replay representative workflows or observe a pilot during a busy period. Measure CPU saturation, resident memory, swap activity, database latency, disk latency, worker queues, and request time.

This method produces a defensible starting size while acknowledging that Odoo’s figures are documentation estimates rather than a provider-backed minimum.

Illustrative VPS starting profiles

The following profiles are planning envelopes, not guaranteed capacities. Verify them with your own workload and the provider’s CPU policy.

Situation Illustrative starting envelope What to watch
Development, training, or a very small pilot 2 vCPUs and 4 GB RAM; SSD/NVMe storage sized for the database and filestore Use multi-process mode when testing production behavior. Heavy reports or simultaneous users may outgrow this quickly.
Small production instance with Odoo and PostgreSQL together 4 vCPUs and 8 GB RAM is a reasonable benchmark target for a light-to-moderate workload; the 2026 Odoo example uses 4 CPUs and estimates about 3 GB for Odoo at 60 users Reserve memory for PostgreSQL and the OS. Confirm whether the provider shares or guarantees CPU.
Busy production workload, large reports, or substantial scheduled jobs Increase CPU and RAM beyond the example rather than simply adding workers; consider faster NVMe I/O and a separate database host Database waits, report run time, lock contention, and cron overlap often become the limiting factors.
Growth, isolation, or strict operational policy Separate Odoo and PostgreSQL hosts, or use a managed PostgreSQL service, with a secured network connection Account for network latency, firewall rules, failover, backups, and the extra cost of operating two systems.

“4 vCPUs/8 GB” in this table is a starting point for measurement, not a statement that 60 users will always fit. A provider’s shared CPU may perform very differently from a guaranteed or dedicated CPU allocation at the same advertised size.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Can Odoo and PostgreSQL run on the same VPS?

Yes. A single VPS can host both services, and this is often the best first architecture for a small installation. When no database host is specified, Odoo’s default local connection uses a Unix socket, avoiding network overhead between the application and database.

When one VPS is appropriate

  • The user population and workload are modest and predictable.
  • You want the simplest deployment, firewall, backup, and upgrade process.
  • The VPS has sufficient RAM for PostgreSQL as well as Odoo workers.
  • A single-host outage is acceptable or covered by tested backups and recovery procedures.

When to separate PostgreSQL

  • Database CPU or I/O regularly competes with Odoo workers.
  • You need independent scaling, maintenance windows, or failure domains.
  • Operational policy requires database isolation.
  • Backups, replicas, or managed database operations justify the additional service.

Odoo documents network connections and SSH tunneling as options for a remote database. Whichever method you choose, restrict PostgreSQL to the application’s private network or permitted addresses, use encryption where required, and avoid exposing the database port to the public internet. Use a dedicated non-superuser PostgreSQL account for Odoo rather than a database administrator account.

Docker: useful packaging, not a smaller server

Docker can make a deployment repeatable, but it does not remove resource requirements. Odoo’s Docker documentation shows Odoo and PostgreSQL as separate containers and states that the image requires a running PostgreSQL server. PostgreSQL data must be mounted on persistent storage; a container recreated without its data volume is not a backup strategy.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What Docker helps with

  • Pinning application and database images to known versions.
  • Keeping service configuration and environment variables reproducible.
  • Separating process namespaces and simplifying upgrades or rollbacks.
  • Running Odoo and PostgreSQL as distinct services on one VPS or on separate hosts.

What Docker does not solve

  • CPU, RAM, database I/O, attachment storage, or worker sizing.
  • HTTPS termination, certificate renewal, firewalling, and secret management.
  • Persistent-volume backups, restore testing, and retention policy.
  • Capacity planning for cron jobs, reports, imports, and live-chat websockets.

Choose Docker if your team is comfortable managing images, volumes, networks, logs, and upgrades. A conventional package installation can be simpler for a single administrator. In either case, monitor the same host-level metrics and test recovery.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Production network and security requirements

Terminate HTTPS at a web server

Production Odoo should sit behind a web server or reverse proxy that terminates HTTPS with a valid certificate. Odoo explicitly recommends this arrangement to prevent eavesdropping on cleartext communications. Configure the proxy headers and enable Odoo’s proxy mode so that generated URLs, redirects, and client IP handling work correctly.

Route live-chat websockets

If live chat is enabled, route websocket requests to the live-chat worker as well as forwarding ordinary HTTP traffic. Missing websocket routing can make chat appear intermittently offline even when the main application loads normally.

Reduce the attack surface

  • Expose only the HTTPS endpoint and the administration access you actually need.
  • Keep PostgreSQL private; do not publish its port for convenience.
  • Use a non-superuser database account for Odoo.
  • Apply current Odoo builds and operating-system security updates.
  • Store secrets outside publicly served files and restrict file permissions.
  • Use firewall rules, SSH keys, and a documented administrative access path.

Storage, backups, and regional choices

Odoo’s database is only part of its footprint. The filestore contains uploaded documents and other attachments, while logs, indexes, temporary reports, and backups consume additional space. Select SSD or NVMe storage with known I/O performance, not just a large capacity number. Track database size and filestore size separately so an attachment surge does not surprise you.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Backups should cover both PostgreSQL data and the Odoo filestore, be encrypted where appropriate, and be restored periodically to a separate environment. Snapshots are useful for fast recovery but should not be your only copy; a snapshot taken during a failure or without application-consistent database handling may not provide a clean restore.

Choose a region close to your users and any external services Odoo calls. Check IPv4 and IPv6 availability, bandwidth limits, backup and snapshot options, and the provider’s CPU policy. Shared CPU can be adequate for a light workload, while sustained reporting or imports may need guaranteed performance.

Signs that your VPS is undersized

  • CPU: workers remain saturated, requests queue, or cron jobs overlap during normal peaks.
  • Memory: the host swaps, the Odoo process is repeatedly killed, or PostgreSQL cache effectiveness falls as the system runs out of RAM.
  • Storage I/O: database latency and report time rise even when CPU is not fully used.
  • Database contention: locks, long-running queries, or autovacuum work interfere with interactive requests.
  • Network: remote PostgreSQL adds noticeable latency or suffers intermittent connection failures.

First identify the bottleneck. Adding RAM will not fix a slow disk, and adding workers can worsen contention when PostgreSQL or the CPU is already saturated. Resize vertically, optimize expensive queries and reports, move PostgreSQL, or distribute services only after measuring the limiting resource.

A practical deployment checklist

  1. Choose a supported current Odoo build and a maintained Linux distribution.
  2. Create a VPS with SSD/NVMe storage, documented backup options, and a region suitable for your users.
  3. Install Odoo in multi-process production mode and configure workers from measured concurrency.
  4. Install PostgreSQL locally or provision a private remote database; create a dedicated non-superuser account.
  5. Place a reverse proxy in front of Odoo, install a valid HTTPS certificate, enable proxy mode, and configure websocket routing if live chat is enabled.
  6. Persist the PostgreSQL data directory and Odoo filestore, then schedule encrypted backups.
  7. Apply firewall and SSH controls, update the operating system and Odoo, and keep secrets out of source-controlled files.
  8. Load-test representative workflows and record CPU, RAM, swap, disk latency, database waits, worker queues, and request times.
  9. Set alerts for storage capacity, failed backups, swap use, certificate expiry, and sustained resource saturation.
  10. Document a resize, restore, and rollback procedure before inviting production users.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More quests from Patch Notes

  1. How to Set Up a RedM (RDR2) Server in 2026: License Key, txAdmin and server.cfg, Step by StepBlog11min
  2. Best RedM (RDR2) Server Hosting in 2026: Comparing Four Hosts on Slots, Memory and PriceBlog10min
  3. How to Host a Mindustry Server in 2026: server-release.jar, Port 6567 and the Commands That MatterBlog7min
Recommended PC Tool
Recommended PC Tool
Crashes, No Sound, or Screen Glitches?Free driver scan
PC Slower Than It Used to Be?Free scan - under a minute

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.