jueves, 23 de enero de 2025

GitLab (3): Actualizar GitLab, Copia de seguridad, Runners, email

1. Copia de Seguridad de Gitlab

Veamos los pasos a seguir:

Crear una copia de seguridad completa el el deriectorio por omisión que es /var/opt/gitlab/backups y el nombre de 1737627801_2025_01_23_17.8.1_gitlab_backup.tar o parecido Siendo la parte verde el timestamp de la copia y la parte azaul la versión de gitlab

sudo gitlab-backup create

Pero hay que hacer también una copia de la configuración que es el directorio /etc/gitlab para ello ejecutamos :

sudo tar -czf /var/opt/gitlab/backups/gitlab_config_backup.tar.gz /etc/gitlab

Siendo la parte azul, la carpeta que por omisión se guardan los backups de gitlab, la parte verde es el nombre del fichero de la copia y la parte magenta es la carpeta donde están los ficheros de configuración.

También podemos hacer un cron-tab de dicho proceso, o utilizar un rsync para sincronizar con otro servidor

2. Actualizar GitLab

Vamos al botón qe hay abajo a la izquierda "Admin" y nos aparece na pantalla con múltiples datos. En concreto en la zona "GitLab Version"- "Components", si hay alguna versión nueva nos lo dice, y es conveniene actualizarla.


En este caso no aparece.

Para actualizar hay que meterse en el servidor por ssh

ssh usuario@192.XXX.XXX.XXX

y dentro del servidor LDAP se ejecuta

sudo apt update
sudo apt dist-upgrade

A veces puede fallar, pues a veces no quiere que cambiemos directamente a la versión actual sin pasar por versiones intermedias. En este caso habría que consultar los logs para ir migrando escalonadamente, y preguntar al Chat GPT los comandos para hacerlo

Pero hay que hacer una copia de seguridad de los ficheros de Gitlab

3. Definir el email

Hay que actualizar el fichero /etc/gitlab/gitlab.rb y dar valores a los siguientes parámetros que estan comentados con una almohadilla. Por ejemplo para gmail: (a partir de aquí es cfopiado de Chat GPT)

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.gmail.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "tu_correo@gmail.com"
gitlab_rails['smtp_password'] = "tu_contraseña"
gitlab_rails['smtp_domain'] = "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"

#-------------------------------------
# Estos datos pueden ser importantes
#-------------------------------------
gitlab_rails['gitlab_email_from'] = 'gitlab@tu-dominio.com'
gitlab_rails['gitlab_email_display_name'] = 'GitLab Notifications'

Guardamos y ejecutamos

sudo gitlab-ctl reconfigure

Y para probar:

sudo gitlab-rails console

y en la consola interactiva de Rails ejecutar:

Notify.test_email('correo_destinatario@dominio.com', 'Prueba de correo', 'Esto es un correo de prueba de GitLab.').deliver_now

4. Runners

Podemos tener por ejemplo un "branch" de "development" y otra "branch" de "deployment". Si cada vez que actualizamos la "branc" de despliegue, queremos actualizarla en el servidor que va a desplegar dicha apliación, entonces podemos utilizar runners.

He pedido a chat GPT que me haga un runner para que actualice la carpeta "/home/deploys" del servidor del despliegue "myserver.midominio.es"

Y me contesta:

1. Paso 1:

Se crea el archivo ".gitlab-ci.yml" en el  servidor gitlab

stages:
  - deploy

deploy_to_server:
  stage: deploy
  only:
    - deploy
  script:
    - echo "Iniciando el despliegue en el servidor remoto..."
    - ssh -o StrictHostKeyChecking=no user@myserver.dominio.es 'rm -rf /home/deploys/*'
    - scp -r . user@myserver.dominio.es:/home/deploys/
  environment:
    name: production
    url: http://myserver.dominio.es

Siendo:

Stages:    Define una etapa llamada deploy.

Job (deploy_to_server):

    stage: Este trabajo pertenece a la etapa deploy.

    only: El trabajo solo se ejecutará cuando se actualice la branch deploy.

    script:

        Elimina el contenido existente de /home/deploys en el servidor remoto.

        Usa scp para copiar los archivos del repositorio al servidor remoto.

    environment: Define que este trabajo pertenece al entorno production y establece la URL correspondiente.

2. Paso 2

Se configura el servidor remoto de manera que pueda recibir conexiones SSH y:

Se crea un usuario para depliegue, seleda permiso al directorio de despliegue 

sudo adduser user

sudo mkdir -p /home/deploys
sudo chown -R user:user /home/deploys

Hay que permitir la conexión por SSH, para ello se agrea la clave pública de GitLab  Runner al archivo  ~/.ssh/authorized_keys del usuario user.


3. Paso 3

Para configurar las claves  SSH en GitLab

En el servidor gitlab, ejecutar:

ssh-keygen -t ed25519 -C "gitlab-runner"

Agrega la clave privada (la que NO termina en ".pub") en una variable protegida en Gitlab. Para ello apretamos el botón "Admin" de la parte inferior izquierda y luego "Settings"

En "Settings" hay un desplegable que tiene además "CI/CD", que abre una pantalla que entre otras cosas tiene "Variables" y le damos al botón de la derecha "Add variable" que le llamamos "SSH_PRIVATE_KEY" y le pegamos el contenido de la clave privada.

Ahora agregamos la clave pública (la que termina en ".pub") al archivo ~/.ssh/authorized_keys del usuario user en el servidor remoto.

4. Paso 4

Actualizamos el fichero  ".gitlab-ci.yml" en el  servidor gitlab para usar la clave SSH

stages:
  - deploy

deploy_to_server:
  stage: deploy
  only:
    - deploy
  before_script:
    - mkdir -p ~/.ssh
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_ed25519
    - chmod 600 ~/.ssh/id_ed25519
    - ssh-keyscan -H myserver.dominio.es >> ~/.ssh/known_hosts
  script:
    - echo "Iniciando el despliegue en el servidor remoto..."
    - ssh user@myserver.dominio.es 'rm -rf /home/deploys/*'
    - scp -r . user@myserver.dominio.es:/home/deploys/
  environment:
    name: production
    url: http://myserver.dominio.es

Notas Finales:

    Seguridad:

        Las variables protegidas deben configurarse como "Masked" y "Protected" en GitLab.

        Asegúrate de que solo los usuarios autorizados puedan acceder a las variables y la branch deploy.


    Pruebas:

        Antes de activar este pipeline, pruébalo manualmente ejecutando los comandos SSH y scp desde el Runner o desde tu máquina local.

Con esto, tu pipeline debería estar listo para actualizar automáticamente el servidor remoto cada vez que se realice un push en la branch deploy. 



No hay comentarios :

Publicar un comentario