<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Site Statique on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/site-statique/</link><description>Recent content in Site Statique on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Mon, 07 Jul 2025 09:00:00 +0200</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/site-statique/index.xml" rel="self" type="application/rss+xml"/><item><title>Je réessaye les sites statiques (Bloggrify) chez Clever Cloud</title><link>https://blog.zwindler.fr/2025/07/07/je-reessaye-les-sites-statiques-chez-clever/</link><pubDate>Mon, 07 Jul 2025 09:00:00 +0200</pubDate><guid>https://blog.zwindler.fr/2025/07/07/je-reessaye-les-sites-statiques-chez-clever/</guid><description>&lt;img src="https://blog.zwindler.fr/2025/07/9zdbra.webp" alt="Featured image of post Je réessaye les sites statiques (Bloggrify) chez Clever Cloud" /&gt;&lt;h2 id="introduction"&gt;Introduction
&lt;/h2&gt;&lt;p&gt;Pour celles et ceux qui suivent mes péripéties d&amp;rsquo;hébergement de blog, vous savez que j&amp;rsquo;ai une relation compliquée (le fameux &amp;ldquo;it&amp;rsquo;s complicated&amp;rdquo; sur Facebook) avec &lt;a class="link" href="https://www.clever-cloud.com/fr/" target="_blank" rel="noopener"
&gt;Clever Cloud&lt;/a&gt;. J&amp;rsquo;ai déjà écrit à ce sujet dans deux articles précédents :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2023/12/30/its-migration-day-again/" &gt;Migration du blog sur Clever Cloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2024/01/29/planifier-les-posts-clever-cloud/" &gt;Planifier les posts avec Clever Cloud&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour finalement abandonner Clever Cloud et revenir sur une VM IONOS que je gère moi-même (voir &lt;a class="link" href="https://blog.zwindler.fr/2025/01/15/ca-bouge-encore-sur-le-blog/" &gt;Ça bouge encore sur le blog&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Mais depuis, Clever Cloud a ajouté les &lt;strong&gt;apps statiques&lt;/strong&gt; à son catalogue. Plus besoin de passer par un runtime Apache + PHP, ce qui était effectivement un peu overkill pour un site Hugo statique (et pas compatible avec l&amp;rsquo;offre Pico, donc fallait prendre au minimum Nano à ~7€ par mois).&lt;/p&gt;
&lt;p&gt;Du coup, je me suis dit : pourquoi ne pas retenter l&amp;rsquo;expérience ?&lt;/p&gt;
&lt;p&gt;Comme Julien Wittouck m&amp;rsquo;a devancé de 3 semaines et a fait un article sur l&amp;rsquo;hébergement de sites statiques avec Hugo via ce nouveau type d&amp;rsquo;app chez Clever Cloud, &lt;a class="link" href="https://codeka.io/2025/06/05/d%C3%A9ployer-des-applications-statiques-sur-clever-cloud/" target="_blank" rel="noopener"
&gt;vous pouvez aller lire son post ici&lt;/a&gt;, je n&amp;rsquo;ai pas envie de faire la même chose.&lt;/p&gt;
&lt;p&gt;Pour ce test, j&amp;rsquo;ai choisi d&amp;rsquo;utiliser un autre site que celui-ci : &lt;strong&gt;50ndk.zwindler.fr&lt;/strong&gt;, qui me sert pour faire la promotion de mon livre.&lt;/p&gt;
&lt;p&gt;Il est actuellement hébergé sur GitHub Pages et utilise le moteur &lt;a class="link" href="https://bloggrify.io/" target="_blank" rel="noopener"
&gt;Bloggrify&lt;/a&gt; (un des projets d&amp;rsquo;&lt;a class="link" href="https://eventuallycoding.com/" target="_blank" rel="noopener"
&gt;Hugo Lassiège&lt;/a&gt;, quelqu&amp;rsquo;un que j&amp;rsquo;apprécie énormément dans l&amp;rsquo;écosystème tech français).&lt;/p&gt;
&lt;p&gt;Le principe est globalement le même qu&amp;rsquo;avec Hugo, à quelques petites différences près. C&amp;rsquo;est un site statique généré tout pareil, mais c&amp;rsquo;est Nuxt sous le capot et ça va nous être utile. Il y a quelques petites différences aussi depuis mon dernier test de 2023 que je ne manquerai pas de souligner.&lt;/p&gt;
&lt;p&gt;Les sources du site sont disponibles ici si vous êtes curieux / curieuse :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/zwindler/50ndk" target="_blank" rel="noopener"
&gt;https://github.com/zwindler/50ndk&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="prérequis"&gt;Prérequis
&lt;/h2&gt;&lt;p&gt;On pourrait aller créer l&amp;rsquo;application dans l&amp;rsquo;UI. Normalement, les &amp;ldquo;tuiles&amp;rdquo; Static, Linux et VLang sont disponibles à tout le monde depuis le 4 juillet. J&amp;rsquo;ai un petit accès anticipé (merci David) mais je n&amp;rsquo;en ai pas beaucoup profité 🙃 (occupé avec le livre). Grosso modo c&amp;rsquo;est comme les autres types d&amp;rsquo;Apps chez Clever, vous ne serez pas perdus.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/06/cleverl-nouvelles-tuiles.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Bon, en WebUI c&amp;rsquo;est bien mais c&amp;rsquo;est plus rigolo de le faire en CLI.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;clever login
Opening https://console.clever-cloud.com/cli-oauth?cli_version=3.0.2&amp;amp;cli_token=xxxxxxxxxxxxx in your browser to log you in…
Login successful as Denis GERMAIN &amp;lt;denis@domain.org&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/06/clever-login.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Euh, je vois 3.0.2 dans l&amp;rsquo;URL ??? Je ne suis pas à jour. Visiblement j&amp;rsquo;avais installé la CLI clever avec npm (je ne m&amp;rsquo;en souviens pas). Plus simple, &lt;a class="link" href="https://www.clever-cloud.com/developers/doc/cli/install/" target="_blank" rel="noopener"
&gt;il y a aussi des dépôts .deb (ou brew, autre selon votre distribution)&lt;/a&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;clever version
3.0.2
╭─────────────────────────────────────────╮
│ │
│ Update available 3.0.2 → 3.13.1 │
│ Run npm i -g clever-tools to update │
│ │
╰─────────────────────────────────────────╯
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Un petit &lt;code&gt;npm i -g clever-tools&lt;/code&gt; et ça va mieux :)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ clever version
3.13.1
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="configuration-de-lapp"&gt;Configuration de l&amp;rsquo;app
&lt;/h2&gt;&lt;p&gt;Un petit &lt;code&gt;clever create&lt;/code&gt; avec le type de l&amp;rsquo;app et c&amp;rsquo;est parti !&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;denis@coucou % clever create --type static
✓ Application 50ndk successfully created!
Type ⬢ Static
ID app_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Org ID user_yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
Name 50ndk
Zone par
Next steps:
! Commit your changes first:
$ git add .
$ git commit -m &amp;#34;My changes&amp;#34;
→ Run clever deploy to deploy your application
→ Manage your application at: https://console.clever-cloud.com/goto/app_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Note : si votre app est hébergée sur GitHub, vous pouvez rajouter aussi &lt;code&gt;--github OWNER/REPO&lt;/code&gt; à la ligne de commande précédente. J&amp;rsquo;en parle plus tard, mais lisez tout avant de le faire.&lt;/p&gt;
&lt;p&gt;Comme fin 2023, je vais avoir besoin de 2 machines différentes. Une qui va construire mon site statique, une qui va le servir. Et du coup, là comme je n&amp;rsquo;ai pas Apache, je peux avoir accès à une pico et économiser quelques euros à la fin de l&amp;rsquo;année :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ clever scale --build-flavor M
App rescaled successfully
$ clever scale --flavor pico
App rescaled successfully
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Dans mon test précédent avec Hugo+Clever, j&amp;rsquo;avais besoin de spécifier dans quel dossier le contenu statique doit être servi (et aussi quel dossier la machine qui construit doit partager avec la machine qui sert).&lt;/p&gt;
&lt;p&gt;Dans le cas de Bloggrify, tout est dans .output/public. MAIS comme c&amp;rsquo;est du Nuxt, David m&amp;rsquo;a dit que je n&amp;rsquo;en avais pas besoin parce que Clever détecte automatiquement que c&amp;rsquo;est du Nuxt grâce au fichier &lt;code&gt;nuxt.config.ts&lt;/code&gt; à la racine du projet.&lt;/p&gt;
&lt;p&gt;Inutile donc de spécifier les variables CC_WEBROOT, CC_OVERRIDE_BUILDCACHE (pour pointer sur &lt;code&gt;.output/public&lt;/code&gt;) CC_PRE_BUILD_HOOK et CC_BUILD_COMMAND (les commandes &lt;code&gt;npm&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Plutôt une bonne surprise :).&lt;/p&gt;
&lt;h2 id="déploiement-de-lapplication"&gt;Déploiement de l&amp;rsquo;application
&lt;/h2&gt;&lt;p&gt;À partir de là, on peut essayer de faire un premier déploiement à la main. Pour rappel, soit on envoie un commit sur le remote spécial créé par Clever (cf le message lors de la commande &lt;code&gt;clever create&lt;/code&gt;), mais je vais préférer utiliser la commande &lt;code&gt;clever deploy&lt;/code&gt;, déjà disponible en 2023 lors de mon premier test, car je l&amp;rsquo;utiliserai pour automatiser le workflow plus tard.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dgermain@dgermain-mac 50ndk % clever deploy
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;🚀 Deploying 50ndk
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Application ID app_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Org ID user_yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;🔀 Git information
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ! App is brand new, no commits on remote yet
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Local commit aaaaaa &lt;span class="o"&gt;[&lt;/span&gt;will be deployed&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La première partie du processus va donc lancer une machine de taille M dans le but d&amp;rsquo;accélérer un peu le temps de construction :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;🔄 Deployment progress
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → Pushing &lt;span class="nb"&gt;source&lt;/span&gt; code to Clever Cloud…
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✓ Code pushed to Clever Cloud
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → Waiting &lt;span class="k"&gt;for&lt;/span&gt; deployment to start…
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ✓ Deployment started &lt;span class="o"&gt;(&lt;/span&gt;deployment_zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → Waiting &lt;span class="k"&gt;for&lt;/span&gt; application logs…
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Clever va détecter tout seul que j&amp;rsquo;ai du Nuxt, lancer un &lt;code&gt;npm install&lt;/code&gt; pour installer les prérequis pour Bloggrify, puis le &lt;code&gt;npm run generate&lt;/code&gt; pour générer le code HTML statique.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;...&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:23:47.847Z Deploying commit ID defc0be02d44ace246127e11a17d4f359262ccfb
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:23:47.847Z Nuxt.js configuration file detected
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:23:47.847Z Running build command: npm i &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm run generate &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; mv .output/public cc_static_autobuilt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;...&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:24:48.809Z &lt;span class="o"&gt;[&lt;/span&gt;nitro&lt;span class="o"&gt;]&lt;/span&gt; ℹ Initializing prerenderer
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:24:52.533Z &lt;span class="o"&gt;[&lt;/span&gt;nitro&lt;span class="o"&gt;]&lt;/span&gt; ℹ Prerendering &lt;span class="m"&gt;8&lt;/span&gt; initial routes with crawler
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:24:52.598Z &lt;span class="o"&gt;[&lt;/span&gt;nitro&lt;span class="o"&gt;]&lt;/span&gt; ├─ /robots.txt &lt;span class="o"&gt;(&lt;/span&gt;17ms&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:24:52.841Z &lt;span class="o"&gt;[&lt;/span&gt;nitro&lt;span class="o"&gt;]&lt;/span&gt; ├─ /200.html &lt;span class="o"&gt;(&lt;/span&gt;296ms&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:24:52.842Z &lt;span class="o"&gt;[&lt;/span&gt;nitro&lt;span class="o"&gt;]&lt;/span&gt; ├─ /404.html &lt;span class="o"&gt;(&lt;/span&gt;297ms&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:24:52.964Z &lt;span class="o"&gt;[&lt;/span&gt;nitro&lt;span class="o"&gt;]&lt;/span&gt; ├─ /api/search &lt;span class="o"&gt;(&lt;/span&gt;415ms&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:24:52.965Z &lt;span class="o"&gt;[&lt;/span&gt;nitro&lt;span class="o"&gt;]&lt;/span&gt; ├─ /sitemap.xml &lt;span class="o"&gt;(&lt;/span&gt;417ms&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:24:52.965Z &lt;span class="o"&gt;[&lt;/span&gt;nitro&lt;span class="o"&gt;]&lt;/span&gt; ├─ /rss.xml &lt;span class="o"&gt;(&lt;/span&gt;416ms&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:24:53.105Z &lt;span class="o"&gt;[&lt;/span&gt;nitro&lt;span class="o"&gt;]&lt;/span&gt; ├─ / &lt;span class="o"&gt;(&lt;/span&gt;564ms&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;...&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Une fois le generate terminé, la machine de construction génère un artefact contenant notre site, et passe la main à la machine qui va servir le trafic :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:24:55.843Z ✔ You can now deploy .output/public to any static hosting!
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:24:56.137Z Creating build cache archive…
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:24:56.197Z build cache archive successfully created
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:24:56.197Z No cron to setup
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:24:56.213Z Uploading application build cache archive… file is 21M before compression.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:24:56.899Z 2025-07-07T10:24:56.899385Z INFO multipart_upload_lib::uploader: Uploaded &lt;span class="nv"&gt;part&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:24:57.041Z 2025-07-07T10:24:57.041879Z INFO multipart_upload_lib::uploader: Completed the multipart upload
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:24:57.350Z Done uploading build cache archive
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:24:57.350Z Build succeeded in &lt;span class="m"&gt;1&lt;/span&gt; minute and &lt;span class="m"&gt;14&lt;/span&gt; seconds
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;11 secondes plus tard, le site de promotion de mon livre est déployé sur Clever Cloud&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:25:28.425Z Serving static website from /cc_static_autobuilt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:25:28.425Z Launching &lt;span class="s1"&gt;&amp;#39;static-web-server&amp;#39;&lt;/span&gt; on port &lt;span class="m"&gt;8080&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:25:28.425Z No cron to setup
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2025-07-07T10:25:28.425Z Successfully deployed in &lt;span class="m"&gt;0&lt;/span&gt; minutes and &lt;span class="m"&gt;10&lt;/span&gt; seconds
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;✓ Access your application: https://app-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.cleverapps.io
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ Manage your application: https://console.clever-cloud.com/goto/app_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/07/preview.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="ajouter-un-domaine"&gt;Ajouter un domaine
&lt;/h2&gt;&lt;p&gt;Comme chez tous les PaaS, il est évidemment possible d&amp;rsquo;ajouter un domaine de manière à ce que les requêtes entrantes n&amp;rsquo;aient pas besoin de se faire sur l&amp;rsquo;URL en cleverapps.io&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;% clever domain add 50ndk.zwindler.fr
Your domain has been successfully saved
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Une fois le FQDN associé, il est possible d&amp;rsquo;ajouter un CNAME chez votre gestionnaire de nom de domaine :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/07/cname.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="automatiser-le-clever-deploy"&gt;Automatiser le &lt;code&gt;clever deploy&lt;/code&gt;
&lt;/h2&gt;&lt;p&gt;Imaginons que je sois un fainéant ou que je n&amp;rsquo;aie pas envie d&amp;rsquo;installer clever CLI sur tous les postes où je travaille. Admettons que j&amp;rsquo;aie envie qu&amp;rsquo;une nouvelle version de mon site soit automatiquement déployée dès que je pousse un commit sur GitHub.&lt;/p&gt;
&lt;h3 id="deploy-to-clever-cloud"&gt;deploy-to-clever-cloud
&lt;/h3&gt;&lt;p&gt;Dans l&amp;rsquo;article &lt;a class="link" href="https://blog.zwindler.fr/2024/01/29/planifier-les-posts-clever-cloud" &gt;Planifier les posts de mon blog Hugo sur Clever Cloud&lt;/a&gt;, j&amp;rsquo;avais exploré la piste d&amp;rsquo;un Cron pour redéployer régulièrement mon site, notamment pour que les posts publiés dans le futur soient postés &amp;ldquo;au bon moment&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;avais aussi trouvé une GitHub Action tierce de quelqu&amp;rsquo;un (&lt;a class="link" href="https://github.com/47ng" target="_blank" rel="noopener"
&gt;47ng&lt;/a&gt;) qui a l&amp;rsquo;air très bien mais que je ne connais pas :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/marketplace/actions/deploy-to-clever-cloud" target="_blank" rel="noopener"
&gt;https://github.com/marketplace/actions/deploy-to-clever-cloud&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J&amp;rsquo;ai testé, elle fonctionne, mais j&amp;rsquo;étais moyen chaud à l&amp;rsquo;époque de déléguer mes creds à Github (les fameuses variables CLEVER_TOKEN et CLEVER_SECRET affichées lors du &lt;code&gt;clever login&lt;/code&gt;), qui en retour les aurait injecté à cette &amp;ldquo;action&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Et ben ça tombe bien parce qu&amp;rsquo;il y a deux nouvelles pour répondre à ces problématiques.&lt;/p&gt;
&lt;h3 id="preview-par-pr"&gt;preview par PR
&lt;/h3&gt;&lt;p&gt;La première, c&amp;rsquo;est qu&amp;rsquo;il existe plusieurs façons d&amp;rsquo;automatiser les déploiements avec Clever Cloud. Je ne sais pas si elle existait à l&amp;rsquo;époque, mais en tout cas je l&amp;rsquo;ai trouvée aujourd&amp;rsquo;hui ;-P.&lt;/p&gt;
&lt;p&gt;On peut faire des environnements de preview par PR (depuis 2024) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.clever-cloud.com/developers/doc/ci-cd/github/" target="_blank" rel="noopener"
&gt;https://www.clever-cloud.com/developers/doc/ci-cd/github/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/marketplace/actions/clever-cloud-review-app-on-prs" target="_blank" rel="noopener"
&gt;https://github.com/marketplace/actions/clever-cloud-review-app-on-prs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Je ne vais pas dans cet article aborder cette action qui permet de déployer des apps en préview &lt;strong&gt;par PR&lt;/strong&gt; car je n&amp;rsquo;en ai pas du tout le besoin pour ce site secondaire. Cela dit, si jamais j&amp;rsquo;ai une grosse mise à jour avec breaking changes, ça pourra valoir le coup de jeter un œil.&lt;/p&gt;
&lt;h3 id="créer-des-tokens-de-ci"&gt;Créer des tokens de CI
&lt;/h3&gt;&lt;p&gt;La seconde, c&amp;rsquo;est qu&amp;rsquo;il est possible de créer des tokens (là encore, je ne sais plus si c&amp;rsquo;était possible en 2023), qu&amp;rsquo;il sera possible de révoquer en cas de leak.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.clever-cloud.com/developers/api/howto/#request-the-api" target="_blank" rel="noopener"
&gt;https://www.clever-cloud.com/developers/api/howto/#request-the-api&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et avec ces tokens, on peut se faire sa propre CI :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.clever-cloud.com/developers/doc/ci-cd/custom-scripts/" target="_blank" rel="noopener"
&gt;https://www.clever-cloud.com/developers/doc/ci-cd/custom-scripts/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note : j&amp;rsquo;ai cependant l&amp;rsquo;impression qu&amp;rsquo;il n&amp;rsquo;y a pas encore de scope sur le token. Donc en termes de sécu, c&amp;rsquo;est mieux car je peux les révoquer, mais s&amp;rsquo;il y a un leak, on a accès à tout mon compte, pour l&amp;rsquo;instant (sauf si j&amp;rsquo;ai mal compris).&lt;/p&gt;
&lt;h3 id="déploiements-depuis-github-ou-gitlab"&gt;Déploiements depuis GitHub (ou GitLab)
&lt;/h3&gt;&lt;p&gt;Mais le plus simple ici, c&amp;rsquo;est d&amp;rsquo;utiliser une fonctionnalité de Clever qui existe depuis &amp;ldquo;toujours&amp;rdquo; mais dont j&amp;rsquo;ignorais l&amp;rsquo;existance : les déploiements via Github.&lt;/p&gt;
&lt;p&gt;Si vous voulez utiliser cette fonctionnalité, il faudra par contre autoriser Clever Cloud à lister vos dépôts préalablement (ce qui peut être un problème pour vous), et vous ne pourrez plus pousser des commits avec &lt;code&gt;clever deploy&lt;/code&gt; ou &lt;code&gt;git push&lt;/code&gt; sur le git remote de clever (vous prendrez une erreur 401).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Clever Cloud provides a GitHub integration to deploy any repository hosted on GitHub to Clever Cloud&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;On configure ça grâce au &lt;code&gt;--github&lt;/code&gt; de tout à l&amp;rsquo;heure !&lt;/p&gt;
&lt;p&gt;A partir du moment où c&amp;rsquo;est fait, il n&amp;rsquo;y a rien à faire&amp;hellip; le rebuild sera déclenché dès que je pousserai un nouveau commit sur ma branche Github :)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;commit 788465fb980c09e597872a3b510ac44fdaa27d48 (HEAD -&amp;gt; main, origin/main, origin/HEAD)
Author: Denis GERMAIN &amp;lt;denis@example.com&amp;gt;
Date: Fri Jul 4 16:31:11 2025 +0200
test commit
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/07/test-commit.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/07/link.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/07/authorize.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Note : on peut spécifier quelle branche on veut envoyer en prod dans les paramètres de l&amp;rsquo;application :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/07/github-main.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;Clever Cloud a énormément bougé ces derniers mois, avec beaucoup de nouvelles apps, de nouvelles fonctionnalités (la plus grosse étant Materia, ainsi que tout le travail autour de l&amp;rsquo;IA).&lt;/p&gt;
&lt;p&gt;Les static apps (et Linux, et V) pourraient presque paraître anecdotiques, mais couplées aux autres améliorations (tokens, Grafana managé avec les stats), ce n&amp;rsquo;est pas le même produit qu&amp;rsquo;en 2023.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est cool à voir :)&lt;/p&gt;</description></item></channel></rss>