Tutorial

CI/CD a Forgejo: lecciones de la caída de GitHub de 2026

Despliegue9 min de lectura8 pasos

La caída de GitHub del 17 de agosto de 2026 duró 7 horas y 47 minutos. Afectó a github.com, la autenticación, GitHub Actions, las API, las pull requests, las issues y Copilot. Para los equipos cuya CI/CD se apoyaba en GitHub Actions, fue su presupuesto anual de indisponibilidad consumido en una sola jornada. Forgejo Actions se ejecuta en su VPS, con la misma sintaxis YAML que GitHub Actions, y no depende de ninguna infraestructura externa. Esta guía detalla la migración completa: instalación, migración de los repositorios, portado de los workflows y configuración posterior.

Contenido· Por qué la caída del 17 de agosto de 2026 cambia la pregunta1/8
  1. 01Por qué la caída del 17 de agosto de 2026 cambia la pregunta
  2. 02Ventajas de un Forgejo autoalojado para su CI/CD
  3. 03Requisitos previos
  4. 04Migración de GitHub a Forgejo Actions: instalación y portado
  5. 05Configuración posterior a la migración
  6. 06Endurecimiento de la instancia Forgejo
  7. 07Resolución de problemas: errores frecuentes
  8. 08Para profundizar

Por qué la caída del 17 de agosto de 2026 cambia la pregunta

El 17 de agosto de 2026, a partir de las 9:40 hora de la Costa Este, GitHub sufrió un fallo de capacidad en su centro de datos de la zona Central US. La plataforma alcanzó un pico de tráfico que su infraestructura no absorbió: alrededor de un 20 % de errores en las experiencias web y en las llamadas de API, y hasta un 50 % en las descargas de archivos comprimidos. GitHub Actions fue uno de los servicios afectados de forma más duradera. El conjunto de los servicios no volvió a la normalidad hasta las 17:27, es decir 7 h 47 después del inicio del incidente — reconocido públicamente por GitHub el 20 de agosto de 2026.

DanubeData, una empresa de infraestructura de datos, publicó un informe de experiencia detallado: el incidente reveló una dependencia oculta de su plano de control respecto a GitHub. En respuesta, migraron 9 repositorios —333 pull requests y unos 400 MB de historial Git— a una instancia de Forgejo autoalojada, en una sola jornada. Su pipeline de build principal y su workflow de despliegue en producción siguieron a continuación.

La pregunta ya no es «¿puede caerse GitHub?», sino «¿cuál es nuestra exposición si ocurre?». Forgejo Actions responde a esa pregunta desplazando la ejecución de la CI/CD a su propia infraestructura.

Ventajas de un Forgejo autoalojado para su CI/CD

  • Disponibilidad independiente de GitHub — una caída de la plataforma no interrumpe ni sus builds ni sus despliegues.
  • Sintaxis YAML compatible — la mayoría de los workflows de GitHub Actions se ejecutan sin modificaciones en Forgejo Actions.
  • Coste fijo y previsible — cada minuto de pipeline es un recurso ya pagado en su VPS, no una línea de facturación por consumo.
  • Confidencialidad de los pipelines — el código fuente, los secretos de entorno y los artefactos de build no salen de su infraestructura.
  • Runners configurables — ejecución en contenedor Docker, en proceso nativo o en un entorno LXC no disponible en GitHub.
  • Gobernanza asociativa — Forgejo lo mantiene Codeberg e.V., sin edición enterprise de pago ni riesgo de giro comercial.

Requisitos previos

Antes de empezar la instalación, compruebe que su VPS reúne los recursos siguientes.

RAM: 2 GB como mínimo para la forja sola, con 5 a 20 desarrolladores y repositorios de tamaño razonable. Cuente 4 GB si ejecuta Forgejo Actions con runners que compilan localmente (Go, Rust, Java).

vCPU: 2 vCPU bastan para un equipo de 20 desarrolladores. Añada 2 vCPU por runner simultáneo si sus builds son intensivos en CPU.

Disco: reserve al menos 20 GB de SSD para los repositorios, el historial Git, los artefactos de CI y los registros. Prevea 50 GB si aloja varios años de historial o artefactos binarios voluminosos.

Red: el puerto 22 sigue disponible en el host (SSH del sistema); el SSH de Forgejo se expondrá en un puerto distinto, por convención el 2222. El puerto 443 debe estar abierto para el reverse proxy.

