Undersize your Odoo server and you get slow page loads, failed report generation, and frustrated users. Oversize it and you pay for resources you never touch. This guide gives you concrete numbers for every deployment size, from a solo freelancer testing Odoo on a $4 VPS to a 500-user enterprise running a multi-server cluster.
These numbers apply to both Odoo 18 (the current LTS release) and Odoo 19 (releasing October 2026). The resource requirements between these versions are nearly identical. Odoo 19 adds new features but does not significantly change the memory or CPU footprint. If you are still running Odoo 16 or 17, the numbers below still hold. Older versions use slightly less RAM but more CPU due to less efficient ORM queries.
In this guide
Minimum Requirements (Odoo 18/19)
The bare minimum to install and run Odoo on a single server with PostgreSQL:
| Resource | Minimum | Notes |
|---|---|---|
| CPU | 2 vCPU | 1 vCPU technically works but Odoo + PostgreSQL will compete for CPU cycles |
| RAM | 2 GB | Odoo idles at ~500 MB, PostgreSQL needs ~300 MB. Leaves almost no headroom. |
| Storage | 20 GB SSD | OS (~5 GB) + Odoo (~2 GB) + PostgreSQL + logs. No room for filestore growth. |
| OS | Ubuntu 22.04/24.04 LTS | Debian 12 also works. RHEL/Rocky require extra dependency management. |
| PostgreSQL | 12+ | Version 16 recommended. Versions 12-17 all supported. |
| Python | 3.10+ | Ships with Ubuntu 22.04+. Odoo 19 requires 3.10 minimum. |
Important: These minimums are for development and testing only. Running production Odoo on 2 GB RAM will result in out-of-memory kills during report generation, slow response times under any concurrent load, and PostgreSQL performance degradation as the database grows. Do not deploy production workloads on minimum specs.
Requirements by User Count
The most common way to size an Odoo server is by user count. “Users” here means concurrent active users — not total user accounts. If you have 100 user accounts but only 30 people are logged in and active at peak hours, size for 30. A good rule of thumb: concurrent users are typically 25-40% of total registered users.
Each Odoo worker process handles one request at a time and consumes 150-300 MB of RAM. The formula is simple: you need 1 worker per 4-6 concurrent users, plus 1-2 cron workers for background tasks. PostgreSQL needs its own share of RAM (at least 25% of total) and connections (at least 2x the number of workers).
| Users | CPU | RAM | Storage | Workers | Database |
|---|---|---|---|---|---|
| 1-5 | 2 vCPU | 4 GB | 40 GB NVMe | 2 | Same server |
| 5-25 | 4 vCPU | 8 GB | 80 GB NVMe | 4 | Same server |
| 25-100 | 8 vCPU | 16 GB | 160 GB NVMe | 8 | Same server or separate |
| 100-500 | 16 vCPU | 32 GB | 500 GB NVMe | 16 | Separate DB server required |
| 500+ | 32+ vCPU | 64+ GB | 1+ TB NVMe | 32+ | PostgreSQL cluster + load balancer |
All tiers assume Odoo Community or Enterprise with a typical mix of modules. If you run heavy modules like MRP or eCommerce, add 50-100% more RAM. See the module-specific section below.
The 100-user threshold is where single-server setups start struggling. At this point, PostgreSQL and Odoo compete for CPU and RAM on the same machine. Separating the database onto a dedicated server (or using a managed PostgreSQL service like AWS RDS or DigitalOcean Managed Databases) dramatically improves response times. The Odoo application server can then use all available RAM for workers, while PostgreSQL gets its own dedicated resources for query caching and connection handling.
Use our server calculator to get a personalized recommendation based on your exact user count and module selection, or check the server requirements tool for quick reference.
Requirements by Module
Not all Odoo modules hit the server the same way. A company using only CRM and Invoicing has very different server needs than one running Manufacturing, eCommerce, and Point of Sale at the same time. Here is how the major modules affect your resource budget:
Report generation (P&L, balance sheets, aged receivables) is CPU-intensive. A year-end close with 50,000+ journal entries can spike CPU to 100% for minutes. Plan for 2 extra vCPUs if accounting is a primary module.
BOM explosion and production scheduling load entire bill-of-materials trees into memory. A 5-level BOM with 500 components can use 2 GB of RAM during scheduling. Add 4-8 GB RAM for heavy MRP use.
Product catalog pages, image serving, and concurrent user sessions create heavy I/O and memory pressure. A catalog with 10,000+ products needs NVMe storage and 4+ GB extra RAM for caching. Plan for CDN offloading of static assets.
Each POS terminal maintains a persistent WebSocket connection to the server. CPU and RAM per terminal are low (about 50 MB RAM, minimal CPU), but you need stable sub-100ms latency and reliable WebSocket support. 20 terminals add roughly 1 GB RAM total.
Base inventory operations are lightweight. The load scales with the number of barcode scanners and warehouse workers making concurrent stock moves. 10 scanners operating simultaneously need about the same resources as 10 regular users.
If you are running multiple resource-heavy modules, add their extra requirements together. A company using Accounting + MRP + eCommerce should plan for 2 extra vCPUs (Accounting) + 4-8 GB extra RAM (MRP) + NVMe storage and CDN (eCommerce) on top of the base requirements for their user count.
PostgreSQL Sizing Guidelines
PostgreSQL does the heavy lifting for Odoo. Every page load, every search, every report hits the database. Get this wrong and your whole instance suffers no matter how much CPU and RAM you give the Odoo application server.
| Parameter | Small (1-25 users) | Medium (25-100) | Large (100-500) |
|---|---|---|---|
| shared_buffers | 1 GB | 4 GB | 8 GB |
| effective_cache_size | 3 GB | 12 GB | 24 GB |
| work_mem | 16 MB | 32 MB | 64 MB |
| max_connections | 100 | 200 | 500 |
| maintenance_work_mem | 256 MB | 1 GB | 2 GB |
| wal_buffers | 16 MB | 64 MB | 128 MB |
Connection pooling becomes critical beyond 50 users. Odoo opens one PostgreSQL connection per worker, and each connection uses 5-10 MB of RAM on the database server. Without a connection pooler, 16 workers with 2 connections each means 32 database connections at all times. Use PgBouncer in transaction pooling mode to multiplex connections — it can serve 100+ Odoo workers through 20-30 actual PostgreSQL connections, reducing database memory usage by 60-70%.
For a deeper dive into PostgreSQL configuration, see our PostgreSQL Tuning for Odoo guide, which covers indexing strategies, autovacuum tuning, and query optimization specific to Odoo workloads.
Storage Planning
Odoo storage has three components: the database, the filestore, and system overhead. Here is how each one grows over time:
| Company size | DB growth/year | Filestore growth/year | 3-year total |
|---|---|---|---|
| Small (1-10 users) | ~1 GB | 2-5 GB | 10-20 GB |
| Medium (10-100 users) | 5-10 GB | 10-30 GB | 50-120 GB |
| Large (100+ users) | 50-100 GB | 100-500 GB | 500 GB - 2 TB |
| eCommerce heavy | 10-20 GB | 50-200 GB (product images) | 200-700 GB |
The filestore is where Odoo stores file attachments, product images, report PDFs, and email attachments. By default, these are stored on the local filesystem in ~/.local/share/Odoo/filestore/. For larger deployments, moving the filestore to S3-compatible object storage (AWS S3, DigitalOcean Spaces, MinIO) saves disk space and makes backups simpler.
NVMe vs SATA SSD: Always choose NVMe when available. PostgreSQL is I/O-heavy, and NVMe drives provide 3-5x better random read performance than SATA SSDs. The performance difference is most noticeable on reports and searches that scan large tables. Every major VPS provider now offers NVMe as standard or as an affordable upgrade.
Always leave 20% free disk space. PostgreSQL needs free space for VACUUM operations (which reclaim dead tuples), WAL files, and temporary sort files. If your disk hits 95%+ utilization, PostgreSQL can refuse new writes and your Odoo instance will crash.
Network Requirements
Network bandwidth and latency tend to get ignored when sizing Odoo servers. Here is what you actually need:
Bandwidth per User
An active Odoo user generates approximately 50 Kbps of sustained traffic (averaged over a work session). Peak bandwidth during report downloads or large list views can spike to 500 Kbps - 2 Mbps per user. For 50 concurrent users, plan for at least 25 Mbps of available bandwidth with burst capacity to 100 Mbps. Most VPS providers include 1 Gbps ports, so bandwidth is rarely a bottleneck.
Latency
Odoo is a web application that makes many small requests. Each page load triggers 10-30 HTTP requests for data, assets, and RPC calls. Keep latency under 100ms between your users and the server. At 200ms+ latency, Odoo starts feeling sluggish — not because the server is slow, but because each of those 20+ requests adds a round trip. Choose a data center region close to your users.
CDN for Static Assets
Odoo serves JavaScript bundles, CSS, and images from the application server by default. For deployments with users spread across multiple regions, configure a CDN (Cloudflare, CloudFront, or Bunny.net) to cache and serve static assets from edge locations. This reduces server load by 30-50% and improves perceived page load speed for remote users. eCommerce deployments should treat CDN as mandatory, not optional.
Development vs Staging vs Production
Running three environments (development, staging, production) is standard practice. But you do not need to triple your server costs. Each environment has a different job and different resource needs:
| Environment | Size (vs Production) | Typical spec | Purpose |
|---|---|---|---|
| Development | 25% of production | 2 vCPU, 2-4 GB RAM | Code changes, module development, quick testing. Single developer use. |
| Staging | 50% of production | Half of production spec | Pre-deployment testing with production-like data. UAT with a few users. |
| Production | 100% | Full spec per user table | Live workload. All concurrent users, all modules, full dataset. |
Pro tip: Development environments can run on the cheapest VPS tier your provider offers. A Hetzner CX22 at ~4 EUR/month or a DigitalOcean $6/month droplet is more than enough for a single developer. Staging should mirror production in software configuration (same Odoo version, same modules, same PostgreSQL version) but can use a smaller instance size. For detailed staging setup, see our Odoo staging environment guide.
Cloud Provider Recommendations by Budget
Now that you know your server specs, here is where to run them. We tested seven providers head-to-head and wrote a detailed comparison. Here is the quick summary:
| Budget | Best pick | Spec you get | Good for |
|---|---|---|---|
| Under $10/mo | Hetzner | 2 vCPU, 4 GB RAM, 40 GB NVMe | 1-10 users, dev/staging |
| $10-30/mo | Hetzner or Vultr | 4 vCPU, 8 GB RAM, 80 GB NVMe | 10-30 users, small production |
| $30-100/mo | DigitalOcean or AWS | 4-8 vCPU, 16 GB RAM, 160 GB NVMe | 30-100 users, managed DB option |
| $100-500/mo | AWS or Hetzner dedicated | 16 vCPU, 32 GB RAM + separate DB | 100-500 users, enterprise |
| $500+/mo | AWS / GCP / bare metal | Multi-server, load balanced | 500+ users, HA required |
For region-specific recommendations, see our guides for Europe, India, and other regions. For VPS-specific sizing advice, check our best VPS for Odoo guide.
Not sure about your sizing? OEC.sh handles server provisioning automatically. Tell us your user count and modules, connect your cloud account (AWS, Hetzner, DigitalOcean, Vultr, GCP, Azure, or OVH), and we deploy an optimized Odoo instance with the right specs. PostgreSQL tuning, worker configuration, SSL, backups, and monitoring are all included. Start small and scale up when you need to. No migrations needed.
Frequently Asked Questions
What are the minimum server requirements for Odoo?
The absolute minimum to run Odoo 18 or 19 is 2 vCPUs, 2 GB RAM, and 20 GB SSD storage. This is only suitable for development and testing with 1-2 users. For any production workload, you need at least 2 vCPUs, 4 GB RAM, and 40 GB NVMe. PostgreSQL and the Odoo application server share these resources on a single-server setup, so RAM is typically the first bottleneck.
How much RAM does Odoo need for 50 users?
For 50 concurrent users, plan for 16 GB RAM total. Each Odoo worker process consumes 150-300 MB depending on installed modules, and you need 6-8 workers for 50 users. PostgreSQL needs its own buffer cache (typically 25% of available RAM). If running both on the same server, 16 GB is the minimum for a responsive experience.
Does Odoo need a dedicated server?
Not necessarily. For up to 25 users, a single VPS with 4-8 GB RAM handles both Odoo and PostgreSQL comfortably. Beyond 100 users, separate the database onto its own server. Beyond 500 users, use a multi-server architecture with a load balancer, dedicated application servers, and a PostgreSQL cluster. Bare metal is only needed for very large deployments where virtualization overhead matters.
Can I run Odoo on a shared hosting plan?
No. Traditional shared hosting (cPanel, Plesk) does not support Odoo. You need a full Linux server with root access to install Python dependencies, configure PostgreSQL, and run long-lived application processes. The cheapest viable option is a 2 vCPU, 4 GB RAM VPS from providers like Hetzner (starting around €4/month) or DigitalOcean ($24/month).
What database does Odoo use?
Odoo exclusively uses PostgreSQL. It does not support MySQL, MariaDB, SQLite, or any other database engine. As of 2026, Odoo 18 and 19 support PostgreSQL 12 through 17, with PostgreSQL 16 recommended for the best balance of performance and stability.
How much storage does Odoo need?
The Odoo application itself needs about 2 GB. The database grows at roughly 1 GB/year for small businesses, 5-10 GB/year for mid-size companies, and 50+ GB/year for large enterprises. The filestore (attachments, images, report PDFs) typically uses 2-5x more space than the database. Start with 40 GB NVMe for small deployments and 160 GB+ for mid-size. Always leave 20% free space for PostgreSQL VACUUM operations.
Deploy Odoo with the Right Server Size
Stop guessing. Connect your cloud account, pick your user count and modules, and OEC.sh provisions an optimized server automatically. Free plan available.