···11----
22-date: 2025-06-05
33-language: fr
44-title: Déployer des applications statiques sur Clever Cloud
55-tags:
66- - DevOps
77- - CleverCloud
88----
99-1010-Il y a quelques jours, je suis tombé sur ce post de David Legrand sur Bluesky :
1111-1212-<blockquote class="bluesky-embed" data-bluesky-uri="at://did:plc:rlpsf5c2y5jkfifwp3klcrzf/app.bsky.feed.post/3lqrqpdld3c2j" data-bluesky-cid="bafyreigxquchzyduo3eyj2cuoyna6dsaqzpmnpp2vittiremc5mlwwtihy" data-bluesky-embed-color-mode="light"><p lang="en">🚀 We work on 3 new runtimes on @clever-cloud.com
1313- : Linux, Static and... V. Want to test? Let me know!
1414-1515-Want to know more ? ▶️ github.com/CleverCloud/...
1616-1717-😍 Thanks to the teams across Clever Cloud for the mutual efforts to ease how we provide new runtimes to customers!<br><br><a href="https://bsky.app/profile/did:plc:rlpsf5c2y5jkfifwp3klcrzf/post/3lqrqpdld3c2j?ref_src=embed">[image or embed]</a></p>— David Legrand ☁️ 🤘 (<a href="https://bsky.app/profile/did:plc:rlpsf5c2y5jkfifwp3klcrzf?ref_src=embed">@davlgd.fr</a>) <a href="https://bsky.app/profile/did:plc:rlpsf5c2y5jkfifwp3klcrzf/post/3lqrqpdld3c2j?ref_src=embed">June 4, 2025 at 1:55 PM</a></blockquote><script async src="https://embed.bsky.app/static/embed.js" charset="utf-8"></script>
1818-1919-J'ai donc sauté sur l'occasion pour demander à tester ce nouveau runtime.
2020-2121-Cet article présente donc comment *ce site*, que vous êtes en train de lire, a été déployé dans ce tout nouveau runtime sur Clever Cloud !
2222-2323-<!--more-->
2424-2525-## La création de l'application
2626-2727-Déployer sur Clever Cloud, c'est toujours très facile. Ça consiste principalement en quelques commandes CLI :
2828-2929-```shell
3030-$ clever create --type TYPE APP_NAME
3131-```
3232-3333-Mais comme je teste en avant-première, le type _static_ n'est probablement pas encore implémenté dans le CLI.
3434-Je crée donc mon application dans Clever Cloud en utilisant la console :
3535-3636-
3737-3838-Au niveau de la scalabilité, je pars sur une instance _pico_, qui est la plus petite disponible.
3939-_A priori_, ce format d'instance devrait être suffisant pour servir mes articles de blog, c'est ce que mentionne David dans son post en tout cas.
4040-4141-
4242-4343-Enfin, je choisis d'_hoster_ mon application sur l'infrastructure de Clever Cloud.
4444-4545-
4646-4747-Une fois ces étapes validées, l'application statique apparaît bien dans ma console.
4848-4949-
5050-5151-## Le déploiement
5252-5353-Maintenant que l'application est créée, le déploiement se fait en deux commandes, que j'exécute sur le _CLI_ cette fois-ci.
5454-5555-La première commande consiste à associer mon répertoire à l'application que je viens de créer :
5656-```shell
5757-$ clever link app_701cce73-7499-4e14-9059-519fae4f1875
5858-Your application has been successfully linked!
5959-```
6060-6161-La seconde est le déploiement en lui-même (j'ai un peu tronqué l'output de la commande par souci de clarté) :
6262-6363-```shell
6464-$ clever deploy
6565-6666-Remote application is app_id=app_701cce73-7499-4e14-9059-519fae4f1875, alias=codeka.io, name=codeka.io
6767-Remote application belongs to orga_5e0f424c-f593-4d79-9863-5d1d3f17b25e
6868-App is brand new, no commits on remote yet
6969-New local commit to push is 11370c5e5ebb5fd0e502ea9f2502cc3b5848f0e2 (from refs/heads/main)
7070-Pushing source code to Clever Cloud…
7171-Your source code has been pushed to Clever Cloud.
7272-Waiting for deployment to start…
7373-Deployment started (deployment_6ff2e8cb-f9b8-4231-bedf-db2ce0497f87)
7474-Waiting for application logs…
7575-2025-06-05T13:53:35.830Z: [INFO] No Clever Cloud specific configuration file detected. Continuing…[INFO] Using Python version 2[INFO] Changing current directory to /home/bas/app_701cce73-7499-4e14-9059-519fae4f1875…[INFO] We are now in /home/bas/app_701cce73-7499-4e14-9059-519fae4f1875, let's build and run the app.[INFO] Deploying commit ID 11370c5e5ebb5fd0e502ea9f2502cc3b5848f0e2[INFO] Hugo configuration file detected
7676-2025-06-05T13:53:35.830Z: Start building sites …
7777-2025-06-05T13:53:35.830Z: hugo v0.147.7+extended linux/amd64 BuildDate=unknown
7878-2025-06-05T13:53:49.083Z: │ FR │ EN
7979-2025-06-05T13:53:49.083Z: ──────────────────┼─────┼─────
8080-2025-06-05T13:53:49.084Z: Pages │ 107 │ 23
8181-2025-06-05T13:53:49.084Z: Paginator pages │ 4 │ 0
8282-2025-06-05T13:53:49.084Z: Non-page files │ 85 │ 0
8383-2025-06-05T13:53:49.084Z: Static files │ 184 │ 184
8484-2025-06-05T13:53:49.084Z: Processed images │ 44 │ 0
8585-2025-06-05T13:53:49.084Z: Aliases │ 6 │ 2
8686-2025-06-05T13:53:49.084Z: Cleaned │ 0 │ 0
8787-2025-06-05T13:53:49.084Z: Total in 13269 ms
8888-2025-06-05T13:53:49.461Z: [INFO] Creating build cache archive[INFO] build cache archive successfully created[INFO] No cron to setup
8989-2025-06-05T13:53:49.461Z: Uploading application build cache archive… file is 134M before compression.
9090-2025-06-05T13:54:26.611Z: Application start successful
9191-2025-06-05T13:54:27.092Z: [INFO] No Clever Cloud specific configuration file detected. Continuing…[INFO] Using Python version 2[INFO] Changing current directory to /home/bas/app_701cce73-7499-4e14-9059-519fae4f1875…[INFO] We are now in /home/bas/app_701cce73-7499-4e14-9059-519fae4f1875, let's build and run the app.[INFO] Deploying commit ID 11370c5e5ebb5fd0e502ea9f2502cc3b5848f0e2[INFO] No cron to setup[INFO] Successfully deployed in 0 minutes and 12 seconds
9292-Deployment successful
9393-```
9494-9595-Tout semble bien se passer. Mon site est bien détecté comme un site utilisant `hugo`, et il est construit automatiquement.
9696-9797-Un `clever open` permet d'ouvrir l'application directement dans mon navigateur :
9898-9999-```shell
100100-$ clever open
101101-Opening the application in your browser
102102-```
103103-104104-Et là, bim, 404 !
105105-106106-
107107-108108-En effet, il faut positionner quelques variables d'environnement pour que tout fonctionne correctement (merci David Legrand pour le topo d'ailleurs) :
109109-110110-Quand hugo génère le contenu du site, il dépose ses fichiers par défaut dans un répertoire `/public`. Il faut donc indiquer au serveur web que c'est bien ce répertoire qui doit être servi. La variable d'environnement `CC_WEBROOT` permet d'indiquer ce répertoire.
111111-112112-Il est aussi possible de préciser la version de hugo avec `CC_HUGO_VERSION` et de modifier les commandes avec `CC_BUILD_COMMAND`.
113113-114114-A priori, hugo n'est pas détecté quand `CC_WEBROOT` est modifié (cf. [cette discussion sur GitHub](https://github.com/CleverCloud/Community/discussions/66#discussioncomment-13381026)), donc je précise la commande `CC_BUILD_COMMAND=hugo` pour forcer son utilisation.
115115-116116-Je précise donc juste mes deux variables `CC_WEBROOT=/public` et `CC_BUILD_COMMAND=hugo`, et je ne précise pas les autres pour garder leur valeur par défaut :
117117-118118-```shell
119119-$ clever env set CC_WEBROOT "/public"
120120-Your environment variable has been successfully saved
121121-122122-$ clever env set CC_BUILD_COMMAND "hugo"
123123-Your environment variable has been successfully saved
124124-```
125125-126126-Un `restart` est alors nécessaire pour la bonne prise en compte de la variable, on peut aussi re-forcer un déploiement complet avec `clever deploy --force` :
127127-128128-```shell
129129-$ clever restart
130130-```
131131-132132-Et après quelques minutes, le site est disponible :
133133-134134-
135135-136136-## La bascule DNS
137137-138138-Maintenant que le site est buildé et disponible, je peux enregistrer mon domaine et basculer mon DNS chez Clever Cloud.
139139-140140-L'enregistrement du domaine côté Clever Cloud se fait en une commande :
141141-142142-```shell
143143-$ clever domain add codeka.io
144144-Your domain has been successfully saved
145145-```
146146-147147-La configuration du DNS est expliquée directement dans la console :
148148-149149-
150150-151151-Comme j'utilise un domain racine, j'ai dû déclarer les records de type `A` dans ma zone DNS :
152152-153153-```text
154154-IN A 91.208.207.214
155155-IN A 91.208.207.215
156156-IN A 91.208.207.216
157157-IN A 91.208.207.217
158158-IN A 91.208.207.218
159159-IN A 91.208.207.220
160160-IN A 91.208.207.221
161161-IN A 91.208.207.222
162162-IN A 91.208.207.223
163163-```
164164-165165-Une fois la modification des DNS passée, tout est ok et mon site est disponible en ligne.
166166-167167-Vous êtes donc en train de lire cet article depuis un site static déployé sur Clever Cloud 🎉
168168-169169-## Performances
170170-171171-### Build
172172-173173-Le temps de build est tout à fait correct.
174174-175175-Mon site n'est pas des plus gros (une centaine de pages). Le build de mon site se fait en une quinzaine de secondes, et le démarrage également. Le temps total d'un déploiement est d'un peu plus d'une minute, pour l'intégralité de l'exécution de la commande `clever deploy`. C'est le même ordre de grandeur que les déploiements que je faisais sur GitHub Pages par le passé.
176176-177177-### Requêtes et débit
178178-179179-Un test rapide avec `ab` donne les stats suivantes :
180180-181181-```shell
182182-$ ab -k -n 500 -c 50 https://codeka.io/
183183-This is ApacheBench, Version 2.3 <$Revision: 1923142 $>
184184-Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
185185-Licensed to The Apache Software Foundation, http://www.apache.org/
186186-187187-Benchmarking codeka.io (be patient)
188188-Completed 100 requests
189189-Completed 200 requests
190190-Completed 300 requests
191191-Completed 400 requests
192192-Completed 500 requests
193193-Finished 500 requests
194194-195195-196196-Server Software:
197197-Server Hostname: codeka.io
198198-Server Port: 443
199199-SSL/TLS Protocol: TLSv1.3,TLS_AES_256_GCM_SHA384,2048,256
200200-Server Temp Key: X25519 253 bits
201201-TLS Server Name: codeka.io
202202-203203-Document Path: /
204204-Document Length: 47110 bytes
205205-206206-Concurrency Level: 50
207207-Time taken for tests: 0.313 seconds
208208-Complete requests: 500
209209-Failed requests: 0
210210-Keep-Alive requests: 500
211211-Total transferred: 23702000 bytes
212212-HTML transferred: 23555000 bytes
213213-Requests per second: 1597.97 [#/sec] (mean)
214214-Time per request: 31.290 [ms] (mean)
215215-Time per request: 0.626 [ms] (mean, across all concurrent requests)
216216-Transfer rate: 73974.77 [Kbytes/sec] received
217217-218218-Connection Times (ms)
219219- min mean[+/-sd] median max
220220-Connect: 0 2 7.5 0 31
221221-Processing: 8 22 11.9 19 89
222222-Waiting: 7 19 6.8 18 87
223223-Total: 8 24 16.4 19 99
224224-225225-Percentage of the requests served within a certain time (ms)
226226- 50% 19
227227- 66% 19
228228- 75% 20
229229- 80% 20
230230- 90% 54
231231- 95% 66
232232- 98% 77
233233- 99% 88
234234- 100% 99 (longest request)
235235-```
236236-237237-Les performances sont clairement au rendez-vous, en tout cas largement suffisantes pour héberger un site statique comme le mien ⚡️
238238-239239-## Conclusion
240240-241241-Pour 4.5 € euros / mois, et pour la simplicité d'utilisation, ce nouveau type d'application Clever Cloud vaut vraiment le coup. Avec les accès aux logs, la customization des instances possibles et l'hébergement en France 🇫🇷, je dis bye-bye GitHub Pages 👋