Aller au contenu

Build Docker

Le builder est distribué sous forme d’image Docker. Les dépôts de contenu l’exécutent pour produire du HTML statique sans installer Node.js ou Astro localement.

docker/Dockerfile utilise un build multi-étapes basé sur node:24-alpine :

FROM node:24-alpine AS builder
WORKDIR /app
# Install deps (cached layer)
COPY package*.json ./
RUN npm ci
# Copy framework code
COPY . .
# Remove placeholder content
RUN rm -rf src/content/docs/*
COPY docker/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CoucheContenuPourquoi mise en cache séparément
1COPY package*.json + npm ciLes dépendances changent rarement ; mettre cette couche en cache évite de les re-télécharger à chaque build
2COPY . .Code source du framework
3rm -rf src/content/docs/*Nettoie tout contenu de substitution afin que seul le contenu injecté apparaisse
4COPY entrypoint.shScript d’orchestration du build

docker/entrypoint.sh s’exécute à chaque démarrage du conteneur. Il effectue les étapes suivantes dans l’ordre :

Fenêtre de terminal
npm install
npm update

Garantit que le package de thème et toutes les dépendances sont à leurs dernières versions compatibles.

Fenêtre de terminal
cp /app/node_modules/@f5-sales-demo/docs-theme/astro.config.mjs /app/astro.config.mjs
cp /app/node_modules/@f5-sales-demo/docs-theme/src/content.config.ts /app/src/content.config.ts

Copie astro.config.mjs et content.config.ts depuis le package de thème. Le thème est la source unique de vérité pour la configuration Astro — voir Architecture pour la conception du système de thème.

Fenêtre de terminal
if [ -d "$CONTENT_DIR" ]; then
cp -r "$CONTENT_DIR"/* /app/src/content/docs/
else
echo "ERROR: No content found at $CONTENT_DIR"
exit 1
fi

Copie le contenu monté dans le répertoire de collection de contenu d’Astro. Sort avec une erreur si le répertoire de contenu est manquant.

Fenêtre de terminal
if [ -z "$DOCS_TITLE" ] && [ -f /app/src/content/docs/index.mdx ]; then
DOCS_TITLE=$(grep -m1 '^title:' /app/src/content/docs/index.mdx | sed 's/title: *["]*//;s/["]*$//')
export DOCS_TITLE
fi

Si DOCS_TITLE n’est pas défini via l’environnement, l’extrait du champ frontmatter title: de index.mdx.

Fenêtre de terminal
if [ -z "$DOCS_BASE" ] && [ -n "$GITHUB_REPOSITORY" ]; then
DOCS_BASE="/${GITHUB_REPOSITORY#*/}"
export DOCS_BASE
fi

Dérive le chemin de base du site à partir du nom du dépôt GitHub (par exemple, owner/my-docs devient /my-docs).

Fenêtre de terminal
npm run build

Exécute astro build, produisant la sortie statique dans /app/dist/.

Fenêtre de terminal
if [ -d "$OUTPUT_DIR" ]; then
cp -r /app/dist/* "$OUTPUT_DIR"/
fi

Copie le site construit vers le point de montage de sortie.

VariableValeur par défautDescription
CONTENT_DIR/content/docsChemin vers le répertoire de contenu monté
OUTPUT_DIR/outputChemin où le site construit est copié
DOCS_TITLE(extrait de index.mdx)Titre du site transmis à la configuration Astro
DOCS_DESCRIPTION(extrait de index.mdx)Description du site depuis le frontmatter
DOCS_BASE(dérivé de GITHUB_REPOSITORY)Chemin de base du site (par exemple, /my-docs)
DOCS_SITE(dérivé de GITHUB_REPOSITORY_OWNER)URL du site transmise à la configuration Astro (par exemple, https://<owner>.github.io)
GITHUB_REPOSITORY(défini par GitHub Actions)Chaîne owner/repo utilisée pour dériver DOCS_BASE
GENERATE_PDFfalseActive la génération PDF après le build
PDF_FILENAMEdocsNom de fichier de sortie pour le PDF généré
LLMS_OPTIONAL_LINKS[]Tableau JSON d’URLs de sites enfants pour la section Optional de llms.txt

Pour construire la documentation localement avec Docker :

Fenêtre de terminal
docker run --rm \
-v "$(pwd)/docs:/content/docs" \
-v "$(pwd)/output:/output" \
ghcr.io/f5-sales-demo/docs-builder:latest

Ceci monte le répertoire local docs/ comme contenu et écrit le site construit dans output/.

Pour les auteurs de contenu souhaitant un workflow avec serveur de développement en direct, voir Prévisualisation locale pour les auteurs de contenu.

Lorsque vous travaillez sur le builder lui-même (composants, plugins, intégration du thème), vous pouvez exécuter le serveur de développement d’Astro directement sans Docker :

Fenêtre de terminal
npm ci
cp node_modules/@f5-sales-demo/docs-theme/astro.config.mjs astro.config.mjs
cp node_modules/@f5-sales-demo/docs-theme/src/content.config.ts src/content.config.ts
# Copy some test content into the content collection
cp -r /path/to/test-content/* src/content/docs/
DOCS_TITLE="Dev Test" npx astro dev --host

Ouvrez http://localhost:4321. Le remplacement de module à chaud (HMR) fonctionne pour les modifications de composants et de plugins.

L’image est publiée sur le GitHub Container Registry :

ghcr.io/f5-sales-demo/docs-builder

Deux tags sont poussés à chaque build :

TagDescription
latestBuild le plus récent depuis main
<sha>SHA complet du commit Git pour des builds reproductibles

Voir CI/CD et gouvernance pour le workflow qui construit et publie l’image.