Cómo instalar Gitlab Server con Docker en Ubuntu 18.04 LTS

Gitlab CE o Community Edition es una aplicación de código abierto utilizada para alojar tus repositorios Git. Alojar tú mismo tus repositorios Git te da un control total sobre tus datos, a la vez que te proporciona una interfaz fácil de usar para ti y los miembros de tu equipo.

En esta guía, veremos cómo instalar tu repositorio Git utilizando la oferta gratuita de Gitlab, la Edición Comunidad. Si quieres funciones avanzadas como aprobaciones de fusiones, hojas de ruta, gestión de carteras, recuperación de desastres, escaneo de contenedores, etc., entonces puedes optar por actualizar a la Edición Enterprise.

Requisitos previos

  • Un servidor basado en Ubuntu 18.04 con un usuario sudo no root.
  • Necesitas un VPS con un mínimo de 2 núcleos de CPU y 8 GB de RAM de acuerdo con los requisitos de hardware especificados para Gitlab CE que admita 100 usuarios. Aunque puedes sustituir la RAM por espacio swap, no es recomendable ya que la aplicación funcionará más lentamente.

Paso 1 – Instalación de dependencias

Antes de instalar Gitlab, tenemos que asegurarnos de que nuestro servidor tiene cierto software que Gitlab necesitará para funcionar correctamente. Ejecuta los siguientes comandos para instalar las dependencias.

$ sudo apt update
$ sudo apt install ca-certificates curl openssh-server ufw apt-transport-https -y

Algunos de los programas anteriores pueden estar preinstalados para ti.

Paso 2 – Cambia el puerto SSH de tu sistema

Gitlab utilizará el puerto 22 para enviar repositorios a través de SSH. El SSH de tu servidor también se ejecuta en él, lo que generará un conflicto. Hay dos formas de hacerlo. O bien puedes cambiar el puerto SSH que utilizas para conectarte a tu sistema, o bien puedes cambiar el puerto que Gitlab utilizará para SSH. En este tutorial, vamos a cambiar el puerto SSH para el propio servidor.

Para ello, necesitamos editar el archivo /etc/ssh/sshd_config. Abre el archivo en el editor de texto nano.

$ sudo nano /etc/ssh/sshd_config

Busca la siguiente línea y cambia 22 por 6622 y elimina el # que hay delante. Puedes elegir el puerto que quieras.

# Port 22

Pulsa Ctrl + X para cerrar el archivo y pulsa Y para guardar los cambios.

Reinicia el servicio SSH.

$ sudo systemctl restart sshd

Cierra tu sesión SSH actual y crea una nueva con el puerto 6622 y conéctate de nuevo a tu servidor.

$ ssh [email protected] -p 6622

Paso 3 – Configurar el Cortafuegos

En nuestro paso anterior, instalamos, ufw (Uncomplicated Firewall). Antes de proceder a instalar Gitlab, necesitamos configurarlo.

Habilita SSH y el puerto que acabamos de crear para que no se nos bloquee.

$ sudo ufw allow OpenSSH
$ sudo ufw allow 6622

Habilita el cortafuegos ufw.

$ sudo ufw enable

También necesitamos habilitar http y https para que Gitlab funcione.

$ sudo ufw allow http
$ sudo ufw allow https

Comprueba el estado del cortafuegos.

$ sudo ufw status

Deberías ver una salida como la siguiente.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
6622                       ALLOW       Anywhere                  
80/tcp                     ALLOW       Anywhere                  
443/tcp                    ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
6622 (v6)                  ALLOW       Anywhere (v6)      
80/tcp (v6)                ALLOW       Anywhere (v6)             
443/tcp (v6)               ALLOW       Anywhere (v6)             

Paso 4 – Instala Docker

Añade la clave GPG de Docker a tu sistema.

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Comprueba la huella digital de la clave descargada.

$ sudo apt-key fingerprint 0EBFCD88

Deberías ver una salida como la siguiente.

pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) <[email protected]>
sub   rsa4096 2017-02-22 [S]

Añade el repositorio de Docker.

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

Actualiza tu base de datos de paquetes.

$ sudo apt update

Instala Docker-CE. CE es la Edición Comunitaria de Docker.

$ sudo apt install docker-ce -y

Docker ya debería estar instalado. Comprueba que se está ejecutando.

$ sudo systemctl status docker

La salida debería ser similar a la siguiente.

? docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2019-10-11 21:10:31 UTC; 32s ago
     Docs: https://docs.docker.com
 Main PID: 19128 (dockerd)
    Tasks: 12
   CGroup: /system.slice/docker.service
           ??19128 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Pulsa q para salir.

Añade tu cuenta de usuario limitado de Linux al grupo docker para que puedas ejecutar docker sin sudo.

sudo usermod -aG docker $USER

