What is Coolify?
Coolify is an open-source, self-hostable Platform-as-a-Service (PaaS)—think “Heroku/Vercel, but free on your own server”. Deploy applications, databases, and services with one click, automatic SSL, and Git integration, with zero monthly fees.
| Feature | Heroku/Vercel | Coolify on Your Server |
|---|---|---|
| One-click deployments | ✅ | ✅ |
| Automatic SSL (Let’s Encrypt) | ✅ | ✅ |
| Git integration | ✅ | ✅ |
| Free database management | ❌ ($) | ✅ |
| Monthly cost | 💰 $7-50+ | 💰 $0 |
| Data ownership | ❌ Provider | ✅ Your server |
| Full customization | ❌ Limited | ✅ Complete |
Trade-off: You manage server infrastructure, but gain complete control and cost savings.
Prerequisites
- Oracle Cloud ARM instance running Ubuntu 24.04
- Root or sudo access
- At least 20GB free disk space (on a block volume)
- Ports 80, 443, 8000 open in Oracle Cloud security lists
- Domain/subdomain pointing to your server IP
- Docker configured to use block volume storage ⚠️ CRITICAL
Table of Contents
- What is Coolify?
- Prerequisites
- Pre-Installation Setup
- Installation
- Deploying Your First Application
- Summary
Pre-Installation Setup
1. Fix /etc/environment (Critical!)
If you have custom PATH configurations, remove shell syntax—use only KEY=value pairs.
Incorrect ❌:
export PATH="${PATH}:/opt/custom-app/bin"
Correct ✅:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/custom-app/bin"
Note: Replace /opt/custom-app/bin with your actual application path (e.g., Gurobi, Go, Rust, etc.)
Coolify uses SSH during setup, and /etc/environment is sourced in SSH sessions. Shell syntax breaks the PATH, making commands unavailable.
2. Stop Conflicting Services
sudo systemctl stop caddy && sudo systemctl disable caddy sudo systemctl stop nginx && sudo systemctl disable nginx
Traefik needs ports 80/443.
3. Configure Docker Block Volume (CRITICAL!)
Oracle Cloud ARM has a small boot volume (45GB) and large block volume (148GB+). Docker MUST use the block volume.
Check current location:
docker info | grep "Docker Root Dir"
If it shows /var/lib/docker, reconfigure:
sudo systemctl stop docker docker.socket
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json > /dev/null <<'EOF'
{
"data-root": "/mnt/myvolume/docker"
}
EOF
sudo mkdir -p /mnt/myvolume/docker
sudo rsync -aP /var/lib/docker/ /mnt/myvolume/docker/
sudo systemctl start docker
docker info | grep "Docker Root Dir" # Should show: /mnt/myvolume/docker
Why: Each deployed app consumes space. Boot volume fills quickly → deployment failures. Block volume has 3x more space.
4. Open Firewall Ports
sudo ufw allow 8000/tcp comment 'Coolify web interface' sudo ufw allow 6001:6002/tcp comment 'Coolify real-time' sudo ufw allow from 10.0.0.0/8 to any port 22 comment 'Docker SSH' sudo ufw status
In Oracle Cloud Console, also add ingress rules for ports 8000, 6001-6002.
Installation
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bash
Installation takes 2-5 minutes. The script will:
- Check system requirements
- Install dependencies
- Configure SSH for localhost
- Create Coolify containers
- Generate secure passwords
Post-Installation Setup
- Access Coolify:
http://YOUR_SERVER_IP:8000(e.g.,http://123.456.78.90:8000) - Create Admin Account: Register with email and password
- Configure Domain: Go to Settings → enter
https://yourdomain.com - Set Up Localhost Server:
- Select Localhost (not Remote Server)
- Use
rootas the user (important!) - Click “Check Again” to verify SSH connection
- Verify Traefik: Go to Servers → localhost → Proxy section
- Should show Traefik Running on ports 80/443
- Access via Domain:
https://yourdomain.com(automatic SSL via Let’s Encrypt)
Deploying Your First Application
For this first application, we will install n8n:
- Go to Projects → + New Project (name it “My Apps”)
- Click + New Resource → Search “n8n”
- Select N8N With PostgreSQL
- Set domain:
n8n.yourdomain.com:9000 - Make sure to add the por tnumber in the domain so the proper load balancer labels get created
- Click Deploy and wait 1-2 minutes
- Access at
https://n8n.yourdomain.com
If you need a complete reference, here’s a template for any service (example shows port 9000):
services:
<service-name>:
image: '<image:tag>'
environment:
SERVICE_URL_<SERVICE>_9000: null
COOLIFY_FQDN: <service.yourdomain.com>
COOLIFY_URL: 'https://<service.yourdomain.com>'
volumes:
- '/var/run/docker.sock:/var/run/docker.sock'
- '<service-data:/data>'
healthcheck:
test: [CMD-SHELL, 'wget -qO- http://127.0.0.1:9000/']
interval: 20s
timeout: 20s
retries: 10
labels:
- traefik.http.routers.https-<service>.rule=Host(`<service.yourdomain.com>`)
- traefik.http.services.https-<service>.loadbalancer.server.port=9000
- traefik.http.routers.https-<service>.service=https-<service>
- traefik.http.routers.https-<service>.entrypoints=https
- traefik.http.routers.https-<service>.tls=true
- traefik.http.routers.https-<service>.tls.certresolver=letsencrypt
- traefik.enable=true
Coolify automatically handles: Docker image pull, PostgreSQL setup, Traefik routing, SSL certificates.
Post-Deployment Verification
⚠️ Immediately test your deployed service by accessing the domain in your browser or running:
curl -I https://n8n.yourdomain.com
Expected result: HTTP 200 OK or service-specific status code.
For a more detailed explanation of how to install Coolify, please watch this excellent video that covers all the details
Summary
Coolify transforms Oracle Cloud ARM into a powerful, cost-free PaaS. Deploy applications in minutes with automatic SSL, zero configuration complexity.
Critical steps:
- Configure Docker block volume FIRST
- Stop conflicting proxies (Caddy/Nginx)
- Fix
/etc/environmentif using custom PATH - Use
rootuser for localhost deployments - Test deployed services immediately
With proper setup, you can manage multiple production applications on your own hardware with zero monthly fees.
Resources: