Instalación de GitLab con HTTPS

2
6459

Índice de contenidos


1. Entorno

Este tutorial está escrito usando el siguiente entorno:

  • Hardware: Slimbook Pro 2 13.3″ (Intel Core i7, 32GB RAM)
  • Sistema Operativo: LUbuntu 18.04
  • GitLab CE 11.1.4


2. Introducción

Si hay una herramienta dentro del mundo DevOps que merece la pena conocer en profundidad sin duda alguna es GitLab. Incluso es su versión Community (gratuita para proyectos comerciales que tengan su propio servidor) cubre todos los aspectos del desarrollo desde la definición de historias en un Kanban (Scrum en la versión Enterprise) hasta su puesta en producción en Kubernetes, pasando por la definición de Pipelines como vimos en este tutorial

Por esta razón cada vez es más común encontrarse con esta herramienta en los clientes, pero donde muchas veces solo la utilizan de repositorio de Git sin sacarle el máximo partido que tiene.

En este tutorial vamos a ver cómo instalar la versión Community y tener acceso HTTPS de una forma muy sencilla y automática.

Nota importante: para seguir este tutorial es imprescindible un nombre de dominio real asociado a una máquina que esté publica en Internet.


3. Vamos al lío

Partiendo de que tenemos acceso con los permisos necesarios a una máquina con Ubuntu Xenial (16.04) instalado, estos son los pasos que tenemos que seguir.

Lo primero nos vamos a asegurar de tener todas las dependencias necesarias, para ello ejecutamos:

$> sudo apt-get update
$> sudo apt-get install ca-certificates curl openssh-server postfix gnupg apt-transport-https

Descargamos e instalamos el GPG (GNU Privacy Guard) Key

$> curl -L https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey | sudo apt-key add -

Refrescamos los paquetes

$> sudo apt-get update

Y ya estamos en disposición de instalar el paquete de GitLab:

$> sudo apt-get install gitlab-ce

La instalación cubre de forma automática todos los elementos necesarios para instalar y desplegar la aplicación; pero hay una serie de configuraciones que tenemos que realizar.

Antes de nada tenemos que asegurarnos de que nuestra máquina tiene habilitados los puertos 80 y 443.

Todos los cambios de configuración de GitLab se realizan en el fichero /etc/gitlab/gitlab.rb el cual podemos abrir para editar con el comando:

$> sudo nano /etc/gitlab/gitlab.rb

El primer cambio que tenemos que realizar en este fichero es la propiedad external_url que es la que va a utilizar para poder conectar con la herramienta a través del navegador. En este caso como queremos que sea a través de HTTPS en el dominio definido tenemos que poner:

external_url 'https://tudominio.org'

Ahora viene lo mejor, todos sabemos lo tedioso que es el tema de los certificados en el protocolo HTTPS, pues bien GitLab lo ha simplificado a modificar unas propiedades en este fichero.

Habilitar que vamos a hacer uso de Let’s Encrypt, que para quien no lo conozca es un organismo certificador que ofrece certificados válidos gratuitos con el fin de facilitar la seguridad en las gestiones de Internet. Simplemente tenemos que buscar la siguiente propiedad y ponerla a true.

letsencrypt['enable'] = true

Es buena idea rellenar la propiedad contact_emails con los emails que Let’s Encrypt va a utilizar para comunicar eventos con el certificado.

letsencrypt['contact_emails'] = ['tuusuario@tudominio.com']

Para no tener problemas con la validación del dominio en Let’s Encrypt, el dominio tiene que ser real y válido, y hay que hacer las siguientes modificaciones en el fichero.

nginx['redirect_http_to_https_port'] = 80
nginx['redirect_http_to_https'] = true
nginx['custom_nginx_config'] = "include /var/opt/gitlab/nginx/conf/custom/*.conf;"

Hechas estas modificaciones, salvamos el fichero y ejecutamos el comando:

$> sudo gitlab-ctl reconfigure

Si nos fijamos en el log que saca por consola debemos ver la conexión con Let’s Encrypt para la descarga de los certificados que almacena en la ruta /etc/gitlab/ssl junto con el nombre de nuestro dominio.

Dos son los errores que nos podemos encontrar en este punto. El primero relativo a la validación del dominio por parte de Let’s Encrypt, donde te tendrás que asegurar de que tu dominio es válido y público en Internet (cuidado con los tiempos de propagación de DNS) y el segundo relativo al timeout de nginx; donde para resolverlo simplemente tienes que volver a comentar la línea: nginx[‘custom_nginx_config’] = «include /var/opt/gitlab/nginx/conf/custom/*.conf;»

Si todo es correcto ya tendremos nuestra instancia de GitLab a través de HTTPS. Una cosa que tienes que tener en cuenta es que los certificados de Let’s Encrypt solo durán 90 días, para resolver este problema de forma automática puedes crear el siguiente fichero:

$> sudo nano /etc/cron.daily/gitlab-le

Con el siguiente contenido:

#!/bin/bash
set -e
/usr/bin/gitlab-ctl renew-le-certs > /dev/null

Y darle los permisos de ejecución necesarios.

$> sudo chmod +x /etc/cron.daily/gitlab-le

Hecho esto y si todo es correcto ya podrás conectar con GitLab a través del dominio que le hayas dado vía HTTPS.

Una vez dentro como administrador es buena idea deshabilitar el registro público. Esto se hace desde la sección «Admin Area» en la opciones de la izquierda «Settings» y en la sección «Sign-up settings» desmarcar la opción «Enable Sign-up».


4. Conclusiones

Como ves GitLab no nos lo puede poner más fácil para aumentar la seguridad de los accesos a la herramienta a través de HTTPS.

Cualquier duda o sugerencia en la zona de comentarios.

Saludos.

2 COMENTARIOS

  1. Buenos días

    ESoy José Manuel y tengo un gitlab en local y un jenkins en local, estoy intentando conectar el jenkins con el gitlab pero no hay manera, sería hacer una integración o que jenkins pudiera clonar el repositorio de un proyecto que esté en gitlab y que después lo compile le haga test y el artefacto creado lo copie a Nexus y lo despliegue en wildfly (pero ese es otro telar).
    ¿Me podría ayudar con la conexión a gitlab en local del jenkins local y que simplemente se conecte y ejecute el pipeline?

    Un saludo.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad