Cómo instalar Gitlab en Rocky Linux 9

GitLab Server es una versión de código abierto del control de versiones GitLab alojado en la nube que se utiliza para alojar repositorios Git. La ventaja de autoalojar tus repositorios frente al alojamiento en la nube es el control total sobre tu código. Tiene todas las funciones que puedes encontrar en el servicio en la nube, lo que lo convierte en una herramienta útil para tu equipo de desarrollo. También incluye el servicio de chat Mattermost, que permite a tus usuarios hablar entre ellos y compartir revisiones de código.

Esta guía te enseñará a instalar GitLab Server utilizando Docker en un servidor Ubuntu 22.04. GitLab ofrece dos ediciones: la edición gratuita Community y la edición de pago Enterprise. Instalaremos la edición Comunidad. Puedes actualizarla a la edición Enterprise si quieres más funciones.

Requisitos previos

  • Un servidor que ejecute Rocky Linux 9 con al menos 4 GB de RAM y 4 núcleos de CPU para soportar hasta 500 usuarios.
  • Un usuario no root con privilegios sudo.
  • Un nombre de dominio configurado para apuntar al servidor, gitlab.example.com. En función de tus necesidades, también utilizaremos mattermost.example.com, y pages.example.com.
  • Todo actualizado.
    $ sudo dnf update
    
  • Pocos paquetes que necesite tu sistema.
    $ sudo dnf install -y wget nano unzip yum-utils policycoreutils-python-utils
    

    Puede que algunos de estos paquetes ya estén instalados en tu sistema.

Paso 1 – Configurar el cortafuegos

Antes de instalar ningún paquete, el primer paso es configurar el cortafuegos para abrir puertos para HTTP, y HTTPS. Rocky Linux utiliza el cortafuegos Firewalld. Comprueba el estado del cortafuegos.

$ sudo firewall-cmd --state
running

El cortafuegos funciona con diferentes zonas, y la zona pública es la que utilizaremos por defecto. Enumera todos los servicios y puertos activos en el cortafuegos.

$ sudo firewall-cmd --zone=public --list-all

Debería mostrar la siguiente salida.

public
  target: default
  icmp-block-inversion: no
  interfaces: enp1s0
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

Abre los puertos HTTP y HTTPS en el cortafuegos.

$ sudo firewall-cmd --zone=public --add-service=http
$ sudo firewall-cmd --zone=public --add-service=https

Vuelve a comprobar el estado del cortafuegos.

$ sudo firewall-cmd --zone=public --list-all

Deberías ver un resultado similar.

public
  target: default
  icmp-block-inversion: no
  interfaces: enp1s0
  sources: 
  services: cockpit dhcpv6-client http https ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

Haz que todos los cambios sean permanentes y vuelve a cargar el cortafuegos para activar los cambios.

$ sudo firewall-cmd --runtime-to-permanent
$ sudo firewall-cmd --reload

Paso 2 – Instala las dependencias

Antes de instalar GitLab, es importante instalar los paquetes que GitLab necesita para funcionar correctamente. Todos estos paquetes están disponibles en el repositorio de Rocky Linux.

Ejecuta el siguiente comando para instalar las dependencias.

$ sudo dnf install -y curl policycoreutils openssh-server perl

GitLab requiere una solución de correo electrónico que funcione para enviar correos de notificación. Hay dos opciones para ello. Una de ellas es instalar Postfix. Y la segunda es utilizar un servicio SMTP externo. Si quieres optar por Postfix, instálalo con el comando que se indica a continuación.

$ sudo dnf install postfix

Durante la instalación, puede que se te pregunte por el tipo de sitio. Elige Sitio de Internet como opción para proceder y, a continuación, añade el FQDN de tu servidor para mail name y pulsa Intro para continuar. Si ves alguna pantalla adicional, sigue pulsando la tecla Intro para elegir las opciones por defecto.

Necesitarás mucho más para configurar Postfix como servidor SMTP, cuyas instrucciones están fuera del alcance de este artículo. GitLab tiene un artículo sobre la configuración de Postfix que puedes consultar.

Paso 3 – Instalar GitLab

Descarga y ejecuta el script instalador del repositorio de GitLab.

$ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash

Ignora la advertencia sobre la falta del paquete pygpgme, ya que no está disponible en Rocky Linux 9.

GitLab incluye muchos paquetes que facilitan su gestión. Por ejemplo, GitLab incluye el servidor web Nginx y soporte para crear certificados SSL Let’s Encrypt.

Si especificas una URL externa para tu sitio web de GitLab durante la instalación, se configurará automáticamente y se generarán y aplicarán los certificados SSL. También puedes especificar una contraseña de administrador durante la instalación. Si no lo haces, GitLab generará una contraseña temporal que se borrará automáticamente al cabo de un día.

Especificaremos tanto la URL externa como la contraseña de administrador. Ejecuta el siguiente comando para instalar GitLab.

$ sudo GITLAB_ROOT_PASSWORD="<strongpassword>" EXTERNAL_URL="https://gitlab.example.com" dnf install -y gitlab-ee

Elige una contraseña segura para tu instalación. Aquí estamos instalando la edición GitLab Enterprise (gitlab-ee). Si no compras y solicitas la licencia, funcionará igual que su versión gratuita Community Edition. Pero si instalas la edición Community (gitlab-ce), entonces tendrás que instalar de nuevo la edición Enterprise para actualizar. Por tanto, te recomendamos que utilices la edición Enterprise aunque no quieras actualizarte.

Una vez finalizada la instalación, deberías obtener un resultado similar.

Notes:
Default admin account has been configured with following details:
Username: root
Password: You didn't opt-in to print initial root password to STDOUT.

NOTE: Because these credentials might be present in your log files in plain text, it is highly recommended to reset the password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.

