Instalar GitLab CE en Ubuntu 16.04: guía paso a paso
Esta guía explica cómo instalar GitLab Community Edition (omnibus) en un servidor Ubuntu 16.04. Cubre instalación de paquetes, configuración de URL, certificados Let’s Encrypt y DHPARAM, habilitación de HTTPS con Nginx, reglas UFW, ajustes posinstalación, pruebas básicas, y buenas prácticas de seguridad y operación.
Importante: Ubuntu 16.04 es una versión LTS antigua; considere actualizar a una LTS más reciente en entornos de producción a largo plazo.
Introducción
GitLab es un gestor de repositorios GIT web basado en Rails y desarrollado por GitLab Inc. Permite colaborar en código, gestionar incidencias, revisiones, wikis, feeds de actividad y despliegues. GitLab puede alojar múltiples proyectos y se distribuye en varias ediciones:
- GitLab CE (Community Edition) — autoalojado, gratuito, soporte comunitario.
- GitLab EE (Enterprise Edition) — autoalojado, de pago, con funciones adicionales.
- GitLab.com — SaaS con opción gratuita.
- GitLab.io — instancias privadas gestionadas por GitLab Inc.
En esta guía instalaremos GitLab CE usando la distribución “omnibus” que empaqueta todas las dependencias y servicios necesarios para simplificar la instalación.
Qué haremos
- Instalar paquetes necesarios
- Instalar GitLab CE
- Configurar la URL principal de GitLab
- Generar certificados SSL con Let’s Encrypt y DHPARAM
- Habilitar HTTPS en Nginx para GitLab
- Configurar UFW (firewall)
- Ajustes posinstalación básicos
- Probar el sistema
Requisitos previos
- Servidor Ubuntu 16.04 de 64 bits
- Mínimo 2 GB de RAM (recomendado más para entornos con muchos usuarios)
- Privilegios de root o sudo
- Dominio público apuntando al servidor (recomendado para HTTPS y certificados)
Paso 1 - Instalar paquetes requeridos
Conéctate al servidor como root y actualiza los repositorios:
ssh root@GitLabServer
apt-get updateInstala curl, openssh-server, ca-certificates y postfix (para envío de correo). Durante la instalación de postfix selecciona “Internet Site” y proporciona el nombre de dominio del servidor cuando se solicite.
sudo apt install curl openssh-server ca-certificates postfix

Notas:
- Postfix configurado como “Internet Site” es suficiente para notificaciones por correo básicas. Si usas un proveedor SMTP externo (Gmail, SendGrid), configura Postfix o GitLab para usar el relay SMTP correspondiente.
- Asegúrate de que los puertos 22, 80 y 443 estén accesibles desde donde vas a conectar.
Paso 2 - Instalar GitLab CE (omnibus)
Agrega el repositorio oficial de GitLab e instala el paquete omnibus.
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
A continuación instala GitLab CE:
sudo apt install gitlab-ceEspera a que termine la descarga e instalación. Verás múltiples pasos de instalación y configuración de servicios incluidos.

Consejos:
- La instalación omnibus instala Redis, PostgreSQL, Nginx (por defecto), Sidekiq y otros servicios. Revisa los logs si algo falla: sudo gitlab-ctl tail
- Si vas a usar un servidor de base de datos externo o un proxy inverso distinto a Nginx integrado, consulta la documentación oficial para configuraciones avanzadas.
Paso 3 - Configurar la URL principal de GitLab
Edita el archivo de configuración principal en /etc/gitlab/gitlab.rb y establece la URL pública que usarán los usuarios. En este ejemplo usamos gitlab.hakase-labs.co; reemplázalo por tu dominio.
cd /etc/gitlab
vim gitlab.rbBusca la línea que contiene external_url y cámbiala:
external_url 'http://gitlab.hakase-labs.co'Guarda el archivo. Más adelante activaremos HTTPS y cambiaremos a https://.
Notas:
- external_url define URLs y rutas que GitLab usa para generar enlaces y para la configuración de Nginx.
- Si vas a usar un proxy inverso externo, ajusta la configuración relacionada con external_url y nginx[‘enable’].
Paso 4 - Generar certificados SSL con Let’s Encrypt y DHPARAM
Instala la herramienta de cliente de Let’s Encrypt (certbot). En Ubuntu 16.04 el paquete puede ser letsencrypt o certbot según repositorio; aquí usamos letsencrypt como en el ejemplo original.
sudo apt install letsencrypt -yGenera un certificado solo (certonly) para tu dominio:
letsencrypt certonly -d gitlab.hakase-labs.coSe te pedirá un correo para notificaciones y que aceptes los términos de servicio. Cuando termine, los archivos se colocarán en /etc/letsencrypt/live/gitlab.hakase-labs.co/



