Skip to main content

Coolify

Setup

Everything must be configured before the Coolify installer runs. The installer detects an existing Docker installation and skips it, preserving our config.

  1. Update OS packages before doing anything else, then reboot to apply any kernel upgrades:

    sudo apt update && sudo apt upgrade -y
    sudo reboot
  2. Redirect /data to the data disk via symlink (Coolify hardcodes /data with no override):

    sudo mkdir -p /mnt/data/coolify-data
    sudo ln -s /mnt/data/coolify-data /data
  3. Configure Docker to use the data disk:

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<EOF
    {
    "data-root": "/mnt/data/docker",
    "log-driver": "json-file",
    "log-opts": {
    "max-size": "10m",
    "max-file": "3"
    },
    "default-address-pools": [
    {"base":"10.0.0.0/8","size":24}
    ]
    }
    EOF
  4. Configure containerd to use the data disk:

    sudo mkdir -p /mnt/data/containerd /etc/containerd
    sudo tee /etc/containerd/config.toml <<EOF
    disabled_plugins = ["cri"]
    root = "/mnt/data/containerd"
    EOF
  5. Install Docker manually so the Coolify installer skips it and leaves our config intact. The Coolify installer uses a non-interactive convenience script which fails silently when dpkg prompts about config.toml — installing via apt lets us handle that prompt ourselves:

    sudo apt-get update
    sudo apt-get install -y ca-certificates curl
    sudo install -m 0755 -d /etc/apt/keyrings
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
    sudo chmod a+r /etc/apt/keyrings/docker.asc
    echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stable" | sudo tee /etc/apt/sources.list.d/docker.list
    sudo apt-get update
    sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

    When dpkg asks about config.toml, answer N to keep our version.

    Verify Docker is using the right root:

    sudo docker info | grep "Docker Root Dir"
  6. Run the Coolify installer (ignore disk space warnings, it continues after 5s):

    curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bash
  7. Back up /data/coolify/source/.env to a password manager — it contains APP_KEY, DB_PASSWORD, REDIS_PASSWORD and Pusher keys. Without it you cannot decrypt service environment variables after a restore:

    sudo cat /data/coolify/source/.env
  8. Open port 8000 in the Infomaniak firewall dashboard.

  9. Open http://<server-ip>:8000 and create an admin account.

  10. Add DNS records at Infomaniak pointing dashboard.<domain> to the server:

    • A record: <ipv4>
    • AAAA record: <ipv6>
  11. Open ports 80 and 443 in the Infomaniak firewall dashboard (80 is needed for the Let's Encrypt HTTP challenge).

  12. Configure https://dashboard.<domain> in Coolify settings and let it issue an SSL cert via Let's Encrypt. If the cert fails, re-save the domain in settings or restart the proxy to retry:

    sudo docker restart coolify-proxy
  13. Close port 8000 in the Infomaniak firewall once HTTPS is working.

  14. Enable server metrics in Servers → localhost → Metrics — toggle it on to get CPU, memory and disk stats per container.

  15. Enable 2FA on the admin account in Coolify settings.

  16. Set up shared SMTP variables at the team level (Team → Shared Variables) so they can be referenced across all services as {{team.VAR_NAME}}:

    VariableValue
    DEFAULT_SMTP_HOSTsmtp.protonmail.ch
    DEFAULT_SMTP_PORT587
    DEFAULT_SMTP_USERNAMEyour Proton email
    DEFAULT_SMTP_PASSWORDProton SMTP token
    DEFAULT_SMTP_FROMyour Proton email
  17. Configure transactional email via Proton Mail SMTP:

    • In Proton: Settings → All settings → Account → SMTP submission → enable and generate a token
    • In Coolify: Settings → Transactional Email:
    FieldValue
    Enabled✓ (must check this box)
    Hostsmtp.protonmail.ch
    Port587
    EncryptionSTARTTLS
    Usernameyour Proton email
    Passwordgenerated SMTP token

    Test by sending a test email from the Notifications tab in the main interface.