Comment déployer une application Kotlin sur Coolify
J'ai récemment migré RssFeedPulse vers Coolify.
Si vous vous demandez ce qu'est Coolify ou si vous souhaitez comprendre pourquoi je migre de mon ancien PAAS chez Coolify, alors vous pourriez lire le billet précédent, qui justement parle de tout ça.
Si je résume un tout petit peu, Coolify c'est un PAAS (comme Vercel, Heroku etc.) qu'on peut installer soi-même sur le serveur de son choix.
Et ce qui m'intéresse beaucoup dans ce PAAS, c'est qu'il permet de faire tourner beaucoup de choses, y compris des applications en Kotlin, langage que j'utilise pour RssFeedPulse.
Donc aujourd'hui, je souhaite surtout parler de comment déployer une application Kotlin sur Coolify.
Installation de Coolify
Mais d'abord, il faut installer Coolify.
Je ne vais pas trop m'étendre dessus. C'est vraiment simple, ça se fait en une seule ligne de commande :
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash
Et sur les premiers pas avec la plateforme, je recommande cette vidéo :
TIP
SAUF la partie sur minIO, on en reparlera dans un futur billet, mais ça n'a aucun sens de suivre les conseils de cette vidéo sur ce point.
En termes de Hosting, j'ai fait comme dans la vidéo précédente et j'ai choisi d'utiliser Hetzner qui propose des serveurs à des prix relativement intéressants.
Dans la doc, il est indiqué que Coolify nécessite à minima 2CPU et 2Gb de RAM.
En pratique, ça a donné ça :
Donc j'ai assez rapidement utilisé une machine plus puissante de 4CPU et 8Gb de RAM.
Une fois installé, je vous conseille de rapidement utiliser un nom de domaine pour accéder à votre application Coolify. Personnellement, j'utilise Cloudflare qui s'occupe aussi du certificat SSL.
Une fois cela fait, je vous invite :
- à changer de mot de passe,
- activer le 2FA,
- mettre en place une règle firewall sur Hetzner pour n'autoriser que les accès sur le port 80 et 443.
Encore une fois, je passe rapidement sur l'installation elle-même de Coolify, ce qui m'intéresse, c'est la suite.
Déploiement d'une application Kotlin
Sur Coolify, on peut déployer n'importe quel app qui pourrait tourner dans un container Docker, MAIS, heureusement, on n'est pas obligé du tout de toucher à Docker.
Dans mon cas, pour RssFeedPulse, j'ai d'abord configuré une "source" GitHub
Cette source peut ensuite être utilisée pour que Coolify parcours l'ensemble de vos repository sur Github (ou Gitlab).
À partir de là, lorsque vous créez une nouvelle ressource, vous pouvez choisir d'utiliser cette source
Une fois que vous avez choisi le bon repository, il faut passer à la configuration.
Vous noterez sur la capture d'écran que Coolify utilise NixPacks pour builder votre application.
NixPacks à l'énorme qualité de savoir lire vos sources, reconnaître la majorité des outils de builds existants et de savoir correctement construire un container Docker pour le faire tourner sur Coolify.
Pour mon application, j'ai customisé 3 éléments :
- le nom de domaine (on va en reparler juste après)
- le port à exposer sur mon container Docker (ici 8080 par défaut pour une application Spring Boot)
- la commande de démarrage. J'ai configuré correctement le Xms et Xmx ainsi que le chemin vers le jar construit :
java -Xms128m -Xmx512m -XX:MaxDirectMemorySize=128m -jar target/monJAR-0.0.1-SNAPSHOT.jar
Et normalement, avec ça, c'est terminé. La majorité des configurations par défaut sont bonnes.
Malgré tout, on peut améliorer quelques détails.
Déjà, évidemment vous avez sans doute des variables d'environnement, là-dessus je vous épargne à quoi ça sert.
TIP
À noter que pour l'instant, Coolify ne gère pas de Secret. Il n'y a pas de gestionnaire de secret par défaut.
Ensuite, vous pouvez correctement configurer les "Health Checks".
Les Health Checks sont des URLS que Coolify peut utiliser pour vérifier l'état de santé de votre application.
Et ça tombe bien, si vous utilisez Spring Boot Actuator, vous en avez une par défaut : /actuator/health
Le nom de domaine
Je vous ai dit plus haut qu'on pouvait configurer un custom domain pour son application.
Pour ma part, j'utilise Cloudflare pour gérer mon DNS. Il suffit de rentrer un Record de type A vers l'IP de son serveur sur Hetzner et c'est tout.
Je garde personnellement le mode Proxy qui permet de bénéficier de la protection DDOS de Cloudflare ainsi que d'autres petites fonctionnalités (cache, etc.)
MAIS, au début ça ne marchait pas.
Il y a un paramètre à changer dans Cloudflare !
Dans SSL :
Il faut configurer le mode de chiffrement à full
Par défaut, il est en flexible, c'est-à-dire que votre connexion est en HTTPS uniquement entre vos visiteurs et Cloudflare, mais ensuite en HTTP entre Cloudflare et Coolify.
C'est pas ce que vous voulez.
Vous voulez du HTTPS sur toute la chaîne, donc il faut passer en Full.
Les notifications de déploiement
Si vous avez bien suivi, vous avez désormais un serveur sur lequel tourne Coolify et une application Kotlin.
A minima, ce serait pas mal quand même d'avoir des notifications si un déploiement se fait, ou s'il échoue non ?
Pour ça, il faut aller dans les settings Coolify et configurer d'abord votre serveur SMTP. (Perso, j'utilise mailgun)
Ensuite, il faut aller dans "Notifications" dans le menu à gauche et vous pourrez activer les notifications emails, Telegram ou Discord si vous le souhaitez.
Et voilà !
Évidemment, vous me direz, il manque peut-être une base de données ?
C'est vrai. Mais on verra ça dans un prochain billet :)