Publier un site statique
Fonctionnalité déployée et prise en charge. Les champs et commandes décrits ici sont stables au sein de la version v1alpha1.
Un site statique sert les fichiers d'un dossier (HTML, CSS, JS, images) derrière un cache, sous
<nom>.<tenant>.dev.stackngo.app. Vous créez le site avec sng cdn create, puis vous publiez
votre dossier de build avec sng cdn upload ; aucun serveur à faire tourner.
Prérequis
- La CLI
sngauthentifiée, une session sur votre tenant (sng tenant use acme) ;sng config showaffiche le cluster et le tenant. - Les droits
cdn:write(créer),cdn:uploadetcdn:purge(publier et vider le cache) : inclus dans les policies géréesreadwriteetadmin. - Un dossier à publier, par exemple le
dist/produit parnpm run build.
1. Créer le site
sng cdn create docs
site docs créé : https://docs.acme.dev.stackngo.app (stockage default)
déposez le contenu : sng cdn upload docs ./dist
le site est servi dans quelques minutes.
Le nom du site devient le premier label du domaine : minuscules, chiffres et -, 63
caractères au plus. Le site est stocké par la plateforme (stockage default) ; vous n'avez
ni bucket ni clé à gérer.
Le même site en manifeste :
apiVersion: cdn.stackngo.io/v1alpha1
kind: CDNSite
metadata:
name: docs
spec:
domain: docs.acme.dev.stackngo.app
fallback: index.html # servi pour les routes inconnues (application monopage)
sng apply docs-site.yml
2. Publier le contenu
npm run build
sng cdn upload docs ./dist
envoyé 42/42
site docs : 42 fichier(s) publié(s), 0 retiré(s)
Les fichiers sont envoyés en parallèle, puis la plateforme vérifie que tout est arrivé et vide le cache du site. Les fichiers qui n'existent plus dans votre dossier restent en ligne ; pour les retirer :
sng cdn upload docs ./dist --prune
envoyé 40/40
site docs : 40 fichier(s) publié(s), 2 retiré(s)
3. Choisir le comportement des routes
| Requête | Fichier servi |
|---|---|
/ | index.html |
/assets/app.3f9c.js | assets/app.3f9c.js, ou 404 |
/docs/intro/ (finit par /) | docs/intro/index.html s'il existe, sinon le fallback |
/docs/intro (pas d'extension) | docs/intro s'il existe, sinon docs/intro/index.html, sinon le fallback |
Chaque dossier sert donc son index.html, avec ou sans / final : un site produit par un
générateur de site statique (Docusaurus, Hugo, MkDocs…) fonctionne tel quel, sans réglage
des liens.
Le fallback (index.html par défaut avec sng cdn create) convient aux applications
monopages (React Router, Vue Router) : toute route sans extension qui ne correspond à aucun
fichier ni dossier renvoie votre index.html avec un code 200. Une route avec extension
(.png, .js) qui manque renvoie 404.
Sans fallback : sng cdn create docs --fallback "", ou retirez fallback du manifeste.
Vérification
sng cdn list
NAME URL STORAGE STATUS STATE
docs https://docs.acme.dev.stackngo.app default enabled Ready
sng cdn list montre ce que vous avez déclaré, et l'état du site dans la colonne STATE : Ready
quand il est servi, Waiting ou Pending tant qu'il attend quelque chose (un message sous le tableau
explique quoi). sng kind get CDNSite docs affiche son manifeste puis son état en commentaires (condition
Ready, raison et message). Vérifiez-le aussi directement :
curl -sI https://docs.acme.dev.stackngo.app/
HTTP/2 200, content-type: text/html; charset=utf-8. Tant que le site n'est pas encore servi,
il répond 404 not found : patientez quelques minutes (pour un domaine apporté, le temps de la
vérification de sa zone).
Le site reçoit automatiquement un certificat HTTPS valide, sans rien déclarer, en général dans
les minutes qui suivent sa création. Ce certificat joker couvre tous vos sites placés juste
sous votre zone : le suivant (blog.acme.dev.stackngo.app) est en HTTPS dès sa création. Si curl signale encore un certificat non valide une
heure après la création du site, contactez le support. Pour servir votre propre certificat,
voir tlsSecretRef dans CDNSite.
Publier depuis une CI
deploy-docs:
stage: deploy
image: node:22
script:
- npm ci && npm run build
- sng tenant use acme
- sng cdn upload docs ./dist --prune
rules:
- if: $CI_COMMIT_BRANCH == "main"
L'authentification de sng dans un job (compte machine ou fédération OIDC) est décrite dans
CI/CD. Donnez à l'identité de la CI une policy limitée à ce site :
cdn:upload et cdn:purge sur cdn/docs.
Pour aller plus loin
- Limites d'un envoi : 100 Mio par fichier, 20 000 fichiers par site et par envoi
(envoyés par lots de 1 000). Noms de fichiers : lettres, chiffres et
._~@+=,-; pas d'espace ni d'accent. Les liens symboliques sont ignorés (avertissement sur la sortie d'erreur),.git/et.DS_Storene sont jamais envoyés. - Parallélisme :
--concurrency N(1 à 32, 8 par défaut). - Type de contenu : déduit de l'extension (
.html,.css,.js,.mjs,.json,.svg,.woff2,.wasm…),application/octet-streamsinon. - Cache : voir Maintenance et cache.
- Votre propre bucket : un site peut servir un bucket de stockage objet qui vous
appartient (
spec.s3) ;sng cdn uploadne s'applique pas alors, déposez les fichiers vous-même. VoirCDNSite. - Domaines : un site se nomme sous
<tenant>.dev.stackngo.app(docs.acme.dev.stackngo.app,v2.docs.acme.dev.stackngo.app), ou sous un domaine apporté (docs.exemple.fr, voir Apporter un domaine). Vous pouvez déclarer le site avant sa zone : il reste enWaitinget se met en service dès que la zone est vérifiée, sans nouvelle commande. - Un seul périmètre : les sites sont ceux du tenant ; un nom de site et un domaine ne servent qu'une fois dans le tenant.
Voir aussi
- Maintenance et cache
- Référence :
sng cdn,CDNSite - Votre zone par défaut