Explico en esta entrada cómo instalar Gitlab usando el paquete Omnibus, que es la manera más fácil de poner en marcha una instancia y mantenerla actualizada. Luego explico cómo configurar la conexión segura HTTPS usando un certificado Let’s Encrypt. En mi caso la instalación se hace en un servidor Debian en el que hay más servicios funcionando bajo un servidor web Apache2. Así que configuro un proxy inverso para la conexión segura ya que el puerto 443 está siendo usando por Apache2.
Si no se está familiarizado con la generación de certificados TLS de Let’s Encrypt usando certbot, es aconsejable leer antes este otro artículo.
Preparación del virtual host de Apache2
Antes de proceder a la instalación, hay que configurar un virtual host en el servidor Apache2. Basta habilitar el virtual host para que sea accesible desde el dominio que vamos a usar, y así poder expedir el certificado Let’s Encrypt:
<VirtualHost <ip>:80> ServerName gitlab.example.com DocumentRoot /var/www/gitlab.example.com <Directory "/var/www/gitlab.example.com/.well-known"> Options FollowSymLinks AllowOverride Limit FileInfo AuthConfig Order allow,deny Allow from all </Directory>
La parte que hace referencia al directorio .well-known
me resulta necesaria para que certbot no dé error al generar el certificado. Yo he necesitado también crear el subdirectorio acme-challenge
, darle los permisos correctos y asegurarse de que el usuario del servidor web tiene acceso de lectura y escritura. Asumiendo que el usuario del servidor web es www-data, sería algo así:
root@servidor:~# mkdir /var/www/gitlab.example.com/.well-known root@servidor:~# mkdir /var/www/gitlab.example.com/.well-known/acme-challenge root@servidor:~# chown -R www-data.www-data /var/www/gitlab.example.com/.well-known
Instalación de Gitlab
No entro en detalles sobre cómo instalar Gitlab usando el paquete Omnibus ya que está bien documentado en la documentación oficial de Gitlab. Desde la página de Gitlab se pueden consultar los pasos a seguir en distintas distribuciones, en mi caso Debian.
Es un proceso sencillo: hay que añadir el repositorio al listado de fuentes de apt y luego ejecutar el instalador.
Primero se instalan algunos paquetes necesarios:
root@servidor:~# apt-get update root@servidor:~# apt-get install -y curl openssh-server ca-certificates
Se añade el repositorio de Gitlab al sistema:
root@servidor:~# curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | bash
Se instala el paquete Gitlab, de momento configurándolo con conexión no segura HTTP:
root@servidor:~# EXTERNAL_URL="http://gitlab.example.com" apt-get install gitlab-ee
En este momento Gitlab ya debería estar disponible en su versión no segura en la url que hayamos elegido con la variable EXTERNAL_URL
. Vamos ahora con la conexión TLS.
Configuración del proxy inverso de Apache
Como explica Oliver Smith, hay que modificar el archivo de configuración del virtual host de la siguiente manera:
<VirtualHost <ip>:443> ServerName gitlab.example.com SSLEngine on SSLCertificateFile /etc/ssl/localcerts/<certname>.crt SSLCertificateKeyFile /etc/ssl/localcerts/<keyname>.key <Proxy *> Order deny,allow Allow from all </Proxy> SSLProxyEngine on ProxyRequests Off ProxyPass / https://gitlab.example.com:4443/ ProxyPassReverse / https://gitlab.example.com/ Header edit Location ^http://gitlab.example.com/ https://gitlab.example.com/ RequestHeader set X-Forwarded-Proto "https" </VirtualHost>
Activación de HTTPS en Gitlab
La configuración principal de Gitlab se encuentra en el archivo /etc/gitlab/gitlab.rb
. En él hay que modificar las siguientes líneas:
external_url 'https://gitlab.example.com:4443' nginx['ssl_certificate'] = "/etc/ssl/localcerts/<certname>.crt" nginx['ssl_certificate_key'] = "/etc/ssl/localcerts/<keyname>.key"
Una vez hechos los cambios, se puede comprobar la nueva configuración:
root@servidor:~# gitlab-ctl show-config
Y por último reiniciamos Gitlab:
root@servidor:~# gitlab-ctl restart
Mantenimiento básico de gitlab
El comando gitlab-ctl
permite también reiniciar componentes de manera individual. Por ejemplo para reiniciar Nginx:
root@servidor:~# gitlab-ctl restart nginx
Para comprobar el estado de los servicios:
root@servidor:~# gitlab-ctl status
Y para reconfigurar Omnibus:
root@servidor:~# gitlab-ctl reconfigure
Los logs de gitlab se pueden consultar en /var/log/gitlab
. Están desglosados por servicios.