Coolify est un panneau libre qui reprend le modèle de Heroku sur votre propre serveur : vous lui donnez un dépôt Git, il construit l'image, lance le conteneur, branche le domaine et demande le certificat HTTPS. Il gère aussi des bases de données et peut piloter d'autres serveurs par SSH.
Nous l'avons installé avec le script officiel sur un VPS neuf à Montréal, puis nous avons déployé une application Node depuis un dépôt public, chronométré les déploiements et créé une base PostgreSQL. Toutes les mesures ci-dessous viennent de cette machine, détruite ensuite. La version installée était Coolify 4.6.0.
1. Quelle formule prendre
La documentation de Coolify demande au minimum 2 cœurs, 2 Go de mémoire et 10 Go de disque, plus la place des images, des volumes et des sauvegardes. Notre Nano a la mémoire mais un seul vCPU : elle est sous le minimum officiel, et nous ne l'avons pas testée. La plus petite formule qui respecte les prérequis est la Starter.
| Formule | Ressources | Pour Coolify | Au mois | À l'heure |
|---|---|---|---|---|
| Nano | 1 vCPU · 2 Go · 20 Go | sous le minimum (1 cœur) | 8,50 CAD | 0,018 CAD |
| Starter | 2 vCPU · 4 Go · 40 Go | la plus petite qui convient | 16 CAD | 0,033 CAD |
| Pro | 4 vCPU · 8 Go · 80 Go | plusieurs applications, constructions plus rapides | 30 CAD | 0,062 CAD |
Gardez l'IPv4 : le certificat Let's Encrypt et les clients qui n'ont pas d'IPv6 en ont besoin. Notre essai a tourné sur une Starter à l'heure, en Ubuntu 24.04.
2. Installer avec le script officiel
Le script s'exécute en root. Passez-lui tout de suite le compte administrateur : sans ces variables, la page d'inscription reste ouverte sur le port 8000 et le premier visiteur devient administrateur, avec un accès root au serveur.
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo env \
ROOT_USERNAME=admin \
ROOT_USER_EMAIL=vous@example.com \
ROOT_USER_PASSWORD='Un-mot-de-passe-long-1!' \
bash
Le mot de passe doit contenir une majuscule, une minuscule, un chiffre et un symbole.
Sur notre Starter, l'installation a pris 3 min 1 s : 1 min 7 s pour
Docker Engine, 1 min 7 s pour télécharger les images de Coolify, 42 s pour le
démarrage. Après coup, la page /register renvoyait bien vers
/login : l'inscription était fermée.
Le script affiche ensuite l'adresse du panneau, http://votre-ip:8000, et
conseille de copier /data/coolify/source/.env hors du serveur. Faites-le :
ce fichier contient les clés qui chiffrent les secrets de Coolify.
3. Ce que Coolify occupe à vide
Mesures prises une minute après l'installation, sans aucune application :
| Mesure | Ubuntu seul | Avec Coolify |
|---|---|---|
Mémoire utilisée (free -m) | 411 Mo | 1051 Mo |
| Disque utilisé | 1,9 Go | 4,7 Go |
| Conteneurs | 0 | 6 |
Coolify prend donc environ 640 Mo de mémoire et 2,8 Go de disque avant votre premier déploiement. Le conteneur principal (l'application Laravel) compte pour 392 Mo à lui seul ; sa base PostgreSQL 37 Mo, le proxy Traefik 19 Mo, Redis 5 Mo. Sur 4 Go, il reste près de 3 Go pour vos applications.
4. Déployer une application depuis Git, en HTTPS
Nous avons pris l'exemple Node officiel de Coolify, une petite API Fastify, dans le
dépôt public coollabsio/coolify-examples. Dans l'interface : nouveau
projet, nouvelle ressource, « Public Repository », puis l'adresse du dépôt, la
branche main, le dossier de base /javascript/runtimes/nodejs
et le port 3000. Nous l'avons fait par l'API de Coolify, pour chronométrer
proprement :
curl -X POST http://votre-ip:8000/api/v1/applications/public \
-H "Authorization: Bearer $COOLIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"project_uuid":"…","server_uuid":"…","environment_name":"production",
"git_repository":"https://github.com/coollabsio/coolify-examples",
"git_branch":"main","base_directory":"/javascript/runtimes/nodejs",
"build_pack":"nixpacks","ports_exposes":"3000",
"domains":"https://app.example.com","instant_deploy":true}'
Le jeton se crée dans l'interface, une fois l'API activée dans les réglages. Pour le
HTTPS, il suffit d'un domaine dont l'enregistrement A pointe vers l'IPv4 du VPS et
d'une adresse en https:// dans le champ du domaine : le proxy Traefik
demande le certificat Let's Encrypt et redirige le HTTP vers le HTTPS.
Premier déploiement : 2 min 44 s entre la requête et la fin du déploiement. La construction de l'image en prend 2 min 29 s, dont 75 s pour installer Node par Nix (Coolify construit par défaut avec Nixpacks, sans Dockerfile) et 30 s pour exporter l'image. Le certificat Let's Encrypt était en place 13 secondes plus tard : l'application répondait en HTTPS 2 min 57 s après la requête.
Un piège dans cet exemple : il expose une route /env qui renvoie toutes
les variables d'environnement du conteneur. Elle est utile pour vérifier une
configuration, dangereuse dès qu'un mot de passe de base y figure. Retirez-la avant
de vous en servir comme point de départ.
5. Redéployer : 11 secondes à 2 minutes et demie
| Cas | Construction | Durée totale |
|---|---|---|
| Premier déploiement | 2 min 29 s | 2 min 44 s |
| Même commit, redéployé | aucune (image réutilisée) | 11 s |
| Autre commit, cache de construction | 9 s | 25 s |
| Reconstruction forcée, sans cache | 2 min 6 s | 2 min 25 s |
Le cas courant est la troisième ligne : un nouveau commit réutilise les couches déjà
construites (Node, paquets système) et ne refait que la copie du code et
npm ci. Le déploiement se lance par l'interface, par un webhook du
dépôt ou par l'API :
curl -X POST "http://votre-ip:8000/api/v1/deploy?uuid=UUID_DE_L_APPLI&force=false" \
-H "Authorization: Bearer $COOLIFY_TOKEN"
Coolify remplace le conteneur sans coupure : il démarre le nouveau, laisse le proxy y envoyer le trafic, puis arrête l'ancien. Pendant le redéploiement avec un nouveau commit, nous avons interrogé le site toutes les demi-secondes : 52 requêtes, 52 réponses 200.
6. Une base PostgreSQL en 17 secondes
Dans le même projet, « New Resource », puis PostgreSQL. Par l'API, la base était en marche 17 s après la demande, en PostgreSQL 16.15 avec un mot de passe généré. Coolify renvoie une adresse interne de la forme :
postgres://postgres:MOT_DE_PASSE@UUID_DE_LA_BASE:5432/postgres
La base n'est pas publiée sur Internet : son port 5432 reste sur le réseau Docker
coolify, que partagent les applications. Depuis le conteneur Node, une
connexion TCP vers ce nom a réussi ; il suffit de mettre cette adresse dans une
variable DATABASE_URL de l'application. Les données vivent dans un
volume Docker sur le disque du VPS. Coolify propose des sauvegardes planifiées des
bases, vers le serveur ou un stockage S3 : nous ne les avons pas testées ici.
Avec l'application et la base en marche, la machine utilisait 1250 Mo de mémoire et 7,5 Go de disque, dont 1,6 Go de cache de construction après trois constructions.
7. Coolify ou Easypanel
Nos VPS peuvent être livrés avec Easypanel préinstallé. Les deux panneaux font le même travail de base (Docker, Git, domaines, HTTPS, bases de données) ; ils se séparent ailleurs.
| Coolify | Easypanel | |
|---|---|---|
| Mise en place chez FFxF | script, 3 min sur une Starter | image préinstallée, panneau prêt en 1 min 30 environ |
| Plus petite formule | Starter (2 cœurs exigés) | Nano pour essayer |
| Licence | libre (Apache 2.0), gratuit en auto-hébergement | offre gratuite, offres payantes chez l'éditeur |
| Plusieurs serveurs | oui, pilotés par SSH depuis un seul panneau | non évalué ici |
| Automatisation | API REST (testée ici) | non évaluée ici |
Prenez Easypanel si vous voulez un panneau prêt sans rien installer, sur la plus
petite machine, pour quelques sites ou modèles. Prenez Coolify si vous voulez un
logiciel libre, gratuit quand vous l'hébergez vous-même, une API pour brancher votre CI, ou plusieurs
serveurs gérés depuis le même endroit. Notre catalogue d'images contient aussi une
entrée coolify (voir la liste des images) ;
cet article s'en tient au script officiel, que nous avons mesuré.
8. Les limites
- Le panneau est exposé en HTTP. Après l'installation, les ports 8000 (panneau), 6001 (temps réel) et 6002 (terminal web) écoutent sur toutes les adresses, en clair. Le proxy publie aussi le port 8080 (son tableau de bord, que nous avons trouvé désactivé). Donnez un domaine HTTPS au panneau, puis fermez 8000, 6001 et 6002, comme le recommande la documentation de Coolify, ainsi que 8080.
- UFW ne suffit pas. Docker écrit ses propres règles et un port publié traverse UFW (l'explication). Filtrez plutôt avec le pare-feu cloud : 22 pour vos adresses, 80 et 443 pour tous.
- Les mises à jour sont automatiques. Sur notre instance, la mise à jour automatique était activée par défaut, chaque jour à 0 h 48 UTC. C'est pratique, mais une nouvelle version peut changer un comportement pendant la nuit. Désactivez-la dans les réglages si vous préférez choisir le moment, et lisez les notes de version avant de mettre à jour.
- La mémoire et le disque. Les 640 Mo de Coolify sont pris en permanence. Les constructions consomment davantage pendant quelques minutes et laissent du cache : Coolify nettoie Docker chaque nuit et dès que le disque dépasse 80 %, mais sur 40 Go, surveillez l'espace dès que les applications se multiplient.
-
Un seul serveur, c'est un seul point de panne. Panneau,
applications et bases sont sur la même machine. Gardez le fichier
.envde Coolify et des sauvegardes des bases hors du serveur.
Notre essai complet a duré 23 minutes sur une Starter à l'heure, facturée une heure : 0,033 CAD.