[{"data":1,"prerenderedAt":258},["ShallowReactive",2],{"seo-verification":3,"blog-host-odoo-17-community-on-vps-en":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-host-odoo-17-community-on-vps-en",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":30,"intro":33,"sections":34,"ctaTitle":199,"ctaBody":200,"ctaButton":201,"ctaUrl":202,"relatedPosts":203},383,"host-odoo-17-community-on-vps",{"fr":12,"en":10,"ar":13,"es":14},"heberger-odoo-17-community-vps","استضافة-odoo-17-community-على-vps","alojar-odoo-17-community-en-vps","Host Odoo 17 Community on VPS: complete Docker installation","Step-by-step guide to deploying Odoo 17 Community Edition on a VPS with Docker Compose: configuration, backups, security and performance tuning.",10,0,false,"2026-09-26T00:00:00+00:00","2026-09-29T14:40:42+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-odoo-17-community-vps-poster.svg","Odoo 17 Community Edition is one of the most comprehensive open-source ERPs available today. Free, extensible, and backed by a large community, it covers sales management, accounting, inventory, human resources and more. Yet many businesses still pay SaaS subscriptions for features they could host themselves on a VPS, with full control over their data. This guide walks you through deploying Odoo 17 Community on a VPS using Docker Compose, configuring backups, securing the instance and optimising its performance.",[35,39,53,93,96,118,121,124,135,150,153,157],{"type":36,"title":37,"body":38},"h2","Why self-host Odoo Community","The SaaS version of Odoo, sold via Odoo.sh or through partners, charges per user and per activated module. For a 10-person SMB using five modules, the monthly bill quickly exceeds several hundred euros. A VPS starting at 99 DH\u002Fmonth is enough to run the same instance, with no restrictions on the number of users or Community modules.\n\n**Data control** is the other compelling argument. With a self-hosted instance, the PostgreSQL database stays on your server, in your datacenter of choice. No third party accesses your customers, quotes, invoices or HR data. For companies subject to compliance requirements — healthcare, legal, fintech — this control is not optional.\n\nFinally, **customisation** is unrestricted. Odoo Community allows installation of any module from the community or developed in-house, without restrictions from the publisher. On a SaaS or managed instance, third-party modules often need to be validated, and some customisations are simply impossible.",{"type":40,"title":41,"items":42},"ul","What Odoo 17 Community includes",[43,44,45,46,47,48,49,50,51,52],"**CRM**: sales pipeline, leads, activities and customer tracking","**Sales**: quotes, purchase orders, pricing and payment terms","**Accounting**: chart of accounts, journals, bank reconciliation, VAT","**Invoicing**: customer and supplier invoices, automated reminders, payments","**Inventory**: stock management, locations, replenishment rules","**Purchasing**: purchase requests, tenders and supplier tracking","**Human Resources**: employees, contracts, leave and attendance","**Email Marketing**: mailing lists, campaigns and send statistics","**Website & e-commerce**: page builder, integrated online store","**Helpdesk**: customer ticketing, SLA and self-service portal",{"type":54,"title":55,"headers":56,"rows":61},"comparison","Differences between Community and Enterprise",[57,58,59,60],"Feature","Community","Enterprise","Open-source alternative",[62,67,72,75,80,84,89],[63,64,65,66],"Advanced accounting (analytical reports)","Basic","Full","OCA `account-financial-reporting` module",[68,69,70,71],"Electronic signature","Not included","Included","Community `sign` module or Docusign",[73,69,70,74],"Advanced timesheets","OCA `hr-attendance` module",[76,77,78,79],"Official editor support","Community forum","Guaranteed SLA","Certified Odoo partner",[81,82,70,83],"Automatic updates (Odoo.sh)","Not applicable","Manual migration script",[85,86,87,88],"Number of users","No cap","License-based","No restrictions",[90,91,92,91],"Price (self-hosted)","Free","Free if self-hosted *",{"type":36,"title":94,"body":95},"VPS requirements for hosting Odoo 17","Odoo is a Python\u002FPostgreSQL application with significant RAM requirements, especially when multiple users work simultaneously. The minimum recommended sizing for an SMB with 5 to 15 users:\n\n- **CPU**: 4 vCPU minimum; Odoo is multi-process and benefits from parallelism\n- **RAM**: 8 GB recommended (4 GB is functional for testing, insufficient in production)\n- **Storage**: 40 GB NVMe SSD; plan for more if you activate e-commerce with media\n- **OS**: Ubuntu 22.04 LTS or Debian 12 — both are stable and well-documented\n- **Docker Engine** 24+ and **Docker Compose** v2 (integrated plugin, `docker compose` without hyphen)\n- A **domain name** pointing to the VPS IP, with an active A or CNAME record\n- A **reverse proxy** (Caddy or Nginx) to handle TLS and expose Odoo on port 443\n\nA 299 DH\u002Fmonth VPS from ServOrbit.com easily meets these requirements with dedicated resources.",{"type":97,"title":98,"steps":99},"steps","Install Odoo 17 with Docker Compose",[100,103,106,109,112,115],{"title":101,"body":102},"Create the directory structure","Connect via SSH to your VPS and create the working tree:\n\n```bash\nmkdir -p \u002Fopt\u002Fodoo\u002F{data,addons,config,backups}\ncd \u002Fopt\u002Fodoo\n```\n\nThese folders will hold persistent data, custom modules, Odoo configuration and backups respectively.",{"title":104,"body":105},"Write the docker-compose.yml file","Create `\u002Fopt\u002Fodoo\u002Fdocker-compose.yml` with the following content:\n\n```yaml\nservices:\n  db:\n    image: postgres:16\n    restart: unless-stopped\n    environment:\n      POSTGRES_DB: postgres\n      POSTGRES_USER: odoo\n      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}\n    volumes:\n      - .\u002Fdata\u002Fpostgres:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata\n    healthcheck:\n      test: [\"CMD-SHELL\", \"pg_isready -U odoo\"]\n      interval: 10s\n      retries: 5\n\n  odoo:\n    image: odoo:17.0\n    restart: unless-stopped\n    depends_on:\n      db:\n        condition: service_healthy\n    environment:\n      HOST: db\n      USER: odoo\n      PASSWORD: ${POSTGRES_PASSWORD}\n    volumes:\n      - .\u002Fdata\u002Fodoo:\u002Fvar\u002Flib\u002Fodoo\n      - .\u002Faddons:\u002Fmnt\u002Fextra-addons\n      - .\u002Fconfig\u002Fodoo.conf:\u002Fetc\u002Fodoo\u002Fodoo.conf\n    ports:\n      - \"127.0.0.1:8069:8069\"\n      - \"127.0.0.1:8072:8072\"\n```\n\nNote that ports are only exposed on localhost — the reverse proxy handles external access.",{"title":107,"body":108},"Create the .env file and Odoo configuration","Create `\u002Fopt\u002Fodoo\u002F.env`:\n\n```bash\nPOSTGRES_PASSWORD=$(openssl rand -hex 32)\necho \"POSTGRES_PASSWORD=${POSTGRES_PASSWORD}\" > \u002Fopt\u002Fodoo\u002F.env\n```\n\nThen create `\u002Fopt\u002Fodoo\u002Fconfig\u002Fodoo.conf`:\n\n```ini\n[options]\ndb_host = db\ndb_port = 5432\ndb_user = odoo\ndb_password = ${POSTGRES_PASSWORD}\naddons_path = \u002Fusr\u002Flib\u002Fpython3\u002Fdist-packages\u002Fodoo\u002Faddons,\u002Fmnt\u002Fextra-addons\nadmin_passwd = REPLACE_WITH_A_STRONG_PASSWORD\nwithout_demo = all\nworkers = 4\nmax_cron_threads = 2\nlimit_memory_hard = 2684354560\nlimit_memory_soft = 2147483648\n```",{"title":110,"body":111},"Configure the reverse proxy with Caddy","Caddy is the simplest choice: it handles TLS automatically via Let's Encrypt. Install it and create `\u002Fetc\u002Fcaddy\u002FCaddyfile`:\n\n```\nodoo.yourdomain.com {\n    reverse_proxy 127.0.0.1:8069\n\n    # WebSocket support for real-time notifications\n    handle \u002Fwebsocket {\n        reverse_proxy 127.0.0.1:8072\n    }\n\n    header {\n        X-Frame-Options SAMEORIGIN\n        X-Content-Type-Options nosniff\n        Strict-Transport-Security \"max-age=31536000; includeSubDomains\"\n    }\n\n    encode gzip\n}\n```\n\nReload Caddy: `systemctl reload caddy`.",{"title":113,"body":114},"Start the containers","From `\u002Fopt\u002Fodoo`, run:\n\n```bash\ndocker compose up -d\n```\n\nFollow the startup logs:\n\n```bash\ndocker compose logs -f odoo\n```\n\nOdoo takes 30 to 60 seconds to initialise. You will see `HTTP service (werkzeug) running` when it is ready.",{"title":116,"body":117},"Access the interface and create the database","Open `https:\u002F\u002Fodoo.yourdomain.com\u002Fweb\u002Fdatabase\u002Fmanager` in your browser. Enter the master password (`admin_passwd`) defined in `odoo.conf`, choose a database name, language and administrator email, then click **Create**. The first initialisation takes 2 to 5 minutes depending on the selected modules.",{"type":36,"title":119,"body":120},"Configure the database and instance","After the database is created, Odoo redirects you to the main interface. The first thing to do is **verify the master password** in `Settings > Technical > Master Password`. This password protects access to the database manager — it must be long and unique.\n\nIn `Settings > General`, configure the company name, base currency, time zone and address. These settings influence generated documents (invoices, purchase orders).\n\nIf you are migrating from another system, Odoo provides CSV importers for customers, suppliers, products and accounting balances. Always start with a test environment using real data before switching to production.",{"type":36,"title":122,"body":123},"Configure automated backups","A production Odoo instance without backups is an immediate technical debt. The recommended strategy relies on two levels.\n\n**Daily PostgreSQL dump** with a cron script:\n\n```bash\n#!\u002Fbin\u002Fbash\nDATE=$(date +%Y%m%d_%H%M%S)\nBACKUP_DIR=\u002Fopt\u002Fodoo\u002Fbackups\nDB_NAME=your_database\n\ndocker compose -f \u002Fopt\u002Fodoo\u002Fdocker-compose.yml exec -T db \\\n  pg_dump -U odoo ${DB_NAME} | gzip > ${BACKUP_DIR}\u002Fodoo_${DATE}.sql.gz\n\n# Retain 7 days\nfind ${BACKUP_DIR} -name \"odoo_*.sql.gz\" -mtime +7 -delete\n```\n\nSchedule this script in `\u002Fetc\u002Fcron.d\u002Fodoo-backup` to run at 02:00 every night.\n\n**Volume backup**: the `\u002Fopt\u002Fodoo\u002Fdata\u002Fodoo` folder contains attachments, images and uploaded files. Synchronise it daily to object storage (S3, Scaleway Object Storage) using `rclone` or `restic`.",{"type":40,"title":125,"items":126},"Activate key modules after installation",[127,128,129,130,131,132,133,134],"**Sales** (`sale_management`): quotes, orders, customer portal — core module for any commercial activity","**Accounting** (`account_accountant`): chart of accounts, VAT, bank reconciliation, closings","**Inventory** (`stock`): multi-warehouse management, lots and serial numbers, replenishment rules","**Purchasing** (`purchase`): purchase requests, tenders, receiving and supplier invoicing","**Human Resources** (`hr`): employee file, organisational structure, HR documents","**Helpdesk** (`helpdesk`): ticketing, SLA, customer self-service portal — Community includes basic features","**Website** (`website`): page builder, blog, contact forms","**E-Commerce** (`website_sale`): online store, cart, payment — activated alongside the Website module",{"type":97,"title":136,"steps":137},"Optimise your instance performance",[138,141,144,147],{"title":139,"body":140},"Adjust the number of workers","In `odoo.conf`, the `workers` parameter controls the number of Python processes handling HTTP requests. The practical rule: `workers = (vCPU × 2) + 1`. On a 4 vCPU VPS, set `workers = 4`. Below 2, Odoo runs in single-process mode, which blocks long requests (imports, reports).",{"title":142,"body":143},"Configure memory limits","Odoo kills workers that exceed defined limits to prevent memory leaks.\n\n```ini\nlimit_memory_soft = 2147483648   # 2 GB: graceful end signal\nlimit_memory_hard = 2684354560   # 2.5 GB: immediate kill\n```\n\nOn 8 GB RAM with 4 workers + PostgreSQL, these values are consistent. Increase them if your reports are slow or workers restart frequently (`docker compose logs odoo | grep killed`).",{"title":145,"body":146},"Limit crons to avoid CPU saturation","The `max_cron_threads = 2` parameter reserves 2 threads for scheduled tasks (emails, replenishment, reports). Beyond that, crons compete with HTTP workers. On a server dedicated to Odoo, you can go up to 4, but start conservatively.",{"title":148,"body":149},"Enable Redis session storage (optional)","By default, Odoo stores sessions on disk. On shared volumes or with frequent restarts, this can cause disconnections. Add a Redis service to `docker-compose.yml` and configure:\n\n```ini\nsession_store = redis\nredis_url = redis:\u002F\u002Fredis:6379\n```\n\nThis option is especially useful if you plan a multi-instance architecture in the future.",{"type":36,"title":151,"body":152},"Secure the Odoo instance in production","The security of an Odoo instance relies on several complementary layers.\n\n**Disabling the database manager** in production is the most important measure. This interface, accessible by default at `\u002Fweb\u002Fdatabase\u002Fmanager`, allows anyone who knows the master password to create, delete or restore databases. Add to `odoo.conf`:\n\n```ini\ndbfilter = ^your_database$\nlist_db = False\n```\n\n`list_db = False` hides the management interface and prevents database enumeration.\n\n**Force TLS**: Caddy handles this natively. With Nginx, ensure the HTTP vhost systematically redirects to HTTPS and that `Strict-Transport-Security` is set.\n\n**Fail2ban**: configure a jail for failed login attempts on `\u002Fweb\u002Flogin`. Odoo logs these attempts at `warning` level — a regex filter on `Login failed` is sufficient.\n\n**Strong master password**: this password should have at least 32 randomly generated alphanumeric characters. It can only be changed by modifying `odoo.conf` and restarting the container — make it a vault password from the start.",{"type":154,"title":155,"body":156},"tip","Advanced tip: integrating custom modules","The `\u002Fopt\u002Fodoo\u002Faddons` folder is mounted in the container at `\u002Fmnt\u002Fextra-addons`. To install a community module (OCA, or developed in-house), place it in this folder and add the path to `addons_path` in `odoo.conf`.\n\nAfter adding a module, restart Odoo (`docker compose restart odoo`), then go to `Settings > Apps > Update Apps List`. The module appears in the list and installs like any native module.\n\nFor OCA modules, clone directly from GitHub into the `addons` folder: the [OCA organisation on GitHub](https:\u002F\u002Fgithub.com\u002FOCA) groups hundreds of thematic modules (French accounting, EDI, e-commerce connectors, etc.) that are actively maintained.",{"type":54,"title":158,"headers":159,"rows":163},"Hosting comparison: self-hosted VPS vs Odoo SaaS",[160,161,162],"Criterion","Self-hosted VPS (ServOrbit.com)","Odoo.sh \u002F SaaS partner",[164,168,172,176,180,184,188,191,195],[165,166,167],"Monthly cost (10 users)","From 99 DH\u002Fmonth","€150 to €500 depending on modules",[169,170,171],"Data control","Total — data on your server","Data with publisher or partner",[173,174,175],"Community modules","All available, without restriction","Depends on plan and partner",[177,178,179],"Enterprise modules","Not included (separate licence)","Included in subscription",[181,182,183],"Backups","Your responsibility, configurable","Managed by platform",[185,186,187],"Updates","Manual (major migration)","Managed (assisted upgrade)",[189,86,190],"Customisation","Restricted or billable",[192,193,194],"Skills required","Linux administration, Docker","No server skills needed",[196,197,198],"Technical support","Community + partner of choice","SLA per publisher contract","Deploy your ERP with full autonomy","ServOrbit.com offers VPS instances optimised for demanding application workloads like Odoo. Dedicated resources, NVMe SSD, responsive technical support — everything you need to run your ERP in production.","Deploy Odoo on VPS","\u002Fsolutions\u002Fprofessionnels",[204,223,240],{"id":205,"slug":206,"slugs":207,"title":211,"excerpt":212,"readTime":213,"views":18,"isPinned":19,"publishedAt":214,"updatedAt":215,"category":216,"categories":217,"featuredImage":30,"bgImage":31,"posterImage":219,"relatedSolution":220},150,"how-to-host-erpnext-on-a-vps",{"fr":208,"en":206,"ar":209,"es":210},"heberger-erpnext-vps","كيفية-استضافة-erpnext-على-vps","como-alojar-erpnext-en-un-vps","Hosting ERPNext on a VPS: complete guide","Deploy ERPNext on your VPS: modules, post-installation, monitoring, troubleshooting and comparison with Odoo Community. Complete guide with Frappe Docker.",9,"2026-01-26T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[218],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-erpnext-vps-poster.svg",{"categorySlug":221,"appSlug":222},"erp-business-management","erpnext",{"id":224,"slug":225,"slugs":226,"title":230,"excerpt":231,"readTime":232,"views":18,"isPinned":19,"publishedAt":233,"updatedAt":215,"category":234,"categories":235,"featuredImage":30,"bgImage":31,"posterImage":237,"relatedSolution":238},323,"leaving-hubspot-for-self-hosted-twenty-crm-on-a-vps",{"fr":227,"en":225,"ar":228,"es":229},"quitter-hubspot-twenty-crm-self-hosted","الانتقال-من-hubspot-إلى-twenty-crm-المستضاف-ذاتيا","dejar-hubspot-por-twenty-crm-autoalojado-en-vps","Leaving HubSpot for self-hosted Twenty CRM on a VPS","HubSpot Professional reaches $100\u002Fseat\u002Fmonth in 2026. Learn how to migrate to Twenty CRM open source on a VPS in under a day.",12,"2026-09-03T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[236],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fquitter-hubspot-twenty-crm-self-hosted-poster.svg",{"categorySlug":221,"appSlug":239},"twenty",{"id":241,"slug":242,"slugs":243,"title":247,"excerpt":248,"readTime":17,"views":18,"isPinned":19,"publishedAt":249,"updatedAt":250,"category":251,"categories":252,"featuredImage":30,"bgImage":31,"posterImage":254,"relatedSolution":255},368,"wordpress-multisite-vps-manage-n-client-sites-one-install",{"fr":244,"en":242,"ar":245,"es":246},"wordpress-multisite-vps-agence","ووردبريس-متعدد-المواقع-على-vps-ادارة-مواقع-العملاء","wordpress-multisite-vps-gestiona-n-sitios-en-una-instalacion","WordPress Multisite on a VPS: run N client sites from one install","Enable WordPress Multisite on a dedicated VPS to centralize N client sites under one codebase, one update cycle, and isolated subdomains. Full guide for agencies.","2026-09-20T00:00:00+00:00","2026-09-20T21:13:51+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[253],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fwordpress-multisite-vps-agence-poster.svg",{"categorySlug":256,"appSlug":257},"cms-websites","wordpress",1790693252833]