Cela fait plus d’un an maintenant que Jarred Sumner et son équipe travaillent à un nouveau runtime JavaScript open source : Bun. Il est présenté comme plus performant et plus complet que les solutions actuelles telles que Node.js ou Deno. Sa version 1.0.3 vient de sortir, vous pouvez d’ores et déjà l’utiliser pour vos projets hébergés par Clever Cloud.
Car si nous aimons tout automatiser et simplifier pour nos clients, nous le faisons en leur laissant la plus grande liberté possible. Ainsi, héberger une application Node.js avec le framework ou le gestionnaire de paquets de votre choix se fait déjà sans contraintes particulières, et déployer un site ne prend que quelques minutes.
Nous supportons déjà Deno, Meteor.js, yarn. Si pour Bun, la décision n’a pas encore été prise de l’intégrer nativement à nos images, dans l’attente des premiers retours de nos clients, cela se fait très simplement.
Hello, Bun sur Clever Cloud !
Envie d’essayer ? Il vous suffit d’avoir un compte Clever Cloud ou d’en créer un depuis une adresse e-mail ou un compte GitHub. 20 euros de crédits vous seront offerts lors de votre inscription.
- Créer un compte Clever Cloud (et obtenir 20 euros de crédits)
Pour notre premier exemple, nous partirons du principe que vous disposez d’une machine avec git et Node.js dans une version récente. Si vous n’avez pas encore installé notre interface open source en ligne de commande (CLI) Clever Tools, tapez (avec les droits administrateur de votre système ou sudo
si nécessaire) :
npm i -g clever-tools
clever login
Une fois connecté, vous pourrez vérifier que tout s’est bien passé avec la commande suivante :
clever profile
Installons Bun et créons une première application :
npm install -g bun
mkdir clevbun && cd clevbun
bun init -y && git init
Cela va vous créer un dépôt git local et toute une série de fichiers, dont package.json
qui contient la configuration de votre projet. Mais également index.ts
et ts.config.json
qui sont propres au langage TypeScript utilisé par défaut par Bun. N’ayez crainte, celui-ci gère tout aussi bien de simples fichiers JavaScript, du JSX/TSX, des modules ECMAScript et CommonJS qu’il importe de manière unifiée, des langages de bas niveau ou SQLite. C’est justement l’un de ses points forts.
Vérifions que tout a bien fonctionné :
> bun index.ts
Hello via Bun!
Une application avec le serveur HTTP de Bun
Notre but étant d’héberger une application web, nous utiliserons un serveur HTTP. Cela tombe bien, Bun dispose du sien, en plus d’assurer une compatibilité (partielle) avec les fonctionnalités et API de Node.js. Développé en utilisant le langage Zig et le moteur JavaScriptCore plutôt que v8, avec une recherche poussée de l’optimisation, ce runtime se dit plus performant pour ce type d’usage.
Modifiez le contenu du fichier index.ts
comme suit :
Bun.serve({
port: 8080,
hostname: '0.0.0.0',
fetch(req) {
const url = new URL(req.url);
if (url.pathname === "/") return new Response("Home page!");
if (url.pathname === "/blog") return new Response("Blog!");
return new Response("404!");
},
error(error) {
return new Response(`<pre>${error}\n${error.stack}</pre>`, {
headers: {
"Content-Type": "text/html",
},
});
},
});
Cela créé un serveur HTTP qui envoie une réponse différente selon la route (url.pathname
) et une erreur 404 si aucune ne correspond. En cas de souci, une page spécifique sera affichée. Notez que le port 8080 est ici inscrit dans le code mais il pourrait être précisé avec une variable d’environnement : $PORT
, $BUN_PORT
ou $NODE_PORT
.
Clever deploy !
Passons aux choses sérieuses avec un déploiement sur Clever Cloud en commençant par préparer l’application :
clever create -t node clevbun
clever env set CC_PRE_BUILD_HOOK "npm i -g bun"
clever env set CC_NODE_BUILD_TOOL "custom"
clever env set CC_CUSTOM_BUILD_TOOL "bun install"
clever env set CC_RUN_COMMAND "bun run index.ts"
La première commande permet de créer l’application au sein de votre compte Clever Cloud. Nous définissons ensuite plusieurs variables d’environnement permettant d’installer Bun au sein de l’image, puis les instructions pour la configuration des dépendances et le lancement du projet. Comme pour Node.js, vous pouvez indiquer qu’une application est prête pour la production en attribuant la valeur production
à la variable d’environnement NODE_ENV
.
Notez que vous pouvez utiliser cette configuration pour utiliser Bun sur une application Node.js déjà hébergée par Clever Cloud en adaptant CC_RUN_COMMAND
à votre projet.
Notre application étant créée, elle peut être déployée. C’est simple comme un git push
!
git add . && git commit -m "First commit"
clever deploy && clever open
Elle est alors disponible depuis nos infrastructures puis ouverte dans votre navigateur. Vous pouvez ajouter /blog
ou /random
à la fin de l’URL pour vérifier que l’attribution des routes fonctionne bien.
De nombreuses possibilités
Vous n’avez pas à vous préoccuper de la configuration de l’accès HTTPS, de la collecte des logs ou des métriques, tout est déjà mis en place et accessible via Clever Tools ou la Console. Vous pourrez d’ailleurs passer par cette dernière afin d’activer Grafana dans les paramètres de votre compte.
Pour accéder aux informations de votre application dans la Console utilisez :
clever console
D’autres fonctionnalités de Clever Tools vous permettent de lui attribuer un domaine, voir ses paramètres, son activité, modifier le nombre et le type d’instance utilisée, l’arrêter ou la redémarrer. N’hésitez pas à regarder l’aide de notre CLI avec --help
ou sa documentation pour en savoir plus :
clever domain
clever domain add domain.tld
clever status
clever activity
clever scale --min-instances 1 --max-instances 4 --min-flavor pico --max-flavor M
clever scale --instances 1 --flavor pico
clever restart
clever stop
Bien entendu, vous pouvez également aller plus loin avec Bun et déployer des applications utilisant le framework web Elysia ou encore des générateurs de sites statiques tels qu’Astro. Nous vous détaillerons cela dans de prochains billets ! D’ici là, n’hésitez pas à nous faire savoir ce que vous attendez de nos images proposant des runtimes JavaScript.