Short answer: as a starting point, plan one Odoo worker for about every 25 active users, around 1 GB of RAM per worker plus room for PostgreSQL, and fast NVMe storage. A team of up to 25 users usually runs well on 2 vCPU and 4 GB of RAM. Points of sale, a website, heavy reports and integrations push those numbers up, so size for your real workload rather than your headcount.
Active users matter more than total users
A company with 60 employees in Odoo rarely has 60 people clicking at the same moment. What loads the server is the number of people working in Odoo at the same time, and what they are doing. Ten accountants running month-end reports put more pressure on a server than forty staff who open a few records a day.
So before choosing a server, count the people who will be active during your busiest hour, and list the heavy activities: points of sale, the website or online store, large reports, imports and integrations with other systems.
What a worker is
A worker is an Odoo process that handles requests. When all workers are busy, new requests wait in a queue, and users see screens that load slowly or time out. As a rule of thumb, one worker serves around 25 active users doing normal work. Odoo documentation also recommends not running more workers than twice the number of CPU cores plus one.
Starting points by number of active users
| Active users | Workers | CPU | RAM | Suitable hosting |
|---|---|---|---|---|
| Up to 25 | 1 to 2 | 2 vCPU | 4 GB | Docker hosting or a small managed VPS |
| 25 to 50 | 2 to 3 | 4 vCPU | 8 GB | Managed VPS |
| 50 to 100 | 4 to 5 | 8 vCPU | 16 GB | Larger managed VPS or dedicated server |
| More than 100 | 6 or more | 8 vCPU or more | 32 GB or more | Dedicated server, possibly with a separate database server |
These are starting points, not guarantees. The right size is confirmed by watching CPU, memory and response times during a real working day, then adjusting.
What pushes the requirements up
- Points of sale. Every till sends requests all day and cannot wait at peak hours. Add a worker for every few busy tills.
- Website and online store. Visitors use workers too, even when they never log in.
- Heavy reports. Large accounting and inventory reports can hold a worker for a long time and use a lot of memory.
- Integrations and imports. Stores, payment gateways and scheduled imports keep sending requests in the background.
- Scheduled actions. Recurring jobs such as invoicing, emails and stock rules need their own capacity.
Storage
Odoo stores data in two places: the PostgreSQL database and the filestore, which holds attachments, images and generated documents. The filestore usually grows faster than the database. Start with enough space for both plus your backups, and prefer NVMe disks, because database speed depends heavily on disk speed.
Signs your server is too small
- Screens are fast early in the morning and slow during working hours.
- Reports time out or fail with memory errors.
- Points of sale freeze or lose connection at peak times.
- The server uses swap memory, or workers restart frequently.
Frequently asked questions
Do Community and Enterprise need different servers?
Not really. The requirements depend on users, data and activity, not on the edition. Enterprise apps you actually use add load in the same way as Community apps.
Is more RAM always better?
Only up to a point. RAM must cover the workers and give PostgreSQL room to cache data. Beyond that, adding CPU cores or faster disks usually helps more.
Can I start small and upgrade later?
Yes. With managed hosting you can add workers and storage, or move from a container to a private or dedicated server, as you grow. Starting slightly small and scaling up is usually cheaper than paying for capacity you do not use yet.
Related reading
How much does Odoo hosting cost in Saudi Arabia?