--- title: "Cómo instalar GitLab CE en Ubuntu 24.04 con HTTPS" description: "Instala GitLab CE en Ubuntu 24.04 con el paquete oficial, activa HTTPS automático con Let's Encrypt y configura el correo SMTP, las copias y un runner." category: "Hosting de Aplicaciones Web" language: es source: https://cubepath.com/es/docs/hosting-de-aplicaciones-web/instalacion-de-gitlab-ce-en-linux updated: 2026-09-25 --- # Cómo instalar GitLab CE en Ubuntu 24.04 con HTTPS 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. > Nota: el 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: ```bash 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: ```bash sudo ufw allow OpenSSH sudo ufw allow http sudo ufw allow https sudo ufw enable ``` Comprueba las reglas: ```bash sudo ufw status ``` ```output 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: ```bash 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: ```bash apt-cache policy gitlab-ce | head -n 4 ``` ```output 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: ```bash 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: ```output Thank you for installing GitLab! GitLab should be available at https://gitlab.your_domain ``` Comprueba que todos los servicios están en marcha: ```bash sudo gitlab-ctl status ``` ```output 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: ```bash sudo cat /etc/gitlab/initial_root_password ``` ```output ... 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`: ```bash 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: ```ruby 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`: ```bash sudo gitlab-ctl reconfigure ``` Envía un correo de prueba desde la consola de Rails, que tarda un minuto en cargar: ```bash sudo gitlab-rails console ``` En la consola, ejecuta lo siguiente con una dirección tuya y sal con `exit`: ```ruby Notify.test_email('tu_correo@example.com', '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: ```ruby 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: ```bash 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: ```bash sudo gitlab-backup create ``` ```output ... 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`: ```ruby gitlab_rails['backup_keep_time'] = 604800 ``` Aplica el cambio con `sudo gitlab-ctl reconfigure`. > Importante: `gitlab-backup` no incluye `/etc/gitlab/gitlab.rb` ni `/etc/gitlab/gitlab-secrets.json`. Sin `gitlab-secrets.json` no podrás descifrar variables de CI ni la autenticación en dos pasos al restaurar. Cópialos por separado con `sudo gitlab-ctl backup-etc`, que genera un tar en `/etc/gitlab/config_backup`. Programa ambas copias cada noche con el crontab de root: ```bash sudo crontab -e ``` ```text 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: ```bash 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: ```bash 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: ```bash sudo gitlab-runner verify ``` ```output 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: ```yaml 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: ```bash 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 puma` y la memoria libre con `free -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 reconfigure` de nuevo. - **Has perdido la contraseña de root**: si el archivo `initial_root_password` ya se borró o la contraseña no funciona, restablécela con `sudo gitlab-rake "gitlab:password:reset[root]"`. - **Comprobación general**: `sudo gitlab-rake gitlab:check SANITIZE=true` revisa 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.