Server requirements
Minimum specs
Section titled “Minimum specs”| Profile | CPU | RAM | Disk |
|---|---|---|---|
| Default (runtime + designer + docs) | 2 cores | 4 GB | 30 GB |
--profile mesh (+ Kafka + Pulsar) | 4 cores | 8 GB | 50 GB |
--profile multi-broker (+ second Pulsar) | 4 cores | 12 GB | 80 GB |
These are minimums for development / small-team use. Production deployments serving real traffic should size up — Camel routes plus the JVM happily use 2-4 GB of RAM each under load.
Software
Section titled “Software”- Docker Engine 24.0+ (Compose v2 plugin included)
- Linux — any modern distro. We test on Ubuntu 24.04.
- macOS / Windows work for development via Docker Desktop, but Let’s Encrypt provisioning needs port 80/443 reachable from the public internet, which most laptops aren’t.
The stack binds nothing on the host directly — Traefik is the only ingress. Make sure these are open:
| Port | Protocol | Source | Purpose |
|---|---|---|---|
| 80 | TCP | 0.0.0.0/0 | Let’s Encrypt HTTP-01 + HTTP→HTTPS redirect |
| 443 | TCP | 0.0.0.0/0 | TLS-terminated traffic to all services |
If you’re behind a load balancer (AWS ALB, Cloudflare etc.), terminate TLS at the LB and forward port 80+443 to your server.
Docker network
Section titled “Docker network”The stack expects an external network named coolify. Coolify creates
this automatically on first deploy. For non-Coolify hosts:
docker network create coolifyOnce. The compose file declares it as external: true so it survives
stack rebuilds without losing IPs.
Disk volumes
Section titled “Disk volumes”Two external Docker volumes hold persistent data:
ipaas_ipaas-runtime-routes— deployed Camel YAML filesipaas_ipaas-designer-flows— designer’s flow definitions + layouts
init.sh doesn’t create these — Compose creates them on first up.
The ipaas_* prefix is a Compose convention (it prepends the project
name); the ipaas-* mid-fix is preserved on the legacy live deployment
and harmless for new installs.
If you ever rebuild from scratch (docker compose down -v), the
volumes survive because they’re tagged external: true.