Cómo instalar GitLab en un servidor dedicado
GitLab es una plataforma para repositorios Git, revisión de código, seguimiento de incidencias y CI/CD que puede ejecutar en su propio servidor. Una instancia autoalojada mantiene su código fuente bajo su control, y su capacidad depende solo de los recursos del servidor y de las funciones de GitLab que utilice.
Un servidor dedicado es muy adecuado para GitLab. El almacenamiento de repositorios exige mucho a los discos, y la base de datos y los servicios en segundo plano necesitan una cantidad estable de RAM. En hardware dedicado, estos recursos no se comparten con nadie, por lo que GitLab sigue respondiendo con rapidez durante los push grandes y las ejecuciones de CI.
Por qué ejecutar su propio GitLab
GitLab.com es cómodo para empezar, pero a medida que crece un equipo, una instancia autoalojada suele ser la mejor opción:
- El código permanece en su servidor. El código fuente, las incidencias y los secretos de CI/CD se almacenan en hardware que usted controla, en la ubicación del centro de datos que elija. Esto es importante para proyectos con requisitos de NDA o de residencia de datos.
- Sin límites de plan en usuarios, almacenamiento y minutos de CI/CD. El nivel gratuito de GitLab.com los limita, mientras que en su propio servidor solo los recursos de este marcan los límites.
- Sus propios runners de CI/CD. Las compilaciones se ejecutan en sus servidores sin pagar por minutos de cómputo y pueden acceder a servicios internos cerrados a internet.
- Control total sobre las actualizaciones y los ajustes. Usted decide cuándo actualizar, qué integraciones activar y cómo hacer copias de seguridad de los datos.
Si ya usa GitLab.com, instale primero su propia instancia y después traslade a ella los grupos y proyectos.
Esta guía muestra cómo instalar GitLab desde el paquete oficial en Ubuntu o Debian, obtener un certificado gratuito de Let's Encrypt y preparar la instancia para su equipo.
Qué necesita antes de la instalación
Un servidor dedicado con al menos 8 vCPU (hilos de CPU) y 16 GB de RAM. Un procesador de 4 núcleos con Hyper-Threading o SMT ya ofrece 8 hilos. GitLab puede arrancar con 8 GB de RAM, pero consume casi toda y será lento bajo carga. Use discos SSD o NVMe con al menos 40 GB libres para el sistema y GitLab, además de espacio suficiente para todos los repositorios y las copias de seguridad.
Ubuntu 26.04 LTS, Ubuntu 24.04 LTS o Debian 13 instalado en el servidor. Los comandos de esta guía son los mismos para los tres sistemas; donde Debian difiere, se indica.
Un dominio o subdominio para GitLab, por ejemplo gitlab.example.com.
Un registro DNS A que apunte este dominio a la dirección IPv4 pública del servidor.
Si añade también un registro AAAA, IPv6 ya debe funcionar en el servidor. Let's Encrypt prefiere IPv6 cuando existe un registro AAAA, y si el servidor no es accesible por IPv6, el certificado no se emite. Si no está seguro, añada solo el registro A.
Acceso root o un usuario con permisos sudo. Los comandos de esta guía se ejecutan como root; si usa un usuario con sudo, añada sudo delante. En el comando que añade el repositorio de GitLab, ponga sudo antes de bash: curl ... | sudo bash.
Puertos 22 (SSH), 80 (HTTP) y 443 (HTTPS) abiertos a internet. El puerto 80 es obligatorio incluso si piensa usar solo HTTPS, porque Let's Encrypt comprueba el dominio por HTTP.
En toda esta guía, sustituya gitlab.example.com por su propio dominio y 203.0.113.10 por la dirección IP de su servidor.
Conectarse al servidor
Conéctese al servidor por SSH desde su ordenador:
Compruebe la versión del sistema operativo:
cat /etc/os-release
Ejemplo de salida:
PRETTY_NAME="Ubuntu 26.04 LTS" NAME="Ubuntu" VERSION_ID="26.04" ...
La salida debe mostrar Ubuntu 26.04, Ubuntu 24.04 o Debian 13. Después compruebe el número de núcleos de CPU, la cantidad de RAM y el espacio libre en disco:
nproc free -h df -h /
Asegúrese de que el dominio ya apunta al servidor. Ejecute este comando en su ordenador local (funciona en Windows, macOS y Linux):
nslookup gitlab.example.com
El registro A debe devolver la dirección IPv4 pública del servidor. Si también usa un registro AAAA, asegúrese de que el servidor sea accesible por IPv6. Si las direcciones no coinciden, corrija los registros DNS y espere a que el cambio surta efecto. No continúe hasta que el dominio se resuelva correctamente, porque GitLab solicita el certificado de Let's Encrypt durante la configuración inicial.
Actualizar el servidor e instalar dependencias
Actualice las listas de paquetes y los paquetes instalados:
apt update && apt upgrade -y
Establezca el nombre de host del servidor con el dominio de GitLab. GitLab no lo exige, pero así el nombre del sistema es coherente con la dirección de GitLab en los registros y en el correo saliente:
hostnamectl set-hostname gitlab.example.com
Instale los paquetes que necesita GitLab:
apt install -y curl openssh-server ca-certificates perl tzdata locales
GitLab también necesita una configuración regional UTF-8: sin ella, la base de datos PostgreSQL incluida puede no inicializarse durante la instalación. Active en_US.UTF-8 en la lista de configuraciones regionales y genérela (en Ubuntu 26.04 ya está activada y el primer comando no cambia nada):
sed -i 's/^# *en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen locale-gen
Configurar el cortafuegos
Esta guía usa el cortafuegos UFW. Viene incluido en Ubuntu, pero está desactivado de forma predeterminada; en Debian, instálelo primero:
apt install -y ufw
Si UFW ya está activado en su servidor, compruebe primero sus reglas actuales con ufw status. Permita SSH, HTTP y HTTPS y solo después active el cortafuegos, para que su sesión SSH no se interrumpa:
ufw allow ssh ufw allow http ufw allow https ufw enable
Responda y cuando se le pida confirmación. Compruebe las reglas:
ufw status
Ejemplo de salida:
Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere 80/tcp ALLOW Anywhere 443/tcp ALLOW Anywhere 22/tcp (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443/tcp (v6) ALLOW Anywhere (v6)
Si su servidor SSH usa un puerto distinto del 22, permita ese puerto antes de ufw enable, por ejemplo con ufw allow 2222/tcp. De lo contrario, perderá la conexión.
Añadir el repositorio de GitLab
GitLab se distribuye en dos ediciones:
- GitLab Enterprise Edition (
gitlab-ee). Incluye todas las funciones gratuitas y permite activar funciones de pago más adelante sin reinstalar. - GitLab Community Edition (
gitlab-ce). Una compilación totalmente de código abierto con las funciones gratuitas de GitLab.
Esta guía usa gitlab-ee. Si prefiere la Community Edition, sustituya gitlab-ee por gitlab-ce en todos los comandos.
Añada el repositorio oficial de GitLab:
curl -fsSL https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | bash
El script añade el repositorio y su clave de firma y actualiza la lista de paquetes.
Instalar GitLab
Instale el paquete y pase la dirección de su instancia en EXTERNAL_URL. Use https:// en la dirección: en ese caso GitLab solicita un certificado de Let's Encrypt y configura automáticamente la redirección de HTTP a HTTPS.
EXTERNAL_URL='https://gitlab.example.com' apt install -y gitlab-ee
Durante la instalación, GitLab descomprime sus componentes (el servidor web, la base de datos PostgreSQL, Redis, el almacenamiento Git y los servicios en segundo plano), escribe la configuración en /etc/gitlab/gitlab.rb, solicita el certificado e inicia todos los servicios. Esto tarda de 5 a 10 minutos. Al terminar, la salida acaba con el mensaje «Thank you for installing GitLab!».
Ejemplo de salida:
Thank you for installing GitLab! GitLab should be available at https://gitlab.example.com
GitLab genera una contraseña aleatoria para la cuenta root y la guarda en un archivo. Muéstrela:
cat /etc/gitlab/initial_root_password
Copie la contraseña. El archivo se elimina automáticamente 24 horas después de la instalación, así que inicie sesión y establezca su propia contraseña antes de ese plazo.
Puede establecer usted mismo la contraseña de root durante la instalación añadiendo GITLAB_ROOT_PASSWORD='your-password' antes de EXTERNAL_URL en el comando de instalación. Use comillas simples para que el shell no modifique caracteres como $ o !. Si la contraseña tiene menos de 8 caracteres, GitLab no la usa y genera una contraseña aleatoria.
Abrir GitLab y comprobar HTTPS
Abra https://gitlab.example.com en su navegador. La página debe abrirse sin advertencia de seguridad y el navegador debe mostrar un certificado válido emitido por Let's Encrypt.
Si la página muestra el error 502, GitLab aún está iniciando sus servicios. Espere uno o dos minutos y recargue la página.
Inicie sesión con el nombre de usuario root y la contraseña de initial_root_password.
Cambie la contraseña de inmediato. Seleccione su avatar y después Edit profile. En el menú de la izquierda, despliegue Access, seleccione Password and authentication y después Change password. Introduzca la contraseña actual y una nueva, y seleccione Save password. GitLab rechaza las contraseñas débiles, incluidas las que contienen la palabra «gitlab» o su nombre de usuario.
Si la página no se abre por HTTPS, lo más probable es que el certificado no se haya emitido. En ese caso, la salida de la instalación contiene un error de Let's Encrypt. Compruebe que el dominio se resuelve a la dirección IP del servidor, que el puerto 80 está abierto y que no hay un registro AAAA sin IPv6 funcional. Tras corregir la causa, solicite de nuevo el certificado:
gitlab-ctl reconfigure
Let's Encrypt limita el número de intentos fallidos por hora, así que corrija la causa antes de volver a intentarlo.
Configuración básica de GitLab
Desactivar el registro público. Si la instancia es solo para su equipo, desactive la creación de cuentas desde la página de registro. De forma predeterminada, cualquiera que abra su página de GitLab puede registrarse, y la nueva cuenta queda a la espera de la aprobación de un administrador. Lo más rápido es el botón Deactivate del banner de la página de inicio de GitLab. También puede seleccionar Admin en la esquina superior derecha, ir a Settings > General y desplegar New user account restrictions. Desmarque la casilla Allow new user accounts y seleccione Save changes. Las cuentas nuevas solo las crearán los administradores.

Crear cuentas de usuario. Vaya a Admin > Instance overview > Users y seleccione New user, rellene el nombre, el nombre de usuario y la dirección de correo electrónico, y seleccione Create user. Use una cuenta personal con derechos de administrador para el trabajo diario y la cuenta root solo cuando sea necesario.
Crear un grupo. Los grupos reúnen proyectos y miembros del equipo. Seleccione Create new (el icono del signo más) en la barra superior, después New group > Create group, introduzca un nombre y seleccione Create group. Añada a sus compañeros al grupo en Manage > Members.



Añadir una clave SSH. Para trabajar con repositorios por SSH, cada usuario añade su clave pública en Edit profile > Access > SSH keys: seleccione Add new key, pegue la clave y seleccione Add key.
GitLab envía correos para restablecer contraseñas, confirmar cuentas y desbloquearlas tras intentos de inicio de sesión fallidos. Mientras no configure el correo saliente (consulte «Qué configurar a continuación»), estas funciones no funcionan y los administradores deben restablecer las contraseñas manualmente.
Verificar la instalación
Compruebe que todos los servicios de GitLab están en ejecución:
gitlab-ctl status
Ejemplo de salida:
run: gitaly: (pid 2981) 512s; run: log: (pid 2975) 512s run: gitlab-workhorse: (pid 3412) 498s; run: log: (pid 3401) 498s run: nginx: (pid 3530) 495s; run: log: (pid 3522) 495s run: postgresql: (pid 3105) 507s; run: log: (pid 3098) 507s run: puma: (pid 3288) 501s; run: log: (pid 3280) 501s run: redis: (pid 2950) 514s; run: log: (pid 2944) 514s run: sidekiq: (pid 3350) 499s; run: log: (pid 3342) 499s ...
Cada línea debe empezar por run:.
Ejecute la comprobación integrada de la configuración y los servicios:
gitlab-rake gitlab:check SANITIZE=true
Cree un repositorio de prueba. En la interfaz web, seleccione Create new > New project/repository > Create blank project, introduzca el nombre test, seleccione su grupo y deje marcada la opción Initialize repository with a README. Seleccione Create project.


Compruebe el acceso por SSH desde su ordenador:
ssh -T [email protected]
Ejemplo de salida:
Welcome to GitLab, @username!
Una configuración correcta responde con un mensaje de bienvenida que contiene su nombre de usuario. Después clone el repositorio de prueba:
git clone [email protected]:group/test.git
Sustituya group por la ruta de su grupo. Si el repositorio se clona y contiene README.md, GitLab está instalado y funcionando.
Qué configurar a continuación
Copias de seguridad. El comando gitlab-backup create crea una copia de seguridad de la aplicación con la base de datos de GitLab, los repositorios y otros datos de la aplicación en /var/opt/gitlab/backups. Los archivos de configuración /etc/gitlab/gitlab.rb y /etc/gitlab/gitlab-secrets.json no se incluyen y deben copiarse por separado, por ejemplo con gitlab-ctl backup-etc. Sin gitlab-secrets.json, una instancia restaurada no puede descifrar los ajustes de 2FA ni las variables de CI/CD. Haga copias de seguridad de la aplicación y de la configuración con regularidad y cópielas a un almacenamiento externo al servidor de GitLab, por ejemplo a INTROSERV Cloud Storage: consulte Conectar INTROSERV Cloud Storage al servidor.
Correo saliente. Configure un servidor SMTP en /etc/gitlab/gitlab.rb para que GitLab pueda enviar notificaciones, restablecimientos de contraseña y confirmaciones de cuenta. Consulte Ajustes SMTP en la documentación de GitLab.
GitLab Runner. Runner ejecuta los pipelines de CI/CD. Las compilaciones consumen mucha CPU y RAM, por lo que es mejor instalar Runner en un VPS o servidor dedicado aparte y no en el propio servidor de GitLab.
Actualizaciones. GitLab publica una versión nueva cada mes y correcciones de seguridad con más frecuencia. Antes de actualizar saltando varias versiones, consulte la ruta de actualización oficial: GitLab debe pasar por ciertas versiones intermedias. Haga una copia de seguridad y actualice con apt update && apt install -y gitlab-ee.
Monitorización. GitLab incluye Prometheus y exporta sus propias métricas. El estado de la instancia puede comprobarse en Admin > Monitoring > Health check, y los endpoints que se muestran allí pueden conectarse a su sistema de monitorización externo.

Para elegir un servidor para su instancia de GitLab, consulte la página de Servidores dedicados.