Livre blanc : ueo.ventures - un site web statique à page unique hébergé chez DownToZero
Ce livre blanc illustrera comment DownToZero est utilisé pour héberger un site web statique. Nous fournirons des informations sur la manière dont le site a été construit ainsi que des données concrètes sur son utilisation et comment cela se reflète dans l’utilisation de DownToZero et donc dans le coût.
What Is ueo.ventures?
ueo.ventures est un site statique fournissant des credentials à des entités externes. Le site est très minimaliste et ne comprend que 2 pages statiques. Il comprend :
- page index - indiquant le nom de l’entreprise
- page impressum - indiquant les obligations légales d’une entreprise privée
How is it build?
Comme mentionné précédemment, le site ne contient que 2 pages. Ces pages sont des fichiers statiques dans un dépôt github.
Pour les rendre disponibles sur DownToZero, nous devons empaqueter ces deux fichiers dans un conteneur docker.
Voici le Dockerfile complet utilisé pour empaqueter le site web.
FROM alpine AS runner
RUN apk add --update --no-cache lighttpd && rm -rf /var/cache/apk/*
ADD index.html /var/www/localhost/htdocs/
ADD impressum.html /var/www/localhost/htdocs/
CMD ["/usr/sbin/lighttpd", "-D", "-f", "/etc/lighttpd/lighttpd.conf"]
Et le pipeline que nous utilisons pour construire et déployer la version la plus à jour.
name: website
on:
push:
workflow_dispatch:
schedule:
- cron: '30 5 25 * *'
jobs:
build-website:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: build website
run: |
docker build -t xb35e5d0.cr.dtz.dev/ueo-ventures .
- name: Login to xb35e5d0.cr.dtz.dev
uses: docker/login-action@v3
with:
registry: xb35e5d0.cr.dtz.dev
username: apikey
password: ${{ secrets.DTZ_API_KEY }}
- name: uploading image to xb35e5d0.cr.dtz.dev
run: |
docker push xb35e5d0.cr.dtz.dev/ueo-ventures:latest
- name: Resolve image digest
id: resolve_digest
run: |
DIGEST=$(docker inspect --format='{{index .RepoDigests 0}}' xb35e5d0.cr.dtz.dev/ueo-ventures:latest)
echo "IMAGE_URL=$DIGEST" >> $GITHUB_ENV
- name: Deploy latest image to service
uses: DownToZero-Cloud/containers-service-update@main
with:
container_image: ${{ env.IMAGE_URL }}
api_key: ${{ secrets.DTZ_API_KEY }}
service_id: service-e1d1efd8
- name: Publish image URL to summary
run: |
echo "## Deployed image" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "${IMAGE_URL}" >> $GITHUB_STEP_SUMMARY
How much is it used?
requests
Le nombre de requêtes vers cette page est assez faible. Nous verrons donc beaucoup de cold-starts non optimisés. Le volume global quotidien est en moyenne d’environ 200 requêtes par jour.
Voici un court échantillon des données
| day | requests |
|---|---|
| 2025-09-12 | 147 |
| 2025-09-13 | 116 |
| 2025-09-14 | 118 |
| 2025-09-15 | 121 |
| 2025-09-16 | 200 |
| 2025-09-17 | 169 |
| 2025-09-18 | 157 |
| 2025-09-19 | 268 |
| 2025-09-20 | 524 |
| 2025-09-21 | 496 |
| 2025-09-22 | 228 |
| 2025-09-23 | 246 |
| 2025-09-24 | 123 |
| 2025-09-25 | 79 |
| 2025-09-26 | 60 |
splitting the request by cold-starts
Les cold starts sont des démarrages où rien n’est présent sur l’hôte d’exécution.
Les warm starts sont quand l’image est déjà chargée sur l’hôte d’exécution, mais que le conteneur doit être démarré.
Les hot starts sont quand le conteneur est déjà en fonctionnement.
| day | démarrages froids | démarrages tièdes | démarrages chauds |
|---|---|---|---|
| 2025-09-12 | 63 | 48 | 14 |
| 2025-09-13 | 70 | 3 | 21 |
| 2025-09-14 | 61 | 3 | 22 |
| 2025-09-15 | 68 | 0 | 31 |
| 2025-09-16 | 84 | 3 | 27 |
| 2025-09-17 | 53 | 3 | 25 |
| 2025-09-18 | 72 | 2 | 27 |
| 2025-09-19 | 48 | 2 | 19 |
| 2025-09-20 | 501 | 2 | 10 |
| 2025-09-21 | 474 | 3 | 1 |
| 2025-09-22 | 199 | 3 | 2 |
| 2025-09-23 | 201 | 3 | 27 |
| 2025-09-24 | 71 | 5 | 31 |
| 2025-09-25 | 51 | 3 | 20 |
response times
Bien que la différence entre les hot et cold starts semble significative en valeur relative, le temps global de cold-start ne descend jamais sous 3 ms.
Percentiles de latence en ms
| état | p50 | p90 | p95 | p99 |
|---|---|---|---|---|
| cold | 0.536 | 1.003 | 2.0888 | 3.2584 |
| hot | 0 | 0 | 0.001 | 0.001 |
Power Consumption
Tout cela se traduit par un certain type et modèle d’utilisation. Notre métrique pour déterminer l’utilisation est le Watt. Nous mesurons la consommation énergétique de toute cette activité et fournissons des statistiques détaillées dans le temps.
| day | consommation électrique (en Wh) |
|---|---|
| 2025-09-12 | 1.88 |
| 2025-09-13 | 2.00 |
| 2025-09-14 | 0.96 |
| 2025-09-15 | 1.76 |
| 2025-09-16 | 3.14 |
| 2025-09-17 | 0.43 |
| 2025-09-18 | 1.90 |
| 2025-09-19 | 1.06 |
| 2025-09-20 | 4.74 |
| 2025-09-21 | 4.51 |
| 2025-09-22 | 1.62 |
| 2025-09-23 | 6.51 |
| 2025-09-24 | 3.85 |
| 2025-09-25 | 3.29 |
| 2025-09-26 | 2.81 |
Pricing & Cost Efficiency
DownToZero facture le calcul uniquement en fonction de l’énergie consommée. Les tarifs actuels sont :
- Calcul : 0,010 EUR par Watt-heure (Wh) en mode normal ; 0,005 EUR/Wh en ecoMode.
- Stockage : stockage chaud - 0,0013 EUR / Go / jour ; stockage froid - 0,0007 EUR / Go / jour
Basé sur l’usage mesuré de ce service ueo.ventures:
- Requêtes : environ 203 requêtes/jour en moyenne sur la période d’échantillonnage (maximum 524 ; minimum 60).
- Énergie : environ 2,40 Wh/jour en moyenne (min 0,43 Wh ; max 6,51 Wh).
Coût calculé estimé aux tarifs actuels :
- Mode normal : environ 0,024 EUR/jour (environ 0,72 EUR pour un mois de 30 jours) ; fourchette journalière ≈ 0,004–0,065 EUR.
- ecoMode : environ 0,012 EUR/jour (environ 0,36 EUR pour un mois de 30 jours) ; fourchette journalière ≈ 0,002–0,033 EUR.
Comme vous payez par watt, il y a un incitatif direct à garder les images légères, éviter les travaux inutiles sur les cold starts, et opter pour ecoMode lorsque cela est possible. Avec le temps, cela peut réduire à la fois les dépenses et la consommation d’énergie.
Compromis : ecoMode peut impliquer des caractéristiques de performance différentes (par exemple, latence au démarrage, planification) ; les coûts peuvent varier avec les pics d’utilisation. Surveillez la consommation et ajustez au besoin.