Autonomía digital y tecnológica

Código e ideas para una internet distribuida

Gitlab en Apache2 con conexión segura sobre HTTPS usando reverse_proxy

Imago voragine.net
[actualizado el ]

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:

&lt;VirtualHost <ip>:80&gt;
  ServerName gitlab.example.com
  DocumentRoot /var/www/gitlab.example.com

  &lt;Directory "/var/www/gitlab.example.com/.well-known"&gt;
    Options FollowSymLinks
    AllowOverride Limit FileInfo AuthConfig
    Order allow,deny
    Allow from all
  &lt;/Directory&gt;

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/&lt;certname&gt;.crt"
nginx['ssl_certificate_key'] = "/etc/ssl/localcerts/&lt;keyname&gt;.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.

Dejar un comentario

No hay comentarios en esta entrada.
*
*

 

No hay trackbacks