Salta ai contenuti

Docker Build

Il builder viene distribuito come immagine Docker. I repository di contenuti lo eseguono per produrre HTML statico senza installare Node.js o Astro localmente.

docker/Dockerfile utilizza un build multi-step basato su 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"]
LayerCosaPerché viene cachato separatamente
1COPY package*.json + npm ciLe dipendenze cambiano raramente; il caching di questo layer evita di riscaricarle ad ogni build
2COPY . .Codice sorgente del framework
3rm -rf src/content/docs/*Rimuove qualsiasi contenuto placeholder in modo che appaia solo il contenuto iniettato
4COPY entrypoint.shScript di orchestrazione della build

docker/entrypoint.sh viene eseguito ogni volta che il container si avvia. Esegue questi passaggi in ordine:

Terminal window
npm install
npm update

Assicura che il pacchetto del tema e tutte le dipendenze siano alle ultime versioni compatibili.

Terminal window
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

Copia astro.config.mjs e content.config.ts dal pacchetto del tema. Il tema è l’unica fonte di verità per la configurazione di Astro — consulta Architettura per il design del sistema di temi.

Terminal window
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

Copia il contenuto montato nella directory della content collection di Astro. Esce con un errore se la directory del contenuto è mancante.

Terminal window
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

Se DOCS_TITLE non è impostato tramite variabile d’ambiente, lo estrae dal campo frontmatter title: di index.mdx.

Terminal window
if [ -z "$DOCS_BASE" ] && [ -n "$GITHUB_REPOSITORY" ]; then
DOCS_BASE="/${GITHUB_REPOSITORY#*/}"
export DOCS_BASE
fi

Ricava il base path del sito dal nome del repository GitHub (ad esempio, owner/my-docs diventa /my-docs).

Terminal window
npm run build

Esegue astro build, producendo l’output statico in /app/dist/.

Terminal window
if [ -d "$OUTPUT_DIR" ]; then
cp -r /app/dist/* "$OUTPUT_DIR"/
fi

Copia il sito costruito nel punto di mount dell’output.

VariabileDefaultDescrizione
CONTENT_DIR/content/docsPercorso della directory del contenuto montata
OUTPUT_DIR/outputPercorso dove viene copiato il sito costruito
DOCS_TITLE(estratto da index.mdx)Titolo del sito passato alla configurazione di Astro
DOCS_DESCRIPTION(estratto da index.mdx)Descrizione del sito dal frontmatter
DOCS_BASE(derivato da GITHUB_REPOSITORY)Base path per il sito (ad esempio, /my-docs)
DOCS_SITE(derivato da GITHUB_REPOSITORY_OWNER)URL del sito passato alla configurazione di Astro (ad esempio, https://<owner>.github.io)
GITHUB_REPOSITORY(impostato da GitHub Actions)Stringa owner/repo utilizzata per derivare DOCS_BASE
GENERATE_PDFfalseAbilita la generazione del PDF dopo la build
PDF_FILENAMEdocsNome del file di output per il PDF generato
LLMS_OPTIONAL_LINKS[]Array JSON di URL di siti figlio per la sezione Optional di llms.txt

Per costruire la documentazione localmente utilizzando Docker:

Terminal window
docker run --rm \
-v "$(pwd)/docs:/content/docs" \
-v "$(pwd)/output:/output" \
ghcr.io/f5-sales-demo/docs-builder:latest

Questo monta la directory locale docs/ come contenuto e scrive il sito costruito in output/.

Per gli autori di contenuti che desiderano un flusso di lavoro con dev server live, consulta Anteprima Locale per Autori di Contenuti.

Quando si lavora sul builder stesso (componenti, plugin, integrazione del tema), è possibile eseguire il dev server di Astro direttamente senza Docker:

Terminal window
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

Apri http://localhost:4321. L’Hot Module Replacement (HMR) funziona per le modifiche a componenti e plugin.

L’immagine è pubblicata su GitHub Container Registry:

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

Due tag vengono pushati ad ogni build:

TagDescrizione
latestBuild più recente da main
<sha>SHA completo del commit Git per build riproducibili

Consulta CI/CD e Governance per il workflow che costruisce e pubblica l’immagine.