Which server do I need?
This page tells you which server size you need for which usage — with a clear recommendation, so you buy neither too small (stutters, calls drop) nor unnecessarily large.
1. Minimum (just to get it running)
| Resource | Minimum | Note |
|---|---|---|
| CPU | 2 vCPU | 1 vCPU is only good for a look, not real operation |
| RAM | 4 GB | Below that the kernel kills services under load spikes (build/marketing) |
| Disk | 40 GB SSD | System + images + DB + first attachments. HDD not recommended (Postgres + object store want IOPS) |
| OS | Linux + Docker & Docker Compose | tested on Debian/Ubuntu |
| Network | static IP recommended | required for the built-in phone system (see §5) |
That starts the full stack: app, worker,
postgres, redis, minio — plus, if you want,
asterisk and coturn for the built-in
phone system (since 1.1.58 the installer asks), caddy for automatic HTTPS and, since 1.1.42, optionally translate
for translation in the inbox. The installer
sets all of it up with one command.
2. What each service costs
| Service | What for | RAM (idle → load) | Driver |
|---|---|---|---|
| app | Web UI + API | 0.4 → 1.5 GB | concurrent users |
| worker | Email fetch, marketing, reminders, call post-processing | 0.25 → 1 GB | marketing size, mailboxes |
| postgres | all data | 0.5 → 1.5 GB | data volume + reports |
| redis | job queue | ~0.1 GB | — |
| minio | attachments, recordings, voicemail | ~0.25 GB | file volume (disk!) |
| asterisk | phone system | 0.2 GB → per call | concurrent calls |
| coturn | audio relay (NAT) | ~0.1 GB | calls over difficult networks |
| piper | neural announcement voice (TTS), only up to 1.1.50; no longer needed from 1.1.51, announcements are your own recordings | 0.2 → 0.5 GB | only when voicing prompts |
| translate (optional) | translation in the inbox on your server (LibreTranslate) | 0.1 → 0.9 GB (German/English/Turkish), each further language +0.2–0.4 GB; hard limit 1.5 GB | bursts while translating, number of languages |
Rule of thumb: contacts/companies/deals are almost free for the server (database rows). What grows is disk space (attachments/recordings) and CPU/bandwidth (concurrent calls).
translate service translates in the inbox on your own server, without internet access. Plan up to 1.5 GB RAM extra for it (German/English/Turkish need up to ~0.9 GB) and ~0.6 GB disk once for the language models (plus ~0.6 GB for the image). How to switch it on, and the compose blocks for installations from before 1.1.42: Self-hosting operations → Translation. Without the service, translation works with your own AI or DeepL key.3. Recommended sizes by usage
Pick the column where your highest number lands — one big number is enough to move you up a tier.
| Small | Medium | Large | |
|---|---|---|---|
| Server | 2 vCPU · 4 GB · 40 GB SSD | 4 vCPU · 8 GB · 80–160 GB SSD | 8+ vCPU · 16–32 GB · 200+ GB NVMe |
| Concurrent users | up to ~5 | ~5–20 | 20–50+ |
| Emails / day | up to ~500 | ~500–3,000 | 3,000+ |
| Concurrent calls | 1–2 | 5–10 | 20+ |
| Call recording | light | yes | constant |
| Marketing / month | up to ~2,000 | ~10–20,000 | 50,000+ |
| Good for | solo office, start | growing team | call center / multiple brands |
Most companies: "Medium" — 4 vCPU / 8 GB / 80–160 GB SSD. Comfortable headroom for team, reports, marketing and ~5–10 parallel calls with recording.
Only CRM + email + web chat (barely any phone): "Small" is plenty. · Serious call center: "Large", and then keep telephony and database on separate servers (§6).
4. Plan disk space realistically
The disk is what fills up over time — plan it more generously than RAM:
- Call recordings: ~1 MB per minute of conversation. 1,000 recorded minutes/month ≈ 1 GB/month.
- Email attachments / media: highly variable; large PDFs/images add up.
- Database: grows slowly (text). Even 100,000+ conversations stay in the low GB range.
- Docker images: ~2–4 GB.
- Translation (optional): language models once ~0.6 GB (German, English, Turkish) plus ~0.6 GB for the image.
Rule of thumb: base 40 GB + estimated recording/attachment growth × 12 months + reserve. With a lot of recording, plan 160–200 GB. Old recordings/attachments can be offloaded/deleted later.
5. Telephony needs more than compute
If you use the built-in phone system, network requirements are added:
- Public, static IPv4 address (no CGNAT; the phone system only supports IPv4). On a home connection with a changing address it's only good for testing. If the server is behind a router (NAT), forward the ports below to it; the installer asks for the public address and remembers your local one.
- Ports (incoming, also in your provider's firewall): SIP
5060/udp, voice (RTP)10000–20000/udp, STUN/TURN for video meetings3478/udp+3478/tcp, TURN relay49152–49252/udp, phone in the browser via443/tcp(open for the app anyway). Never open from outside:5038/tcp(AMI) and8188/tcp(Asterisk HTTP) — only containers on the server need them. - Bandwidth: ~170 kbit/s per concurrent call (in+out, G.711). 10 in parallel ≈ ~1.7 Mbit/s stable — upload counts.
- Transcoding trap: if endpoints/trunk speak different codecs, Asterisk has to convert (costs CPU per call). Recommendation: use the same codec (G.711) everywhere.
- Simultaneous calls (from 1.1.46): without a paid key at most 2, as on Free. For the whole server
PBX_MAX_CONCURRENTapplies (default 80, measured on 4 vCPU). For that, Asterisk needs more than 1024 open files:ulimitswithnofile65536 on the compose serviceasterisk, otherwise set 55 at most (guide).
6. Email sending: outbound ports (the most common cloud pitfall)
The CRM sends email (password reset, notifications, marketing) via your SMTP mailbox — i.e. outbound connections to port 587 (or 465/25). Many cloud/VPS providers block these outbound mail ports by default as anti-spam (incl. Hetzner, netcup, DigitalOcean, AWS/GCP/Azure).
993) is usually NOT blocked → only sending hangs.Check (from the server):
nc -zv your-mailserver 587 — timeout = blocked.Fix 1 (usually easiest): open a support ticket with your provider to "unblock outbound SMTP ports 587/465" (with your server IP; no bulk mail). For legitimate use this is generally granted.
Fix 2: use a transactional email service over HTTPS/port 443 — 443 is never blocked.
On your own/company connection this usually doesn't happen; there the static IP is the topic (§5).
7. When to split (scale-out)
A single server carries far. Only real call-center volume makes splitting worthwhile:
- First
postgresonto its own server (or managed Postgres) — the DB is the most valuable, IO-sensitive part. - Then
asterisk+coturnonto their own telephony host — so call load never disturbs the web app. miniocan point to external S3 storage when recordings/attachments get large.
8. Operations & backups
- Backups: the most important is Postgres (regular
pg_dumpor managed backup) + theminiovolume. In addition the CRM offers a per-tenant snapshot export (Settings → Data backup). - HTTPS: the self-host bundle ships Caddy (automatic Let's Encrypt certificates).
- Updates: from 1.1.53 the installation updates itself at night with
update.sh– with a backup first and a check afterwards (can be turned off; at least 3 GB of free space for the new images). A banner in the app reports new versions and you can update instantly with a button. Installations from before 1.1.53 use Watchtower until you switch. - RAM reserve: leave ~20 % RAM free — marketing bulk sends + the nightly build/pull are load spikes.
"Just a CRM + mailbox + chat for a small team" → Small (2/4/40).
"Team, reports, marketing, occasional calls with recording" → Medium (4/8/160) — our standard recommendation.
"We're on the phone all day / call center" → Large (8+/16–32/NVMe), split telephony & DB later.
When in doubt, start one tier larger — adding RAM/disk later is more annoying than having reserve from the start.
Ready? → Go to the installation guide (one command, no config files) · Questions? Contact us.