Aujourd'hui, je vais vous parler d'un produit que j'ai découvert au début de l'année et qui résout un inconvénient que j'ai rencontré lors du déploiement de mon blog (que je vous conseille de lire avant cet article). Tout a commencé lors de la présentation des nommés de la Golden Kitty Awards 2022, une cérémonie organisée par Product Hunt visant à récompenser les meilleurs services de l’année, dont les votes se sont déroulés du 9 au 13 janvier 2023. Durant cette courte période, j'ai passé deux jours à consulter tous les nommés qui avaient été choisis et qu'il fallait départager. En arrivant dans la section "Developer tools", il y avait Coolify qui est donc le service que je vais vous présenter aujourd’hui. Avec un "4th product of the day", il avait réussi à être parmi les produits les plus intéressants de sa catégorie de l'année, et il est vrai que l’idée était intéressante.

Qu’est-ce que c’est ?

Le service prétend vouloir “rendre l’auto-hébergement simple“ et être une “alternative open-source et auto-hébergeable à heroku et coolify”, voire à Vercel, compte tenu de leurs récentes annonces.

Bon, qu'est-ce que l'auto-hébergement ? Si vous n'avez pas encore lu mon article sur le déploiement de mon blog, l'auto-hébergement consiste à posséder un serveur et à déployer des sites dessus sans avoir à payer des services externes qui sont plus coûteux. Par exemple, en reprenant mon article précédent, la base du site sur lequel vous êtes en train de lire cet article a été créée par Ghost, un CMS qui propose une formule payante d'hébergement à partir de 9€ par mois pour 500 utilisateurs, mais qui permet également d’être hébergé sur son propre serveur, ce que j'ai fait et qui me coûte environ 4,2€ par mois avec mon abonnement VPS d’OVH. Comme vous pouvez le voir, l'auto-hébergement permet de payer moins cher les services qui le permettent, au détriment de devoir tout faire soi-même, mais cela ne pose pas de problème puisque je suis développeur.

En ce qui concerne l'open-source, cela signifie que le logiciel est gratuit et accessible à tous. En effet, s'il était soumis à une licence, il faudrait payer une certaine somme pour les droits d'utilisation, ce qui n'est pas pratique lorsque l'on souhaite déployer une application sur son propre serveur.

Pourquoi se comparer à Heroku et Netlify ? D'après mes souvenirs, lorsque j'ai utilisé Heroku pendant mes études, le service permettait d'avoir une base de données de type headless CMS, ce qui peut s'avérer pratique lorsque l'on a besoin de stocker des informations sur un site bien que l’ergonomie et l’interface de Heroku était catastrophique. Quant à Netlify, il est plutôt utilisé pour héberger des sites statiques (SSG), faire du rendu côté serveur (SSR) ou du rendu côté client (CSR). Cependant, il y a des limites au SSR et on ne peut pas exécuter directement des commandes ou effectuer d'autres actions dans le terminal comme on le souhaite sur des plateformes d'hébergement dans le cloud telles que Netlify ou Vercel. En revanche, sur son propre serveur VPS, on a plus de liberté et de contrôle pour exécuter des commandes et effectuer des actions selon nos besoins.

Ainsi, le but de Coolify est de tirer parti de la liberté offerte par un serveur propre en nous offrant une interface agréable, simple et intuitive qui nous permettra de nous passer d'étapes souvent difficiles à comprendre pour ceux qui ne sont pas développeurs, et qui peuvent être fastidieuses à réaliser pour chaque site. Avec Coolify, plus besoin d'utiliser Certbot pour générer un certificat SSL, plus besoin de configurer les virtual hosts de Nginx ou Apache pour rediriger les noms de domaine, plus besoin d'installer Node.js, npm et autres dépendances, puis de déployer les sites avec plusieurs commandes. Ici, une seule commande suffit pour installer Coolify, et le reste se fait via des interfaces conviviales.

Comment ça marche ?

Installation

Premièrement, il faut pouvoir accéder au serveur à distance, et cela peut varier en fonction de votre hébergeur. Je vais vous montrer ma méthode qui est la plus courante.

Dans mon cas, après avoir acheté mon VPS ou après chaque réinitialisation de celui-ci, OVH m'envoie un courriel contenant le nom d'utilisateur et le mot de passe à utiliser pour me connecter.

ApplicationFrameHost_2023-05-30_15-17-41.png
Courriel d'information sur le VPS

Il vous suffit ensuite d'ouvrir votre terminal et d'exécuter la commande SSH suivante, puis de renseigner le mot de passe lorsqu'il vous est demandé :

