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.ptpara 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.