[{"data":1,"prerenderedAt":218},["ShallowReactive",2],{"seo-verification":3,"blog-gitea-forgejo-o-gitlab-ce-que-forja-git-en-2026-ma-es":6,"promo-bar-likely":217},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-gitea-forgejo-o-gitlab-ce-que-forja-git-en-2026-ma-es",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":30,"intro":33,"sections":34,"ctaTitle":150,"ctaBody":151,"ctaButton":152,"ctaUrl":153,"relatedPosts":154},241,"gitea-forgejo-o-gitlab-ce-que-forja-git-en-2026",{"fr":12,"en":13,"ar":14,"es":10},"comparatif-forge-git-self-hosted-2026","gitea-forgejo-or-gitlab-ce-which-git-forge-in-2026","gitea-أم-forgejo-أم-gitlab-ce-أي-منصة-git-في-2026","Gitea, Forgejo o GitLab CE: ¿qué forja Git en 2026?","¿Gitea, Forgejo o GitLab CE para autoalojar su forja Git en 2026? Recursos, CI\u002FCD, gobernanza y migración tras la CVE-2026-59774.",12,5,false,"2026-08-09T00:00:00+00:00","2026-11-08T01:13:15+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},4,"Desarrollo","developpement","bg-warning\u002F10 text-warning","dev",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fcomparatif-forge-git-self-hosted-2026-poster.svg","En 2026, autoalojar su forja Git ya no es una práctica de nicho. Pero desde la CVE-2026-59774, que expuso instancias de Gitea sin parchear a la lectura arbitraria de archivos y a una escalada hacia la ejecución remota de código, muchos equipos deben zanjar una pregunta que venían aplazando: ¿Gitea, Forgejo o GitLab CE? Este artículo compara los tres según los criterios que cuentan en producción — recursos, CI\u002FCD, gobernanza y migración — e incorpora las novedades de Forgejo v16.0 (julio de 2026).",[35,39,50,53,101,104,132,135,138,147],{"type":36,"title":37,"body":38},"h2","Por qué esta pregunta es urgente en 2026","La CVE-2026-59774 se publicó el 2 de agosto de 2026 en el aviso de seguridad de Gitea. Afecta a Gitea desde la versión 1.22.1 hasta la 1.27.0 incluida — puntuación CVSS 9.8, crítica. El vector: la directiva `#+INCLUDE` del renderizado Org-mode permite a un atacante no autenticado leer archivos arbitrarios accesibles para la cuenta de servicio de Gitea, incluidos `app.ini` y los tokens internos. La exposición de `INTERNAL_TOKEN` abre después la vía a una inyección de hook Git y a la ejecución remota de código. La corrección está en la versión 1.27.1. Si su instancia funciona con una versión anterior y no está aislada de la red pública, parchear es la primera acción. La segunda es decidir si se queda en Gitea o si la situación acelera una migración que venía posponiendo. Forgejo, que mantiene sus propios parches de seguridad de forma independiente de Gitea Ltd., ya había corregido el mismo fallo del renderizado Org-mode en sus versiones v16.0.2 y v15.0.6, publicadas el 30 de julio de 2026, antes del aviso de Gitea.",{"type":40,"title":41,"items":42},"ul","Lo que ha cambiado desde 2024 y pesa en esta elección",[43,44,45,46,47,48,49],"**Forgejo es un fork duro desde principios de 2024** — la base de código ha divergido de Gitea; ambos proyectos comparten todavía lo esencial, pero las trayectorias de evolución difieren ya claramente","**Gobernanza comunitaria en Forgejo** — gestionado por una asociación sin ánimo de lucro, sin acuerdo de contribución firmado con una empresa matriz; los parches de seguridad llegan de forma independiente","**Forgejo Actions en producción** — sintaxis cercana a la de GitHub Actions, como Gitea Actions (Forgejo advierte que un workflow de GitHub suele requerir algunos retoques), ejecutada por runners Docker; Woodpecker CI sigue siendo una alternativa que se integra con Forgejo, y Codeberg todavía ofrece Actions alojado solo de forma limitada","**Forgejo v16.0 en julio de 2026** — comentarios de revisión multilínea (selección de un rango de líneas en el diff, hilos inline), autenticación JWT externa para la API (permite que sistemas externos se autentiquen sin token permanente), endurecimiento SSRF del mirroring Git (las reglas `[migrations]` se aplican en todas partes y Git ya no sigue las redirecciones), reducción de ancho de banda en los avatares; rama no LTS, sin mantenimiento desde el 29 de octubre de 2026: sus novedades continúan en Forgejo v17.0 (octubre de 2026)","**Forgejo v15.0 en abril de 2026** — flujo de registro de runner simplificado desde la interfaz web, tokens restringidos por repositorio, versión 100 de Forgejo","**GitLab CE sigue siendo completo pero pesado** — la versión comunitaria integra CI\u002FCD, registro de contenedores, escaneo de seguridad y Pages; el precio: 8 GB de RAM como mínimo, 16 GB recomendados","**La jerarquía que se perfila en 2026**: Forgejo para empezar, Gitea si ya está en él y actualizado, GitLab CE si necesita una plataforma DevOps completa en una sola instalación",{"type":36,"title":51,"body":52},"Requisitos previos según su elección","Forgejo y Gitea están escritos en Go y se distribuyen como un único binario estático. Una instancia modesta (hasta veinte repositorios, unos pocos runners de CI) funciona con holgura en 1 vCPU y 1 GB de RAM; una instancia de equipo (runners de CI activos, LFS, registro de paquetes) preferirá 2 vCPU y de 2 a 4 GB. GitLab CE está en otra categoría: su documentación fija el mínimo en 8 GB de RAM y recomienda 16 GB, con Postgres, Redis, Gitaly y Sidekiq funcionando en paralelo. Prevé 8 vCPU y al menos 40 GB de almacenamiento SSD para la aplicación, más el tamaño de sus repositorios. Para las tres herramientas necesitará un dominio apuntando a su VPS, los puertos 22 (SSH Git), 80 y 443 abiertos, y un reverse proxy (Nginx o Caddy) para el HTTPS.",{"type":54,"title":55,"headers":56,"rows":60},"comparison","Forgejo vs Gitea vs GitLab CE — tabla comparativa 2026",[57,58,59],"Criterio","Forgejo \u002F Gitea","GitLab CE",[61,65,69,73,77,81,85,89,93,97],[62,63,64],"RAM mínima","Sin mínimo oficial (1 GB para un equipo pequeño)","8 GB (16 GB recomendados)",[66,67,68],"Formato de distribución","Binario estático único o imagen Docker","Omnibus (multiproceso) o Helm chart",[70,71,72],"CI\u002FCD nativo","Forgejo Actions \u002F Gitea Actions (sintaxis GitHub Actions)","GitLab CI\u002FCD integrado, runners compartidos o dedicados",[74,75,76],"Gobernanza","Forgejo: asociación sin ánimo de lucro (Codeberg) · Gitea: Gitea Ltd.","GitLab Inc. (open-core, CE libre)",[78,79,80],"Registro de contenedores","Sí (packages + container registry)","Sí, más completo",[82,83,84],"Federación \u002F ActivityPub","Forgejo: experimental, desactivada por defecto · Gitea: no previsto","No",[86,87,88],"Parches de seguridad independientes","Forgejo: sí (fallo Org-mode corregido en v16.0.2, julio de 2026) · Gitea: vía Gitea Ltd.","Vía GitLab Inc.",[90,91,92],"Novedades v16 (julio de 2026)","Forgejo: revisiones multilínea, JWT externo, SSRF reforzado · Gitea: 1.27.1 solo el parche","No aplica",[94,95,96],"Migración desde Gitea","Forgejo: retoma directa de la base de datos hasta Gitea 1.22, después migración repositorio por repositorio · GitLab: importador de Gitea","Importación parcial (repositorios, issues, PR)",[98,99,100],"Ideal para","Equipos de 1 a 50 desarrolladores, VPS modesto, CI ligera","Organización que quiere todo en una sola instalación, con presupuesto de infraestructura disponible",{"type":36,"title":102,"body":103},"Migrar de Gitea a Forgejo: en qué consiste realmente","La migración Gitea → Forgejo suele describirse como «un comando» — y es cierto en el caso simple. Pero solo hasta Gitea 1.22: Forgejo indica que Gitea 1.22 es la última versión que se retoma de forma transparente. Desde Gitea 1.23, los esquemas de base de datos han divergido, y la vía oficial consiste en migrar los repositorios uno a uno con la herramienta de migración integrada en Forgejo. Para una instancia en 1.22.x como máximo, el procedimiento se resume en detener el contenedor Gitea, apuntar el mismo volumen de datos hacia una imagen Forgejo y arrancar. Forgejo detecta el esquema existente y aplica sus propias migraciones. Algunos puntos que conviene verificar antes: haga una copia de seguridad de `app.ini` y de la base de datos, anote la versión de Gitea en uso (la retoma pasa primero por Forgejo v10.0 y después a una versión más reciente) y revise sus workflows de CI (Forgejo Actions y Gitea Actions tienen sintaxis cercanas: pruébelos en un repositorio antes de cambiar). La migración en sentido contrario — hacia GitLab CE — es más larga: GitLab ofrece un importador de Gitea (repositorios, issues, pull requests, hitos, etiquetas), pero los pipelines de CI deben reescribirse en sintaxis GitLab CI.",{"type":105,"title":106,"steps":107},"steps","Desplegar Forgejo en un VPS con Docker y Nginx",[108,111,114,117,120,123,126,129],{"title":109,"body":110},"Preparar el VPS","Actualice el sistema e instale Docker y Docker Compose: `apt update && apt install -y docker.io docker-compose-plugin`. Abra los puertos necesarios: `ufw allow 22\u002Ftcp && ufw allow 80\u002Ftcp && ufw allow 443\u002Ftcp && ufw allow 2222\u002Ftcp` (2222 para SSH Git si no quiere exponer el puerto 22 del sistema). Atención: los puertos publicados por Docker eluden las reglas de ufw; publique solo lo que deba publicarse (paso siguiente).",{"title":112,"body":113},"Crear los directorios y el archivo Compose","Cree un directorio dedicado: `mkdir -p \u002Fopt\u002Fforgejo && cd \u002Fopt\u002Fforgejo`. Después, cree un archivo `compose.yml` con un servicio `forgejo` que apunte a la imagen `codeberg.org\u002Fforgejo\u002Fforgejo:17` (etiqueta de versión mayor, como en la documentación oficial), un volumen persistente para `\u002Fdata`, los puertos `127.0.0.1:3000:3000` (HTTP, accesible solo para Nginx) y `2222:22` (SSH), y unas variables de entorno mínimas (`FORGEJO__server__DOMAIN=git.votre-domaine.com`, `FORGEJO__server__SSH_PORT=2222`).",{"title":115,"body":116},"Arrancar Forgejo","Lance el servicio: `docker compose up -d`. Compruebe que el contenedor está activo con `docker compose ps` y consulte los registros con `docker compose logs -f forgejo`. El puerto 3000 solo escucha en la propia máquina: compruébelo con `curl -I http:\u002F\u002F127.0.0.1:3000`, y no complete el asistente de instalación hasta tener el HTTPS en marcha (paso 6), para que nadie lo complete antes que usted.",{"title":118,"body":119},"Configurar Nginx como reverse proxy HTTPS","Instale Nginx y Certbot: `apt install -y nginx python3-certbot-nginx`. Cree un virtual host para `git.votre-domaine.com` que haga de proxy hacia `http:\u002F\u002Flocalhost:3000` con las cabeceras proxy estándar (`proxy_set_header Host $host`, `proxy_set_header X-Real-IP $remote_addr`, `proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for`, `proxy_set_header X-Forwarded-Proto $scheme`).",{"title":121,"body":122},"Obtener el certificado TLS","Ejecute `certbot --nginx -d git.votre-domaine.com`. Certbot configura la redirección HTTP→HTTPS y programa la renovación automática. Compruebe con `curl -I https:\u002F\u002Fgit.votre-domaine.com` que el código es efectivamente `200`.",{"title":124,"body":125},"Finalizar la instalación desde la interfaz web","Abra `https:\u002F\u002Fgit.votre-domaine.com` en un navegador. El asistente de instalación le pide el tipo de base de datos (SQLite para empezar, PostgreSQL para producción), la URL de la instancia y los parámetros SSH. Cree la cuenta de administrador y luego desactive los registros públicos si la instancia es privada (`FORGEJO__service__DISABLE_REGISTRATION=true` en `compose.yml`).",{"title":127,"body":128},"Activar un runner de CI (opcional)","Forgejo v15.0 (abril de 2026) introdujo un flujo de registro de runner simplificado desde la interfaz web. Vaya a **Configuración del sitio → Actions → Runners**, haga clic en **Crear un runner** y copie el comando de registro. Lance el runner en un segundo contenedor, junto a un servicio `docker:dind` que ejecuta los jobs, como en el ejemplo Compose de la documentación oficial (imagen `data.forgejo.org\u002Fforgejo\u002Frunner:13`, comando `forgejo-runner daemon --config runner-config.yml`). Evite montar `\u002Fvar\u002Frun\u002Fdocker.sock`: los workflows obtendrían el equivalente a un acceso root al host.",{"title":130,"body":131},"Verificar la seguridad básica (actualización v16)","Forgejo v16.0 endureció la protección SSRF del mirroring Git: los ajustes `[migrations]` (`ALLOWED_DOMAINS`, `BLOCKED_DOMAINS`, `ALLOW_LOCALNETWORKS`) se aplican ahora a todas las operaciones de migración y de mirroring, y Git ya no sigue las redirecciones HTTP. `FORGEJO__migrations__ALLOW_LOCALNETWORKS` sigue en `false` por defecto: si necesita hacer mirroring hacia repositorios internos de la red local, declárelos en `FORGEJO__migrations__ALLOWED_DOMAINS` en lugar de abrir toda la red local, y evalúe su impacto. Deje `FORGEJO__server__LOCAL_ROOT_URL` en su valor por defecto (la dirección local por la que los procesos internos llegan al servicio web), salvo si el SSH funciona en otra máquina. Para las instancias migradas desde Gitea afectadas por la CVE-2026-59774: regenere `INTERNAL_TOKEN` (`forgejo generate secret INTERNAL_TOKEN`) y después rote los tokens de acceso personales de sus usuarios. No sustituya `SECRET_KEY` a la ligera: cifra, entre otros, los secretos 2FA, que la nueva clave ya no podría descifrar.",{"type":133,"body":134},"tip","Para una forja Gitea existente afectada por la CVE-2026-59774 (versiones 1.22.1 a 1.27.0): la actualización a Gitea 1.27.1 o a una versión posterior corrige la vulnerabilidad, y es lo primero que hay que hacer. Migrar a Forgejo solo es un atajo desde Gitea 1.22.x, la última versión cuya base de datos retoma Forgejo; desde Gitea 1.23, parchee primero Gitea y después migre repositorio por repositorio si opta por Forgejo. Al migrar a Forgejo v16.0+, obtiene además el endurecimiento SSRF del mirroring, los comentarios de revisión multilínea y la autenticación JWT externa — funcionalidades no disponibles en Gitea 1.27.1. En todos los casos, tras cualquier sospecha de exposición, regenere `INTERNAL_TOKEN`, rote los tokens de acceso personales de sus usuarios y sus secretos OAuth, y cambie `SECRET_KEY` solo sabiendo que los secretos 2FA cifrados con la clave antigua quedarán ilegibles.",{"type":36,"title":136,"body":137},"Resolución de problemas: errores frecuentes en la instalación","Los errores que figuran a continuación cubren los casos más frecuentes durante un primer despliegue o una migración.",{"type":40,"title":139,"items":140},"Errores habituales y sus soluciones",[141,142,143,144,145,146],"**`level=fatal msg=\"Failed to initialize ORM engine\" error=\"Error 1071: Specified key was too long\"` (MySQL\u002FMariaDB)** — la colación de la base de datos no es `utf8mb4`: cree la base de datos con `CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci` y reinicie","**`Failed to initialize SSH: ssh: no key found`** — una clave de host SSH está vacía o es ilegible: compruebe que el volumen `\u002Fdata` está montado y pertenece al UID\u002FGID declarados en el Compose (1000:1000 por defecto), y después elimine el archivo de clave vacío y reinicie el contenedor para que se vuelva a crear; `forgejo admin regenerate keys` solo regenera el archivo `authorized_keys`","**`x509: certificate signed by unknown authority` en los webhooks salientes** — su instancia llama a un servicio interno con un certificado autofirmado; añada `FORGEJO__webhook__SKIP_TLS_VERIFY=true` únicamente en desarrollo, o monte el certificado CA en el contenedor mediante `SSL_CERT_FILE`","**`Error response from daemon: conflict: unable to delete image` durante una actualización** — detenga primero el contenedor (`docker compose down`), elimine la imagen (`docker image rm codeberg.org\u002Fforgejo\u002Fforgejo`) y vuelva a descargarla (`docker compose pull`) antes de reiniciar","**Runners de CI bloqueados en `waiting for available runner` tras el registro** — compruebe que el runner puede alcanzar la instancia Forgejo: `curl -s https:\u002F\u002Fgit.votre-domaine.com\u002Fapi\u002Fv1\u002Fversion` desde el contenedor del runner debe devolver un JSON con la versión; si el nombre de dominio no se resuelve desde el contenedor, añada un `extra_hosts` en el Compose o use la IP del VPS","**Mirroring de repositorio rechazado tras la migración a v16** — Forgejo v16.0 aplica estrictamente los ajustes `[migrations]`, con `FORGEJO__migrations__ALLOW_LOCALNETWORKS=false` por defecto: un mirror hacia una dirección de la red local, o servido tras una redirección HTTP, puede ser rechazado; si su mirror apunta a un GitLab o un Gitea interno, declare su dominio en `FORGEJO__migrations__ALLOWED_DOMAINS` en lugar de abrir toda la red local",{"type":36,"title":148,"body":149},"Qué herramienta elegir según su situación","Para una instalación nueva en 2026: Forgejo es la opción por defecto que recomendamos. La gobernanza comunitaria, los parches de seguridad independientes de Gitea Ltd. (ilustrados por el fallo Org-mode de la CVE-2026-59774, corregido en Forgejo desde el 30 de julio de 2026), la compatibilidad con las herramientas existentes (runners, webhooks, tokens) y una huella de memoria idéntica a la de Gitea reúnen todos los argumentos sin contrapartida destacable para un proyecto nuevo. Con Forgejo v16.0, los comentarios de revisión multilínea y la autenticación JWT externa cubren dos carencias funcionales que a veces justificaban la elección de GitLab CE. Si ya explota una instancia Gitea actualizada (1.27.1+) y responde a sus necesidades, la migración no es urgente — pero la próxima vez que se plantee una actualización mayor, evalúe Forgejo en ese momento, teniendo en cuenta que desde Gitea 1.23 el paso se hace repositorio por repositorio. GitLab CE se impone cuando su equipo necesita toda la cadena DevOps en una sola instalación — escaneo de seguridad, pages, entornos de despliegue, registro de contenedores — y usted dispone de la infraestructura para hacerlo funcionar con holgura. En un VPS modesto, no es la herramienta adecuada. Para ir más lejos: nuestra guía de instalación detallada de Forgejo, la puesta en marcha de un pipeline de CI con Woodpecker y el artículo sobre el endurecimiento inicial de un servidor Linux completan esta comparativa.","Su forja funciona en la infraestructura que usted controla","Una vez elegida la forja, funciona en un VPS ServOrbit: acceso root, IPv4 dedicada, elección de sistema operativo, sin restricciones arbitrarias — la infraestructura que no le pone trabas.","Ver los VPS Cloud","\u002Fsolutions\u002Fdeveloppeurs",[155,177,196],{"id":156,"slug":157,"slugs":158,"title":162,"excerpt":163,"readTime":164,"views":165,"isPinned":19,"noindex":19,"publishedAt":166,"updatedAt":167,"category":168,"categories":174,"featuredImage":30,"bgImage":31,"posterImage":176,"relatedSolution":30},75,"alojar-forgejo-en-un-vps",{"fr":159,"en":160,"ar":161,"es":157},"heberger-forgejo","host-forgejo-on-your-own-vps","استضافة-forgejo-على-خادم-vps-الخاص-بك","Alojar Forgejo en su VPS: guía completa 2025","Instale Forgejo en su VPS con Docker, SSL, runners Actions y seguridad reforzada. Guía paso a paso de 1900 palabras para una forja Git soberana.",10,9,"2026-04-06T00:00:00+00:00","2026-11-08T01:13:14+00:00",{"id":169,"name":170,"slug":171,"color":172,"icon":173},7,"Autoalojamiento","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[175],{"id":169,"name":170,"slug":171,"color":172,"icon":173},"\u002Fblog\u002Fcovers\u002Fheberger-forgejo-poster.svg",{"id":178,"slug":179,"slugs":180,"title":184,"excerpt":185,"readTime":17,"views":186,"isPinned":19,"noindex":19,"publishedAt":187,"updatedAt":188,"category":189,"categories":193,"featuredImage":30,"bgImage":31,"posterImage":195,"relatedSolution":30},212,"woodpecker-ci-forgejo-pipeline-cicd-vps",{"fr":181,"en":182,"ar":183,"es":179},"woodpecker-ci-pipeline-vps-forgejo","woodpecker-ci-and-forgejo-cicd-pipeline-on-a-vps","woodpecker-ci-وforgejo-خط-أنابيب-cicd-على-خادم-vps","Woodpecker CI y Forgejo: pipeline CI\u002FCD en un VPS","Despliega Woodpecker CI v3 con Forgejo en tu VPS: configuración Docker Compose, pipelines YAML, secretos, runners multi-arquitectura y depuración OAuth.",2,"2026-08-02T00:00:00+00:00","2026-11-08T01:13:13+00:00",{"id":186,"name":190,"slug":191,"color":192,"icon":191},"Automatización","automatisation","bg-brand-action\u002F10 text-brand-action",[194],{"id":186,"name":190,"slug":191,"color":192,"icon":191},"\u002Fblog\u002Fcovers\u002Fwoodpecker-ci-pipeline-vps-forgejo-poster.svg",{"id":197,"slug":198,"slugs":199,"title":203,"excerpt":204,"readTime":205,"views":206,"isPinned":19,"noindex":19,"publishedAt":207,"updatedAt":208,"category":209,"categories":214,"featuredImage":30,"bgImage":31,"posterImage":216,"relatedSolution":30},228,"hardening-inicial-servidor-linux",{"fr":200,"en":201,"ar":202,"es":198},"durcissement-serveur-linux-initial","initial-linux-server-hardening","تصليب-الخادم-linux-الأولي","Endurecimiento (hardening) inicial de un servidor Linux","Cree un usuario sudo, configure SSH con claves y active UFW y fail2ban en Ubuntu o Debian en menos de una hora.",8,1,"2026-08-06T00:00:00+00:00","2026-10-20T23:18:07+00:00",{"id":205,"name":210,"slug":211,"color":212,"icon":213},"Seguridad y monitorización","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[215],{"id":205,"name":210,"slug":211,"color":212,"icon":213},"\u002Fblog\u002Fcovers\u002Fdurcissement-serveur-linux-initial-poster.svg",true,1794270604324]