La variable$USER elegirá y añadirá el usuario actual conectado al grupo docker. Sustituye $USER por el nombre de usuario real si actualmente no has iniciado sesión con ese usuario.

Cambia al usuario que acabamos de añadir. Aunque ya hayas iniciado sesión, tendrás que volver a cambiar a él para recargar los permisos.

$ su - ${USER}

Comprueba que todo funciona correctamente ejecutando el programa incorporado «Hola Mundo».

$ docker run hello-world

Deberías ver la siguiente salida que te indicará que Docker está instalado y funcionando correctamente.

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete 
Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

Paso 5 – Instalar Docker Compose

Es posible saltarse este paso y continuar, pero tener instalado Docker Compose hará que ejecutar Gitlab sea mucho más fácil, especialmente si quieres hacerlo en más de un servidor.

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

En el momento de escribir este tutorial, 1.24.1 es la versión estable actual de Docker Compose. Puedes consultar la última versión en su página de Github.

Aplica permisos de ejecutable al binario docker compose.

$ sudo chmod +x /usr/local/bin/docker-compose

Añade Finalización de Comandos a Docker Compose.

$ sudo curl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose

Comprueba si la instalación se ha realizado correctamente.

$ docker-compose --version

Se imprimirá la siguiente salida.

docker-compose version 1.24.1, build 4667896b

Paso 6 – Instalar Gitlab

Descarga la imagen Docker de Gitlab desde Dockerhub. Esta imagen contiene todo lo que necesitas para ejecutar Docker: nginx, PostgreSQL, Redis, etc. Ejecuta el siguiente comando para descargar la imagen.

$ docker pull gitlab/gitlab-ee:latest

Aunque este tutorial trata sobre la instalación de la Edición Comunitaria, tomaremos la imagen de la Edición Empresarial de Gitlab. Esto se debe a que la Edición Enterprise se comporta exactamente igual que la Edición Community, a menos que te actualices a ella introduciendo tu licencia. Actualizar una instalación de la Edición Comunidad a la Edición Empresa presenta más complicaciones.

Tardará un poco en descargarse la imagen completa. Cuando termine el trabajo, puedes ejecutar el siguiente comando para comprobar todas las imágenes que hay actualmente en tu sistema.

$ docker images

El resultado debería ser similar al siguiente.

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
gitlab/gitlab-ee    latest              4bacb2356d28        4 days ago          1.87GB
hello-world         latest              fce289e99eb9        9 months ago        1.84kB

Paso 7 – Ejecutar Gitlab

Podemos ejecutar el contenedor Gitlab directamente en este punto suministrando todas las opciones en un único comando, pero eso significaría que cada vez que necesites ejecutar el contenedor, tendrás que suministrar estas variables. Docker Compose facilita este proceso, ya que te permitirá guardar la configuración en un archivo .yml que luego se utilizará para ejecutar y lanzar el contenedor.

Crea un archivo docker-compose.yml.

$ nano docker-compose.yml

Pega el siguiente código.

web:
  image: 'gitlab/gitlab-ee:latest'
  container_name: 'gitlab-howtoforge-tutorial'
  restart: always
  hostname: 'gitlab.example.com'
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      external_url 'https://gitlab.example.com'
      gitlab_rails['smtp_enable'] = true
	  gitlab_rails['smtp_address'] = "smtp.gmail.com"
      gitlab_rails['smtp_port'] = 587
      gitlab_rails['smtp_user_name'] = "[email protected]"
      gitlab_rails['smtp_password'] = "app-password"
      gitlab_rails['smtp_domain'] = "smtp.gmail.com"
      gitlab_rails['smtp_authentication'] = "login"
      gitlab_rails['smtp_enable_starttls_auto'] = true
      gitlab_rails['smtp_tls'] = false
      gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
      # Add any other gitlab.rb configuration here, each on its own line
  ports:
    - '80:80'
    - '443:443'
    - '22:22'
    - '587:587'
  volumes:
    - '/srv/gitlab/config:/etc/gitlab'
    - '/srv/gitlab/logs:/var/log/gitlab'
    - '/srv/gitlab/data:/var/opt/gitlab'

