[{"data":1,"prerenderedAt":224},["ShallowReactive",2],{"seo-verification":3,"blog-migrar-gitlab-com-a-gitlab-autoalojado-vps-es":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-migrar-gitlab-com-a-gitlab-autoalojado-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":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":29,"intro":32,"sections":33,"ctaTitle":160,"ctaBody":161,"ctaButton":162,"ctaUrl":163,"relatedPosts":164},498,"migrar-gitlab-com-a-gitlab-autoalojado-vps",{"fr":12,"en":13,"ar":14,"es":10},"migrer-gitlab-com-vers-self-managed-vps","migrate-gitlab-com-to-self-managed-gitlab-vps","ترحيل-gitlab-com-إلى-gitlab-ذاتي-الاستضافة-على-vps","Migrar GitLab.com a una instancia self-managed en un VPS","Migre grupos y proyectos de GitLab.com a su propia instancia de GitLab en un VPS: exportación, direct transfer, miembros, variables CI\u002FCD y registro que hay que rehacer.",11,0,false,"2026-10-23T00:00:00+00:00","2026-10-23T23:43:01+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},3,"Despliegue","deploiement","bg-success\u002F10 text-success",[28],{"id":23,"name":24,"slug":25,"color":26,"icon":25},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fmigrer-gitlab-com-vers-self-managed-vps-poster.svg","Su agencia guarda el código de varios clientes en una cuenta de GitLab.com, y la retención y la factura no las fija usted. Recuperar el control pasa por una instancia de GitLab en su propio VPS, pero la exportación de un proyecto no lo lleva todo: variables CI\u002FCD, imágenes del registro, webhooks y tokens se quedan atrás. Esta guía planifica la migración, recorre el direct transfer, resuelve la asociación de miembros y reconstruye lo que falta, con un orden de cambio reversible. El proyecto antiguo sigue en solo lectura hasta la validación.",[34,38,47,50,80,83,117,120,123,138,142,145,154,157],{"type":35,"title":36,"body":37},"h2","Por qué salir de GitLab.com hacia una instancia self-managed","Cuando cambian las tarifas de una herramienta SaaS, como la reciente subida de Atlassian Cloud detallada en \u003Ca href=\"\u002Fblog\u002Fatlassian-double-choc-tarif-octobre-decembre-2026\">nuestro artículo sobre el doble golpe tarifario\u003C\u002Fa>, los equipos reevalúan todo su entorno de desarrollo. Para una agencia la cuestión es concreta: el código de diez clientes vive en una única cuenta, en un tercero, con una retención y unos accesos que usted no fija.\n\nUna instancia autogestionada traslada esas decisiones a su lado: dónde se almacenan los repositorios, cuánto tiempo se guardan los artefactos, quién puede entrar y cuánto cuesta cada mes. El precio de esa libertad es un trabajo de migración que GitLab no hace del todo por usted.\n\nEsta guía no repite la elección de la forja, tratada en \u003Ca href=\"\u002Fblog\u002Fcomparatif-forge-git-self-hosted-2026\">el comparativo de forjas\u003C\u002Fa>, ni la instalación, descrita en \u003Ca href=\"\u002Fblog\u002Finstaller-gitlab-ce-vps\">la guía de instalación de GitLab CE\u003C\u002Fa>. Parte de una instancia de GitLab ya en línea y solo cubre el paso de GitLab.com hacia ella.",{"type":39,"title":40,"items":41},"ul","Lo que gana al recuperar el alojamiento",[42,43,44,45,46],"**Accesos bajo su control** — cuentas, grupos y roles se gestionan en su instancia, no en una cuenta SaaS compartida entre clientes.","**Una retención que usted fija** — duración de los artefactos y registros, tamaño del registro: todo se ajusta en la administración.","**Una factura que sigue a su VPS** — el coste depende de la máquina que dimensiona, no de un número de puestos.","**Un nombre de dominio propio** — el repositorio responde en `git.su-dominio.com`, con su certificado y su cortafuegos.","**Una migración por etapas** — el proyecto antiguo sigue en su sitio, en solo lectura, hasta validar el nuevo.",{"type":35,"title":48,"body":49},"Lo que la migración no lleva, que hay que inventariar antes","La documentación oficial de la exportación de proyectos enumera lo que no se exporta: el historial de pipelines hijos, los disparadores de pipeline, las trazas y artefactos de trabajos CI\u002FCD, las imágenes del registro de contenedores y de paquetes, las variables CI\u002FCD, los webhooks, los tokens cifrados, el número de aprobaciones requeridas, las claves de despliegue autorizadas en ramas protegidas, los archivos seguros y las variables de las programaciones de pipeline. Las claves de despliegue tampoco se importan: hay que reactivarlas en el proyecto importado.\n\nEl direct transfer tiene su propia lista de exclusiones, que coincide en parte con la primera: variables CI\u002FCD, webhooks, imágenes del registro de contenedores, registro de paquetes, registros y artefactos de trabajos. A nivel de grupo, las variables CI\u002FCD, los tokens de despliegue y las reglas de push tampoco acompañan.\n\nEscriba este inventario en una tabla antes de empezar: una fila por proyecto, una columna por elemento ausente, una columna para la persona que lo recrea. Ese documento, más que la propia exportación, le protege el día que se cierre el acceso antiguo.",{"type":51,"title":52,"headers":53,"rows":57},"comparison","Exportación de proyecto o direct transfer: qué cubre cada método",[54,55,56],"Elemento","Exportación de proyecto (archivo)","Direct transfer",[58,62,66,68,70,72,76],[59,60,61],"Granularidad","Un proyecto cada vez, mediante un archivo descargado","Grupos enteros, con o sin sus proyectos, desde la interfaz",[63,64,65],"Variables CI\u002FCD","No se exportan","No se migran",[67,64,65],"Imágenes del registro de contenedores",[69,64,65],"Webhooks",[71,64,65],"Registros y artefactos de trabajos",[73,74,75],"Miembros","Se asocian si el correo público de origen coincide con el correo principal de destino","Se asocian si el correo público de origen coincide con un correo confirmado de destino",[77,78,79],"Lo que exige la instancia","Un administrador realiza la importación","Función activada por un administrador, token con el scope `api` en el origen",{"type":35,"title":81,"body":82},"Requisitos: versiones, permisos y recursos de su instancia","Primera regla, la versión. La importación de un archivo acepta exportaciones de una versión hasta dos versiones menores por detrás del destino, y la documentación pide que el destino esté al menos en la versión del origen. Para el direct transfer, la documentación recomienda GitLab 16.8 o posterior en ambos lados, y pide que un origen no se retrase más de dos versiones menores respecto al destino. GitLab.com avanza de forma continua: apunte a la última versión estable disponible en su instancia, actualícela antes de migrar, no después, y relea la diferencia tolerada en la documentación el mismo día.\n\nEn cuanto a permisos, necesita el rol Owner en el grupo de origen, un administrador en la instancia de destino y un token de acceso personal con el scope `api` creado en GitLab.com. Las dos instancias deben comunicarse por HTTPS, con espacio libre en `\u002Ftmp`.\n\nEn cuanto a recursos, nuestra recomendación editorial: 4 vCPU y 8 GB de RAM para una instancia que además aloja el registro, un disco NVMe dimensionado según el tamaño acumulado de repositorios e imágenes, y runners en un VPS aparte en cuanto los builds sean pesados. La instalación se describe en \u003Ca href=\"\u002Fblog\u002Finstaller-gitlab-ce-vps\">la guía de GitLab CE en un VPS\u003C\u002Fa>.",{"type":84,"title":85,"steps":86},"steps","Planificar y ejecutar la migración, del inventario al cambio",[87,90,93,96,99,102,105,108,111,114],{"title":88,"body":89},"Inventariar grupos, proyectos y dependencias","Enumere cada grupo, cada proyecto, sus variables, webhooks, runners e integraciones. Anote quién es el responsable de cada uno en el cliente.",{"title":91,"body":92},"Actualizar la instancia de destino","Compruebe la versión en la administración y apunte a la última versión estable disponible, al menos igual a la de GitLab.com, antes de cualquier importación.",{"title":94,"body":95},"Crear los usuarios en el destino","Los miembros no se crean durante la migración. Cree las cuentas antes, con el correo principal que cada persona usa en GitLab.com.",{"title":97,"body":98},"Prever un grupo por cliente","Cree en el destino un grupo o subgrupo por cliente, con permisos mínimos, antes de importar.",{"title":100,"body":101},"Hacer publicar los correos en el origen","Cada miembro indica un correo público en su perfil de GitLab.com, al menos hasta que termine la importación.",{"title":103,"body":104},"Activar el direct transfer en la instancia de destino","Un administrador activa la migración de grupos por direct transfer en los ajustes de la aplicación. Está desactivada por defecto en una instancia autogestionada.",{"title":106,"body":107},"Lanzar la importación del grupo","En el destino, elija **Create new** y después **New group** y **Import group**, introduzca `https:\u002F\u002Fgitlab.com` y su token, y pulse **Connect instance**. Seleccione los grupos con **Import with projects**.",{"title":109,"body":110},"Exportar a mano los proyectos sueltos","Para un proyecto fuera de un grupo, abra **Settings**, **General**, **Advanced** y **Export project**, descargue el archivo e impórtelo en el destino.",{"title":112,"body":113},"Seguir la importación y leer los errores","La columna **Status** indica el avance. En una importación fallida o parcial, **Show errors** detalla la causa. Cuente con varias horas si hay muchos proyectos.",{"title":115,"body":116},"Conectar el registro y la CI","Reconstruya variables e imágenes como se describe más abajo y lance un pipeline completo en el destino antes de tocar el proyecto antiguo.",{"type":35,"title":118,"body":119},"Miembros y asignados: la regla de asociación","En una instancia autogestionada, la regla publicada es esta: los usuarios deben existir ya en el destino, y el correo público de la cuenta de origen debe coincidir con el correo principal de la cuenta de destino. Si se cumplen las condiciones, la persona se añade como miembro directo. Si no, la asociación pasa al usuario que realiza la importación: los autores de comentarios y los asignados acaban todos a su nombre.\n\nAntes de importar, compruebe el campo **Public email** de cada perfil de GitLab.com. En una exportación de proyecto también puede añadir correos públicos editando el archivo `project_members.ndjson` del paquete. El propietario del grupo de primer nivel debe lanzar la exportación para que se incluyan los miembros directos y heredados, y un administrador debe realizar la importación.\n\nCon el direct transfer, las pertenencias importadas se asocian primero a usuarios sustitutos, a la espera de reasignación. Una casilla **Import user memberships** permite además no importar las pertenencias. En ese caso, decide la asociación el correo público de origen frente a un correo confirmado de destino, no el correo principal como en la importación de archivo.\n\nPara una agencia, estructure el destino antes de importar: un grupo de primer nivel por cliente, o un subgrupo por cliente bajo un grupo de agencia. Dé a cada cliente el rol mínimo solo en su grupo (Reporter o Developer en lugar de Owner), reserve el rol Owner al equipo interno, y más adelante podrá sacar a un cliente transfiriendo su grupo o exportando sus proyectos, sin tocar a los demás.",{"type":35,"title":121,"body":122},"Variables CI\u002FCD y registro de contenedores: reconstruir a mano","Las variables no viajan, porque GitLab las considera sensibles. Enumérelas en el origen con la API: `curl --header \"PRIVATE-TOKEN: \u003Ctoken>\" \"https:\u002F\u002Fgitlab.com\u002Fapi\u002Fv4\u002Fprojects\u002F\u003Cid>\u002Fvariables\"`. La lista da la clave, los atributos `masked` y `protected` y, normalmente, el valor; pero no todos los valores son necesariamente legibles, según la versión y cómo se creó la variable.\n\nLuego recréelas en el destino con `curl --request POST --header \"PRIVATE-TOKEN: \u003Ctoken>\" --form \"key=NOMBRE\" --form \"value=valor\" \"https:\u002F\u002Fgit.su-dominio.com\u002Fapi\u002Fv4\u002Fprojects\u002F\u003Cid>\u002Fvariables\"`. La clave admite 255 caracteres entre `A-Z`, `a-z`, `0-9` y `_`. Cuando falta el valor o sigue oculto, recree el secreto en su proveedor y guárdelo en la caja fuerte de la agencia.\n\nLas variables de grupo se recrean desde los ajustes CI\u002FCD del grupo. Los runners se registran de nuevo en la nueva instancia: sus tokens no acompañan.",{"type":84,"title":124,"steps":125},"Transferir las imágenes del registro a la nueva URL",[126,129,132,135],{"title":127,"body":128},"Activar el registro en la instancia de destino","En `\u002Fetc\u002Fgitlab\u002Fgitlab.rb`, defina `registry_external_url` en HTTPS, por ejemplo `https:\u002F\u002Fregistry.su-dominio.com`, y ejecute `sudo gitlab-ctl reconfigure`. El registro exige un certificado TLS.",{"title":130,"body":131},"Crear un token para cada lado","Un token con `read_registry` basta para descargar imágenes, y con `write_registry` además para subirlas.",{"title":133,"body":134},"Descargar cada imagen desde la URL antigua","Inicie sesión con `docker login registry.gitlab.com` y después `docker pull registry.gitlab.com\u002Fgrupo\u002Fproyecto\u002Fimagen:tag`.",{"title":136,"body":137},"Reetiquetar y subir al destino","Ejecute `docker tag registry.gitlab.com\u002Fgrupo\u002Fproyecto\u002Fimagen:tag registry.su-dominio.com\u002Fgrupo\u002Fproyecto\u002Fimagen:tag`, luego `docker login registry.su-dominio.com` y `docker push registry.su-dominio.com\u002Fgrupo\u002Fproyecto\u002Fimagen:tag`. Las rutas de repositorio del registro se escriben en minúsculas.",{"type":139,"title":140,"body":141},"tip","Mantenga abierta la marcha atrás","No borre nada en el origen. Archive el proyecto antiguo o retire los permisos de escritura, déjelo legible y lance un pipeline y un `git clone` completo desde el destino. Mientras el cliente no haya firmado la validación, el cambio sigue siendo reversible: basta con reabrir el proyecto antiguo.",{"type":35,"title":143,"body":144},"Solución de problemas: errores de autenticación y de importación","En `docker login` o `docker push`, el mensaje `access forbidden` significa, según la documentación, que la cabecera `Authorization` se eliminó antes de llegar a GitLab, a menudo por un proxy situado delante de la instancia. Revise la configuración del proxy inverso.\n\nUn error `UNAUTHORIZED` (401) indica credenciales erróneas o caducadas, scopes ausentes o una contraseña usada con la doble autenticación activada: use entonces un token. Un `DENIED` (403) quiere decir que las credenciales son válidas pero sin derecho sobre el registro.\n\nEn una imagen grande, `unauthorized: authentication required` señala un token que caducó antes de terminar el push. Un administrador puede alargar su duración.\n\nEn la importación, un título de hito que ya existe recibe un sufijo único del tipo `18.0 (imported-…)`: renombre el hito antes de migrar para evitarlo.",{"type":39,"title":146,"items":147},"Controles antes de cortar el acceso antiguo",[148,149,150,151,152,153],"**Repositorios idénticos** — compare ramas y etiquetas, y haga un clon completo desde el destino.","**Pipeline completo en verde** — un pipeline en la rama principal con las variables recreadas y los runners registrados de nuevo.","**Imágenes presentes** — cada tag usado por un despliegue existe en el nuevo registro.","**Miembros y roles revisados** — ningún autor ni asignado ha pasado a la cuenta que lanzó la importación.","**Webhooks y claves de despliegue recreados** — incluidas las integraciones de chat, despliegue y supervisión.","**Validación escrita del cliente** — el proyecto antiguo solo se cierra tras ese acuerdo.",{"type":35,"title":155,"body":156},"La documentación oficial","Las reglas de esta guía proceden de la documentación de GitLab: \u003Ca href=\"https:\u002F\u002Fdocs.gitlab.com\u002Fee\u002Fuser\u002Fproject\u002Fsettings\u002Fimport_export.html\">exportación e importación de proyectos\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fdocs.gitlab.com\u002Fee\u002Fuser\u002Fgroup\u002Fimport\u002Fdirect_transfer_migrations.html\">migración de grupos por direct transfer\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fdocs.gitlab.com\u002Fee\u002Fuser\u002Fgroup\u002Fimport\u002Fmigrated_items.html\">elementos migrados\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fdocs.gitlab.com\u002Fee\u002Fapi\u002Fproject_level_variables.html\">API de variables de proyecto\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fdocs.gitlab.com\u002Fee\u002Fuser\u002Fpackages\u002Fcontainer_registry\u002Fauthenticate_with_container_registry.html\">autenticación en el registro\u003C\u002Fa> y \u003Ca href=\"https:\u002F\u002Fdocs.gitlab.com\u002Fee\u002Fadministration\u002Fpackages\u002Fcontainer_registry.html\">registro en una instancia autogestionada\u003C\u002Fa>. Reléalas en la fecha de su migración: las listas de elementos migrados evolucionan.",{"type":35,"title":158,"body":159},"Después: consolidar en torno a su instancia","Una vez validados los proyectos, la instancia pasa a ser el punto central de la cartera de la agencia. Para un registro más pesado, \u003Ca href=\"\u002Fblog\u002Fself-host-harbor-registry-vps\">Harbor en un VPS\u003C\u002Fa> puede tomar el relevo. Si su migración viene de otra herramienta de tickets, \u003Ca href=\"\u002Fblog\u002Fmigrer-jira-openproject-plane-vps-2026\">la guía de Jira a OpenProject o Plane\u003C\u002Fa> sigue la misma lógica de inventario. Y si aún duda de la forja, \u003Ca href=\"\u002Fblog\u002Fmigrer-gitlab-vers-gitea-vps-2026\">el paso de GitLab a Gitea\u003C\u002Fa> sigue siendo una opción más ligera.","Recupere el control del código de sus clientes","Una agencia que aloja sus repositorios en su propia instancia controla accesos, retención y factura. En ServOrbit, la instancia funciona en un VPS con acceso root e IPv4 dedicada, y el nombre de dominio del repositorio se gestiona en el mismo lugar que sus alojamientos y su cuenta de revendedor.","Descubrir las soluciones para agencias","\u002Fsolutions\u002Fagences",[165,181,205],{"id":166,"slug":167,"slugs":168,"title":172,"excerpt":173,"readTime":174,"views":23,"isPinned":19,"publishedAt":175,"updatedAt":176,"category":177,"categories":178,"featuredImage":29,"bgImage":30,"posterImage":180,"relatedSolution":29},235,"instalar-gitlab-ce-en-un-vps-guia-completa",{"fr":169,"en":170,"ar":171,"es":167},"installer-gitlab-ce-vps","install-gitlab-ce-on-a-vps-complete-guide","تثبيت-gitlab-ce-على-vps-دليل-شامل","Instalar GitLab CE en un VPS: guía completa","Despliegue GitLab CE en un VPS con Docker Compose. Incluye CVE-2026-90970 (CVSS 9.9): RCE en AI Gateway, versiones vulnerables y comandos de actualización.",18,"2026-08-07T00:00:00+00:00","2026-10-20T23:18:07+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[179],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Finstaller-gitlab-ce-vps-poster.svg",{"id":182,"slug":183,"slugs":184,"title":188,"excerpt":189,"readTime":190,"views":18,"isPinned":19,"publishedAt":191,"updatedAt":192,"category":193,"categories":199,"featuredImage":29,"bgImage":30,"posterImage":201,"relatedSolution":202},352,"migrar-gitlab-a-gitea-en-un-vps-en-2026",{"fr":185,"en":186,"ar":187,"es":183},"migrer-gitlab-vers-gitea-vps-2026","migrate-gitlab-to-gitea-vps-2026","الانتقال-من-gitlab-إلى-gitea-على-vps-في-2026","Migrar de GitLab a Gitea en un VPS en 2026","GitLab.com puso en modo solo lectura los namespaces con más de 5 miembros desde el 15 de agosto de 2026. Así se migra a Gitea autoalojado sin perder el historial.",10,"2026-09-16T00:00:00+00:00","2026-10-20T23:18:06+00:00",{"id":194,"name":195,"slug":196,"color":197,"icon":198},4,"Desarrollo","developpement","bg-warning\u002F10 text-warning","dev",[200],{"id":194,"name":195,"slug":196,"color":197,"icon":198},"\u002Fblog\u002Fcovers\u002Fmigrer-gitlab-vers-gitea-vps-2026-poster.svg",{"categorySlug":203,"appSlug":204},"desarrollo","gitea",{"id":206,"slug":207,"slugs":208,"title":212,"excerpt":213,"readTime":190,"views":18,"isPinned":19,"publishedAt":214,"updatedAt":215,"category":216,"categories":221,"featuredImage":29,"bgImage":30,"posterImage":223,"relatedSolution":29},398,"atlassian-subida-oct-2026-facturacion-por-uso",{"fr":209,"en":210,"ar":211,"es":207},"atlassian-double-choc-tarif-octobre-decembre-2026","atlassian-pricing-shock-oct-2026-hike-and-usage-billing","atlassian-رفع-الاسعار-اكتوبر-2026-فوترة-الاستخدام","Atlassian: subida oct. 2026 y facturación por uso en dic.","Atlassian sube precios Cloud 7–10 % el 13 oct. 2026, luego factura automation steps y Rovo AI credits el 3 dic. Simula el impacto y evalúa el VPS self-hosted.","2026-09-30T00:00:00+00:00","2026-10-20T23:18:05+00:00",{"id":217,"name":218,"slug":219,"color":220,"icon":219},5,"Comparativas","comparatif","bg-info\u002F10 text-info",[222],{"id":217,"name":218,"slug":219,"color":220,"icon":219},"\u002Fblog\u002Fcovers\u002Fatlassian-double-choc-tarif-octobre-decembre-2026-poster.svg",1792799485282]