Layer 5 · self-hosting reality check
What it actually takes to self-host EspoCRM
The docs say not stated by the vendor. A forum super-moderator says 1 GB is enough for a plain Nginx + PHP-FPM + MariaDB install, and Cloudron packages it with a 512 MB app limit, with MySQL as a separate service.. In practice you want 2–4 GB. The official Docker stack runs four containers (app, daemon, websocket, MariaDB). A 4–5 user Docker install reported 40% of 4 GB in use, and forum users put 2 GB as fine for light use.. Here is the honest version — real requirements, real monthly cost, what you will be maintaining, and the one thing that catches people out.
Usually reached from Salesforce alternatives, where EspoCRM is one of the picks.
Wondering whether you need to at all? Is Salesforce free? — what the free tier actually allows, and where the wall is.
| RAM — documented minimum | not stated by the vendor. A forum super-moderator says 1 GB is enough for a plain Nginx + PHP-FPM + MariaDB install, and Cloudron packages it with a 512 MB app limit, with MySQL as a separate service. |
|---|---|
| RAM — what it really needs | 2–4 GB. The official Docker stack runs four containers (app, daemon, websocket, MariaDB). A 4–5 user Docker install reported 40% of 4 GB in use, and forum users put 2 GB as fine for light use. |
| CPU | 1–2 vCPU; not stated by the vendor. Its own tuning guide says the database is usually the bottleneck. |
| Disk | Uploaded files and attachments on disk, and a database that grows with imported email and records. Leave room for backups. |
| Monthly cost | $6–24/mo for a 10-user instance on a 2–4 GB VPS |
| Setup time | 30 minutes with the official install script; an afternoon by hand |
| How you install it | The official install script, which sets up EspoCRM in Docker with Nginx and MariaDB and gives you a command.sh to manage it. Or docker compose from the docs (app, daemon, websocket, MariaDB), or a manual LAMP/LEMP install with a per-minute cron. |
| Ongoing maintenance | Upgrade with `php command.php upgrade` or a new image; the vendor calls patch releases a no-brainer and says minor and major ones need a backup first. PHP must be upgraded before EspoCRM whenever the next version needs it. MariaDB needs tuning (innodb_buffer_pool_size) as data grows. |
| Where it stops scaling | One 2–4 GB box is comfortable for a small team. As records grow, the vendor's advice is database first: set innodb_buffer_pool_size to about 70% of RAM, add indexes and full-text search, then give the database its own host. |
The thing that catches people out
EspoCRM's upgrader refuses to move to a version that needs a newer PHP than the one installed, and the current line needs PHP 8.3–8.5. On a hand-built server, every EspoCRM upgrade can become a PHP upgrade first, with every extension reinstalled for both PHP-FPM and the command-line PHP the cron uses. Forum threads show how it breaks: the web server on one PHP and the command line on another, then error 500. Or `php command.php upgrade` stops at 'Downloading…' with no error, because command-line PHP has a lower memory limit than the web server. Back up first, check that `php -v` matches FPM, and run `php -d memory_limit=512M command.php upgrade`. The Docker install avoids all this because PHP ships inside the image.
When not to self-host EspoCRM
You need heavy marketing automation or a big app marketplace built in: pair it with Mautic, or pay for HubSpot or Salesforce. Also skip it if nobody on the team will own PHP upgrades; use EspoCRM's hosted plan instead.
Every guide here carries this section. A site that only ever tells you to self-host is selling something — the useful answer is sometimes no.
Other Layer 5 self-hosting guides
- Self-hosting LibreOffice2 GB with a large spreadsheet open
- Self-hosting ONLYOFFICE6 GB for the Document Server with a handful of concurrent editors
- Self-hosting Collabora Online4 GB, and roughly 1 GB per 20 concurrent documents
- Self-hosting CryptPad2 GB for a small instance
- Self-hosting Mattermost4 GB for a team of 50 with PostgreSQL on the same box
- Self-hosting Rocket.Chat6 GB with MongoDB on the same machine
Common questions
- How much RAM does EspoCRM actually need?
- 2–4 GB. The official Docker stack runs four containers (app, daemon, websocket, MariaDB). A 4–5 user Docker install reported 40% of 4 GB in use, and forum users put 2 GB as fine for light use. in practice. The documented minimum is not stated by the vendor. A forum super-moderator says 1 GB is enough for a plain Nginx + PHP-FPM + MariaDB install, and Cloudron packages it with a 512 MB app limit, with MySQL as a separate service., which is the figure at which the process starts rather than the figure at which it works under real use. 1–2 vCPU; not stated by the vendor. Its own tuning guide says the database is usually the bottleneck. alongside it.
- What does self-hosting EspoCRM cost per month?
- $6–24/mo for a 10-user instance on a 2–4 GB VPS This is commodity VPS pricing and excludes your time, which is the larger cost for most people — budget for upgrade with `php command.php upgrade` or a new image; the vendor calls patch releases a no-brainer and says minor and major ones need a backup first. PHP must be upgraded before EspoCRM whenever the next version needs it. MariaDB needs tuning (innodb_buffer_pool_size) as data grows.
- How long does it take to set up EspoCRM?
- 30 minutes with the official install script; an afternoon by hand, via The official install script, which sets up EspoCRM in Docker with Nginx and MariaDB and gives you a command.sh to manage it. Or docker compose from the docs (app, daemon, websocket, MariaDB), or a manual LAMP/LEMP install with a per-minute cron..
- When should I NOT self-host EspoCRM?
- You need heavy marketing automation or a big app marketplace built in: pair it with Mautic, or pay for HubSpot or Salesforce. Also skip it if nobody on the team will own PHP upgrades; use EspoCRM's hosted plan instead.
- What is the most common mistake when self-hosting EspoCRM?
- EspoCRM's upgrader refuses to move to a version that needs a newer PHP than the one installed, and the current line needs PHP 8.3–8.5. On a hand-built server, every EspoCRM upgrade can become a PHP upgrade first, with every extension reinstalled for both PHP-FPM and the command-line PHP the cron uses. Forum threads show how it breaks: the web server on one PHP and the command line on another, then error 500. Or `php command.php upgrade` stops at 'Downloading…' with no error, because command-line PHP has a lower memory limit than the web server. Back up first, check that `php -v` matches FPM, and run `php -d memory_limit=512M command.php upgrade`. The Docker install avoids all this because PHP ships inside the image.