Crear directorio ssl en la configuración de GitLab y generar DHPARAM para mejor seguridad TLS:
mkdir -p /etc/gitlab/ssl/
sudo openssl dhparam -out /etc/gitlab/ssl/dhparams.pem 2048
Ajusta permisos de los certificados para que sean legibles solo por root:
chmod 600 /etc/gitlab/ssl/*Notas de seguridad:
- DHPARAM de 2048 bits mejora la seguridad durante el intercambio de claves. Para mayor seguridad usa 3072 o 4096, pero tardará más en generarse.
- Los certificados Let’s Encrypt caducan cada 90 días; automatiza la renovación.
Paso 5 - Habilitar HTTPS en Nginx para GitLab
Edita /etc/gitlab/gitlab.rb para forzar HTTPS y apuntar al certificado que generaste.
cd /etc/gitlab
vim gitlab.rbCambia external_url por la versión HTTPS:
external_url 'https://gitlab.hakase-labs.co'Añade o modifica las siguientes opciones para que Nginx use los archivos de Let’s Encrypt y el DHPARAM:
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/letsencrypt/live/gitlab.hakase-labs.co/fullchain.pem"
nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/gitlab.hakase-labs.co/privkey.pem"
nginx['ssl_dhparam'] = "/etc/gitlab/ssl/dhparams.pem"Nota: la cadena de escape para comillas dobles es parte del archivo de configuración y debe conservarse tal cual como arriba.
Guarda y aplica la configuración ejecutando:
sudo gitlab-ctl reconfigureEsto reconfigurará todos los servicios según /etc/gitlab/gitlab.rb y reiniciará Nginx con la nueva configuración.


Comprobaciones:
- Asegúrate de que el puerto 443 está escuchando: sudo netstat -tlnp | grep 443
- Revisa los logs si Nginx no arranca: sudo gitlab-ctl tail nginx
Paso 6 - Configurar UFW (firewall)
Habilita y configura UFW para permitir SSH, HTTP y HTTPS. Si tienes un panel de control en la nube también asegúrate de abrir estos puertos en el proveedor.
ufw enable
ufw allow ssh
ufw allow http
ufw allow https
ufw status

Consejo operativo:
- Si gestionas acceso administrativo remoto desde IPs fijas, restringe SSH a esas IPs por seguridad: ufw allow from
to any port 22
Paso 7 - Ajustes posinstalación básicos
Tras acceder a la URL https://gitlab.tudominio, GitLab pedirá restablecer la contraseña del usuario root. Accede con root y realiza los siguientes ajustes mínimos:
- Cambiar contraseña del usuario root
- Actualizar perfil (nombre y correo)
- Crear usuarios y grupos según la organización
- Añadir claves SSH personales para permitir push/pull sin contraseña
Restablecer contraseña por defecto:

Iniciar sesión con root:

Editar perfil y nombre de usuario:



Añadir clave SSH para acceso sin contraseña:
ssh-keygenLuego copia el contenido de id_rsa.pub al apartado de “SSH Key” en tu perfil y pulsa “Add Key”.


Configuraciones de administración:
- En el área de administración puedes ajustar límites por usuario (número máximo de proyectos) y restricciones de registro (whitelist de dominios de correo).


Paso 8 - Pruebas básicas
Crea un proyecto nuevo desde la interfaz web: introduce nombre, descripción y visibilidad y pulsa “Create project”.

Realiza el primer commit desde tu máquina local. Configura git con tu usuario global:
git config --global user.name "hakase"
git config --global user.email "[email protected]"Clona, edita y sube:
git clone https://[email protected]/hakase/howtoforge.git
cd howtoforge/
vim README.md
git add .
git commit -m 'Add README.md file by hakase-labs'
git push origin masterSe te pedirá la contraseña o usarás autenticación por SSH si añadiste tu clave.


Criterios de aceptación mínimos
- La URL https://gitlab.tudominio resuelve y responde con certificado válido
- Inicio de sesión con root y cambio de contraseña completado
- Creación de al menos un proyecto y push inicial exitoso
- Puertos 22, 80 y 443 accesibles según reglas UFW
Buenas prácticas y endurecimiento de seguridad
- Actualizaciones: asegúrate de aplicar actualizaciones de seguridad regulares tanto del sistema operativo como de GitLab.
- Backups: configura backups regulares con gitlab-rake gitlab:backup:create y rota las copias fuera del servidor.
- Permisos: restringe el acceso SSH solo a IPs necesarias y desactiva el login por contraseña si usas SSH keys.
- Monitorización: integra métricas y alertas (Prometheus/Grafana o tu herramienta preferida).
- Renovación de certificados: automatiza con certbot renew y reinicia gitlab-ctl reconfigure si cambian rutas de certificado.
- Revisar cuentas de administrador y políticas de fuerza de contraseñas.
Seguridad adicional (opcional):
- Habilitar autenticación de dos factores (2FA) para usuarios con privilegios.
- Revisar la configuración de contenido y tamaños máximos en Nginx si manejas grandes artefactos.
Operación y mantenimiento
Plan de respaldo básico:
- Configurar backup periódico de GitLab: editar /etc/gitlab/gitlab.rb para configurar object storage si necesitas almacenamiento externo.
- Verificar integridad de backups y probar restauraciones en entorno controlado.
Rollback rápido ante fallo tras actualización:
- Detener servicios: sudo gitlab-ctl stop
- Restaurar el backup más reciente: sudo gitlab-rake gitlab:backup:restore BACKUP=
- Reconfigurar y reiniciar: sudo gitlab-ctl reconfigure && sudo gitlab-ctl start
Incidente de certificado caducado:
- Ejecutar certbot renew –dry-run para comprobar; si renueva correctamente reinicia los servicios: sudo gitlab-ctl restart nginx
Role-based checklists
Administrador del sistema (Ops):
- Verificar requisitos mínimos de memoria y disco
- Configurar DNS y firewall
- Automatizar backups y renovación de certificados
- Monitorizar logs y servicios
Administrador de GitLab (Admin):
- Crear grupos y proyectos base
- Definir políticas de acceso y límites
- Revisar y aprovisionar cuentas administradoras
Desarrollador:
- Añadir clave SSH al perfil
- Configurar git local con usuario y correo
- Probar clonación y push al repositorio
Mini metodología de despliegue (playbook)
- Preparación: DNS, recursos, seguridad básica
- Instalación base: dependencias y GitLab omnibus
- Configuración TLS: Let’s Encrypt + DHPARAM
- Reconfiguración: gitlab-ctl reconfigure
- Pruebas funcionales: login, crear proyecto, push
- Handover: documentar credenciales y procedimientos de backup
Pruebas y casos de aceptación
Prueba 1: Acceso HTTPS
- PASOS: Abrir https://gitlab.tudominio en navegador
- CRITERIOS: Página carga con certificado válido
Prueba 2: Push por HTTPS
- PASOS: Clonar repo, modificar README, push
- CRITERIOS: Cambios aparecen en la interfaz web
Prueba 3: Push por SSH
- PASOS: Añadir clave SSH, clonar con SSH, push
- CRITERIOS: Push exitoso sin pedir contraseña
Compatibilidad y migración
- Si migras desde otra versión de GitLab o desde otro servidor, utiliza las herramientas de backup/restore y revisa las notas de la versión.
- Ten en cuenta que Ubuntu 16.04 puede requerir paquetes legacy; considera migrar a Ubuntu 18.04/20.04 para soporte a largo plazo.
Notas de privacidad y cumplimiento
- GitLab almacena código y metadatos de usuarios. Si tratas datos personales, documenta el flujo de datos y aplica políticas de retención.
- Para GDPR: asegúrate de saber dónde se alojan backups y acceso a los datos, y provee procesos para eliminación/anonimización a petición.
Preguntas frecuentes
¿Necesito un dominio para instalar GitLab?
No estrictamente, puedes usar la IP del servidor, pero un dominio público facilita certificados HTTPS y uso por parte de equipos remotos.
¿Puedo usar certificados comerciales en lugar de Let’s Encrypt?
Sí. Apunta nginx[‘ssl_certificate’] y nginx[‘ssl_certificate_key’] a los archivos del certificado comercial.
¿Cómo automatizo la renovación de Let’s Encrypt?
Usa cron o systemd timers para ejecutar certbot renew periódicamente y, si cambian los archivos, ejecuta sudo gitlab-ctl reconfigure o reinicia nginx.
¿Qué hacer si gitlab-ctl reconfigure falla?
Revisa la salida de la orden y los logs: sudo gitlab-ctl tail. Corrige el archivo /etc/gitlab/gitlab.rb y vuelve a intentar.
Resumen final
Has instalado y configurado GitLab CE en Ubuntu 16.04 usando el paquete omnibus, habilitado HTTPS con certificados Let’s Encrypt, generado DHPARAM, configurado UFW y realizado pruebas básicas como creación de proyecto y push. Sigue las buenas prácticas de respaldo y seguridad para mantener la plataforma estable y segura.
Referencias rápidas
Materiales similares
Podman en Debian 11: instalación y uso
Apt-pinning en Debian: guía práctica
OptiScaler: inyectar FSR 4 en casi cualquier juego
Dansguardian + Squid NTLM en Debian Etch
Arreglar error de instalación Android en SD