Bun : comment héberger vos applications sur Clever Cloud

Bun hébergé sur Clever Cloud
Bun sur Clever Cloud : comment héberger vos applications sur notre plateforme ? Découvrez notre tutoriel pas à pas.

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.

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.

Blog

À lire également

MateriaDB KV, Functions: découvrez le futur de Clever Cloud à Devoxx Paris 2024

Clever Cloud est fier de présenter sa nouvelle gamme de produits serverless : Materia !
Entreprise

Notre nouvelle interface de logs est disponible en bêta publique

Notre nouvelle interface de logs est désormais disponible en bêta publique, venez la tester dès aujourd'hui !
Entreprise

Métriques : archiver des milliards de points chaque mois

Les métriques sont essentielles à notre fonctionnement. Avec une croissance de 2 To/semaine, il nous a fallu trouver une solution d'archivage automatisée.
Engineering