Livre blanc : ueo.ventures - un site web statique une seule page 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 façon dont le site a été construit ainsi que des données réelles sur son utilisation et sur la manière dont cela se reflète dans l’utilisation de DownToZero et donc dans le coût.
Qu’est-ce que ueo.ventures ?
ueo.ventures est un site statique fournissant des références à des entités externes. Le site est très minimal et ne consiste qu’en 2 pages statiques. Il inclut :
- page index - indiquant le nom de la société
- page impressum - indiquant les obligations légales d’une société privée
Comment est-il construit ?
Comme indiqué précédemment, le site ne contient que 2 pages. Ces pages sont des fichiers statiques dans un dépôt GitHub. Pour rendre cela disponible sur DownToZero, nous devons empaqueter ces deux fichiers en tant que conteneur Docker.
Voici le Dockerfile complet utilisé pour empaqueter le site.
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
Quelle est son utilisation ?
requêtes
Le nombre de requêtes vers cette page est plutôt faible. Nous verrons donc beaucoup de cold-starts non optimisés. Le volume global par jour est en moyenne d’environ 200 requêtes par jour.
Voici un court échantillon
| 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 |
répartition des requêtes par 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 lorsque l’image est déjà chargée sur l’hôte d’exécution, mais que le conteneur doit être démarré. Les host starts sont lorsque le conteneur est déjà démarré et en cours d’exécution.
| day | cold starts | warm starts | hot starts |
|---|---|---|---|
| 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 |
temps de réponse
Bien que la différence entre les hot et les cold-starts semble significative en valeurs relatives, le temps global de cold-start ne descend pas en dessous de 3 ms.
Percentiles de latence en ms
| state | p50 | p90 | p95 | p99 |
|---|---|---|---|---|
| cold | 0.536 | 1.003 | 2.0888 | 3.2584 |
| hot | 0 | 0 | 0.001 | 0.001 |
Consommation d’énergie
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 d’énergie pour toute cette activité et fournissons des statistiques détaillées dans le temps.
| day | power consumption (in 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 |
Tarification et efficience des coûts
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 / GB / jour ; stockage froid - 0.0007 EUR / GB / jour
Sur la base de l’utilisation mesurée de ce service ueo.ventures :
- Requêtes : ~203 requêtes/jour en moyenne sur la période échantillon (pic 524 ; minimum 60).
- Énergie : ~2.40 Wh/jour en moyenne (min 0.43 Wh ; max 6.51 Wh).
Coût de calcul estimé aux tarifs actuels :
- Mode normal : ~0.024 EUR/jour (~0.72 EUR pour un mois de 30 jours) ; fourchette journalière ≈ 0.004–0.065 EUR.
- ecoMode : ~0.012 EUR/jour (~0.36 EUR pour un mois de 30 jours) ; fourchette journalière ≈ 0.002–0.033 EUR.
Puisque vous payez par watt, il y a une incitation directe à garder les images légères, éviter les travaux inutiles lors des cold starts et opter pour l’ecoMode lorsque cela est pertinent. Avec le temps, cela peut réduire à la fois les dépenses et la consommation d’énergie.
Compromis : l’ecoMode peut impliquer des caractéristiques de performance différentes (par exemple, latence de démarrage, ordonnancement) ; les coûts peuvent varier en cas de pics d’utilisation. Surveillez la consommation et ajustez au besoin.