Instalación de GitLab autoalojado en un VPS: SSL, copias de seguridad, actualizaciones
TL;DR
En esta guía detallada, configuraremos paso a paso una instancia de GitLab autoalojada en un servidor privado virtual (VPS), asegurando su funcionamiento seguro con SSL/TLS, copias de seguridad automáticas y su preparación para futuras actualizaciones. Aprenderá a elegir un VPS adecuado, preparar el sistema operativo Ubuntu 24.04 LTS, instalar GitLab Omnibus, configurar HTTPS con Let's Encrypt e implementar una estrategia de copias de seguridad para que su repositorio de código y sus pipelines de CI/CD estén siempre disponibles y protegidos.
- Configuración de un GitLab autoalojado seguro y de alto rendimiento en Ubuntu 24.04 LTS.
- Integración de HTTPS mediante Certbot y Let's Encrypt para cifrar el tráfico.
- Implementación de copias de seguridad automáticas de datos de GitLab para minimizar riesgos.
- Aplicación de las mejores prácticas para el mantenimiento y la actualización del sistema.
- Elección de la configuración óptima de VPS o servidor dedicado para sus necesidades.
¿Qué configuramos y por qué?
En esta guía, nos ocuparemos de la instalación y configuración de GitLab, una potente plataforma para la gestión del ciclo de vida del desarrollo de software. GitLab ofrece un conjunto completo de herramientas, que incluyen gestión de repositorios Git, seguimiento de tareas, CI/CD (integración continua y entrega continua), monitoreo, seguridad y mucho más. Nuestro objetivo es desplegar una versión autoalojada de GitLab en un servidor privado virtual (VPS), lo que le dará control total sobre sus datos, seguridad y configuración.
Al final, obtendrá una instancia de GitLab completamente funcional, accesible por nombre de dominio a través de una conexión HTTPS segura. Estará listo para ser utilizado por su equipo para alojar código, gestionar proyectos y automatizar procesos de desarrollo. Es una solución ideal para desarrolladores, startups y equipos pequeños que requieren flexibilidad y privacidad no disponibles en soluciones de nube públicas.
Alternativas y elección de autoalojado:
- Cloud-managed GitLab (GitLab.com): Es la forma más sencilla de empezar, ya que GitLab se encarga de toda la infraestructura, actualizaciones y copias de seguridad. Sin embargo, está limitado por los planes de precios, no tiene control total sobre los datos (se almacenan en los servidores de GitLab) y la personalización puede ser limitada. Para proyectos con altos requisitos de seguridad o regulaciones específicas, esto puede ser inaceptable.
- Self-hosted GitLab en un VPS: Esta opción le brinda el máximo control. Usted mismo elige el servidor, el sistema operativo, configura todos los componentes y es responsable de la seguridad y el mantenimiento. Esto requiere conocimientos técnicos, pero le permite adaptar GitLab a cualquier necesidad, integrarlo con su infraestructura interna y garantizar la privacidad total de sus datos. Esto es especialmente relevante si trabaja con información sensible o desea tener control total sobre su cadena de suministro de software.
La elección de GitLab autoalojado en un VPS se debe al deseo de soberanía de los datos, la posibilidad de una profunda integración con otros servicios internos y la optimización de costes a largo plazo en comparación con los gastos crecientes de los servicios en la nube al escalar.
¿Qué configuración de VPS se necesita para esta tarea?
GitLab es una aplicación bastante intensiva en recursos, especialmente si planea usar CI/CD activamente y alojar muchos repositorios. La elección correcta de la configuración del VPS es crucial para garantizar un funcionamiento estable y rápido.
Requisitos mínimos para un usuario o un equipo pequeño (hasta 5 personas):
- Procesador (CPU): 2 núcleos (vCPU) con una frecuencia de 2.5 GHz o superior.
- Memoria RAM: 4 GB. GitLab es muy exigente con la memoria RAM, y 4 GB es el mínimo absoluto para que el sistema funcione sin intercambios constantes. Para un funcionamiento cómodo, se recomiendan 8 GB.
- Disco: 50 GB SSD. Las unidades SSD aceleran significativamente las operaciones de entrada/salida, lo cual es crítico para las bases de datos y el trabajo con repositorios Git. Si se planean muchos repositorios o archivos grandes, se necesitará más espacio.
- Red: Puerto de 100 Mbit/s o 1 Gbit/s con tráfico ilimitado o un volumen suficiente (a partir de 1 TB/mes).
Plan de VPS recomendado para un equipo de hasta 15-20 personas con CI/CD activo:
- Procesador (CPU): 4 núcleos (vCPU) con una frecuencia de 2.8 GHz o superior.
- Memoria RAM: 8 GB o 16 GB. Esto garantizará el funcionamiento estable de todos los componentes de GitLab, incluyendo PostgreSQL, Redis y Gitaly, y permitirá ejecutar múltiples pipelines de CI/CD simultáneamente.
- Disco: 100-200 GB NVMe SSD. NVMe ofrece una velocidad de lectura/escritura aún mayor, lo que acelerará notablemente el trabajo con grandes repositorios y proyectos.
- Red: Puerto de 1 Gbit/s con tráfico ilimitado.
Para alquilar un VPS con las características indicadas, por ejemplo, 4 vCPU, 8-16 GB RAM, 100-200 GB NVMe SSD, se pueden considerar las ofertas de los proveedores. Una opción adecuada se puede encontrar aquí: VPS con las características indicadas.
¿Cuándo se necesita un servidor dedicado y no un VPS?
Un servidor dedicado se vuelve necesario si:
- Equipo grande (más de 50 usuarios): GitLab con un gran número de usuarios activos y tareas de CI/CD puede consumir recursos significativos.
- Altos requisitos de rendimiento: Para pipelines de CI/CD muy activos, grandes monorepositorios o cargas de trabajo específicas.
- Requisitos específicos de seguridad/aislamiento: Si necesita un aislamiento completo de otros clientes del proveedor, un servidor dedicado lo proporciona.
- Necesidad de hardware personalizado: Para tareas específicas (por ejemplo, GPU para aprendizaje automático en CI/CD) puede requerirse el control directo del hardware.
Si se encuentra con tales necesidades, considere la posibilidad de adquirir un servidor dedicado.
Ubicación: ¿en qué influye?
La elección de la ubicación geográfica del servidor VPS influye en varios aspectos clave:
- Latencia: Cuanto más cerca esté el servidor de su equipo y usuarios finales, menor será la latencia. Esto es crítico para un trabajo cómodo con Git, la carga rápida de la interfaz web y la ejecución de tareas de CI/CD.
- Legislación: La ubicación del servidor determina la legislación de datos aplicable. Esto es importante para cumplir con normativas como GDPR, HIPAA o leyes locales de almacenamiento de datos.
- Costo: Los precios de los VPS pueden variar según la región.
Se recomienda elegir una ubicación lo más cercana posible a la parte principal de su equipo de desarrolladores.
Preparación del servidor
Antes de proceder con la instalación de GitLab, es necesario realizar una configuración básica del sistema operativo. Utilizaremos Ubuntu Server 24.04 LTS, ya que es la versión de soporte a largo plazo actual, compatible hasta 2029.
1. Conexión por SSH y creación de un nuevo usuario
Después de obtener los datos de acceso al VPS (normalmente la dirección IP, el usuario root y la contraseña), conéctese al servidor:
ssh root@ВАШ_IP_АДРЕС
Cree un nuevo usuario con permisos sudo para el trabajo diario. Reemplace ваш_пользователь con el nombre deseado:
# Добавление нового пользователя
adduser ваш_пользователь
# Добавление пользователя в группу sudo
usermod -aG sudo ваш_пользователь
Ahora salga de la sesión root e inicie sesión con el nuevo usuario:
exit
ssh ваш_пользователь@ВАШ_IP_АДРЕС
2. Configuración de claves SSH (recomendado)
Para mejorar la seguridad, se recomienda usar claves SSH en lugar de contraseñas. Si aún no tiene claves, genérelas en su máquina local:
# На вашей локальной машине
ssh-keygen -t rsa -b 4096 -C "ваша_почта@example.com"
Luego, copie la clave pública al servidor:
# На вашей локальной машине
ssh-copy-id ваш_пользователь@ВАШ_IP_АДРЕС
Después de esto, puede deshabilitar la autenticación por contraseña para root en el archivo /etc/ssh/sshd_config. Busque las líneas:
# PermitRootLogin prohibit-password
# PasswordAuthentication yes
Y cámbielas a:
PermitRootLogin no
PasswordAuthentication no
Reinicie el servicio SSH:
# На сервере, под вашим_пользователем
sudo systemctl restart sshd
3. Actualización del sistema e instalación de utilidades básicas
Asegúrese de que el sistema esté actualizado y que los paquetes necesarios estén instalados:
# Обновление списка пакетов
sudo apt update
# Обновление всех установленных пакетов
sudo apt upgrade -y
# Установка необходимых утилит
sudo apt install -y curl wget gnupg2 ca-certificates apt-transport-https htop git unattended-upgrades
Unattended Upgrades: Este paquete instala automáticamente actualizaciones de seguridad críticas, lo cual es extremadamente importante para mantener el servidor actualizado y protegido.
4. Configuración del firewall (UFW)
Configuraremos un firewall UFW (Uncomplicated Firewall) básico para proteger el servidor. Por defecto, solo permitiremos SSH, HTTP, HTTPS:
# Разрешить SSH (по умолчанию порт 22)
sudo ufw allow ssh
# Разрешить HTTP (порт 80)
sudo ufw allow http
# Разрешить HTTPS (порт 443)
sudo ufw allow https
# Включить файрвол
sudo ufw enable
Confirme la activación del firewall presionando y. Puede verificar el estado con el comando sudo ufw status.
5. Instalación de Fail2ban (protección contra ataques de fuerza bruta)
Fail2ban escanea los registros y bloquea automáticamente las direcciones IP que muestran signos de actividad maliciosa (por ejemplo, múltiples intentos fallidos de inicio de sesión SSH).
# Установка Fail2ban
sudo apt install -y fail2ban
# Запуск и включение автозапуска Fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Cree un archivo de configuración para Fail2ban para que no se sobrescriba durante las actualizaciones:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Abra /etc/fail2ban/jail.local y configure, por ejemplo, bantime (tiempo de bloqueo) y findtime (período para detectar intentos) según sus necesidades. Asegúrese de que la sección [sshd] esté habilitada (enabled = true).
# Пример настройки в /etc/fail2ban/jail.local
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Reinicie Fail2ban para aplicar los cambios:
sudo systemctl restart fail2ban
Ahora su servidor está listo para la instalación de GitLab.
Instalación de software — paso a paso
Instalaremos GitLab Community Edition (CE) utilizando el paquete Omnibus, que incluye todos los componentes necesarios (NGINX, PostgreSQL, Redis, etc.) y simplifica significativamente el proceso de instalación y mantenimiento. Para el año 2026, nos enfocaremos en la versión 20.x de GitLab, que será la actual en ese momento.
Antes de la instalación, asegúrese de tener un nombre de dominio que apunte a la dirección IP de su VPS. Por ejemplo, gitlab.yourdomain.com.
1. Instalación de dependencias
Para añadir el repositorio de GitLab se requieren varios paquetes:
# Instalación de los paquetes necesarios para añadir el repositorio de GitLab
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gnupg2
2. Adición del repositorio de GitLab
Importaremos la clave GPG de GitLab y añadiremos el repositorio oficial de paquetes Omnibus:
# Adición de la clave GPG de GitLab
curl https://packages.gitlab.com/gpg.key | sudo gpg --dearmor > /usr/share/keyrings/gitlab-archive-keyring.gpg
# Adición del repositorio de GitLab CE para Ubuntu 24.04 (Noble Numbat)
echo "deb [signed-by=/usr/share/keyrings/gitlab-archive-keyring.gpg] https://packages.gitlab.com/gitlab/gitlab-ce/ubuntu noble main" | sudo tee /etc/apt/sources.list.d/gitlab-ce.list
Actualice la lista de paquetes después de añadir el nuevo repositorio:
# Actualización de la lista de paquetes
sudo apt update
3. Instalación de GitLab Community Edition
Ahora podemos instalar GitLab. En el comando de instalación, especificaremos la URL externa que GitLab utilizará para generar enlaces y configurar NGINX. Reemplace gitlab.yourdomain.com con su dominio.
# Instalación de GitLab CE especificando la URL externa
sudo EXTERNAL_URL="https://gitlab.yourdomain.com" apt install gitlab-ce
Este comando instalará la última versión estable de GitLab CE disponible en el repositorio. El proceso puede tardar un tiempo, ya que se descargarán e instalarán muchos componentes.
4. Configuración inicial y reconfiguración
Después de la instalación, GitLab iniciará automáticamente el proceso de reconfiguración, que configurará todos los componentes. Si no especificó EXTERNAL_URL durante la instalación o desea cambiar alguna configuración, puede hacerlo en el archivo /etc/gitlab/gitlab.rb.
Si necesita reconfigurar GitLab manualmente (por ejemplo, después de modificar gitlab.rb):
# Inicio del proceso de reconfiguración de GitLab
sudo gitlab-ctl reconfigure
Este comando releerá el archivo gitlab.rb y aplicará todos los cambios, además de asegurarse de que todos los servicios de GitLab estén en ejecución y configurados correctamente.
5. Verificación del estado de los servicios de GitLab
Asegúrese de que todos los componentes de GitLab estén en ejecución y funcionando correctamente:
# Verificación del estado de todos los servicios de GitLab
sudo gitlab-ctl status
Debería ver una lista de servicios (nginx, postgresql, redis, unicorn, sidekiq, gitaly, etc.) con el estado run.
6. Establecimiento de la contraseña para el usuario root de GitLab
En la primera instalación, GitLab genera una contraseña temporal para el usuario root. Puede encontrarla en el archivo /etc/gitlab/initial_root_password, que existe solo durante 24 horas después de la instalación.
# Visualización de la contraseña temporal de root
sudo cat /etc/gitlab/initial_root_password
Se recomienda establecer inmediatamente una nueva contraseña segura a través de la interfaz web o la consola de Rails:
# Inicio de la consola de GitLab Rails
sudo gitlab-rails console
# Dentro de la consola de Rails
user = User.where(id: 1).first
user.password = 'SU_NUEVA_CONTRASEÑA_SEGURA'
user.password_confirmation = 'SU_NUEVA_CONTRASEÑA_SEGURA'
user.save!
# Salir de la consola
exit
Ahora puede acceder a la interfaz web de GitLab en https://gitlab.yourdomain.com, utilizando el login root y su nueva contraseña.