ssh <nom_utilisateur>@<Adresse_IP>

Ensuite, une fois connecté au serveur à distance, il vous suffit d'exécuter la commande indiquée sur le site de Coolify :

wget -q <https://get.coollabs.io/coolify/install.sh> -O install.sh; sudo bash ./install.sh

L'application sera installée et déployée à l'adresse IP précédemment saisie, avec le port 3000. Vous devrez l'entrer dans votre navigateur Web de la manière suivante :

https://<adresse_IP>:3000

Maintenant que vous êtes sur le site, il vous suffit de créer un compte puis de vous connecter.

Déploiement d’un site

Coolify nous permet de créer des applications (provenant de GitHub, Gitlab, etc.), des services (comme des CMS ou d'autres services open-source proposés), des bases de données et des conteneurs Docker.

Pour cet exemple, je vais simplement expliquer comment j'ai redéployé ce blog sur Coolify, ce qui est expliqué dans la documentation ici :

  1. Je clique sur "+ Create New Resource", puis sur "Service".
  2. Je sélectionne "Ghost (MySQL)".
  3. Si j'ai plusieurs conteneurs Docker, je choisis celui approprié, sinon je passe à l'étape suivante.
  4. À partir de là, je dois renseigner l'URL complète (https:// compris), si je souhaite obtenir un certificat pour www, je le coche la case appropriée et je donne un nom à l'application. Je peux également changer la version si nécessaire et aussi choisir un port précis pour mon application. Il est important de noter qu'il faut avoir créé et géré les sous-domaines avant de déployer le site.
  5. Ensuite, je clique sur "save" pour enregistrer.
  6. Le bouton "deploy" devient cliquable. Une fois que je l'ai activé, le build se lance et je peux le suivre dans les logs.
  7. Pour Ghost, enfin, je dois accéder à https://VOTRE_URL_GHOST/ghost pour configurer l'administrateur et gérer le site.
Untitled
Onglet de configuration du projet

Voilà, c'est tout ! Il n'y a rien d'autre à faire, car tout le reste est géré automatiquement. Vous pouvez même consulter la consommation de votre serveur dans la partie "dashboard" pour savoir si vous devez bientôt l’améliorer.

Untitled
Dashboard de Coolify

Mon avis

Coolify est un service qui permet d'éviter le stress lié à la crainte de mal exécuter une commande ou d'oublier de faire quelque chose obligatoire pour le bon fonctionnement du site. C'est un socle solide sur lequel repose nos sites, ce qui rend leurs déploiements moins complexes et plus faciles. En cela, je pense que Coolify est un bon service. Il rend le déploiement de site moins obscur et nous permet d'accéder facilement à une solution de VPS à moindre coût, car bien souvent les VPS avec interface intégrée sont plus chères que les classiques, et les services proposant une interface tels que cPanel, hPanel ou Plesk nécessitent une licence qui sont proposées à des prix exorbitants.

Cela va de pair avec l'un des avantages majeurs de Coolify qui réside dans son accessibilité, puisqu'il est open source et donc gratuit. Nous pouvons ainsi consulter les tâches, les mises à jour et les futures nouveautés sur GitHub, ce qui laisse présager le meilleur pour l'avenir.

Cependant, en tant que développeur, j'ai parfois été frustré par l'incapacité de coder ou exécuter des commandes directement dans Coolify. Ayant peu utilisé Docker, j'aurais aimé la possibilité de ne pas avoir à me connecter à mon serveur via le terminal pour exécuter des commandes docker auquel je ne suis pas habitué, en espérant que je ne fasse rien de mal. Je reviendrai sur ce point plus tard, car cela est lié à un autre problème que j'ai rencontré lors du déploiement de mon nouveau projet.

Je tiens également à souligner que si vous êtes intéressé par une solution d'hébergement cloud, vous pouvez vous tourner vers le service Railway, qui propose des fonctionnalités similaires, mais avec un modèle d'abonnement et de paiement basé sur les ressources consommées. Ils ont par ailleurs aussi été nommés aux Golden Kitty Awards en 2021.

Les pour Les contres
Installation facile Aucune possibilité de lancer le terminal d’un projet pour exécuter des commandes bash
UI épurée Pas de statistiques de fréquentation sur les projets
UX simple Quelques bugs sur différents projets
Open source Certains sites sont beaucoup plus faciles à déployer sur un hébergement cloud (Netlify ou Vercel)
Gratuit Aucun moyen de modifier la base de données directement sur Coolify avec un éditeur intégré
Agnostique de l’hébergeur Pas de possibilité de transférer un projet
Ça facilite beaucoup la vie quand même Il n'y a pas tant de services que ça, mais cela n’est qu’une question de temps
Le panneau de contrôle est pratique… … mais il manque de graphiques

Les problèmes rencontrés

Dans cette partie, je vais vous raconter les problèmes que j'ai rencontrés avec Coolify.

Les certificats

Lorsque j'ai découvert Coolify, comme je vous l'ai dit, c'était au milieu du mois de janvier. J'avais déjà déployé Geekly à la fin de décembre 2022, car le site a ouvert le 1er janvier. Je devais donc installer Coolify sur un serveur déjà existant avec tout mis en place. Je tiens à rassurer que je n'ai pas eu de problème d'installation. J'ai créé un sous-domaine de test pour voir si le déploiement de mon portfolio fonctionnait avant de m'attaquer au blog. Cependant, j'ai rencontré un problème lors du déploiement. En effet, lorsque je souhaitais accéder au site via l'URL HTTPS, cela ne fonctionnait pas. J'avais une erreur de certificat. J'ai alors pensé qu'il fallait attendre un peu, ce que j'ai fait, même si l'erreur se produisait également sur l'URL permettant d'accéder à Coolify. Je devais alors utiliser directement l'adresse IP avec le port 3000.

Je vous avoue que pendant plusieurs semaines, voire plusieurs mois, j'ai mis de côté mon projet de déploiement sur Coolify, en me disant que soit le problème ne venait pas de moi et qu'il serait corrigé, soit que de toute façon, j'y reviendrais une fois mon prochain projet terminé.

Vient alors la fin de mon projet, que je vous annoncerai lorsque j'aurai suffisamment de contenu. Je me suis alors attelé à résoudre le problème de Coolify. En fait, j'ai rapidement compris d'où venait le problème. Les erreurs de certificat ne pointaient pas vers les noms de domaines que j'avais donnés, mais vers celui de mon portfolio qui avait déjà été déployé avant l'installation de Coolify. C'est pourquoi j'avais une erreur indiquant que quelqu'un essayait peut-être de me rediriger vers un autre site, car cela était vrai pour mon navigateur. L'URL du certificat et celle que j'avais indiquée étaient différentes. J'ai alors réalisé que Coolify utilise également un système de création de certificat similaire à Certbot, et que j'avais déjà utilisé Certbot pour la création de mes certificats avant d'installer Coolify, qui lui se trouve dans un conteneur Docker. Cela signifiait que j'avais un conflit entre deux instances de Certbot qui n'étaient pas situées au même endroit et qui devaient donc rediriger vers des ports de manière séquentielle et non aléatoire. J'ai donc compris qu'il me fallait réinitialiser l'ensemble de mon serveur en prenant soin de sauvegarder mes articles déjà réalisés sur Geekly.

Enfin, j'ai pu réinstaller Coolify, relancer chacun de mes projets existants et ajouter l'API de mon nouveau projet. Cependant, j'ai encore rencontré un problème pour le site de mon nouveau projet.

Mon nouveau projet

Mon nouveau projet est structuré en 2 partie : Il y a la partie API avec un service qui s’appel Directus qui est un Headless CMS et me permet de créer ma base de donnée sans aucune ligne de code, et la partie client, qui fonctionne avec un rendu côté serveur (SSR).

Mon problème était le suivant : comme mon site fonctionne en SSR, il a besoin une fois build, de fonctionner avec Node.js car il s’agit d’une utilisation de Astro avec le plugin @astrojs/node. Cependant, en raison de mon manque d'expérience ou d'une mauvaise compréhension, je n'ai pas réussi à exécuter Node.js après le build. J'ai d'abord pensé que la commande devait être placée dans la partie "start", mais cela n'a rien changé. Après réflexion, je pense que j'aurais simplement dû ajouter "&& <ma_commande>" dans la partie "build". Au lieu de cela, je me suis mis à réfléchir sur la véritable nécessité d'installer un site aussi simple sur un VPS, ce qui consommerait de la RAM et de l'espace de stockage, alors qu'il serait plus simple de le déployer sur Vercel. J'ai donc décidé de remplacer le plugin Node.js par Vercel, et cela a fonctionné dès le premier essai, ainsi seul mon API est déployé sur mon serveur.

Voici donc le conseil que je peux vous donner si vous souhaitez déployer des sites sur un VPS : assurez-vous que l'utilisation d'un VPS est réellement nécessaire, car il existe d'autres options plus simples et moins coûteuses, telles que les services d'hébergement mutualisé ou les plateformes de déploiement comme Vercel ou Netlify.