- Home
- Generatore di documentazione
- Docker Build
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.
Dockerfile
Sezione intitolata “Dockerfile”docker/Dockerfile utilizza un build multi-step basato su node:24-alpine:
FROM node:24-alpine AS builderWORKDIR /app
# Install deps (cached layer)COPY package*.json ./RUN npm ci
# Copy framework codeCOPY . .
# Remove placeholder contentRUN rm -rf src/content/docs/*
COPY docker/entrypoint.sh /entrypoint.shRUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]Strategia dei Layer
Sezione intitolata “Strategia dei Layer”| Layer | Cosa | Perché viene cachato separatamente |
|---|---|---|
| 1 | COPY package*.json + npm ci | Le dipendenze cambiano raramente; il caching di questo layer evita di riscaricarle ad ogni build |
| 2 | COPY . . | Codice sorgente del framework |
| 3 | rm -rf src/content/docs/* | Rimuove qualsiasi contenuto placeholder in modo che appaia solo il contenuto iniettato |
| 4 | COPY entrypoint.sh | Script di orchestrazione della build |
Entrypoint
Sezione intitolata “Entrypoint”docker/entrypoint.sh viene eseguito ogni volta che il container si avvia. Esegue questi passaggi in ordine:
Passaggio 1: Aggiornamento delle Dipendenze
Sezione intitolata “Passaggio 1: Aggiornamento delle Dipendenze”npm installnpm updateAssicura che il pacchetto del tema e tutte le dipendenze siano alle ultime versioni compatibili.
Passaggio 2: Copia della Configurazione del Tema
Sezione intitolata “Passaggio 2: Copia della Configurazione del Tema”cp /app/node_modules/@f5-sales-demo/docs-theme/astro.config.mjs /app/astro.config.mjscp /app/node_modules/@f5-sales-demo/docs-theme/src/content.config.ts /app/src/content.config.tsCopia 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.
Passaggio 3: Iniezione del Contenuto
Sezione intitolata “Passaggio 3: Iniezione del Contenuto”if [ -d "$CONTENT_DIR" ]; then cp -r "$CONTENT_DIR"/* /app/src/content/docs/else echo "ERROR: No content found at $CONTENT_DIR" exit 1fiCopia il contenuto montato nella directory della content collection di Astro. Esce con un errore se la directory del contenuto è mancante.
Passaggio 4: Estrazione del Titolo
Sezione intitolata “Passaggio 4: Estrazione del Titolo”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_TITLEfiSe DOCS_TITLE non è impostato tramite variabile d’ambiente, lo estrae dal campo frontmatter title: di index.mdx.
Passaggio 5: Estrazione del Base Path
Sezione intitolata “Passaggio 5: Estrazione del Base Path”if [ -z "$DOCS_BASE" ] && [ -n "$GITHUB_REPOSITORY" ]; then DOCS_BASE="/${GITHUB_REPOSITORY#*/}" export DOCS_BASEfiRicava il base path del sito dal nome del repository GitHub (ad esempio, owner/my-docs diventa /my-docs).
Passaggio 6: Build
Sezione intitolata “Passaggio 6: Build”npm run buildEsegue astro build, producendo l’output statico in /app/dist/.
Passaggio 7: Copia dell’Output
Sezione intitolata “Passaggio 7: Copia dell’Output”if [ -d "$OUTPUT_DIR" ]; then cp -r /app/dist/* "$OUTPUT_DIR"/fiCopia il sito costruito nel punto di mount dell’output.
Variabili d’Ambiente
Sezione intitolata “Variabili d’Ambiente”| Variabile | Default | Descrizione |
|---|---|---|
CONTENT_DIR | /content/docs | Percorso della directory del contenuto montata |
OUTPUT_DIR | /output | Percorso 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_PDF | false | Abilita la generazione del PDF dopo la build |
PDF_FILENAME | docs | Nome 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 |
Utilizzo Locale
Sezione intitolata “Utilizzo Locale”Per costruire la documentazione localmente utilizzando Docker:
docker run --rm \ -v "$(pwd)/docs:/content/docs" \ -v "$(pwd)/output:/output" \ ghcr.io/f5-sales-demo/docs-builder:latestQuesto 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.
Sviluppatore: Dev Server Locale
Sezione intitolata “Sviluppatore: Dev Server Locale”Quando si lavora sul builder stesso (componenti, plugin, integrazione del tema), è possibile eseguire il dev server di Astro direttamente senza Docker:
npm cicp node_modules/@f5-sales-demo/docs-theme/astro.config.mjs astro.config.mjscp node_modules/@f5-sales-demo/docs-theme/src/content.config.ts src/content.config.ts# Copy some test content into the content collectioncp -r /path/to/test-content/* src/content/docs/DOCS_TITLE="Dev Test" npx astro dev --hostApri http://localhost:4321. L’Hot Module Replacement (HMR) funziona per le modifiche a componenti e plugin.
Registro delle Immagini
Sezione intitolata “Registro delle Immagini”L’immagine è pubblicata su GitHub Container Registry:
ghcr.io/f5-sales-demo/docs-builderDue tag vengono pushati ad ogni build:
| Tag | Descrizione |
|---|---|
latest | Build 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.