Dominio: prepare un subdominio como git.sudominio.com con un registro A que apunte a la IP de su VPS.

Software: Docker 24+ y el plugin Compose instalados en el VPS.

Migración de GitHub a Forgejo Actions: instalación y portado

  1. Instalar Forgejo con Docker y PostgreSQL

    Cree el directorio de trabajo /opt/forgejo y un subdirectorio data. Redacte un docker-compose.yml con dos servicios: forgejo (imagen codeberg.org/forgejo/forgejo:latest, puerto interno 3000, SSH mapeado en 2222:22, volumen ./data:/data, variables USER_UID=1000 y USER_GID=1000) y db (imagen postgres:16, volumen dedicado, variables POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB). Lance docker compose up -d y vigile docker compose logs -f forgejo hasta que aparezca la mención del puerto HTTP 3000 activo.

  2. Configurar el reverse proxy y el certificado SSL

    Con Caddy basta un solo bloque: git.sudominio.com { reverse_proxy localhost:3000 }. El certificado Let's Encrypt se aprovisiona automáticamente. Con Nginx, cree un bloque server a la escucha en el 443 con proxy_pass http://127.0.0.1:3000; y añada obligatoriamente proxy_read_timeout 600s;: DanubeData se topó con un 504 por falta de este ajuste, que bloqueó la importación en 196 pull requests de 333. Redirija HTTP a HTTPS en un bloque aparte.

  3. Completar la instalación inicial

    Acceda a https://git.sudominio.com. El asistente de instalación le pide: driver de base de datos (PostgreSQL), host (db:5432), credenciales, URL base HTTPS y puerto SSH externo (2222). Cree la cuenta de administrador. Para una instancia privada, desactive el registro automático en los ajustes o añadiendo DISABLE_REGISTRATION=true a las variables de entorno del servicio.

  4. Migrar los repositorios de GitHub

    En la interfaz de Forgejo, haga clic en Nuevo repositorio → Migrar. Seleccione GitHub como origen. Indique la URL del repositorio (https://github.com/su-org/su-repositorio), un personal access token de GitHub con el scope repo, y active la migración de las pull requests, las etiquetas, los hitos y las releases. Para los repositorios voluminosos (> 1 GB o > 200 pull requests), pruebe primero con el timeout del reverse proxy en 600 s. Elimine el repositorio incompleto y vuelva a lanzarlo si aparece un 504. Repita la operación con cada repositorio.

  5. Registrar un runner de Forgejo Actions

    En Forgejo, vaya a Administración → Actions → Runners → Crear un runner. Copie el token de registro. Añada un servicio act-runner a su docker-compose.yml con la imagen codeberg.org/forgejo/runner:latest y las variables FORGEJO_INSTANCE_URL (URL HTTPS de su instancia) y FORGEJO_RUNNER_REGISTRATION_TOKEN. Lance docker compose up -d act-runner. Compruebe que el runner aparece con estado En línea en la administración.

  6. Colocar los archivos de workflow en el directorio correcto

    En GitHub, sus workflows viven en .github/workflows/. En Forgejo deben estar en .forgejo/workflows/. Renombre el directorio en cada repositorio migrado y suba el cambio. El resto del archivo YAML —disparadores on:, jobs, steps, uses: para las acciones de terceros compatibles— sigue siendo idéntico en la mayoría de los casos. Forgejo no lee el directorio .github/.

  7. Adaptar los elementos específicos de GitHub

    Algunos puntos de adaptación: sustituya las acciones que llaman a la API de GitHub (basadas en gh) por su equivalente en Forgejo o neutralícelas; elimine todo permissions: id-token: write (Forgejo utiliza enable-openid-connect en el archivo de workflow para OIDC); si su workflow referencia una herramienta ausente de la imagen Debian bookworm del runner, añada un paso apt-get install -y <herramienta>. Las acciones actions/checkout y actions/setup-node se resuelven de forma nativa.

  8. Verificar los primeros pipelines

    Cree un workflow mínimo .forgejo/workflows/smoke.yml disparado en push, con un único job que ejecute echo "Pipeline OK". Consulte Actions en la interfaz de Forgejo. Una vez que ese primer run esté en verde, traslade sus workflows de producción uno a uno y corrija las diferencias sobre la marcha.

Configuración posterior a la migración

Tras validar la ejecución de los pipelines, quedan tres puntos por configurar.

Webhooks y notificaciones: si algunos sistemas externos (Slack, Mattermost, un webhook de despliegue) escuchaban los eventos de GitHub, vuelva a crearlos en Forgejo en Ajustes → Webhooks. La carga útil es similar a la de GitHub, pero el formato difiere en algunos campos: ajuste sus endpoints de recepción.

Secretos de pipeline: los secretos de GitHub (menú Settings → Secrets) deben recrearse en Forgejo en Ajustes del repositorio → Actions → Secrets. Para los secretos de organización, utilice Administración → Organizaciones → [su org] → Ajustes → Actions → Secrets. No migre nunca un secreto por su valor en un commit ni en un archivo versionado.

Permisos de los runners: por defecto, un runner registrado a nivel de instancia puede ejecutar workflows para todos los repositorios. Para un control más fino, restrinja un runner a una organización o a un repositorio concreto en la pestaña Runners de los ajustes correspondientes.

Endurecimiento de la instancia Forgejo

Tres medidas reducen de forma significativa la superficie de ataque de una instancia abierta a internet.

Active la 2FA obligatoria para todas las cuentas, en especial las de administrador: Administración → Ajustes de autenticación → Exigir la 2FA.

Audite las claves SSH registradas. Un usuario migrado desde GitHub puede tener claves huérfanas o caducadas en su perfil. Pida a cada miembro del equipo que revise sus claves en Ajustes → Claves SSH/GPG y elimine las que ya no correspondan a un dispositivo activo.

Active la verificación HMAC en todos los webhooks salientes. En cada webhook, rellene el campo Secreto con una cadena aleatoria de al menos 32 caracteres. El endpoint de recepción debe verificar la firma X-Gitea-Signature (cabecera idéntica en Forgejo). Sin este control, cualquiera que conozca la URL de su endpoint puede disparar una acción de despliegue.

Resolución de problemas: errores frecuentes

504 Gateway Timeout durante la migración de un repositorio. Forgejo realiza la importación de forma síncrona dentro de la petición HTTP. Si el reverse proxy corta la conexión antes del final, la migración se interrumpe y el repositorio queda en estado «Migración en curso». Aumente proxy_read_timeout a 600 s (Nginx) o añada timeouts { read_body 10m } (Caddy) antes de lanzar la migración. Elimine después el repositorio incompleto y vuelva a lanzarla.

Runner stays Offline after startup. Compruebe que FORGEJO_INSTANCE_URL apunta a la URL HTTPS pública de su instancia, y no a localhost ni a la IP interna del contenedor. El runner debe alcanzar Forgejo por el mismo camino que un navegador externo.

Workflow not triggered after push. Compruebe que los archivos de workflow están en .forgejo/workflows/ y no en .github/workflows/. Forgejo no lee el directorio .github/.

Error: this step uses an action, but the runner does not support actions. Algunas acciones de terceros referenciadas por uses: llaman a la API de GitHub. Sustitúyalas por un equivalente disponible en Codeberg o replíquelas en su instancia.

permission denied en un script al final de un job. La imagen base del runner (Debian bookworm) no contiene las mismas utilidades que la imagen Ubuntu de GitHub. Añada un paso apt-get install -y <herramienta> al principio del job, o especifique una imagen Docker personalizada mediante container:.

Para profundizar

Esta guía cubre la instalación y la migración de su CI/CD a Forgejo Actions. Para ir más lejos, los artículos siguientes tratan temas complementarios: el alojamiento inicial de Forgejo en un VPS con Docker y SSL, la puesta en marcha de un pipeline Woodpecker CI como complemento de Forgejo, y la migración de sus repositorios de GitHub a una forja Git autoalojada.

Alojar Forgejo en su propio VPS — instalación completa, reverse proxy y primer runner.

Pipeline Woodpecker CI en un VPS con Forgejo — alternativa a Forgejo Actions para los equipos que quieren separar la forja y el motor de CI.

Migrar sus repositorios de GitHub a Gitea o Forgejo en un VPS — procedimiento de migración paso a paso con la herramienta oficial.

Su forja Forgejo y sus pipelines CI/CD en un VPS ServOrbit

Un VPS Cloud con Docker preinstalado para alojar Forgejo, sus runners y sus repositorios. Independiente de GitHub, disponible en todo momento.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva