Coolify: PaaS Self-Hosted — Alternativa ao Heroku/Vercel para PME

O Coolify é uma plataforma PaaS self-hosted de código aberto que permite fazer deploy de aplicações na sua própria infraestrutura com a simplicidade do Heroku ou Vercel, mas sem custos por utilizador ou por aplicação. Para pequenas e médias empresas (PME) que pretendem evitar o vendor lock-in e controlar os seus dados, o Coolify oferece uma alternativa robusta e económica às plataformas cloud comerciais.

Nota: Este artigo cobre o Coolify v4 (a versão actual em 2026), que foi reescrito do zero com uma arquitectura baseada em Docker e suporte multi-server.

Neste artigo vamos abordar a instalação numa VPS, o deploy de aplicações em Node.js, PHP, Python e estáticas, a configuração de domínios com SSL automático via Let’s Encrypt, e uma comparação directa com Dokku e CapRover.

Introdução: PaaS Self-Hosted vs Heroku/Vercel

Um Platform-as-a-Service (PaaS) abstrai a complexidade da gestão de servidores: o utilizador faz git push e a plataforma encarrega-se de construir a imagem, provisionar a base de dados, configurar o proxy inverso e emitir o certificado SSL. O Heroku popularizou este modelo em 2007, e a Vercel refinou-o para aplicações front-end e serverless a partir de 2015.

No entanto, estas plataformas comerciais têm limitações para PME:

  • Custos escalonantes: O Heroku cobra por dyno ($25+/mês por processo), e a Vercel limita largura de banda nos planos gratuitos. Uma aplicação com base de dados PostgreSQL e worker pode facilmente ultrapassar $100/mês.
  • Vendor lock-in: As aplicações ficam dependentes das APIs proprietárias da plataforma (Heroku Postgres, Vercel Edge Functions), dificultando a migração.
  • Limites de tráfego de saída: A Vercel impõe limites mensais de largura de banda (100 GB no plano Pro) que podem ser rapidamente consumidos por imagens ou vídeos.
  • Privacidade de dados: Os dados residem em infraestrutura de terceiros, o que pode violar requisitos de conformidade (RGPD, normas sectoriais).

Um PaaS self-hosted como o Coolify resolve estes problemas. O Coolify é um projecto de código aberto (licença Apache 2.0) desenvolvido por Andras Bacsai e mantido pela comunidade. Corre na sua própria VPS, suporta deploy via Git push ou integração com GitHub/GitLab, e inclui gestão de bases de dados (PostgreSQL, MySQL, Redis, MongoDB, MariaDB), certificados SSL automáticos via Let’s Encrypt, e um painel web para gestão visual.

Vantagem principal: Uma VPS com 4 GB RAM e 2 vCPU (~$12/mês na Hetzner ou DigitalOcean) pode alojar 10-15 aplicações pequenas com Coolify, enquanto o mesmo cenário no Heroku custaria $250+/mês.

O Coolify v4 introduziu suporte multi-server: é possível adicionar VPS adicionais como “destinations” e distribuir aplicações por vários servidores a partir de um único painel de controlo. Esta arquitectura permite escalar horizontalmente sem trocar de plataforma.

Instalar Coolify numa VPS com Docker

A instalação do Coolify é simples e decorre num único comando. Antes de começar, é necessário preparar a VPS com os requisitos mínimos.

Requisitos da VPS

  • Sistema operativo: Ubuntu 22.04/24.04, Debian 12 ou CentOS Stream 9
  • RAM: 2 GB mínimo (4 GB recomendado para produção)
  • CPU: 2 vCPU
  • Disco: 30 GB SSD
  • Docker: instalado automaticamente pelo script de instalação
  • Portas: 8000 (painel Coolify), 443 (HTTPS), 80 (HTTP/Let’s Encrypt)

Para este guia, assumimos uma VPS com Ubuntu 24.04 LTS na Hetzner Cloud (CXP21: 3 vCPU, 4 GB RAM, ~€4/mês). O processo é idêntico em DigitalOcean, Vultr, OVH ou qualquer outro provider.

Passo 1 — Actualizar o sistema

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git

Passo 2 — Instalar o Coolify

O script oficial instala o Docker (se ainda não estiver instalado), descarrega as imagens necessárias e inicia o painel Coolify:

curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash

O script demora aproximadamente 3-5 minutos. Ao concluir, o painel estará disponível em http://<IP-da-VPS>:8000. No primeiro acesso, é criada uma conta de administrador com um token de registo único mostrado no terminal.

Passo 3 — Configurar o acesso por domínio

Após o primeiro início de sessão, aceda a Settings e defina o domínio do painel (ex: coolify.empresa.pt). O Coolify emite automaticamente um certificado SSL via Let’s Encrypt para o painel. É necessário que o registo DNS (registo A) aponte para o IP da VPS antes de activar esta opção.

# Registo DNS A (exemplo)
coolify.empresa.pt.  3600  IN  A  49.12.x.x

Passo 4 — Adicionar servidor de destino (opcional)

Por defeito, o Coolify faz deploy no servidor onde está instalado (localhost). Para distribuir aplicações por servidores adicionais, aceda a Servers > Add Server e forneça o IP, porta SSH e chave pública. O Coolify instala o Docker remotamente via SSH no novo servidor.

Atenção: O servidor remoto deve permitir SSH com chave pública. O utilizador remoto precisa de permissões sudo sem palavra-passe para que o Coolify possa instalar o Docker. Configure sudoers adequadamente.

Deploy de Aplicações: Node, PHP, Python e Estáticos

O Coolify suporta quatro tipos de deploy: aplicações baseadas em Dockerfile (qualquer linguagem), aplicações com Nixpacks (build automático sem Dockerfile), aplicações estáticas (HTML/CSS/JS) e serviços pré-configurados (WordPress, Plausible, n8n, entre outros). Vamos abordar os quatro cenários mais comuns para PME.

Deploy de aplicação Node.js (Nixpacks)

O Nixpacks é o buildpack padrão do Coolify. Para uma aplicação Express.js comum, não é necessário escrever um Dockerfile — o Nixpacks detecta o package.json e constrói automaticamente.

Estrutura mínima do projecto:

meu-app/
├── package.json
├── server.js
└── .env

O package.json deve definir o script start:

{
  "name": "meu-app",
  "version": "1.0.0",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.19.0"
  }
}

No painel do Coolify: New Resource > Application > selecionar o repositório Git (via integração GitHub/GitLab ou URL pública). Definir o domínio (ex: app.empresa.pt), porta da aplicação (3000 por defeito) e clicar em Deploy. O Coolify faz clone, constrói com Nixpacks, inicia o contentor e configura o Traefik como proxy inverso.

Deploy de aplicação PHP (Laravel)

Para aplicações PHP, o Nixpacks detecta o composer.json e constrói automaticamente com PHP-FPM + Nginx. Para Laravel, é necessário configurar o document root para /public.

Adicione um ficheiro nixpacks.toml na raiz do projecto:

[phases.setup]
cmds = ["composer install --no-dev --optimize-autoloader"]

[phases.build]
cmds = ["php artisan key:generate", "php artisan migrate --force"]

[start]
cmd = "php artisan serve --host=0.0.0.0 --port=8080"

Alternativamente, pode-se fornecer um Dockerfile customizado para controlo total:

FROM php:8.3-fpm-alpine

RUN docker-php-ext-install pdo pdo_mysql
COPY . /var/www/html
WORKDIR /var/www/html

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN composer install --no-dev --optimize-autoloader

CMD ["php", "artisan", "serve", "--host=0.0.0.0", "--port=8080"]

Deploy de aplicação Python (Flask/Django)

Para Python, o Nixpacks detecta requirements.txt, pyproject.toml ou Pipfile. Para uma aplicação Flask simples:

# requirements.txt
flask==3.0.3
gunicorn==23.0.0
# nixpacks.toml
[start]
cmd = "gunicorn --bind 0.0.0.0:8080 app:app"

Para Django, ajuste o ALLOWED_HOSTS no settings.py para incluir o domínio configurado no Coolify, e use gunicorn projeto.wsgi:application como comando de arranque.

Deploy de site estático

Para sites estáticos (HTML/CSS/JS puro ou gerados por Hugo, Astro, Eleventy), o Coolify serve os ficheiros directamente via Nginx sem necessidade de build. Seleccionar New Resource > Application > tipo “Static Site”, apontar para o repositório e definir o directório de saída (ex: dist/ ou public/).

Para projectos que requerem um passo de build (Astro, Vite, Next.js export), defina o comando de build no campo Build Command (ex: npm run build) e o directório de output em Output Directory (ex: dist).

Dica: O Coolify suporta variáveis de ambiente por aplicação (Environment tab), com opção de expor apenas no runtime (não no build). Use esta opção para chaves de API e credenciais de base de dados — evita que sejam incluídas na imagem Docker.

Domínios e SSL Automático via Let’s Encrypt

O Coolify integra o Traefik como proxy inverso e gere automaticamente certificados SSL através do Let’s Encrypt. Quando define um domínio para uma aplicação, o Coolify configura o Traefik para responder a esse domínio e solicita o certificado no primeiro acesso.

Configurar um domínio por aplicação

