Free tools Windows power users keep installed
One-click scans. No signup required.
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.
Need a server to try this on? Antihost offers Linux VPS plans with NVMe storage, full root access and a 14-day free trial.
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.
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.
#1 Best Overall
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.
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallOdoo’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:
Rank #2
(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.
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
- Count peak concurrent users. Record the busiest five- or 15-minute period, not merely the number of licensed or registered users.
- List enabled modules and customizations. Manufacturing, inventory valuation, accounting, subscriptions, website features, and custom add-ons can have very different query and memory profiles.
- 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.
- Characterize reports and requests. Large spreadsheet exports, PDF batches, dashboards, and searches over large tables are “heavy” compared with a short form save.
- Estimate workers with Odoo’s rule. Use
(CPU × 2) + 1as a ceiling and sanity check. Allocate a cron worker separately where appropriate, then test whether the resulting worker count serves your peak concurrency. - 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.
- Allow for growth. Database tables, filestore attachments, logs, indexes, and backups grow over time. Select storage with both capacity and I/O headroom.
- 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.
Rank #3
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.
Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Clear out junk files and repair common Windows errors3Scan for outdated or missing drivers - takes under a minuteCan 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.
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.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.
Best Value
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.
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.
Quick Recap
A practical deployment checklist
- Choose a supported current Odoo build and a maintained Linux distribution.
- Create a VPS with SSD/NVMe storage, documented backup options, and a region suitable for your users.
- Install Odoo in multi-process production mode and configure workers from measured concurrency.
- Install PostgreSQL locally or provision a private remote database; create a dedicated non-superuser account.
- 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.
- Persist the PostgreSQL data directory and Odoo filestore, then schedule encrypted backups.
- Apply firewall and SSH controls, update the operating system and Odoo, and keep secrets out of source-controlled files.
- Load-test representative workflows and record CPU, RAM, swap, disk latency, database waits, worker queues, and request times.
- Set alerts for storage capacity, failed backups, swap use, certificate expiry, and sustained resource saturation.
- 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.
Recommended Free Tools