gitlab Reconfigured!

       *.                  *.
      ***                 ***
     *****               *****
    .******             *******
    ********            ********
   ,,,,,,,,,***********,,,,,,,,,
  ,,,,,,,,,,,*********,,,,,,,,,,,
  .,,,,,,,,,,,*******,,,,,,,,,,,,
      ,,,,,,,,,*****,,,,,,,,,.
         ,,,,,,,****,,,,,,
            .,,,***,,,,
                ,*,.
  


     _______ __  __          __
    / ____(_) /_/ /   ____ _/ /_
   / / __/ / __/ /   / __ `/ __ \
  / /_/ / / /_/ /___/ /_/ / /_/ /
  \____/_/\__/_____/\__,_/_.___/
  

Thank you for installing GitLab!
GitLab should be available at https://gitlab.example.com

For a comprehensive list of configuration options please see the Omnibus GitLab readme
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md

Help us improve the installation experience, let us know how we did with a 1 minute survey:
https://gitlab.fra1.qualtrics.com/jfe/form/SV_6kVqZANThUQ1bZb?installation=omnibus&release=16-9


  Verifying        : gitlab-ee-16.9.1-ee.0.el9.x86_64                                                                                                                                                           1/1 

Installed:
  gitlab-ee-16.9.1-ee.0.el9.x86_64                                                                                                                                                                                  

Complete!

También puedes instalar una versión concreta de GitLab. Primero, comprueba la lista de versiones disponibles de GitLab.

$ sudo dnf --showduplicates list gitlab-ee*

Deberías obtener una salida similar.

Available Packages
gitlab-ee.x86_64                    16.0.0-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.0.1-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.0.2-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.0.3-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.0.4-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.0.5-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.0.6-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.0.7-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.0.8-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.1.0-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.1.1-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.1.2-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.1.3-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.1.4-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.1.5-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.1.6-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.2.0-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.2.1-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.2.2-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.2.3-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.2.4-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.2.5-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.2.6-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.2.7-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.2.8-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.2.9-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.3.0-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.3.1-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.3.2-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.3.3-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.3.4-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.3.5-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.3.6-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.3.7-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.4.0-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.4.1-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.4.2-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.4.3-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.4.4-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.4.5-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.5.0-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.5.1-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.5.2-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.5.3-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.5.4-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.5.6-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.5.7-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.5.8-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.6.0-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.6.1-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.6.2-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.6.4-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.6.5-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.6.6-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.6.7-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.7.0-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.7.2-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.7.3-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.7.4-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.7.5-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.7.6-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.8.0-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.8.1-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.8.2-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.8.3-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.9.0-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.9.1-ee.0.el9                 gitlab_gitlab-ee

Vamos a instalar la versión 16.7.0.

$ sudo GITLAB_ROOT_PASSWORD="<strongpassword>" EXTERNAL_URL="https://gitlab.example.com" dnf install -y gitlab-ee-16.7.0-ee.0.el9

Comprueba el estado de GitLab y los servicios asociados.

$ sudo gitlab-ctl status

Deberías ver la siguiente salida.

run: alertmanager: (pid 6551) 1013s; run: log: (pid 6306) 1093s
run: crond: (pid 6507) 1018s; run: log: (pid 5663) 1251s
run: gitaly: (pid 6479) 1020s; run: log: (pid 5297) 1419s
run: gitlab-exporter: (pid 6522) 1016s; run: log: (pid 6183) 1118s
run: gitlab-kas: (pid 5553) 1400s; run: log: (pid 5566) 1399s
run: gitlab-workhorse: (pid 6455) 1021s; run: log: (pid 5766) 1233s
run: logrotate: (pid 5181) 1434s; run: log: (pid 5189) 1433s
run: nginx: (pid 6470) 1021s; run: log: (pid 5806) 1227s
run: node-exporter: (pid 6515) 1017s; run: log: (pid 6150) 1124s
run: postgres-exporter: (pid 6563) 1013s; run: log: (pid 6351) 1087s
run: postgresql: (pid 5360) 1411s; run: log: (pid 5385) 1408s
run: prometheus: (pid 6532) 1016s; run: log: (pid 6268) 1100s
run: puma: (pid 5666) 1247s; run: log: (pid 5673) 1246s
run: redis: (pid 5227) 1428s; run: log: (pid 5236) 1427s
run: redis-exporter: (pid 6524) 1016s; run: log: (pid 6233) 1110s
run: registry: (pid 6480) 1020s; run: log: (pid 5956) 1165s
run: sidekiq: (pid 5692) 1241s; run: log: (pid 5700) 1240s

Puedes detener e iniciar GitLab utilizando los siguientes comandos.

$ sudo gitlab-ctl stop
$ sudo gitlab-ctl start

GitLab debería estar funcionando.

También puedes detener e iniciar un servicio individual utilizando los siguientes comandos.

$ sudo gitlab-ctl stop nginx
$ sudo gitlab-ctl start nginx
$ sudo gitlab-ctl restart nginx

Puedes acceder a tu instalación de GitLab visitando https://gitlab.example.com en el navegador. Volveremos a configurar GitLab en pasos posteriores.

Paso 4 – Configurar SSL

GitLab almacena su configuración en el archivo /etc/gitlab/gitlab.rb. Ábrelo para editarlo.

$ sudo nano /etc/gitlab/gitlab.rb

Localiza la sección Let's Encrypt Integration y cambia los valores como se muestra a continuación.

letsencrypt['contact_emails'] = ['[email protected]'] # This should be an array of email addresses to add as contacts
letsencrypt['auto_renew'] = true
letsencrypt['auto_renew_hour'] = "12"
letsencrypt['auto_renew_minute'] = "30"
letsencrypt['auto_renew_day_of_month'] = "*/7"

Esto habilita Let’s Encrypt, establece el correo electrónico para recibir notificaciones de caducidad de SSL y establece que los certificados se renueven automáticamente cada 7º día del mes y cada 12:30 hora del servidor.

Habilitar Directiva DHParam

Genera un certificado de grupo Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/gitlab/ssl/dhparams.pem 4096

Establece la siguiente opción en el archivo.

nginx['ssl_dhparam'] = "/etc/gitlab/ssl/dhparams.pem" # Path to dhparams.pem, eg. /etc/gitlab/ssl/dhparams.pem

Desactivar la Seguridad de Transporte Estricta HTTP (HSTS)

Al activar HTTPS se activa automáticamente el servicio HSTS. A veces puede causar problemas cuando luego no lo necesitas. Para desactivar HSTS configura las siguientes variables.

nginx['hsts_include_subdomains'] = false

Cuando hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Reconfigura GitLab con la nueva configuración.

$ sudo gitlab-ctl reconfigure

Este proceso puede tardar algún tiempo en finalizar. Una vez terminado, puedes acceder a tu instalación de GitLab visitando https://gitlab.example.com en el navegador. Aparecerá la siguiente página de acceso.

Paso 5 – Configurar SMTP

GitLab necesita enviar correos electrónicos de notificación y para ello, necesitamos habilitar la configuración SMTP para ello. Si utilizas Postfix, puedes saltarte este paso. De lo contrario, procedamos.

Abre el archivo de configuración de GitLab para editarlo.

$ sudo nano /etc/gitlab/gitlab.rb

Utilizaremos Amazon SES para nuestro tutorial. Busca la sección SMTP en el archivo y establece los valores como se muestra a continuación.

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "email-smtp.region-1.amazonaws.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "IAMmailerKey"
gitlab_rails['smtp_password'] = "IAMmailerSecret"
gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true

# If your SMTP server does not like the default 'From: gitlab@localhost' you
# can change the 'From' with this setting.
gitlab_rails['gitlab_email_from'] = '[email protected]'
gitlab_rails['gitlab_email_display_name'] = 'Howtoforge GitLab'
gitlab_rails['gitlab_email_reply_to'] = '[email protected]'

Puedes activar la agrupación de conexiones SMTP configurando la siguiente opción.

gitlab_rails['smtp_pool'] = true

Esto permite a los trabajadores de Sidekiq reutilizar las conexiones SMTP para múltiples trabajos.

Cuando hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

También puedes cifrar los datos de autenticación SMTP. Ejecuta el siguiente comando.

sudo gitlab-rake gitlab:smtp:secret:edit EDITOR=nano

Introduce el nombre de usuario y la contraseña SMTP en el archivo como se muestra.

user_name: 'smtp user'
password: 'smtp password'

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Elimina las variables gitlab_rails['smtp_user_name'], and gitlab_rails['smtp_password'] del /etc/gitlab/gitlab.rb.

Una vez que hayas finalizado la configuración SMTP, vuelve a configurar los Ajustes de GitLab.

$ sudo gitlab-ctl reconfigure

Paso 6 – Configurar Nginx

El servidor Nginx incorporado en GitLab puede configurarse ampliamente. Vamos a repasar algunas de las opciones importantes.

Abre el archivo de configuración de GitLab para editarlo.

$ sudo nano /etc/gitlab/gitlab.rb

Redirige HTTP a HTTPS.

Cambia los siguientes valores para redirigir automáticamente los enlaces HTTP a HTTPS.

nginx['redirect_http_to_https'] = true

Configuración de la cabecera Referrer-Policy

Por defecto, GitLab establece la cabecera Referrer-Policy en strict-origin-when-cross-origin en todas las respuestas. Configura la siguiente variable para establecer este encabezado a un valor diferente.

nginx['referrer_policy'] = 'same-origin'

Insertar ajustes personalizados de Nginx en el bloque del servidor de GitLab

Utiliza la siguiente variable para insertar ajustes personalizados en el bloque del servidor de GitLab.

# Example: block raw file downloads from a specific repository
nginx['custom_gitlab_server_config'] = "location ^~ /foo-namespace/bar-project/raw/ {\n deny all;\n}\n"

Insertar ajustes personalizados en la configuración de Nginx

Utiliza la siguiente configuración para insertar ajustes personalizados.

# Example: include a directory to scan for additional config files
nginx['custom_nginx_config'] = "include /etc/gitlab/nginx/sites-enabled/*.conf;"

Crea el directorio /etc/gitlab/nginx/sites-available.

$ sudo mkdir /etc/gitlab/nginx/sites-available

Crea en él el archivo del bloque.

$ sudo touch /etc/gitlab/nginx/sites-enabled/example.conf

Edítalo y añade tus ajustes.

$ sudo nano /etc/gitlab/nginx/sites-enabled/example.conf

Cuando hayas terminado, vuelve al terminal y ejecuta el siguiente comando para crear el directorio /etc/gitlab/nginx/sites-enabled.

$ sudo mkdir /etc/gitlab/nginx/sites-enabled

Ejecuta el siguiente comando para crear un enlace simbólico.

sudo ln -s /etc/gitlab/nginx/sites-available/example.conf /etc/gitlab/nginx/sites-enabled/example.conf 

Cuando hayas terminado de configurar Nginx, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Vuelve a configurar los ajustes de GitLab.

$ sudo gitlab-ctl reconfigure

Paso 7 – Habilitar el Registro de Contenedores

El registro de contenedores se habilita automáticamente y está disponible en tu dominio de GitLab, puerto 5050 si utilizas la integración Let’s Encrypt incorporada.

Abre el archivo de configuración de GitLab.

$ sudo nano /etc/gitlab/gitlab.rb

Establece la URL externa para tu registro de contenedores de GitLab.

registry_external_url 'https://gitlab.example.com:5050'

Establece la redirección HTTP a HTTPS añadiendo la siguiente línea debajo de la anterior.

registry_nginx['redirect_http_to_https'] = true

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Reconfigura la configuración de GitLab.

$ sudo gitlab-ctl reconfigure

Abre el puerto 2425 en el cortafuegos.

$ sudo firewall-cmd --zone=public --add-port=5050/tcp
$ sudo firewall-cmd --runtime-to-permanent
$ sudo firewall-cmd --reload

Valídalo utilizando el siguiente comando.

$ openssl s_client -showcerts -servername gitlab.example.com -connect gitlab.example.com:5050 > cacert.pem

Deberías poder iniciar sesión en el registro de contenedores desde Docker con tus credenciales de GitLab utilizando el siguiente comando.

$ docker login gitlab.example.com:5050

Puedes utilizar una URL diferente como https://registry.gitlab.example.com para tu registro de contenedores, lo que requerirá una configuración adicional. También puedes configurar el almacenamiento S3 para los contenedores. Consulta la documentación del Registro de Contenedores de GitLab para ver las instrucciones.

Paso 8 – Habilitar las Páginas de GitLab

Necesitas tener un dominio que no sea un subdominio de la URL de GitLab. Para nuestros propósitos, utilizaremos https://pages.example.com para alojar las páginas de GitLab. También vamos a suponer que no utilizamos DNS comodín.

Abre el archivo de configuración de GitLab.

$ sudo nano /etc/gitlab/gitlab.rb

Configura las siguientes variables como se muestra.

pages_external_url 'https://pages.example.com'
.....
# Experimental - Enable namespace in path
gitlab_pages["namespace_in_path"] = true

Configura Nginx para las páginas de GitLab en la sección GitLab Pages NGINX.

# Below you can find settings that are exclusive to "GitLab Pages NGINX"
pages_nginx['enable'] = true
pages_nginx['redirect_http_to_https'] = true
pages_nginx['ssl_certificate'] = "/etc/letsencrypt/live/pages.example.com/fullchain.pem"
pages_nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/pages.example.com/privkey.pem"

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Vuelve a configurar los ajustes de GitLab.

$ sudo gitlab-ctl reconfigure

Si quieres alojar un dominio basado en DNS Wildcard, consulta la documentación de GitLab Pages.

Paso 9 – Habilitar MatterMost

Mattermost es un servicio de chat online de código abierto con funciones como compartir archivos, emojis, GIFs, soporte para markdown, resaltado de sintaxis y soporte multilingüe. GitLab incluye MatterMost, que puedes habilitar para que los usuarios de la empresa que compartan la instancia de GitLab puedan comunicarse entre sí.

GitLab Mattermost está desactivado por defecto. Para activarlo, abre el archivo de configuración de GitLab.

$ sudo nano /etc/gitlab/gitlab.rb

Añade la URL externa de Mattermost. GitLab generará automáticamente el SSL para la URL utilizando Let’s Encrypt.

mattermost_external_url 'https://mattermost.example.com'

Asegúrate de que el ajuste de configuración HTTP a HTTPS para Mattermost está establecido en true añadiendo la siguiente línea.

mattermost_nginx['redirect_http_to_https'] = true

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Vuelve a configurar los ajustes de GitLab.

$ sudo gitlab-ctl reconfigure

Deberías poder acceder a Mattermost a través de https://mattermost.example.com. Deberías ver la siguiente página cuando inicies la URL.

Página de inicio de Mattermost GitLab

Si tienes instalada la aplicación Mattermost, selecciona el botón Ver en la aplicación de escritorio o elige la opción Ver en el navegador. Asegúrate de marcar la opción Recordar mis preferencias para que no se te vuelva a preguntar. Volveremos a configurar Mattermost en el siguiente paso.

Configurar SMTP para Mattermost

Mattermost almacena su configuración en el archivo /var/opt/gitlab/mattermost/config.json. Ábrelo para editarlo.

$ sudo nano /var/opt/gitlab/mattermost/config.json

Busca la sección "EmailSettings" y configúrala como se muestra. Los campos FeedbackEmail, ReplyToAddress, EnableSMTPAuth, SMTPUsername, SMTPPassword, SMTPServer, SMTPPort, ConnectionSecurity, y SkipServerCertificateVerification son los que necesitamos configurar para que funcione.

    "EmailSettings": {
        "EnableSignUpWithEmail": true,
        "EnableSignInWithEmail": true,
        "EnableSignInWithUsername": true,
        "SendEmailNotifications": true,
        "UseChannelInEmailNotifications": false,
        "RequireEmailVerification": false,
        "FeedbackName": "Howtoforge Mattermost",
        "FeedbackEmail": "[email protected]",
        "ReplyToAddress": "[email protected]",
        "FeedbackOrganization": "",
        "EnableSMTPAuth": true,
        "SMTPUsername": "AmazonSESUsername",
        "SMTPPassword": "AmazonSESPassword",
        "SMTPServer": "email-smtp.us-west-2.amazonaws.com",
        "SMTPPort": "465",
        "SMTPServerTimeout": 10,
        "ConnectionSecurity": "TLS",
        "SendPushNotifications": true,
        "PushNotificationServer": "https://push-test.mattermost.com",
        "PushNotificationContents": "full",
        "PushNotificationBuffer": 1000,
        "EnableEmailBatching": false,
        "EmailBatchingBufferSize": 256,
        "EmailBatchingInterval": 30,
        "EnablePreviewModeBanner": false,
        "SkipServerCertificateVerification": true,
        "EmailNotificationContentsType": "full",
        "LoginButtonColor": "#0000",
        "LoginButtonBorderColor": "#2389D7",
        "LoginButtonTextColor": "#2389D7"
    },

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Paso 10 – Acceder y configurar GitLab Web

Acceder a GitLab

Abre la URL https://gitlab.example.com en tu navegador y obtendrás la siguiente pantalla de acceso.

Pantalla de inicio de sesión de GitLab EE

Introduce root como nombre de usuario y la contraseña que has obtenido en el paso anterior para acceder a tu panel de control de GitLab. Al iniciar sesión, accederás a la siguiente pantalla del panel de control.

Panel de control de GitLab

Como puedes ver, GitLab ya ha creado un proyecto para monitorizar la instancia.

Apagar GitLab para mantenimiento

Si quieres poner tu instancia de GitLab en mantenimiento mientras realizas tareas de servidor, utiliza el siguiente comando.

$ sudo gitlab-ctl deploy-page up
cp /opt/gitlab/embedded/service/gitlab-rails/public/deploy.html /opt/gitlab/embedded/service/gitlab-rails/public/index.html

Cuando un usuario visite el sitio web de GitLab, aparecerá la página Deploy in progress.

GitLab Deploy en curso Página

Para eliminar la página, ejecuta el siguiente comando.

$ sudo gitlab-ctl deploy-page down

Si quieres que los proyectos sean de sólo lectura, ejecuta el siguiente comando para abrir una consola Rails.

$ sudo gitlab-rails console

Tendrá el siguiente aspecto.

--------------------------------------------------------------------------------
 Ruby:         ruby 3.1.4p223 (2023-03-30 revision 957bb7cb81) [x86_64-linux]
 GitLab:       16.9.2-ee (0d71d32d321) EE
 GitLab Shell: 14.33.0
 PostgreSQL:   14.10
------------------------------------------------------------[ booted in 78.60s ]
Loading production environment (Rails 7.0.8)
irb(main):001:0>

Establece todos los proyectos como de sólo lectura utilizando el siguiente comando.

    Project.all.find_each { |project| project.update!(repository_read_only: true) }

Sal de la consola escribiendo exit. Para revertir los proyectos a un estado normal, utiliza el siguiente comando en la consola.

Project.all.find_each { |project| project.update!(repository_read_only: false) }

Restringir las inscripciones públicas

Por defecto, cualquiera puede crear una cuenta y obtener acceso. Si no lo deseas, puedes desactivarlo. Afortunadamente, la configuración para ello se muestra en forma de pantalla emergente en el panel de control. Haz clic en el botón Desactivar para restringir los registros públicos en tu instancia de GitLab. Al hacerlo, se te redirigirá a la siguiente página de configuración.

Restricciones de registro en GitLab

Desmarca la opción Registro habilitado para restringirlos. Pulsa el botón Guardar cambios para aplicar la configuración.

En caso de que no veas la ventana emergente en tu panel de control, puedes acceder a la página de configuración pulsando el botón Área de administración en el menú inferior izquierdo.

Botón del Área de Administración de GitLab

Una vez dentro del panel de administración, pasa el ratón por encima de la opción Configuración de la barra lateral izquierda y haz clic en el submenú General. Desde ahí podrás acceder al panel de restricciones de registro.

Configuración general del administrador de GitLab

Configurar el perfil de GitLab

Tu perfil por defecto es bastante soso y no tiene nada que mostrar. Para cambiarlo, haz clic en el icono de usuario de la esquina superior izquierda para que aparezca el menú desplegable y selecciona la opción Editar perfil.

Botón Editar perfil de GitLab

Accederás a la página Configuración del perfil, donde podrás añadir tu nombre, correo electrónico y otra información sobre ti. Haz clic en Actualizar configuración del perfil cuando hayas terminado. No vuelvas a la página principal, ya que tenemos algunas cosas más que configurar aquí.

GitLab Editar Página de Perfil

Cambiar la contraseña raíz

Este es uno de los pasos más importantes. Debes cambiar tu contraseña raíz por defecto inmediatamente. En versiones anteriores, GitLab te pedía que la cambiaras como parte de la instalación, pero ahora lo ha hecho opcional. Para cambiar tu contraseña, haz clic en el menú Contraseña de la barra lateral izquierda.

Pantalla de cambio de contraseña de GitLab

Introduce los datos de tu contraseña y haz clic en Guardar contraseña para realizar el cambio. Saldrás de tu instancia y tendrás que volver a iniciar sesión.

Cambiar el nombre de usuario y activar la autenticación de dos factores

Puedes cambiar tu nombre de usuario predeterminado de GitLab de root a cualquier otro de tu elección. Para ello, haz clic en el menú Cuenta de la barra lateral izquierda.

Página de configuración de la cuenta de GitLab

Una vez en la página, introduce tu nuevo nombre de usuario y haz clic en el botón Actualizar nombre de usuario para realizar el cambio. Se te volverá a pedir confirmación. Pulsa de nuevo el botón Actualizar nombre de usuario para confirmar el cambio.

También deberías habilitar aquí la autenticación de dos factores para mejorar la seguridad de tu cuenta.

Desactiva las Métricas de Prometheus y mejora la Privacidad

En el paso anterior, hablamos de aumentar el tamaño de la memoria compartida para el droplet y mantenerlo en un mínimo de 256 MB. Se necesita principalmente para almacenar en el disco los datos relacionados con las métricas de Prometheus. Si no la utilizas, debes desactivarla. Sólo puedes hacerlo después de la instalación. Para desactivarla, abre el Panel de Administración desde la barra de menús.

Una vez dentro del Panel de Administración, abre la opción de menú Configuración >> Métricas y perfiles.

Menú de métricas y perfiles de GitLab

En la página Métricas, despliega la sección Métricas – Prometheus y desmarca la opción Habilitar punto final de métricas de salud y rendimiento. Haz clic en el botón Guardar cambios para aplicar el cambio.

Configuración de GitLab Prometheus

GitLab también recopila información de uso de cada instalación. Si valoras la privacidad y no quieres que esto ocurra, despliega la opción Estadísticas de uso en la misma página y desmarca la opción Activar Ping de servicio. Haz clic en el botón Guardar cambios para aplicar el cambio.

Estadísticas de uso de GitLab

Configurar Mattermost

Abre la URL https://mattermost.example.com y accederás a la siguiente página de inicio de sesión.

Página de registro de GitLab Mattermost

Haz clic en el botón GitLab para registrarte. Esto integrará tu cuenta de Mattermost con tu cuenta de GitLab. Accederás a la página de inicio de sesión de GitLab, donde deberás introducir tus credenciales y hacer clic en el botón Iniciar sesión para continuar. Accederás a la página Autorizar que se muestra a continuación.

Página de autorización de GitLab Mattermost

Haz clic en el botón Autorizar para continuar. Volverás a la aplicación Mattermost, que te pedirá el nombre de tu organización.

GitLab Mattermost Nombre de la organización Inscripción

Introduce el nombre de tu organización y haz clic en la página Continuar. A continuación, se te preguntará qué herramientas utilizas en tu trabajo.

Página de herramientas de GitLab Mattermost

Haz clic en el icono de GitLab y luego en el botón Continuar para continuar. Siempre puedes añadir otras herramientas más adelante. A continuación, se te pedirá que invites a los miembros de tu equipo y se te proporcionará un enlace de invitación.

Página de configuración de GitLab Mattermost Finish

Guarda el enlace para más tarde y haz clic en Finalizar la instalación para terminar la instalación de Mattermost. Accederás al panel de control de Mattermost, desde donde podrás empezar a utilizarlo.

Panel GitLab Mattermost

Sólo se autoriza el uso de GitLab para iniciar sesión en la instancia de Mattermost. La instancia de Mattermost viene con un plugin de GitLab preinstalado que puede enviar confirmaciones y notificaciones desde tu repositorio a tu instancia de Mattermost. También tenemos que configurarlo.

Visita GitLab >> Página Editar Perfil y selecciona el menú Aplicaciones de la barra lateral izquierda. Deberías ver tu aplicación de inicio de sesión Mattermost existente ya registrada.

Página de aplicaciones de GitLab

Haz clic en el botón Añadir nueva aplicación para crear otra aplicación para el plugin de GitLab.

Configuración de la aplicación GitLab para el plugin Mattermost

Dale un nombre al proyecto. Establece https://mattermost.example.com/plugins/com.github.manland.mattermost-plugin-gitlab/oauth/complete como URI de redirección. Marca las opciones Confidencial, api y read_user. Haz clic en el botón Guardar aplicación en la parte inferior de la página para finalizar.

Accederás a la siguiente página. Copia y guarda el ID de la aplicación y el Secreto de la aplicación, que necesitarás más adelante. El Secreto de Solicitud sólo se mostrará una vez, así que asegúrate de ello.

Detalles de la aplicación GitLab para el plugin Mattermost

Haz clic en el botón Continuar para terminar.

Abre tu sitio Mattermost y haz clic en el botón superior izquierdo para que aparezca el siguiente menú emergente.

Menú emergente Mattermost

Haz clic en el botón App Marketplace para abrir la siguiente ventana emergente.

Ventana emergente del mercado de aplicaciones Mattermost

Haz clic en el botón Configurar contra el plugin de GitLab para continuar.

Configuración del plugin Mattermost GitLab

Introduce la URL de GitLab, el ID de cliente OAuth y el secreto de cliente OAuth generados anteriormente, y haz clic en el botón Guardar para finalizar.

Ahora cada usuario debe conectar su cuenta de GitLab en Mattermost. Visita el canal de GitLab en Mattermost y escribe el siguiente comando para iniciar /gitlab connect y pulsa la tecla intro y obtendrás el siguiente mensaje.

Enlace de conexión de la cuenta del plugin GitLab de Mattermost

Haz clic en el botón Conectar y accederás a una nueva página en la que se te pedirá que autorices la conexión. Haz clic en Conectar y volverás a la página de Mattermost y deberías ver el siguiente mensaje confirmando la conexión.

Mensaje de conexión exitosa de la cuenta GitLab de Mattermost

Paso 11 – Crear tu primer proyecto

Intentemos crear nuestro primer proyecto y enviar un commit.

Añadir tu clave SSH

Antes de seguir adelante, debemos añadir nuestra clave SSH. Esto nos permite interactuar con nuestra instalación sin utilizar contraseñas. Si tienes una clave SSH, puedes saltarte el siguiente comando. Si no la tienes, puedes crear una utilizando el siguiente comando.

$ ssh-keygen -t ed25519 -C "gitlab.example.com"

Este comando es común a macOS, Linux y Git Bash/WSL en Windows. Acepta los valores predeterminados e introduce una frase de contraseña segura. Vamos a crear las claves SSH en el Terminal Powershell de Windows.

Generating public/private rsa key pair.
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\<username>/.ssh/id_ed25519):
Enter same passphrase again:
Your identification has been saved in C:\Users\<username>/.ssh/id_ed25519.
Your public key has been saved in C:\Users\<username>/.ssh/id_ed25519.pub.
SHA256:CI3Ja1LSTN+j4LQnDYkAoP+DvZB8SWrD26zDyUBRbUY gitlab.example.com
+--[ED25519 256]--+
|* ..+E           |
|. + / o o        |
| o = B o .       |
|. o B = S        |
|.o X +           |
| +X.*            |
| .=B o           |
+----[SHA256]-----+

Añade la identidad de la clave privada al agente de autenticación SSH. Asegúrate de que se está ejecutando el servicio Agente de autenticación OpenSSH si estás en Windows. Si estás en Linux o macOS, ejecuta el siguiente comando.

$ eval $(ssh-agent -s)

Añade la clave.

$ ssh-add C:\Users\<username>/.ssh/id_ed25519

En Linux y macOS, el comando cambiará a

$ ssh-add ~/.ssh/id_ed25519

Se te pedirá la frase de contraseña. Introdúcela y se añadirá la clave.

A continuación, tenemos que guardar esta configuración en el archivo ~/.ssh/config. En Windows, será el directorio C:\Users\<username>\.ssh. Pega el siguiente código al final del archivo.

Host gitlab.example.com
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/id_ed25519

En este archivo, el nombre de la ruta seguirá siendo el mismo en todos los sistemas operativos. Guarda el archivo.

A continuación, tenemos que copiar la clave pública en nuestra cuenta de GitLab. Puedes mostrar tu clave pública mediante el siguiente comando. De nuevo, el nombre de la ruta funcionará en todos los sistemas operativos.

$ cat ~/.ssh/id_ed25519.pub

Obtendrás un resultado similar.

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGCEIN84O/9tcvE5wsTswY76xeJyY7TwkMW6uCvYulm1 gitlab.example.com

Abre la configuración de tu perfil en GitLab y selecciona el menú Claves SS H de la barra lateral izquierda.

Menú Claves SSH de GitLab

Pega la clave SSH en la casilla correspondiente y haz clic en Añadir Clave para continuar. Se te dará una fecha de caducidad por defecto. Puedes cambiarla según tus necesidades.

Página de claves SSH de GitLab

A continuación, tenemos que comprobar si nuestra conexión SSH funciona correctamente. Ejecuta el siguiente comando en el terminal de tu PC.

$ ssh -T [email protected]

Obtendrás una salida similar. En primer lugar, se te pedirá que añadas la clave SSH a la lista de hosts conocidos de tu sistema. Escribe «Sí» para continuar. A continuación, obtendrás un mensaje de éxito confirmando la conexión a tu instancia de GitLab.

The authenticity of host 'gitlab.example.com (178.62.213.105)' can't be established.
ECDSA key fingerprint is SHA256:x1647s5G1iL/cnRFoBuE6qzRZF775fVLZzcLJTGaIvQ.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'gitlab.example.com,178.62.213.105' (ECDSA) to the list of known hosts.
Welcome to GitLab, @navjot!

Ahora, podemos pasar a crear nuestro primer repositorio y hacer algunas confirmaciones.

Crear un proyecto

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

Para crear tu primer repositorio, haz clic en la sección Crear un proyecto de tu página de inicio.

Sección Crear un proyecto de GitLab

Accederás a la página Nuevo proyecto, donde se te darán varias opciones sobre cómo crear un nuevo proyecto.

Página Crear proyecto de GitLab

Selecciona la opción Crear proyecto en blanco para continuar. En la página siguiente, introduce el Nombre del proyecto. Selecciona tu nombre de usuario en el menú desplegable de la opción URL del Proyecto en el cuadro Elige un grupo o espacio de nombres. Establece el slug de tu Proyecto si quieres cambiar el que viene por defecto. Cambia el Nivel de Visibilidad del proyecto según tus necesidades. Puedes Inicializar tu repositorio con un archivo README. Si quieres que GitLab analice tu código en busca de vulnerabilidades de seguridad, marca la opción Activar SAST.

Página de nuevo proyecto de GitLab

Cuando hayas terminado, haz clic en Crear proyecto para finalizar. Accederás a la página de tu repositorio con un único archivo README.md en blanco.

Página del proyecto GitLab

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.

El primer paso es clonar el repositorio. Puedes clonar utilizando SSH o HTTPS. Clona utilizando SSH. Se te pedirá la contraseña.

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

Deberías ver una salida similar.

Cloning into 'howtoforge-test'...
Enter passphrase for key '/c/Users/navjo/.ssh/id_ed25519':
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.

Introduce el resto de los comandos para crear y enviar el archivo 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"
[main d6c7a9c] add Changelog
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 CHANGELOG

$ git push -u origin main
Enter passphrase for key '/c/Users/navjo/.ssh/id_ed25519':
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 958 bytes | 958.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To gitlab.example.com:navjot/howtoforge-test.git
   523db9a..d6c7a9c  main -> main
branch 'main' set up to track 'origin/main'.

Se te pedirá de nuevo la contraseña durante el comando push.

Vuelve a la página de tu proyecto en GitLab y verás el archivo CHANGELOG en ella. ¡Enhorabuena! Has creado con éxito tu primer proyecto y le has enviado un archivo.

Proyecto GitLab después de la confirmación

Con esto terminamos nuestro primer proyecto GitLab.

Paso 12 – Copia de seguridad de GitLab

GitLab proporciona una interfaz de línea de comandos para hacer copias de seguridad de toda tu instancia, incluyendo la base de datos, los archivos adjuntos, los datos del repositorio, los artefactos de los trabajos de CI/CD, los registros de salida de los trabajos de CI/CD, los objetos LFS, los estados de Terraform, las imágenes del registro de Contenedores, el contenido de las Páginas de GitLab, los paquetes, los fragmentos, las wikis de grupo, los diffs de las solicitudes de fusión y los archivos seguros a nivel de proyecto.

Las copias de seguridad no incluyen los datos de Mattermost, los datos de Redis, los trabajos de Sidekiq y el almacenamiento de objetos.

Ejecuta el siguiente comando para realizar la copia de seguridad.

$ sudo gitlab-backup create STRATEGY=copy

La opción STRATEGY=copy es para evitar errores en caso de que los datos cambien rápidamente. Esto copia los datos en una ubicación temporal y evita posibles errores.

Deberías ver una salida similar.

2024-03-07 11:48:37 UTC -- Dumping database ... 
Dumping PostgreSQL database gitlabhq_production ... [DONE]
2024-03-07 11:48:45 UTC -- Dumping database ... done
2024-03-07 11:48:45 UTC -- Dumping repositories ... 
{"command":"create","gl_project_path":"navjot/howtoforge-test","level":"info","msg":"started create","pid":107325,"relative_path":"@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.git","storage_name":"default","time":"2024-03-07T11:48:45.720Z"}
{"command":"create","gl_project_path":"navjot/howtoforge-test","level":"info","msg":"completed create","pid":107325,"relative_path":"@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.git","storage_name":"default","time":"2024-03-07T11:48:45.772Z"}
{"command":"create","gl_project_path":"navjot/howtoforge-test.wiki","level":"info","msg":"started create","pid":107325,"relative_path":"@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.wiki.git","storage_name":"default","time":"2024-03-07T11:48:45.874Z"}
{"command":"create","gl_project_path":"navjot/howtoforge-test.wiki","level":"info","msg":"completed create","pid":107325,"relative_path":"@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.wiki.git","storage_name":"default","time":"2024-03-07T11:48:45.894Z"}
2024-03-07 11:48:45 UTC -- Dumping repositories ... done
2024-03-07 11:48:45 UTC -- Dumping uploads ... 
2024-03-07 11:48:46 UTC -- Dumping uploads ... done
2024-03-07 11:48:46 UTC -- Dumping builds ... 
2024-03-07 11:48:46 UTC -- Dumping builds ... done
2024-03-07 11:48:46 UTC -- Dumping artifacts ... 
2024-03-07 11:48:46 UTC -- Dumping artifacts ... done
2024-03-07 11:48:46 UTC -- Dumping pages ... 
2024-03-07 11:48:46 UTC -- Dumping pages ... done
2024-03-07 11:48:46 UTC -- Dumping lfs objects ... 
2024-03-07 11:48:46 UTC -- Dumping lfs objects ... done
2024-03-07 11:48:46 UTC -- Dumping terraform states ... 
2024-03-07 11:48:46 UTC -- Dumping terraform states ... done
2024-03-07 11:48:46 UTC -- Dumping container registry images ... 
2024-03-07 11:48:46 UTC -- Dumping container registry images ... done
2024-03-07 11:48:46 UTC -- Dumping packages ... 
2024-03-07 11:48:46 UTC -- Dumping packages ... done
2024-03-07 11:48:46 UTC -- Dumping ci secure files ... 
2024-03-07 11:48:46 UTC -- Dumping ci secure files ... done
2024-03-07 11:48:46 UTC -- Creating backup archive: 1709812117_2024_03_07_16.9.1-ee_gitlab_backup.tar ... 
2024-03-07 11:48:46 UTC -- Creating backup archive: 1709812117_2024_03_07_16.9.1-ee_gitlab_backup.tar ... done
2024-03-07 11:48:46 UTC -- Uploading backup archive to remote storage  ... [SKIPPED]
2024-03-07 11:48:46 UTC -- Deleting old backups ... [SKIPPED]
2024-03-07 11:48:46 UTC -- Deleting tar staging files ... 
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/backup_information.yml
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/db
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/repositories
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/uploads.tar.gz
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/builds.tar.gz
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/artifacts.tar.gz
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/pages.tar.gz
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/lfs.tar.gz
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/terraform_state.tar.gz
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/registry.tar.gz
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/packages.tar.gz
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/ci_secure_files.tar.gz
2024-03-07 11:48:46 UTC -- Deleting tar staging files ... done
2024-03-07 11:48:46 UTC -- Deleting backups/tmp ... 
2024-03-07 11:48:46 UTC -- Deleting backups/tmp ... done
2024-03-07 11:48:46 UTC -- Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data 
and are not included in this backup. You will need these files to restore a backup.
Please back them up manually.
2024-03-07 11:48:46 UTC -- Backup 1709812117_2024_03_07_16.9.1-ee is done.
2024-03-07 11:48:46 UTC -- Deleting backup and restore PID file ... done

Tu archivo de copia de seguridad se almacena en el directorio /var/opt/gitlab/backups.

$ sudo ls /var/opt/gitlab/backups
1709812117_2024_03_07_16.9.1-ee_gitlab_backup.tar

Como se menciona en la salida, tu configuración y secretos de GitLab no se incluyen en la copia de seguridad. Copia estos archivos manualmente en una ubicación segura para su restauración.

Cópialos.

$ sudo cp /etc/gitlab/gitlab.rb /etc/gitlab/gitlab-secrets.json /var/opt/gitlab/backups

Puedes configurar cron para que realice copias de seguridad diarias.

Abre el crontab para el usuario root.

$ sudo su -
$ EDITOR = nano crontab -e

Añádele la siguiente línea.

0 2 * * * /opt/gitlab/bin/gitlab-backup create CRON=1

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

La opción CRON=1 sirve para ocultar toda la salida si no hay errores. Esto ayuda a limitar el spam del cron. Sin embargo, si estás depurando, sustituye CRON=1 por --trace para hacer un registro más detallado.

Puedes consultar la documentación oficial sobre copias de seguridad de GitLab para ver más opciones y cómo asegurarte de que tus copias de seguridad se copian automáticamente a un servicio compatible con S3.

Paso 13 – Restaurar GitLab

Antes de restaurar GitLab, asegúrate de que cumples los siguientes requisitos.

  • La versión y edición de GitLab debe coincidir con aquella de la que se tomó la copia de seguridad.
  • Has ejecutado el comando sudo gitlab-ctl reconfigure al menos una vez.
  • GitLab debe estar en ejecución.
  • Los secretos de GitLab y la configuración deben estar restaurados.
    $ sudo cp gitlab.rb gitlab-secrets.json /etc/gitlab
    

Copia el archivo de copia de seguridad en el directorio /var/opt/gitlab/backups.

$ sudo cp 1709812117_2024_03_07_16.9.1-ee_gitlab_backup.tar /var/opt/gitlab/backups/

Establece los permisos correctos.

$ sudo chown git:git /var/opt/gitlab/backups/1709812117_2024_03_07_16.9.1-ee_gitlab_backup.tar

Detén los procesos que estén conectados a la base de datos. Puedes dejar el resto de GitLab funcionando como de costumbre.

$ sudo gitlab-ctl stop puma
$ sudo gitlab-ctl stop sidekiq

Verifica los procesos.

$ sudo gitlab-ctl status
run: alertmanager: (pid 68055) 76797s; run: log: (pid 66127) 78476s
run: crond: (pid 68045) 76798s; run: log: (pid 65624) 78566s
run: gitaly: (pid 66424) 78414s; run: log: (pid 65273) 78710s
run: gitlab-exporter: (pid 66466) 78411s; run: log: (pid 66002) 78497s
run: gitlab-kas: (pid 65535) 78691s; run: log: (pid 65547) 78690s
run: gitlab-pages: (pid 68003) 76801s; run: log: (pid 67700) 76996s
run: gitlab-workhorse: (pid 66392) 78415s; run: log: (pid 65727) 78550s
run: logrotate: (pid 106163) 3124s; run: log: (pid 65169) 78724s
run: mattermost: (pid 68027) 76799s; run: log: (pid 67820) 76890s
run: nginx: (pid 72647) 75588s; run: log: (pid 65781) 78544s
run: node-exporter: (pid 66458) 78411s; run: log: (pid 65968) 78505s
run: postgres-exporter: (pid 66505) 78407s; run: log: (pid 66162) 78470s
run: postgresql: (pid 65341) 78702s; run: log: (pid 65362) 78699s
run: prometheus: (pid 66476) 78410s; run: log: (pid 66070) 78483s
down: puma: 14s, normally up; run: log: (pid 65649) 78562s
run: redis: (pid 65207) 78719s; run: log: (pid 65216) 78718s
run: redis-exporter: (pid 66468) 78410s; run: log: (pid 66034) 78490s
run: registry: (pid 66414) 78414s; run: log: (pid 65864) 78528s
down: sidekiq: 5s, normally up; run: log: (pid 65681) 78554s

Restaura la copia de seguridad. Asegúrate de lo que estás haciendo, ya que sobrescribirá tu base de datos. No necesitas dar el nombre completo del archivo en el comando. Sólo la parte anterior a -ee_gitlab_backup.tar del nombre del archivo.

$ 	sudo gitlab-backup restore BACKUP=1709812117_2024_03_07_16.9.1-ee

Esto debería restaurar tu instalación de GitLab correctamente.

Paso 14 – Actualizar GitLab

Crea una copia de seguridad antes de actualizar GitLab. Actualizar GitLab es tan sencillo como ejecutar el comando sudo dnf update.

$ sudo dnf update

Es seguro realizar actualizaciones menores de esta forma.

DigitalOcean Agent                                                                       40 kB/s | 3.3 kB     00:00
DigitalOcean Droplet Agent                                                               44 kB/s | 3.3 kB     00:00
gitlab_gitlab-ee                                                                        1.4 kB/s | 1.0 kB     00:00
gitlab_gitlab-ee-source                                                                 1.2 kB/s | 951  B     00:00
Dependencies resolved.
========================================================================================================================
 Package                  Architecture          Version                           Repository                       Size
========================================================================================================================
Upgrading:
 gitlab-ee                x86_64                16.9.2-ee.0.el9                   gitlab_gitlab-ee                1.1 G

Transaction Summary
========================================================================================================================
Upgrade  1 Package

Total download size: 1.1 G
Is this ok [y/N]: y

Escribe y y pulsa Enter para iniciar la actualización. En el caso de las versiones mayores, antes de realizar la actualización debes comprobar si se han producido cambios de última hora.

El sitio dejará de estar disponible mientras se realiza la actualización o aparecerá un mensaje Deploy in progress en el navegador.

Una vez completada la actualización, realiza la siguiente comprobación posterior a la actualización para asegurarte de que todo funciona correctamente.

  1. Comprueba la configuración general.
    $ sudo gitlab-rake gitlab:check
    
  2. Confirma que los valores encriptados de la base de datos pueden desencriptarse.
    $ sudo gitlab-rake gitlab:doctor:secrets
    
  3. Comprueba si los usuarios pueden iniciar sesión, si la lista de proyectos es visible, si se puede acceder a las incidencias del proyecto y a las solicitudes de fusión, si los usuarios pueden clonar repositorios y si pueden enviar confirmaciones a GitLab en la interfaz de usuario de GitLab.
  4. Para GitLab CI/CD, comprueba que los ejecutores pueden recoger trabajos y que el registro Docker funciona.

Conclusión

Con esto concluye nuestro tutorial, en el que has aprendido a instalar y configurar GitLab en un servidor Rocky Linux 9. También has creado tu primer proyecto y le has confirmado un archivo desde tu PC. Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...