Installing Coolify on an Oracle ARM Ubuntu server

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.

FeatureHeroku/VercelCoolify 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

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

  1. Access Coolifyhttp://YOUR_SERVER_IP:8000 (e.g., http://123.456.78.90:8000)
  2. Create Admin Account: Register with email and password
  3. Configure Domain: Go to Settings → enter https://yourdomain.com
  4. Set Up Localhost Server:
    • Select Localhost (not Remote Server)
    • Use root as the user (important!)
    • Click “Check Again” to verify SSH connection
  5. Verify Traefik: Go to Servers → localhost → Proxy section
    • Should show Traefik Running on ports 80/443
  6. Access via Domainhttps://yourdomain.com (automatic SSL via Let’s Encrypt)

Deploying Your First Application

For this first application, we will install n8n:

  1. Go to Projects → + New Project (name it “My Apps”)
  2. Click + New Resource → Search “n8n”
  3. Select N8N With PostgreSQL
  4. Set domain: n8n.yourdomain.com:9000
  5. Make sure to add the por tnumber in the domain so the proper load balancer labels get created
  6. Click Deploy and wait 1-2 minutes
  7. 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/environment if using custom PATH
  • Use root user 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:

Share