67 lines
2.7 KiB
Docker
67 lines
2.7 KiB
Docker
# Basado en el Dockerfile real de docs-portal (sitio MkDocs Material).
|
|
# Mejora respecto al original: nginx corre como usuario NO-root acá
|
|
# (nginxinc/nginx-unprivileged) -- el docs-portal real del lab todavía
|
|
# corre nginx:1.27-alpine estándar (como root), un gap real encontrado
|
|
# al armar este template, pendiente de aplicar al repo real por
|
|
# separado.
|
|
#
|
|
# Este template asume MkDocs -- es el único generador de sitio estático
|
|
# que existe hoy en el lab. Si tu app usa otro generador (Hugo, Astro,
|
|
# un build de Vite sin backend), el STAGE 1 es lo único que cambia:
|
|
# reemplazalo por el build real de tu herramienta, el STAGE 2
|
|
# (nginx no-root) sirve igual para cualquier sitio 100% estático.
|
|
#
|
|
# ARGs:
|
|
# PYTHON_IMAGE -- versión del builder (solo aplica al ejemplo MkDocs).
|
|
# NGINX_IMAGE -- versión de nginx no-root.
|
|
# APP_PORT -- OJO: esto solo cambia el EXPOSE/healthcheck de este
|
|
# Dockerfile, NO el puerto real en el que nginx
|
|
# escucha -- eso lo define el nginx.conf que trae la
|
|
# propia imagen nginx-unprivileged, fijo en 8080. Si
|
|
# cambiás este ARG a otro valor, tenés que agregar un
|
|
# nginx.conf propio (COPY) que escuche en ese mismo
|
|
# puerto, o quedan desalineados. Dejalo en 8080
|
|
# mientras no necesites tocar nginx.conf.
|
|
|
|
# syntax=docker/dockerfile:1.7
|
|
|
|
ARG PYTHON_IMAGE=python:3.12-slim
|
|
ARG NGINX_IMAGE=nginxinc/nginx-unprivileged:1.27-alpine
|
|
ARG APP_PORT=8080
|
|
|
|
# --- Stage 1: build del sitio estático (ejemplo: MkDocs Material) ---
|
|
FROM ${PYTHON_IMAGE} AS build
|
|
|
|
WORKDIR /site
|
|
|
|
COPY requirements.txt .
|
|
RUN pip install --no-cache-dir -r requirements.txt
|
|
|
|
COPY mkdocs.yml .
|
|
COPY docs/ docs/
|
|
|
|
# --strict: cualquier link roto o warning de nav rompe el build, para
|
|
# no publicar nunca un sitio con referencias muertas. Si tu generador
|
|
# no tiene un equivalente a --strict, considerá agregar un paso de
|
|
# validación de links aparte (ej. linkinator) antes de este build.
|
|
RUN mkdocs build --strict
|
|
|
|
# --- Stage 2: sirve el sitio estático con nginx, sin root ---
|
|
FROM ${NGINX_IMAGE}
|
|
|
|
ARG APP_PORT
|
|
# ARG no alcanza para el HEALTHCHECK -- ese CMD corre en runtime, no en
|
|
# build time, y ahí un ARG ya no existe. Hace falta ENV.
|
|
ENV APP_PORT=${APP_PORT}
|
|
|
|
# CAMBIAR "/site/site" al directorio real de salida de tu build si no
|
|
# usás MkDocs (ej. "dist/", "public/", "build/", ".output/public/").
|
|
COPY --from=build /site/site /usr/share/nginx/html
|
|
|
|
EXPOSE ${APP_PORT}
|
|
|
|
# nginx-unprivileged trae wget (busybox) -- alcanza para un healthcheck
|
|
# simple sin instalar nada más.
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
|
|
CMD wget -q -O /dev/null "http://127.0.0.1:${APP_PORT}/" || exit 1
|