Coolify sur un VPS : déployer depuis Git

Installé en 3 minutes, Coolify prend 640 Mo de mémoire à vide. Une appli Node déployée depuis un dépôt public répond en HTTPS en moins de 3 minutes, un nouveau commit repart en 25 secondes, sans coupure. Mesures, base PostgreSQL, comparaison avec Easypanel et limites.

Une branche Git dont le dernier commit part vers un serveur, où il devient un conteneur servi en HTTPS

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.

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.

bash
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 :

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 :

bash
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

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 :

bash
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 :

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

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 .env de 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.

Trois nœuds reliés en chaîne, un webhook, un calcul et une requête HTTP, avec une file d'appels qui arrive par la gauche

n8n sur un VPS : sans limite d'exécutions

L'édition communautaire de n8n ne compte pas les exécutions : la limite, c'est votre machine. Nous l'avons mesurée sur une Nano, avec un vrai flux webhook, calcul et requête HTTP, puis couvert la sauvegarde de la clé de chiffrement, les mises à jour et ce que permet la licence.

Lire l'article 9 min de lecture

Des vignettes de photos qui montent d'un téléphone vers un serveur où elles se rangent en grille

Immich : remplacer Google Photos sur votre serveur

Sauvegarde du téléphone, visages, recherche par le contenu : Immich fait l'essentiel de Google Photos, sur une machine que vous administrez au Canada. Quelle offre prendre, notre image ou une installation à la main, les sauvegardes 3-2-1 et les limites.

Lire l'article 7 min de lecture

Support & discussions

Questions techniques, retours d'incidents ou discussions d'infrastructure, l'équipe est présente sur Discord, Telegram, X, Instagram, Reddit et IRC.