Veamos qué significa cada una de las opciones anteriores.

  • imagen se refiere a la ubicación de la imagen Docker de Gitlab en Dockerhub.
  • nombre_contenedor te permite aplicar una etiqueta a tu contenedor Docker, para utilizarla cuando hagas referencia al contenedor dentro de una red Docker.
  • hostname define el nombre de host interno del contenedor o, en nuestro caso, la URL en la que se instalará tu Gitlab.
  • restart especifica una política de reinicio para el contenedor. Nosotros la hemos establecido en siempre, lo que significa que si un contenedor sale, se reiniciará automáticamente.
  • environment suministra la variable GITLAB_OMNIBUS_CONFIG que te permite introducir cualquier ajuste de configuración de Gitlab. En este caso, suministramos la URL externa que se supone que utiliza Gitlab.
  • volume define los directorios montados en el servidor para almacenar datos persistentes. Los tres volúmenes/directorios almacenan datos de la aplicación, archivos de registro y archivos de configuración. El valor a la izquierda del punto y coma es el directorio local en el servidor, y el valor a la derecha es el directorio dentro del contenedor.
  • publicar indica al contenedor que publique puertos o un rango de puertos en el host. Como Gitlab necesita los puertos 22(SSH), 80(HTTP), 443(HTTPS) y 587(SMPT – MSA), los hemos especificado aquí. Si quieres que Gitlab utilice un puerto no estándar en tu servidor (probablemente porque no está disponible), indicarías primero el puerto del host y luego el del contenedor. Por ejemplo, como tu servidor ya utiliza el puerto SSH(22), puedes decirle a Gitlab que utilice SSH a través de un puerto diferente, digamos 3333. Entonces cambiarías 22:22 en el archivo anterior por 3333:22. También tendrás que añadir la línea gitlab_rails[‘gitlab_shell_ssh_port’] = 3333 en GITLAB_OMNIBUS_CONFIG más arriba.
  • external_url se refiere al dominio donde se instalará tu Gitlab. Hemos elegido https, que nos instalará automáticamente el certificado SSL de Let’s Encrypt.
  • También hemos añadido una configuración adicional para que Gitlab utilice Gmail para enviar correos. Puedes utilizar cualquier servicio de correo SMTP de terceros. Gitlab docs han mantenido una guía detallada sobre cómo configurar varios servicios SM TP con él.

Asegúrate de que estás en el mismo directorio que docker-compose.yml. Ejecuta el siguiente comando para iniciar Gitlab.

$ docker-compose up -d

Verás algo parecido a lo siguiente.

Creating gitlab-howtoforge-tutorial ... done

Pasarán varios minutos antes de que puedas acceder a Gitlab a través del navegador. Puedes obtener más información sobre el proceso de inicio mediante el siguiente comando.

$ docker logs -f gitlab-howtoforge-tutorial

Para salir del proceso de monitorización del registro, pulsa Ctrl + C.

Carga el sitio de Gitlab en tu navegador. Si intentas cargarlo demasiado poco después de iniciar el contenedor, obtendrás el error 502. Si esto ocurre, espera unos minutos más y vuelve a intentarlo.

Si todo va bien, verás la siguiente página en tu navegador.

Inicio de sesión en Gitlab

Paso 8 – Configurar Gitlab

Introduce una contraseña para el Administrador de Gitlab. A continuación se te llevará a la pantalla de inicio de sesión. Utiliza root como nombre de usuario y la contraseña que acabas de elegir para iniciar sesión.

Entra en

Configurar SMTP

Tendremos que habilitar la configuración SMTP antes de

Configurar el perfil de Gitlab

Haz clic en el icono de usuario de la esquina superior derecha para que aparezca el menú desplegable y selecciona configuración.

Configurar SMTP en Gitlab

Accederás a la página de configuración de tu Perfil. Añade aquí tu nombre y correo electrónico. Tendrás que confirmar tu dirección de correo electrónico para que se actualice. Si lo deseas, también puedes añadir aquí más información sobre ti.

Perfil de Gitlab

Haz clic en Actualizar configuración del perfil cuando hayas terminado.

Cambiar el nombre de usuario

A continuación, tenemos que cambiar nuestro nombre de usuario de root a otra cosa, ya que root es un nombre de usuario bastante común de adivinar. Haz clic en Cuenta en la barra lateral izquierda.

Cambiar nombre de usuario

Cambia el usuario por el que quieras mantener. Haz clic en Actualizar nombre de usuario para terminar. También deberías activar aquí la autenticación de dos factores para mayor seguridad.

Restringir las inscripciones públicas

Por defecto, las instalaciones de Gitlab permiten que cualquiera se registre. Si no quieres eso, deberías desactivarlo. Haz clic en el icono con forma de llave inglesa de la barra superior para acceder al área de Administración.

Restringir la inscripción pública

Para ajustar la configuración, haz clic en Configuración en la barra lateral izquierda.

Ajustes

Aquí, desplázate hasta las restricciones de Registro y haz clic en el botón Expandir. Desmarca la casilla Registro activado y haz clic en Guardar cambios cuando hayas terminado.

Restricciones de inscripción

Podrás seguir añadiendo nuevos usuarios a través de la interfaz de administración.

Añadir clave SSH

El último paso es añadir nuestra clave SSH. Si tienes una clave SSH, puedes saltarte el siguiente comando. Si no la tienes, puedes crear una utilizando el siguiente comando.

$ ssh-keygen

