DigitalOcean for Hosting Odoo ERP — What to Know Before You Deploy
DigitalOcean is a reliable VPS option for Odoo ERP hosting, but the right configuration matters: Droplet sizing, database tuning, SSL termination, automated backups, and firewall rules are the difference between a stable production system and a server that struggles under real workload. This guide covers what you need to know before you deploy Odoo on DigitalOcean.
DigitalOcean is one of the most widely used VPS platforms for self-managed Odoo ERP deployments. Its straightforward pricing, reliable infrastructure, and extensive documentation make it a solid choice for businesses that want to run Odoo Community Edition without a third-party hosting cost, or for Odoo Enterprise customers who prefer a self-managed environment over Odoo.sh. But 'run Odoo on DigitalOcean' is not a single configuration — Droplet size, operating system choice, PostgreSQL tuning, network setup, and backup strategy all affect whether your deployment stays stable under real business workload or becomes a maintenance burden.
Droplet Sizing: How Much CPU and RAM Does Odoo Actually Need?
| Concurrent users | Recommended Droplet | vCPUs / RAM | Notes |
|---|---|---|---|
| 1–10 (dev / demo / micro SME) | Basic — Regular Intel or AMD | 2 vCPU / 4 GB RAM | Sufficient for Odoo Community development, demos, or very small businesses with light daily use. Not recommended for payroll runs, inventory operations, or any job queue tasks under concurrent use. SSD: 80 GB minimum. |
| 10–30 (SME production) | General Purpose — Premium AMD | 4 vCPU / 8 GB RAM | Good baseline for a Bahrain or KSA SME with 15–30 concurrent users across Accounting, HR, Inventory, and Sales. Run PostgreSQL on the same Droplet with careful shared_buffers tuning. SSD: 100–160 GB. |
| 30–75 (mid-market production) | General Purpose — Premium Intel or AMD | 8 vCPU / 16 GB RAM | Handles multi-module operations (Accounting + Inventory + Manufacturing + HR + Sales) with concurrent users and background job queue workers. Consider a separate managed PostgreSQL Droplet at this scale. SSD: 200–400 GB depending on attachment volume. |
| 75–150+ (larger deployments) | CPU-Optimised or Memory-Optimised | 16+ vCPU / 32+ GB RAM | At this scale, a single-server architecture becomes a bottleneck. Separate the Odoo application server from the PostgreSQL database server. Consider load balancing across multiple Odoo app nodes with a shared file system (Spaces / NFS) for attachments. Managed PostgreSQL with connection pooling (pgBouncer) is strongly recommended. |
PostgreSQL Configuration for Odoo on DigitalOcean
PostgreSQL is Odoo's only supported database. The default PostgreSQL configuration that ships with Ubuntu or Debian on a DigitalOcean Droplet is tuned for a generic small server — not for a multi-user ERP workload. The three settings that matter most for Odoo are shared_buffers, work_mem, and max_connections. A rough starting point for a 4 vCPU / 8 GB Droplet running Odoo + PostgreSQL on the same machine: set shared_buffers to 2 GB (25% of total RAM), work_mem to 64 MB, and max_connections to 100–200. Odoo's connection limit is controlled by the --db-maxconn parameter in the Odoo configuration file — set this below max_connections to leave headroom for administrative connections.
| Parameter | Default | Recommended (4 vCPU / 8 GB) | What it does |
|---|---|---|---|
| shared_buffers | 128 MB | 2 GB | Amount of memory PostgreSQL uses for caching data pages. The single most impactful setting for Odoo read performance. Set to 25% of total RAM. |
| work_mem | 4 MB | 64 MB | Memory allocated per sort or hash operation. Odoo generates complex queries with joins across many tables. Low work_mem causes disk-based sorts which are slow. Caution: this is per-operation, not per-session — multiply by max concurrent operations before increasing. |
| effective_cache_size | 4 GB | 6 GB (on 8 GB Droplet) | Hint to the query planner about how much memory is available for caching (includes OS page cache, not just shared_buffers). Set to 75% of total RAM. Does not allocate memory — it is advisory only. |
| max_connections | 100 | 150 | Maximum simultaneous database connections. Each Odoo worker maintains a pool of connections. For a 4-worker Odoo with --db-maxconn 64, keep max_connections above 100 to leave room for direct psql and monitoring connections. |
| checkpoint_completion_target | 0.9 | 0.9 (leave as default) | Controls how much of the checkpoint interval PostgreSQL uses for writing dirty pages. The default 0.9 is good for Odoo — no change needed. |
Firewall, SSL, and Security Configuration
| Security layer | What to configure | Why it matters for Odoo |
|---|---|---|
| DigitalOcean Cloud Firewall | Inbound: allow 22 (SSH — restricted to your IP), 80 (HTTP), 443 (HTTPS). Block 5432 (PostgreSQL) from public internet. Block 8069 (Odoo direct port) from public — only Nginx should be public-facing. | PostgreSQL exposed to the internet is a critical vulnerability — it is the most common attack vector on self-hosted Odoo. Never allow 5432 from 0.0.0.0/0. Odoo's built-in 8069 port should not be public — run Nginx as a reverse proxy. |
| Nginx reverse proxy with SSL | Install Nginx. Use Certbot (Let's Encrypt) for a free SSL certificate. Configure Nginx to proxy_pass to http://localhost:8069. Set proxy_read_timeout to 720s for Odoo long-polling. Add the recommended Odoo Nginx proxy headers (X-Forwarded-For, X-Real-IP, HOST). | SSL is required for Odoo's session security, POS barcode scanner support, and browser security warnings. Without the correct proxy headers, Odoo reports wrong URLs in emails and PDF reports, and the session cookie security flag does not work correctly. |
| Odoo configuration file hardening | Set admin_passwd to a strong random password (not 'admin'). Set db_filter to restrict which database names are served. Disable the Odoo database manager interface (list_db = False) in production. Set logfile to a persistent path outside /tmp. | The Odoo database manager at /web/database/manager is publicly accessible by default and allows anyone to create, drop, or restore databases if admin_passwd is weak. In production, set list_db = False and use a strong admin_passwd. |
| Automated backups | Use DigitalOcean Droplet Backups (weekly automated snapshot, 20% of Droplet cost). For more frequent backups, use DigitalOcean Spaces (object storage) with a cron job that runs pg_dump daily and uploads to Spaces. Keep 7-day rolling retention minimum. | Odoo's database contains all transactional data — invoices, payroll records, inventory movements. A server failure without a recent backup means permanent data loss. Droplet Backups are a weekly snapshot — not sufficient for a production ERP. Daily pg_dump to Spaces provides point-in-time recovery. |
DigitalOcean vs Odoo.sh — When to Use Each
| Factor | DigitalOcean self-managed | Odoo.sh (official Odoo cloud) |
|---|---|---|
| Monthly cost (20-user Odoo Enterprise) | ~$50–100/month (Droplet only). Odoo Enterprise licence is separate. | ~$192–360/month (includes 1 production + 1 staging + 1 dev instance, automated backups, deployment pipeline). Odoo Enterprise licence included for some plans. |
| Maintenance overhead | High. You manage OS updates, PostgreSQL upgrades, Odoo version upgrades, SSL certificate renewal, backups, monitoring, and incident response. | Low. Odoo SA manages infrastructure. You focus on Odoo configuration and customisation. SSL, backups, monitoring, and PostgreSQL are managed. |
| Custom module deployment | Full control. Deploy any module from any source. No code review gate. | GitHub-integrated. Modules deployed via git push to the Odoo.sh repository. Custom modules go through a basic build validation. |
| Staging and development environments | Manual. You provision and manage additional Droplets for staging. | Included. Odoo.sh provides separate staging and development branches that rebuild automatically on git push. |
| Best for | Teams with dedicated Linux/DevOps resource. Odoo Community Edition deployments. Businesses with strict data residency requirements that Odoo.sh data centres do not meet. Cost-sensitive micro SME with technical staff. | SME and mid-market using Odoo Enterprise who want focus on the ERP, not server management. Teams without a dedicated sysadmin. Businesses that need the production/staging/dev pipeline built in. |
Need Help Choosing Between Self-Managed Hosting and Odoo.sh?
iWesabe deploys Odoo on both self-managed VPS environments and Odoo.sh depending on the client's technical resource, data residency requirements, and budget. We recommend the right hosting architecture at the start of every implementation — not after go-live when problems surface.
Frequently Asked Questions
What is the minimum server spec to run Odoo ERP in production?
Should I run PostgreSQL on the same Droplet as Odoo or on a separate server?
How do I set up automated backups for Odoo on DigitalOcean?
How many Odoo worker processes should I configure for my Droplet?
Is DigitalOcean suitable for Odoo in Gulf countries — Bahrain, Saudi Arabia, UAE?
What is the difference between Odoo Community and Odoo Enterprise for hosting purposes?

iWesabe Editorial Team
Practitioner insights on Odoo ERP, ZATCA compliance, and Saudi enterprise digital operations — written by iWesabe's consulting, finance, and engineering teams.
Related Articles
Key Benefits of Odoo ERP for Bahraini SMEs
How Bahraini small and mid-size businesses use Odoo ERP to manage NBR VAT compliance, LMRA workforce quotas, Sijilat commercial registration, and multi-currency operations — in a single Arabic-first platform built for the Gulf.
How to Choose the Right ERP Implementation Partner in Bahrain
A practical evaluation guide for Bahraini businesses selecting an ERP partner: six selection criteria, Bahrain-specific compliance qualifications (NBR VAT, LMRA, SIO, Sijilat), red flags to avoid, and the questions that separate qualified partners from box-movers.
Digital Transformation in Bahrain with Odoo ERP
How Bahraini businesses are replacing fragmented systems with a unified ERP platform — and why Odoo's open-source architecture fits Bahrain's regulatory and growth agenda.
Explore Related Solutions
Financial Management
Automate your Saudi Arabia accounting — ZATCA Phase 2 e-invoicing, VAT returns, Zakat provisioning, multi-currency bank reconciliation, and real-time financial reporting — all inside one connected Odoo platform. Fully localised for KSA and the GCC by iWesabe.
ExploreManufacturing Management ERP
Run lean, traceable production with Odoo Manufacturing — work orders, Bills of Materials, quality control, and real-time OEE dashboards built for KSA factory floors.
ExploreCRM & Customer Relationship Management
Turn every lead into a closed deal. Odoo CRM gives your sales team a structured Kanban pipeline, automated follow-up sequences, and a 360° customer view — all connected natively to Accounting, Inventory, and Email Marketing.
ExploreSupply Chain Management
From purchase order to final delivery — Odoo Supply Chain connects procurement, multi-warehouse inventory, demand forecasting, and vendor management into one real-time platform. Purpose-configured for Saudi Arabia and the GCC by iWesabe.
Explore