[{"data":1,"prerenderedAt":218},["ShallowReactive",2],{"seo-verification":3,"blog-alojar-gitea-en-un-vps-es":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-alojar-gitea-en-un-vps-es",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":158,"ctaBody":159,"ctaButton":160,"ctaUrl":161,"relatedPosts":162},74,"alojar-gitea-en-un-vps",{"fr":12,"en":13,"ar":14,"es":10},"heberger-gitea","host-gitea-on-your-own-vps","استضافة-gitea-على-خادم-vps-الخاص-بك","Alojar Gitea en su propio VPS en 2026","Despliegue Gitea en un VPS con Docker y SSL. Guía completa: instalación, migración a Forgejo v16 y comparativa de gobernanza.",8,0,false,"2026-04-07T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"Autoalojamiento","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-gitea-poster.svg",{"categorySlug":34,"appSlug":35},"desarrollo","gitea","Gitea es una forja Git autoalojada escrita en Go, reconocida por su ligereza y su rapidez. Desplegarla en su propio VPS le ofrece un GitHub privado sin suscripción por usuario ni límite de repositorios privados. En 2026, Forgejo v16 se ha impuesto como el fork comunitario de referencia — esta guía cubre la instalación de Gitea, la comparativa con Forgejo y los pasos de migración.",[38,42,52,55,80,83,123,144,147,150,153,155],{"type":39,"title":40,"body":41},"h2","Por qué autoalojar Gitea en un VPS","Gitea consume apenas 200 a 300 MB de RAM en reposo, lo que la convierte en una de las forjas Git más eficientes para autoalojar. En un VPS, usted conserva el control total de su código fuente: ningún dato es analizado por un tercero, ninguna limitación arbitraria sobre el número de repositorios privados o de colaboradores, y ningún coste que crezca con su equipo. Para una agencia o un desarrollador independiente, un único VPS puede alojar el conjunto de los proyectos de clientes con permisos aislados por organización. Gitea integra de forma nativa un CI\u002FCD compatible con los flujos de trabajo de GitHub Actions (Gitea Actions), un registro de paquetes y un editor web, lo que cubre la casi totalidad de un ciclo de desarrollo sin dependencia externa.",{"type":43,"title":44,"items":45},"ul","Beneficios concretos de un Gitea autoalojado",[46,47,48,49,50,51],"Huella de memoria mínima: funciona con holgura en un VPS de 2 GB de RAM incluso con varias decenas de usuarios.","Repositorios privados sin facturación por puesto ni límite impuesto, a diferencia de los planes SaaS.","Gitea Actions integrado para ejecutar sus pipelines CI\u002FCD sin servicio externo.","Registro de paquetes (Docker, npm, Composer, Maven) alojado en la misma instancia.","Autenticación granular: LDAP, OAuth2, tokens de acceso personales y claves SSH por usuario.","Copia de seguridad trivial: todo cabe en un volumen de datos y una base de datos.",{"type":39,"title":53,"body":54},"Requisitos de hardware y software","Gitea es muy frugal. Para un equipo pequeño (hasta 20 usuarios), un VPS con 2 vCPU y 2 GB de RAM basta de sobra; prevea 4 GB si activa Gitea Actions con runners locales que compilan código. Reserve al menos 20 a 40 GB de almacenamiento SSD según el tamaño de sus repositorios. En cuanto al software: Docker Engine y el plugin Docker Compose instalados, un nombre de dominio (o subdominio del tipo `git.votredomaine.com`) que apunte a la IP del VPS mediante un registro A, y el puerto 22 reservado al SSH del servidor — Gitea expondrá su propio SSH en otro puerto para evitar el conflicto.",{"type":56,"title":57,"steps":58},"steps","Desplegar Gitea con Docker y SSL",[59,62,65,68,71,74,77],{"title":60,"body":61},"Preparar el VPS y Docker","Conéctese por SSH, actualice el sistema y luego instale Docker y el plugin Compose. Cree un directorio dedicado: `mkdir -p \u002Fopt\u002Fgitea && cd \u002Fopt\u002Fgitea`. Cree también un volumen de datos que sobreviva a las actualizaciones del contenedor.",{"title":63,"body":64},"Redactar el docker-compose.yml","Defina dos servicios: `gitea` (imagen `gitea\u002Fgitea:latest`) y una base `postgres:16`. Monte `.\u002Fgitea:\u002Fdata` para la persistencia, fije `USER_UID`\u002F`USER_GID` en 1000, y mapee el SSH de Gitea al puerto 2222 del host: `\"2222:22\"`. Deje el puerto HTTP 3000 interno, será servido por el reverse proxy.",{"title":66,"body":67},"Lanzar los contenedores","Ejecute `docker compose up -d` y luego `docker compose logs -f gitea` para seguir la inicialización. Compruebe que la conexión a PostgreSQL funciona antes de continuar.",{"title":69,"body":70},"Configurar el reverse proxy","Con Caddy, basta una sola línea: `git.votredomaine.com { reverse_proxy localhost:3000 }`. Caddy obtiene y renueva automáticamente el certificado Let's Encrypt. Con Nginx, cree un bloque `server` que haga de proxy hacia `http:\u002F\u002F127.0.0.1:3000` y utilice `certbot --nginx` para el SSL.",{"title":72,"body":73},"Finalizar la instalación web","Abra `https:\u002F\u002Fgit.votredomaine.com`, complete el asistente indicando la URL base HTTPS y el host de la base de datos (`db:5432`). Defina correctamente el `ROOT_URL`, de lo contrario los enlaces de clonado serán erróneos.",{"title":75,"body":76},"Asegurar el SSH de los repositorios","Configure sus clientes para clonar mediante `ssh:\u002F\u002Fgit@git.votredomaine.com:2222\u002F...`, o añada un bloque `Host` en `~\u002F.ssh\u002Fconfig` para ocultar el puerto. Desactive el registro público en la administración si la instancia es privada.",{"title":78,"body":79},"Conectarse por primera vez","Abra la URL: Gitea muestra su página de instalación, con la base de datos ya rellenada previamente — no la toque. Despliegue «Ajustes opcionales > Ajustes de la cuenta de administrador», cree allí su cuenta de administrador y valide.",{"type":81,"body":82},"tip","Active Gitea Actions desde la instalación añadiendo `[actions] ENABLED = true` en `app.ini`, y luego registre un runner `act_runner` en un contenedor separado en el mismo VPS. Limite su RAM mediante `mem_limit` para que una compilación exigente no ahogue a Gitea. Para pipelines pesados (compilación, pruebas de integración), dedique más bien un segundo VPS al runner y conéctelo al token de registro — así mantiene la forja reactiva incluso durante las compilaciones.",{"type":84,"title":85,"headers":86,"rows":90},"comparison","Gitea o Forgejo en 2026: ¿cuál elegir?",[87,88,89],"Criterio","Gitea","Forgejo v16",[91,95,99,103,107,111,115,119],[92,93,94],"Gobernanza","Sociedad comercial (Gitea Ltd)","Asociación sin ánimo de lucro (Codeberg e.V.)",[96,97,98],"Licencia","MIT","MIT — 100 % software libre, sin edición empresarial",[100,101,102],"Recomendado por Awesome-Selfhosted","No (retirado en 2022)","Sí — recomendación por defecto desde 2024",[104,105,106],"Federación ActivityPub","No prevista","En despliegue progresivo desde Forgejo v7",[108,109,110],"Compatibilidad con la API de Gitea","Referencia","Compatible: misma API, mismos webhooks, mismo formato de datos",[112,113,114],"Seguridad — auditorías públicas","Escasas","Auditorías de código publicadas por la comunidad Codeberg",[116,117,118],"Hoja de ruta comunitaria","Dirigida por Gitea Ltd","Gobernanza abierta, RFC públicas, voto de los contribuidores",[120,121,122],"Migración desde Gitea","N\u002FA","Sin pérdida de datos: mismo esquema de base y mismo formato de volumen",{"type":56,"title":124,"steps":125},"Migrar de Gitea a Forgejo",[126,129,132,135,138,141],{"title":127,"body":128},"Hacer una copia de seguridad de la instancia Gitea","Antes de cualquier operación, haga un dump completo: `docker exec -u git gitea gitea admin dump -c \u002Fdata\u002Fgitea\u002Fconf\u002Fapp.ini`. Recupere el archivo generado fuera del contenedor y compruebe que el volumen `.\u002Fgitea` está incluido en su snapshot del VPS.",{"title":130,"body":131},"Comprobar la compatibilidad de versión","Forgejo v16 admite la migración desde Gitea 1.20 y posteriores. Si su instancia funciona con una versión anterior, suba primero a Gitea 1.21 o 1.22 mediante `docker compose pull && docker compose up -d`, y luego compruebe la ausencia de errores en los logs antes de continuar.",{"title":133,"body":134},"Sustituir la imagen Docker","En su `docker-compose.yml`, sustituya `image: gitea\u002Fgitea:latest` por `image: codeberg.org\u002Fforgejo\u002Fforgejo:latest`. El volumen de datos (`.\u002Fgitea:\u002Fdata`) y la base PostgreSQL permanecen sin cambios — Forgejo lee el mismo esquema y el mismo `app.ini`.",{"title":136,"body":137},"Reiniciar y dejar que migre","Ejecute `docker compose pull && docker compose up -d`. Forgejo aplica automáticamente las migraciones de esquema necesarias al arrancar. Siga `docker compose logs -f forgejo` hasta el mensaje que indica que el servidor HTTP escucha en el puerto 3000.",{"title":139,"body":140},"Regenerar las claves SSH","Como en toda actualización que cambia el binario referenciado en `authorized_keys`, regenere las entradas: `docker exec -u git forgejo forgejo admin regenerate keys`. Compruebe después que un `git clone` por SSH funciona desde un puesto cliente.",{"title":142,"body":143},"Probar y validar","Abra la interfaz web, compruebe los repositorios, los webhooks y los runners de Forgejo Actions. Los runners `act_runner` registrados con Gitea son compatibles — vuelva a conectarlos al nuevo token de registro si la clave ha cambiado.",{"type":81,"title":145,"body":146},"Forgejo v16: las novedades clave (julio de 2026)","Forgejo v16.0.0 introduce la federación ActivityPub en disponibilidad general para las issues y las pull requests: una issue abierta en una instancia Forgejo puede recibir comentarios de usuarios de otra instancia, sin cuenta compartida. La versión integra también un gestor de secretos de instancia (cifrado AES-256 en reposo), un nuevo motor de búsqueda de código basado en el índice Bleve v2 con soporte de expresiones regulares, y mejoras significativas del planificador de tareas en segundo plano. En el plano de la seguridad, los tokens de API se almacenan ahora hasheados en base de datos (bcrypt) y no en texto plano — una migración automática al arrancar convierte los tokens existentes.",{"type":39,"title":148,"body":149},"Pasar a Gitea 1.27 sin perder los accesos SSH","La versión 1.27 modifica la ruta interna del binario `gitea` referenciado en `authorized_keys`. Durante la actualización, las entradas existentes apuntan a la ruta antigua: cualquier intento de clonado o de push por SSH falla en silencio con `Permission denied (publickey)`, sin mensaje de error del lado del servidor que apunte a la actualización. El servicio Gitea responde con normalidad por HTTPS, lo que enmascara el problema. La causa no es la clave del usuario sino el wrapper de comando que Gitea inyecta en `authorized_keys`. Después de cada actualización a la 1.27 (o a cualquier versión que cambie esa ruta), ejecute dentro del contenedor: `docker exec -u git gitea gitea admin regenerate keys`. El comando reescribe todas las entradas `authorized_keys` con la ruta correcta del binario. Compruebe después que un `git clone` por SSH funciona antes de dar por terminada la actualización.",{"type":39,"title":151,"body":152},"Solución de problemas: errores frecuentes durante la migración","**`Permission denied (publickey)` tras la migración a Forgejo.** El binario referenciado en `authorized_keys` ha cambiado. Regenere las entradas con `docker exec -u git forgejo forgejo admin regenerate keys`.\n\n**`Database migration failed: column already exists`.** La base ya ha recibido una migración parcial (parada durante la actualización). Restaure el dump completo realizado en el paso 1, parta de un volumen limpio y vuelva a lanzar.\n\n**Los webhooks ya no se disparan tras la migración.** Forgejo v16 refuerza la validación de las URL de webhook: las URL que apuntan a `localhost` o a rangos RFC-1918 están bloqueadas por defecto. Active la opción `ALLOWED_HOST_LIST` en la sección `[webhook]` de `app.ini` si sus runners están en la misma red privada.\n\n**Los runners `act_runner` informan de `token invalid`.** Forgejo v16 hashea los tokens de runner en base de datos. Elimine el runner antiguo en la interfaz de administración, vuelva a registrarlo con `act_runner register` y el nuevo token generado.",{"type":81,"body":154},"`JWT_SECRET_URI` y `JWT_SECRET` no deben coexistir en `app.ini`. Si ambas claves están presentes, Gitea o Forgejo carga una u otra según el orden de lectura, lo que invalida en silencio todos los tokens OAuth2 y Actions emitidos antes de la actualización. Los usuarios ven errores de autenticación intermitentes, sin ningún mensaje que señale `app.ini` como causa. Elija un solo mecanismo: `JWT_SECRET` (valor en texto plano) o `JWT_SECRET_URI` (ruta hacia un archivo secreto), y elimine el otro. Reinicie el contenedor tras la modificación.",{"type":81,"title":156,"body":157},"La documentación oficial","Para la configuración avanzada y las opciones propias de la herramienta, consulte la \u003Ca href=\"https:\u002F\u002Fdocs.gitea.com\" target=\"_blank\" rel=\"noopener noreferrer\">documentación oficial de Gitea\u003C\u002Fa> o la \u003Ca href=\"https:\u002F\u002Fforgejo.org\u002Fdocs\u002Flatest\u002F\" target=\"_blank\" rel=\"noopener noreferrer\">documentación de Forgejo\u003C\u002Fa>. Esta guía cubre la puesta en línea en un VPS y la migración; las documentaciones de los editores siguen siendo la referencia para los ajustes finos y los casos de uso específicos.","Despliegue Gitea o Forgejo en unos minutos en un VPS Cloud de ServOrbit","Nuestro VPS Cloud, entregado con Docker preconfigurado, le permite montar su forja con SSL automático, sin manipulaciones de sistema. Recursos dedicados, snapshots e IP fija incluidos.","Lanzar mi VPS Cloud","\u002Fvps-cloud",[163,179,196],{"id":164,"slug":165,"slugs":166,"title":170,"excerpt":171,"readTime":172,"views":173,"isPinned":19,"publishedAt":174,"updatedAt":21,"category":175,"categories":176,"featuredImage":30,"bgImage":31,"posterImage":178,"relatedSolution":30},75,"alojar-forgejo-en-un-vps",{"fr":167,"en":168,"ar":169,"es":165},"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.",9,2,"2026-04-06T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[177],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-forgejo-poster.svg",{"id":180,"slug":181,"slugs":182,"title":186,"excerpt":187,"readTime":188,"views":18,"isPinned":19,"publishedAt":189,"updatedAt":21,"category":190,"categories":191,"featuredImage":30,"bgImage":31,"posterImage":193,"relatedSolution":194},71,"alojar-nextcloud-en-su-propio-vps",{"fr":183,"en":184,"ar":185,"es":181},"heberger-nextcloud","hosting-nextcloud-on-your-own-vps","استضافة-nextcloud-على-خادمك-الـvps-الخاص","Alojar Nextcloud en VPS: guía completa NC 34 y seguridad","Despliegue Nextcloud 34.0.2 en su VPS con Docker y Redis. Guía completa: apps ausentes en NC 34.0.0, restricción PostgreSQL oc_filecache_extended y CVE de 2FA.",11,"2026-04-10T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[192],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-nextcloud-poster.svg",{"categorySlug":25,"appSlug":195},"nextcloud",{"id":197,"slug":198,"slugs":199,"title":203,"excerpt":204,"readTime":205,"views":18,"isPinned":19,"publishedAt":206,"updatedAt":21,"category":207,"categories":213,"featuredImage":30,"bgImage":31,"posterImage":215,"relatedSolution":216},43,"desplegar-una-aplicacion-nodejs-en-un-vps",{"fr":200,"en":201,"ar":202,"es":198},"deployer-nodejs-vps","deploy-a-nodejs-application-on-a-vps","نشر-تطبيق-nodejs-على-vps","Desplegar una aplicación Node.js en un VPS","Despliegue una aplicación Node.js en producción en un VPS: PM2, reverse proxy Nginx, SSL Let's Encrypt y arranque automático con el sistema.",3,"2026-05-08T00:00:00+00:00",{"id":208,"name":209,"slug":210,"color":211,"icon":212},4,"Desarrollo","developpement","bg-warning\u002F10 text-warning","dev",[214],{"id":208,"name":209,"slug":210,"color":211,"icon":212},"\u002Fblog\u002Fcovers\u002Fdeployer-nodejs-vps-poster.svg",{"categorySlug":34,"appSlug":217},"nodejs-stack",1789664998589]