Na página da aplicação no painel Coolify, secção “Domains”, insira o domínio desejado (ex: https://app.empresa.pt). É necessário que o registo DNS A aponte para o IP da VPS antes de aplicar a configuração.

# DNS — registo A para a aplicação
app.empresa.pt.  3600  IN  A  49.12.x.x

Após salvar, o Coolify reinicia o Traefik com a nova configuração. No primeiro acesso HTTPS, o Traefik solicita o certificado via desafio HTTP-01 (porta 80) e armazena-o em volume Docker persistente. A renovação é automática (Let’s Encrypt certificados têm validade de 90 dias e o Traefik renova 30 dias antes da expiração).

Domínios wildcard

Para usar domínios wildcard (*.empresa.pt), é necessário usar o desafio DNS-01 em vez do HTTP-01. No painel Settings > Server, configure o provider DNS (Cloudflare, DigitalOcean, Route53, etc.) com a respectiva API token. O Coolify suporta os principais providers DNS via lego (a biblioteca ACME usada pelo Traefik).

Resolver problemas comuns de SSL

Se o certificado não for emitido, verifique os seguintes pontos:

  • Porta 80 bloqueada: O desafio HTTP-01 requer que a porta 80 esteja acessível a partir da Internet. Verifique o firewall da VPS (sudo ufw allow 80/tcp).
  • DNS não propagado: Use dig app.empresa.pt para confirmar que o registo A resolve para o IP correcto. A propagação pode demorar até 48 horas (TTL dependente).
  • Limite de taxa Let’s Encrypt: O Let’s Encrypt impõe limites de 50 certificados por domínio por semana. Para ambientes de teste, use o servidor de teste do Let’s Encrypt (opção em Settings > Server).
  • Domínio já com certificado: Se outro serviço na mesma VPS já tiver um certificado para o mesmo domínio, há conflito. Use subdomínios distintos ou reconfigure o Traefik.

Importante: O Coolify renova certificados automaticamente, mas não envia notificações por e-mail se a renovação falhar. Configure monitorização externa (Uptime Kuma ou similar) para alertar sobre certificados a expirar.

Comparação: Coolify vs Dokku vs CapRover

Existem três principais alternativas open-source de PaaS self-hosted: Coolify, Dokku e CapRover. Cada um tem as suas vantagens e casos de uso ideais. A tabela seguinte resume as diferenças principais:

Funcionalidade Coolify Dokku CapRover
Licença Apache 2.0 MIT Apache 2.0
Interface web Completa (React) Não (CLI apenas) Completa (Angular)
Multi-server Sim (nativo v4) Não (por servidor) Não (por servidor)
Build automático Nixpacks + Dockerfile Heroku buildpacks + Dockerfile Captain-definition + Dockerfile
Bases de dados geridas PostgreSQL, MySQL, Redis, MongoDB, MariaDB, KeyDB Via plugins (Postgres, Redis, MySQL) PostgreSQL, MySQL, Redis, MongoDB
SSL automático Sim (Traefik + Let’s Encrypt) Sim (Caddy ou Traefik plugin) Sim (Let’s Encrypt nativo)
Serviços pré-configurados 80+ (WordPress, n8n, Plausible, Metabase…) Limitado (via plugins) 60+ (One-Click Apps)
Integração Git GitHub, GitLab, Bitbucket, Gitea Git push nativo GitHub, GitLab, Bitbucket
Backups automáticos Sim (S3, scheduled) Via plugins externos Não nativo
Deploy preview (PRs) Sim (por pull request) Não Não
Curva de aprendizagem Baixa (UI intuitiva) Média (CLI, herda conceitos Heroku) Baixa (UI simples)
Comunidade / Suporte Discord activo, Patreon, GitHub Sponsors Slack, GitHub Issues Discord, GitHub Issues
Melhor para PME que querem painel web + multi-server Equipas dev confortáveis com CLI Iniciantes que querem simplicidade

Quando escolher Coolify: Para PME que pretendem um painel web completo, suporte multi-server, backups integrados e deploy previews em pull requests. É a opção mais completa em termos de funcionalidades empresariais.

Quando escolher Dokku: Para equipas de desenvolvimento que preferem a linha de comandos e já estão familiarizadas com o modelo Heroku (git push deploy). É mais leve e consome menos recursos (~512 MB RAM), ideal para VPS pequenas com uma ou duas aplicações.

Quando escolher CapRover: Para iniciantes que valorizam a simplicidade acima de tudo. A interface é menos polida que o Coolify e não suporta multi-server, mas o sistema de One-Click Apps é excelente para quem quer correr serviços pré-configurados sem complicação.

Recomendação para PME: O Coolify é a opção mais equilibrada — oferece a experiência mais próxima do Heroku/Vercel com uma interface profissional, suporte para equipas (multi-utilizador em planos cloud) e funcionalidades avançadas como deploy previews e backups S3. Para uma PME com 5-20 aplicações, o Coolify numa VPS de €10-20/mês substitui completamente uma conta Heroku de €100-200/mês.

Conclusão

O Coolify é uma alternativa viável e madura ao Heroku e Vercel para PME que pretendem controlar a sua infraestrutura sem sacrificar a simplicidade de deploy. Com instalação num único comando, suporte para as principais linguagens (Node.js, PHP, Python, Go, Ruby, estáticos), SSL automático via Let’s Encrypt, e um painel web intuitivo, o Coolify reduz a barreira de entrada para auto-alojamento profissional.

A capacidade multi-server, os backups automáticos para S3 e os deploy previews em pull requests são funcionalidades que o distinguem de alternativas como Dokku e CapRover. Para uma PME que gere múltiplas aplicações web, o retorno do investimento é imediato: uma VPS de €10-20/mês substitui centenas de euros em custos de PaaS comercial.

A documentação oficial do Coolify está disponível em coolify.io/docs e o código-fonte no GitHub.