VDS Start
₺899.00 / month
- 4 ayrılmış çekirdek
- 8 GB RAM
- 200 GB NVMe
- 10 TB Trafik
- 1 IPv4
Run your Odoo Community or Enterprise installation with PostgreSQL, a multi-worker setup and an Nginx reverse proxy on a VDS with dedicated cores and full root access.
Quick answer
Odoo hosting means running the open-source Odoo ERP on a server you fully control, where your own data lives. Odoo 19 needs Python 3.10+ and PostgreSQL 13+; in production the worker count follows the (cores × 2) + 1 rule, and each worker serves about six concurrent users. The application runs behind an Nginx reverse proxy, with a separate gevent port for chat and notifications. A VDS server with dedicated cores delivers predictable performance under the daytime reporting and accounting load of an ERP.
Monthly starting prices in Turkish lira, excluding VAT. You complete the order on our Turkish store page.
₺899.00 / month
₺1,599.00 / month
₺2,899.00 / month
| Concurrent users | Dedicated cores | RAM | HTTP workers |
|---|---|---|---|
| 1–10 | 2–4 | 4–8 GB | 2–4 |
| 10–30 | 4 | 8–16 GB | 5–8 |
| 30–75 | 8 | 16–32 GB | 9–13 |
| 75–150 | 12+ | 32 GB or more | 13–25 (PostgreSQL on a separate server recommended) |
Estimates; actual needs depend on mods, plugins and settings.
Odoo hosting means renting resources to run the Odoo ERP software on a server you manage yourself (on-premise) instead of Odoo’s own cloud services. Odoo is modular business software that combines accounting, inventory, purchasing, sales, CRM, manufacturing, HR and e-commerce apps in a single database.
Running it on your own server makes sense when:
Installing and running Odoo requires Linux, PostgreSQL and Python knowledge. If you are looking for ready-made, browser-based accounting or CRM software rather than installing an ERP, LIONFIN business software can be used without any installation.
Odoo 19 requires Python 3.10 or newer and PostgreSQL 13 or newer; with this release, the official installation documentation raised the PostgreSQL minimum from 12 to 13. The documentation on Odoo’s development branch shows minimums of Python 3.12 and PostgreSQL 16 for the next major version, so choosing Ubuntu 24.04 LTS and PostgreSQL 16 or newer for a new installation reduces the need to change infrastructure at the next upgrade.
| Component | Requirement / recommendation |
|---|---|
| Operating system | Ubuntu 24.04 LTS or Debian (official Odoo packages are Debian-based) |
| Python | 3.10 or newer for Odoo 19 |
| Database | PostgreSQL 13 or newer (Odoo works only with PostgreSQL) |
| PDF reports | The wkhtmltopdf version specified in the Odoo documentation |
| Web server | Nginx (reverse proxy and HTTPS) |
| Ports | Only 80 and 443 open externally; 8069 and the gevent port local only |
Odoo does not work with MySQL or MariaDB; there is no alternative database. For invoice and quotation PDFs to render properly, install the wkhtmltopdf version Odoo recommends; the version in your distribution’s repository may print headers and footers incompletely. Because all these components require full root access, Odoo does not run on shared hosting.
Odoo Community is open source and can be used on your own server without licence fees; Odoo Enterprise adds extra apps and features on top of Community and requires a per-user subscription. Both editions can run on your own server; to use Enterprise on-premise you need a valid subscription.
Consider these points when choosing:
In infrastructure terms, both editions have the same server requirements: the same Python, PostgreSQL and worker calculation apply. The sizing and configuration advice on this page applies to both.
Odoo’s official deployment documentation gives the rule (number of cores × 2) + 1 for the number of HTTP workers and states that one worker serves about six concurrent users. The memory calculation assumes that 20% of requests are heavy (about 1 GB) and 80% are light (about 150 MB); multiplying this weighted average by the number of workers gives the total requirement.
Example calculation for 50 concurrent users:
(4 × 2) + 1 = 9; four dedicated cores carry this number of workers.This calculation gives the minimum for the application itself; jobs such as bulk imports, large inventory reports and period-end accounting close briefly need much more memory. The values in the table include this headroom. Dedicated cores let workers truly run in parallel, so they give more predictable results for an ERP than shared virtual cores.
In production, Odoo should run in multi-processing mode, behind a reverse proxy and with the database manager disabled. To do this, the worker count, memory and time limits and security settings are defined in the odoo.conf file.
[options]
proxy_mode = True
workers = 8
max_cron_threads = 1
limit_memory_soft = 629145600
limit_memory_hard = 1677721600
limit_time_cpu = 600
limit_time_real = 1200
list_db = False
dbfilter = ^company$
http_interface = 127.0.0.1
gevent_port = 8072What the settings mean:
workers: the number of HTTP workers; if left at 0, Odoo runs in single-process development mode, which is not suitable for production.limit_memory_soft / limit_memory_hard: worker memory limits in bytes (about 600 MB and 1.6 GB in the example). A worker that exceeds the soft limit is restarted after finishing its request; one that exceeds the hard limit is terminated immediately.limit_time_cpu / limit_time_real: time limits in seconds for long-running reports; if your large reports time out, raise these values carefully.proxy_mode: lets Odoo read the real client address and HTTPS information from the reverse proxy headers; enable it only behind a proxy.list_db and dbfilter: hide the database list and make the server serve only a specific database.Nginx terminates HTTPS in front of Odoo, forwards normal requests to the HTTP workers on port 8069, and forwards requests starting with /websocket/ to the real-time worker on the gevent port. Without this split, chat (Discuss), instant notifications and live chat do not work.
upstream odoo { server 127.0.0.1:8069; }
upstream odoochat { server 127.0.0.1:8072; }
server {
listen 443 ssl;
server_name erp.yourdomain.com;
client_max_body_size 100m;
proxy_read_timeout 720s;
location /websocket {
proxy_pass http://odoochat;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location / {
proxy_pass http://odoo;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
}
}You can obtain the certificate with Let’s Encrypt and redirect HTTP requests to HTTPS. The client_max_body_size value matters for large attachments and import files, and proxy_read_timeout for long reports. Odoo’s ports 8069 and 8072 must stay closed to the outside in the firewall; Odoo should be reachable only through Nginx.
Odoo’s speed depends heavily on PostgreSQL’s memory settings; the default PostgreSQL settings are designed for small servers and fall short under ERP load. The first values to adjust are shared_buffers, effective_cache_size and work_mem.
shared_buffers: The PostgreSQL documentation recommends about 25% of memory as a starting value on a dedicated database server. If it runs on the same server as Odoo, set the ratio taking the workers’ memory needs into account.effective_cache_size: Estimates the total memory available to the database including the operating system’s file cache; it affects the query planner’s decision to use indexes.work_mem: Memory per connection for sort and join operations; too high a value, multiplied by concurrent connections, can exhaust memory.max_connections: Choose a value that covers the connections required by Odoo workers and cron, without being needlessly high.Keeping database files on NVMe storage makes a difference for write-heavy work such as stock moves and accounting entries. Once concurrent users exceed 75–100, moving PostgreSQL to a separate VDS stops the application and database from sharing the same memory.
You can install Odoo on Ubuntu 24.04 LTS in two ways: from Odoo’s official Debian package repository or from source via the Git repository. The package installation is faster and comes with a ready service definition; installing from source is more flexible for running several Odoo versions side by side and developing custom modules.
19.0) and install the dependencies in a Python virtual environment.odoo.conf file with production settings and define Odoo as a systemd service.After installation, the first things to do are change the administrator password, enable two-factor authentication and set up the company, currency and language settings.
In Odoo, custom and community modules should live in separate folders added to the addons_path list in odoo.conf, not copied into the core code. This separation keeps your own modules unaffected when you update Odoo.
/opt/odoo/odoo for the core, /opt/odoo/oca for community modules and /opt/odoo/custom for your company-specific modules.odoo-bin -u module_name -d database --stop-after-init and restart the service.19.0).Odoo’s country-specific accounting localisations bring the chart of accounts and tax definitions for each country. Legally required electronic documents, such as e-invoices, are usually sent through certified provider modules; in Türkiye, for example, e-Fatura, e-Arşiv and e-İrsaliye are sent via integrators authorised by the tax administration. When choosing a provider, verify that its module supports your Odoo version.
The most critical Odoo security steps are changing the master password to a strong value, closing the database manager to the internet, making Odoo ports listen only locally and enforcing two-factor authentication on user accounts. The master password grants the right to create, delete and restore databases from backup; losing it means losing all your ERP data.
admin_passwd in odoo.conf to a long, random password; Odoo stores this value hashed in the file.list_db = False and in Nginx allow access to the /web/database paths only from your own IP address.127.0.0.1.At network level, the RouteFence firewall in the LIONFIN infrastructure filters DDoS attacks, and 24/7 SOC monitoring tracks security events. See our data center for details.
An Odoo backup has two parts: the PostgreSQL database and the filestore folder, which holds attachments and images. Backing up only the database is the most common mistake; after a restore, invoice attachments, product images and documents are lost. By default the filestore is in the Odoo user’s home directory, in a subfolder with the same name as the database.
pg_dump -Fc, sync the filestore folder with rsync, and store both with the same timestamp.A major version upgrade (for example from 18 to 19) is not done by just changing the code; the database schema must also be migrated. Enterprise users use Odoo’s upgrade service, while Community users use community tools such as OpenUpgrade. Always test the upgrade on a copy of the database; if you neutralise the copy with the odoo-bin neutralize command, which disables outgoing email and scheduled actions, the test system will not email real customers.
The most common problems on Odoo servers are wrong worker and memory limits, missing websocket routing, the wrong wkhtmltopdf version and scheduled actions that do not run. You can trace problems in the Odoo log file (the path set with the logfile option) and in journalctl output.
limit_time_real or limit_memory_hard limit. Look for the log line showing the worker was terminated and raise the limits in a balanced way./websocket requests are not routed to the gevent port, or the Upgrade headers are not passed.web.base.url system parameter is wrong.max_cron_threads is zero, or the jobs were disabled because of an error; check Settings → Technical → Scheduled Actions.proxy_mode is off, or Nginx is not sending the X-Forwarded-For header.When you need more resources, you can upgrade your VDS from the customer panel.
Choose a VDS plan
Pick a VDS from the package table based on your concurrent user count and install Ubuntu 24.04 LTS.
Prepare the server
Apply updates, enable SSH key login and leave only ports 22, 80 and 443 open in the firewall.
Install PostgreSQL
Install PostgreSQL, create a non-superuser database user for Odoo and adjust the memory settings.
Install Odoo
Install the relevant version branch from the official package repository or Git, then add the Python dependencies and wkhtmltopdf.
Configure odoo.conf
Calculate worker, memory and time limits, set proxy_mode, list_db and a strong master password, and create a systemd service.
Enable Nginx and HTTPS
Set up Nginx as a reverse proxy, route /websocket requests to the gevent port and obtain a Let’s Encrypt certificate.
Plan backups
Set up a daily backup job for the database and filestore and run a test restore.
Because Odoo needs components such as PostgreSQL, Python, wkhtmltopdf and Nginx, it requires a virtual or dedicated server with full root access; it does not run on shared hosting. For an ERP used all day, a VDS with dedicated cores delivers predictable performance for reporting and accounting work.
According to the calculation in the Odoo documentation, a worker uses a weighted average of about 320 MB, so nine workers need about 3 GB. PostgreSQL and operating system headroom come on top. 4–8 GB for up to ten users and 8–16 GB for up to 30 users are realistic starting values.
Odoo’s recommended rule is that the worker count should not exceed (number of cores × 2) + 1. One worker serves about six concurrent users; for 50 concurrent users, for example, you need about eight HTTP workers and one cron worker. Memory limits should be calculated together with the worker count.
No. Odoo works only with PostgreSQL; there is no MySQL or MariaDB support. Odoo 19 requires PostgreSQL 13 or newer. Choosing a more recent PostgreSQL version for a new installation reduces the need to upgrade the database as well during future Odoo version upgrades.
Odoo Community is open source and can be used without licence fees; you pay only for the server and, if needed, installation, development and support services. The Enterprise edition includes extra apps and requires a per-user subscription. Both editions can run on your own server.
Yes, through localisation and provider modules. In Türkiye, for example, e-Fatura, e-Arşiv and e-İrsaliye are sent via Odoo modules from integrators authorised by the tax administration. When choosing a provider, make sure its module supports the Odoo major version you use and that updates are published regularly.
A complete Odoo backup consists of a PostgreSQL database dump and the filestore folder. The filestore contains invoice attachments, product images and documents, and cannot be recovered from the database backup alone. Take both at the same time and store them together, and keep your custom module code in a Git repository.
Yes. Odoo has an official Docker image and can be installed with PostgreSQL using Docker Compose. Docker makes switching versions and spinning up test environments easier, but worker, memory, Nginx and backup settings still need the same care. Remember to define persistent volumes for the filestore and database; see Docker hosting.