Files
apps-registry/workloads/docs-portal/mkdocs.yml
T
devops be3e5c2a4c docs(devsecops): documentar 4+1 hallazgos de infraestructura y TODOs de Cosign
5 playbooks nuevos en docs/playbooks/ del portal:
- SQLite en modo DELETE causando SQLITE_BUSY, por que WAL lo resuelve.
- Anchors YAML no soportados por el parser de Gitea Actions, incluido
  el diagnostico equivocado inicial (indentacion) que se corrigio
  despues -- documentado con honestidad como leccion de proceso.
- Docker-in-Docker vs sibling containers, y por que Semgrep corre
  nativo en un venv en vez de como container aparte.
- El SNI/realm HTTP del tunel rompiendo especificamente a Cosign
  (docker push funcionaba, cosign sign no), conectado con el
  incidente ya documentado del 504 -- misma capa de ingress, dos
  fallas distintas.
- Contencion de recursos entre Gitea y su runner: causa raiz real
  confirmada en vivo durante esta misma sesion (ambos contenedores
  reiniciados a mitad de un build, sin limites de CPU/memoria reales),
  con fix propuesto (ver rama fix/gitea-runner-resource-limits en
  scripts/) pendiente de aplicacion manual.

Se actualiza el playbook del 504 para linkear hacia el nuevo hallazgo
de contencion, cerrando el loop que habia quedado abierto ahi.

cosign.md: nueva seccion "Limitaciones conocidas y mejoras futuras"
con los dos TODO reales -- firma por tag en vez de digest (con el
warning real de Cosign visto en los logs) y transparency log de Rekor
deshabilitado, explicado en simple.

index.md: tabla resumen de los 3 pipelines (imagen + adaptacion de
Semgrep por stack), diagrama generalizado para reflejar que es el
mismo patron en los 3 workflows, y "que falta" actualizado.

Validado con mkdocs build --strict (0 errores, 0 warnings) antes de
commitear.
2026-08-15 15:17:43 -05:00

118 lines
4.0 KiB
YAML

site_name: CruzCloud Lab
site_description: >-
Portal de documentación del lab GitOps CruzCloud — arquitectura, decisiones
y playbooks de incidentes reales (ZimaOS + k3d + Gitea + Argo CD).
site_url: https://docs.cruzcloud.net/
repo_url: https://gitea.cruzcloud.net/devops/apps-registry
repo_name: devops/apps-registry
edit_uri: _blank
docs_dir: docs
theme:
name: material
language: es
palette:
- media: "(prefers-color-scheme: light)"
scheme: default
primary: indigo
accent: indigo
toggle:
icon: material/weather-night
name: Cambiar a modo oscuro
- media: "(prefers-color-scheme: dark)"
scheme: slate
primary: indigo
accent: indigo
toggle:
icon: material/weather-sunny
name: Cambiar a modo claro
features:
- navigation.tabs
- navigation.tabs.sticky
- navigation.sections
- navigation.top
- navigation.footer
- navigation.indexes
- search.suggest
- search.highlight
- content.code.copy
- content.tabs.link
- toc.follow
plugins:
- search:
lang: es
# TODO (fase 2): git-revision-date-localized deshabilitado a propósito.
# El Dockerfile construye con context: workloads/docs-portal/, que no
# incluye .git (vive en la raíz del repo) — el plugin no tiene historial
# real que leer y cae siempre en fallback_to_build_date, emitiendo un
# WARNING por página. mkdocs build --strict aborta ante CUALQUIER
# WARNING, así que mientras no se le dé contexto de build con .git real
# (mover el build a la raíz del repo + fetch-depth:0 en el workflow),
# este plugin debe quedar fuera para no romper el pipeline.
# - git-revision-date-localized:
# enable_creation_date: true
# type: date
# fallback_to_build_date: true
markdown_extensions:
- admonition
- attr_list
- md_in_html
- tables
- toc:
permalink: true
- pymdownx.details
- pymdownx.superfences:
custom_fences:
- name: mermaid
class: mermaid
format: !!python/name:pymdownx.superfences.fence_code_format
- pymdownx.highlight:
anchor_linenums: true
- pymdownx.inlinehilite
- pymdownx.snippets
- pymdownx.tabbed:
alternate_style: true
nav:
- Inicio: index.md
- Arquitectura:
- Visión general: arquitectura/vision-general.md
- Red y exposición: arquitectura/red-y-exposicion.md
- Flujo GitOps: arquitectura/gitops-flujo.md
- Glosario: arquitectura/glosario.md
- Decisiones (ADRs):
- "0001 · Por qué k3d": decisiones/0001-por-que-k3d.md
- "0002 · Por qué Argo CD": decisiones/0002-por-que-argocd-vs-manual.md
- "0003 · HTTP/2 sobre QUIC": decisiones/0003-por-que-http2-sobre-quic-tunnel.md
- Plantilla ADR: decisiones/plantilla-adr.md
- Playbooks:
- Crashloop Medusa: playbooks/incidente-crashloop-medusa.md
- 504 túnel Gitea: playbooks/incidente-504-gitea-tunnel.md
- Precios Medusa: playbooks/incidente-precios-medusa.md
- Imágenes NPM: playbooks/incidente-imagenes-npm.md
- SQLite modo DELETE: playbooks/incidente-sqlite-modo-delete-2026-08.md
- Anchors YAML en Gitea Actions: playbooks/incidente-yaml-anchors-gitea-actions-2026-08.md
- Docker-in-Docker y Semgrep: playbooks/incidente-docker-in-docker-semgrep-2026-08.md
- Realm HTTP y Cosign: playbooks/incidente-cosign-realm-http-tunnel-2026-08.md
- Contención de recursos Gitea/runner: playbooks/incidente-contencion-recursos-gitea-runner-2026-08.md
- Aprendizajes:
- Notas sueltas: aprendizajes/notas-sueltas.md
- Guía del estudiante:
- Inicio: guia-estudiante/README.md
- Conceptos básicos: guia-estudiante/conceptos-basicos.md
- DevSecOps:
- Resumen: devsecops/index.md
- Gitleaks (secretos): devsecops/gitleaks.md
- Trivy (imagen + IaC): devsecops/trivy.md
- SAST (Semgrep): devsecops/sast.md
- SBOM (Syft): devsecops/sbom.md
- Cosign (firma de imágenes): devsecops/cosign.md
extra:
social:
- icon: fontawesome/brands/git-alt
link: https://gitea.cruzcloud.net/devops