Este comando es común a Mac OS, Linux y Git Bash/WSL en Windows. Acepta los valores predeterminados y deja en blanco el campo de la frase de contraseña.

Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): /home/user/.ssh/gitlab
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in gitlab.
Your public key has been saved in gitlab.pub.
The key fingerprint is:
SHA256:6dNGAPyd8JAkHAikYOW2PsFjGlzBBpwy4XQ9RQgVwK8 user@userpc
The key's randomart image is:
+---[RSA 2048]----+
|+*OB=*O=..       |
|B+o+o+oo+        |
|oo.+. ...= .     |
|. + ..  .o+      |
| o *.   S .      |
|  =Eo  . o       |
| . o    o o      |
|    .    o       |
|                 |
+----[SHA256]-----+

Puedes mostrar tu clave pública mediante el siguiente comando

$ cat ~/.ssh/gitlab.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUf64YH7uJimFWVJSy/mgYiLRqBxVB6JJMTxZZ96DwExoINhWVRhQAgMgExBWGpUCpWXhLcNuIM+EfFRtCq+YYyLC+GlHsNdnLgecGgop72p8BEi8UckgCiCSuMrWCMAOFh5NKs2YHpF7bOUjXQRVvGujLuV1UBof7SXQ/za7e3aybNiH3KpA6oWSSmpqnOt8rZT54IjLnVFUSLx7ZxWDVW1bO29mI8NjWwzZGLAtNIkJQEOqVo8nhVkroFHvBTrZnUsmr5oFOWG++LPqED9EUSPTpO8PNnogYT3xsVncBMMAEt0pPE7ATmstQc161SEtqAUa98Qb0RRKqCKcKStOp user@userpc

Vuelve al área de Configuración de tu Perfil y accede a Claves SSH desde la barra lateral.

Configuración del perfil

Pega la clave SSH en la casilla correspondiente y haz clic en Añadir clave para continuar.

Clave SSH

Ahora puedes crear y confirmar en tus repositorios sin tener que proporcionar tus credenciales de Gitlab.

Paso 9 – Crea tu primer proyecto

Cada repositorio en Gitlab pertenece a un proyecto. Un proyecto incluye un repositorio, un gestor de incidencias, solicitudes de fusión, una wiki, canalizaciones de integración continua y entrega continua (CI/CD), y muchas otras características.

Para crear tu primer repositorio, haz clic en Crear un proyecto.

Crear el primer proyecto

Accederás a la página Nuevo proyecto. Introduce el nombre del proyecto. Puedes cambiar el nombre del proyecto por otro diferente. Introduce una descripción del proyecto si quieres y cambia la visibilidad del proyecto como desees. Puedes Inicializar tu repositorio con un archivo README. Cuando hayas terminado, haz clic en Crear proyecto.

Asistente para nuevos proyectos

Accederás a la página de tu repositorio con un único archivo README .md en blanco.

Proyecto de prueba

Ahora que nuestro repositorio está activo, vamos a intentar añadir un registro de cambios desde la línea de comandos.

Introduce los siguientes comandos en tu ordenador para crear un archivo CHANGELOG y enviarlo a tu repositorio. Asegúrate de que tienes Git instalado en tu ordenador.

Clona el repositorio. Puedes clonar utilizando SSH o HTTPS.

Clonar usando SSH.

$ git clone [email protected]:user/howtoforge-test.git

o Clonar usando HTTPS.

$ git clone https://gitlab.example.com/user/howtoforge-test.git

Introduce el resto de comandos para crear y empujar CHANGELOG.

$ cd howtoforge-test
$ touch CHANGELOG  # Or create the file in your editor and enter a project description
$ git add CHANGELOG
$ git commit -m "add Changelog"
$ git push -u origin master

Paso 10 – Gestionar un Contenedor Gitlab

Para ver todos los contenedores en ejecución, ejecuta el siguiente comando.

$ docker-ps

Para detener tu contenedor Gitlab, ejecuta el siguiente comando.

$ docker stop gitlab-howtoforge-tutorial

Para volver a iniciar tu contenedor, utiliza el siguiente comando.

$ docker start gitlab-howtoforge-tutorial

En caso de que quieras eliminar tu contenedor, puedes hacerlo mediante el siguiente comando.

$ docker container rm gitlab-howtoforge-tutorial

Paso 11 – Actualizar Gitlab

Si quieres actualizar Gitlab a la versión más reciente, tienes que detener y eliminar el contenedor existente, extraer la imagen más reciente y luego volver a crear el contenedor.

$ docker stop gitlab-howtoforge-tutorial
$ docker rm gitlab-howtoforge-tutorial
$ docker pull gitlab/gitlab-ee:latest
$ docker-compose up -d

Y antes de que preguntes, tus datos estarán seguros aunque elimines el contenedor.

Con esto concluye nuestro tutorial sobre cómo configurar Gitlab en un servidor Ubuntu 18.04 utilizando Docker. Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...