Ir al contenido

Construcción con Docker

El constructor se distribuye como una imagen Docker. Los repositorios de contenido lo ejecutan para producir HTML estático sin necesidad de instalar Node.js o Astro localmente.

docker/Dockerfile utiliza una construcción de múltiples pasos sobre 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"]
CapaQué contienePor qué se cachea por separado
1COPY package*.json + npm ciLas dependencias cambian con poca frecuencia; cachear esta capa evita volver a descargarlas en cada construcción
2COPY . .Código fuente del framework
3rm -rf src/content/docs/*Limpia cualquier contenido de ejemplo para que solo aparezca el contenido inyectado
4COPY entrypoint.shScript de orquestación de la construcción

docker/entrypoint.sh se ejecuta cada vez que el contenedor inicia. Realiza los siguientes pasos en orden:

Ventana de terminal
npm install
npm update

Asegura que el paquete del tema y todas las dependencias estén en sus últimas versiones compatibles.

Ventana 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

Copia astro.config.mjs y content.config.ts desde el paquete del tema. El tema es la fuente única de verdad para la configuración de Astro — consulte Arquitectura para el diseño del sistema de temas.

Ventana 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

Copia el contenido montado en el directorio de colecciones de contenido de Astro. Sale con un error si el directorio de contenido no existe.

Ventana 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 no está definido a través de una variable de entorno, lo extrae del campo title: del frontmatter de index.mdx.

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

Deriva la ruta base del sitio a partir del nombre del repositorio de GitHub (por ejemplo, owner/my-docs se convierte en /my-docs).

Ventana de terminal
npm run build

Ejecuta astro build, produciendo la salida estática en /app/dist/.

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

Copia el sitio construido al punto de montaje de salida.

VariableValor predeterminadoDescripción
CONTENT_DIR/content/docsRuta al directorio de contenido montado
OUTPUT_DIR/outputRuta donde se copia el sitio construido
DOCS_TITLE(extraído de index.mdx)Título del sitio pasado a la configuración de Astro
DOCS_DESCRIPTION(extraído de index.mdx)Descripción del sitio desde el frontmatter
DOCS_BASE(derivado de GITHUB_REPOSITORY)Ruta base del sitio (por ejemplo, /my-docs)
DOCS_SITE(derivado de GITHUB_REPOSITORY_OWNER)URL del sitio pasada a la configuración de Astro (por ejemplo, https://<owner>.github.io)
GITHUB_REPOSITORY(definido por GitHub Actions)Cadena owner/repo utilizada para derivar DOCS_BASE
GENERATE_PDFfalseHabilitar la generación de PDF después de la construcción
PDF_FILENAMEdocsNombre del archivo de salida para el PDF generado
LLMS_OPTIONAL_LINKS[]Array JSON de URLs de sitios secundarios para la sección Optional de llms.txt

Para construir documentación localmente usando Docker:

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

Esto monta el directorio local docs/ como contenido y escribe el sitio construido en output/.

Para autores de contenido que deseen un flujo de trabajo con servidor de desarrollo en vivo, consulte Vista previa local para autores de contenido.

Cuando se trabaja en el propio constructor (componentes, plugins, integración del tema), puede ejecutar el servidor de desarrollo de Astro directamente sin Docker:

Ventana 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

Abra http://localhost:4321. El reemplazo de módulos en caliente (HMR) funciona para cambios en componentes y plugins.

La imagen se publica en GitHub Container Registry:

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

Se publican dos etiquetas en cada construcción:

EtiquetaDescripción
latestConstrucción más reciente desde main
<sha>SHA completo del commit de Git para construcciones reproducibles

Consulte CI/CD y Gobernanza para el flujo de trabajo que construye y publica la imagen.