GitLab Community Edition es una plataforma DevOps autohospedada que reúne repositorios Git, revisión de código, incidencias, registro de contenedores y CI/CD en una sola aplicación. En este tutorial instalarás GitLab CE en Ubuntu 24.04 con el paquete oficial (Linux package, antes llamado Omnibus), que incluye y gestiona por sí mismo PostgreSQL, Redis, Nginx y los certificados de Let's Encrypt. Después configurarás el correo saliente, las copias de seguridad y un GitLab Runner.
Requisitos previos
- Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath, con al menos 4 vCPU y 8 GB de RAM. GitLab ejecuta muchos servicios; con menos memoria funcionará lento o fallará bajo carga.
- Un usuario no root con privilegios
sudo. - Un subdominio (en esta guía,
gitlab.your_domain) con un registro DNS A que apunte a la IP pública del servidor. Let's Encrypt lo validará durante la instalación. - Los puertos 22, 80 y 443 accesibles desde Internet.
- Opcional: los datos de un servidor SMTP (host, puerto, usuario y contraseña) para enviar correos.
Notael paquete incluye su propio Nginx. No instales Nginx ni Apache en el mismo servidor, o competirán por los puertos 80 y 443.
Paso 1: Preparar el servidor
Actualiza el sistema e instala las dependencias que pide GitLab:
sudo apt update
sudo apt upgrade
sudo apt install curl ca-certificates perl openssh-server
Abre SSH, HTTP y HTTPS en el cortafuegos. Permite SSH antes de activar UFW para no perder la conexión:
sudo ufw allow OpenSSH
sudo ufw allow http
sudo ufw allow https
sudo ufw enable
Comprueba las reglas:
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
...
Paso 2: Añadir el repositorio de GitLab
GitLab distribuye un script que añade su repositorio APT y la clave de firma. Descárgalo, revísalo antes de ejecutarlo y lánzalo:
curl -fsSL -o /tmp/gitlab-ce-repo.sh https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh
less /tmp/gitlab-ce-repo.sh
sudo bash /tmp/gitlab-ce-repo.sh
Comprueba que el paquete gitlab-ce está disponible desde el repositorio de GitLab:
apt-cache policy gitlab-ce | head -n 4
gitlab-ce:
Installed: (none)
Candidate: X.Y.Z-ce.0
Version table:
Paso 3: Instalar GitLab CE
Instala el paquete indicando la URL pública con la variable EXTERNAL_URL. Al usar https://, GitLab solicita automáticamente un certificado de Let's Encrypt y configura su renovación, por eso el registro DNS debe apuntar ya al servidor:
sudo EXTERNAL_URL="https://gitlab.your_domain" apt install gitlab-ce
La instalación tarda varios minutos: al final ejecuta gitlab-ctl reconfigure, que configura todos los servicios. Cuando termine verás:
Thank you for installing GitLab!
GitLab should be available at https://gitlab.your_domain
Comprueba que todos los servicios están en marcha:
sudo gitlab-ctl status
run: gitaly: (pid 12345) 120s; run: log: (pid 12300) 125s
run: gitlab-workhorse: (pid 12400) 110s; run: log: (pid 12390) 115s
run: nginx: (pid 12420) 108s; run: log: (pid 12410) 112s
run: postgresql: (pid 12200) 130s; run: log: (pid 12190) 135s
run: puma: (pid 12350) 115s; run: log: (pid 12340) 118s
run: redis: (pid 12100) 140s; run: log: (pid 12090) 142s
run: sidekiq: (pid 12370) 113s; run: log: (pid 12360) 116s
...
Todas las líneas deben empezar por run:. Si alguna muestra down:, revisa sus registros con sudo gitlab-ctl tail nombre_del_servicio.
Paso 4: Iniciar sesión y asegurar la cuenta root
La instalación genera una contraseña aleatoria para el usuario root y la guarda en un archivo que se borra automáticamente pasadas 24 horas. Muéstrala:
sudo cat /etc/gitlab/initial_root_password
...
Password: kJ3x...generada...Qw=
...
Abre https://gitlab.your_domain, inicia sesión con el usuario root y esa contraseña, y cámbiala de inmediato desde Editar perfil > Contraseña.
Por defecto, cualquiera puede registrarse en tu instancia. Si es un GitLab privado, desactívalo en Admin > Configuración > General > Restricciones de registro, desmarcando Registro habilitado. Crea después tu propio usuario (con rol de administrador si lo necesitas) y usa root solo para tareas puntuales.
Paso 5: Configurar el correo SMTP
GitLab necesita enviar correos para confirmar cuentas, restablecer contraseñas y notificar. Toda la configuración del paquete está en /etc/gitlab/gitlab.rb:
sudo nano /etc/gitlab/gitlab.rb
Busca la sección GitLab email server settings y añade estas líneas con los datos de tu proveedor SMTP. Sustituye smtp.your_provider.com, your_smtp_user y your_smtp_password por los valores reales:
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.your_provider.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "your_smtp_user"
gitlab_rails['smtp_password'] = "your_smtp_password"
gitlab_rails['smtp_domain'] = "your_domain"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['gitlab_email_from'] = "gitlab@your_domain"
gitlab_rails['gitlab_email_reply_to'] = "noreply@your_domain"
Aplica los cambios. Cada vez que modifiques gitlab.rb, debes ejecutar reconfigure:
sudo gitlab-ctl reconfigure
Envía un correo de prueba desde la consola de Rails, que tarda un minuto en cargar:
sudo gitlab-rails console
En la consola, ejecuta lo siguiente con una dirección tuya y sal con exit:
Notify.test_email('[email protected]', 'Prueba de GitLab', 'El correo funciona').deliver_now
Si el correo llega, el SMTP está bien configurado. Si ves una excepción, el mensaje indica el problema (autenticación, puerto o TLS).
Paso 6: Ajustar el consumo de memoria (opcional)
En un servidor de 8 GB con pocos usuarios, puedes reducir la memoria que usa GitLab. Edita de nuevo /etc/gitlab/gitlab.rb y añade:
puma['worker_processes'] = 2
sidekiq['concurrency'] = 10
prometheus_monitoring['enable'] = false
Esto reduce los procesos de Puma (la aplicación web), los hilos de Sidekiq (trabajos en segundo plano) y desactiva la monitorización interna con Prometheus y sus exportadores. Aplica y comprueba la memoria:
sudo gitlab-ctl reconfigure
free -h
No lo hagas si tu instancia tiene muchos usuarios concurrentes: con menos procesos, las peticiones esperarán más.
Paso 7: Programar copias de seguridad
GitLab genera copias de la base de datos, los repositorios y los archivos subidos con gitlab-backup. Crea una para comprobar que funciona:
sudo gitlab-backup create
...
Backup 1758772800_2026_09_25_X.Y.Z was successfully created.
La copia se guarda en /var/opt/gitlab/backups. Para que no se acumulen indefinidamente, define cuánto tiempo se conservan (en segundos; 604800 son 7 días) en /etc/gitlab/gitlab.rb:
gitlab_rails['backup_keep_time'] = 604800
Aplica el cambio con sudo gitlab-ctl reconfigure.
Importante
gitlab-backupno incluye/etc/gitlab/gitlab.rbni/etc/gitlab/gitlab-secrets.json. Singitlab-secrets.jsonno podrás descifrar variables de CI ni la autenticación en dos pasos al restaurar. Cópialos por separado consudo gitlab-ctl backup-etc, que genera un tar en/etc/gitlab/config_backup.
Programa ambas copias cada noche con el crontab de root:
sudo crontab -e
0 2 * * * /opt/gitlab/bin/gitlab-backup create CRON=1
15 2 * * * /opt/gitlab/bin/gitlab-ctl backup-etc
CRON=1 suprime la salida salvo que haya errores. Envía después /var/opt/gitlab/backups y /etc/gitlab/config_backup a otro servidor o a un almacenamiento de objetos: una copia en el mismo disco no te protege si pierdes la máquina.
Paso 8: Instalar y registrar un GitLab Runner
Los pipelines de CI/CD se ejecutan en runners. Lo recomendable es instalar el runner en otro servidor, para que los trabajos de CI no compitan por recursos con GitLab, pero los pasos son los mismos. Añade el repositorio oficial del runner con su script, revisándolo antes:
curl -fsSL -o /tmp/gitlab-runner-repo.sh https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh
less /tmp/gitlab-runner-repo.sh
sudo bash /tmp/gitlab-runner-repo.sh
sudo apt install gitlab-runner
En GitLab, ve a Admin > CI/CD > Runners y pulsa Crear runner de instancia. Añade una etiqueta (por ejemplo shell), marca si puede ejecutar trabajos sin etiqueta y pulsa Crear runner. GitLab te mostrará un token que empieza por glrt-. Regístralo en el servidor del runner:
sudo gitlab-runner register --url https://gitlab.your_domain --token glrt-your_runner_token
Cuando el asistente pregunte por el ejecutor, escribe shell para ejecutar los trabajos directamente en el servidor (o docker si tienes Docker instalado y quieres aislar cada trabajo en un contenedor). Comprueba el registro:
sudo gitlab-runner verify
Verifying runner... is valid runner=xxxxxxxx
En Admin > CI/CD > Runners el runner debe aparecer con estado En línea. Para probarlo, crea un proyecto con un archivo .gitlab-ci.yml mínimo:
prueba:
script:
- echo "Hola desde $(hostname)"
El pipeline se ejecutará al hacer push y verás la salida en Build > Pipelines.
Paso 9: Actualizar GitLab
GitLab publica una versión menor cada mes. Para actualizar dentro de la misma versión mayor, haz una copia de seguridad y actualiza el paquete:
sudo gitlab-backup create
sudo apt update
sudo apt install gitlab-ce
El paquete ejecuta las migraciones y reconfigura los servicios automáticamente. Para saltar entre versiones mayores, GitLab exige pasar por versiones intermedias concretas (paradas obligatorias); consulta la herramienta Upgrade Path de la documentación de GitLab antes de hacerlo.
Solución de problemas
- Error 502 justo después de instalar o reiniciar: Puma tarda uno o dos minutos en arrancar. Si persiste, revisa
sudo gitlab-ctl tail pumay la memoria libre confree -h: el problema más habitual es falta de RAM. - Let's Encrypt falla durante la instalación: el DNS no apunta aún al servidor o el puerto 80 está cerrado. Corrígelo y ejecuta
sudo gitlab-ctl reconfigurede nuevo. - Has perdido la contraseña de root: si el archivo
initial_root_passwordya se borró o la contraseña no funciona, restablécela consudo gitlab-rake "gitlab:password:reset[root]". - Comprobación general:
sudo gitlab-rake gitlab:check SANITIZE=truerevisa la configuración, los permisos y la conexión con Gitaly y muestra cómo arreglar cada fallo.
Conclusión
Ya tienes GitLab CE funcionando en Ubuntu 24.04 con HTTPS automático, correo saliente, copias de seguridad diarias y un runner para CI/CD. Como siguientes pasos, crea grupos para organizar los proyectos, exige la autenticación en dos pasos desde Admin > Configuración > General > Restricciones de inicio de sesión y, si vas a publicar imágenes de contenedor, habilita el registro de contenedores integrado.
