Table des matières

, , , , ,

Gitlab

docker-compose

Ci dessous le docker-compose pour un test en local

docker-compose.yml
networks:
  # Nomme explicitement le réseau par défaut utilisé par les services définis dans ce fichier
  default_vnet:

services:
  gitlab:
    image: 'gitlab/gitlab-ce:14.1.8-ce.0'
    restart: always
    hostname: 'gitlab.services.localhost'
    networks:
      default_vnet:
        aliases:
          - gitlab.services.localhost
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://gitlab.services.localhost'
        gitlab_rails['gitlab_shell_ssh_port'] = 2222
    ports:
      - '127.0.0.1:8084:80'
      - '127.0.0.1:4443:443'
      - '127.0.0.1:2222:22'
    volumes:
      - '$GITLAB_HOME/config:/etc/gitlab'
      - '$GITLAB_HOME/logs:/var/log/gitlab'
      - '$GITLAB_HOME/data:/var/opt/gitlab'
La valeur de la variable external_url doit être suffixée avec le port exposé par le conteneur si le port est redéfini. Ne pas utiliser la valeur du port publiée de l’hôte.

Pour s'authentifier sur la WebUI récupérer le mot de passe root:

docker-compose exec gitlab grep 'Password:' /etc/gitlab/initial_root_password
Le fichier contenant le mot de passe root généré à l'installation est automatiquement effacé au bout de quelques heures. Si le mot de passe root est perdu, il est possible de ne redéfinir.

Redéfinir le mot de passe administrateur

# ouvrir une console Ruby on Rails
gitlab-rails console -e production
 
# retrouver l'utilisateur via l'ID
user = User.where(id: 1).first
 
# ou via l'email
# user = User.find_by(email: 'admin@example.com')
 
 
# vérifier que l'objet instancié est bien l'utilisateur souhaité
puts user.email, user.id
 
# Redéfinir le mot de passe
user.password = 'newpass123'
user.password_confirmation = 'newpass123'
 
# sauvegarder les modifications
user.save!
 
# Quitter la console interactive
exit

source:

Pour pousser un projet git existant

git push --set-upstream ssh://git@gitlab.services.localhost:2222/root/$(git rev-parse --show-toplevel | xargs basename).git $(git rev-parse --abbrev-ref HEAD)

Utilisateurs

Création des utilisateurs

Depuis l'instance de test, le service de mail ne fonctionne pas, utiliser la procédure ci dessus pour définir le mot de passe de l'utilisateur.

Une fois identifié l'utilisateur peut créer sa clé SSH

# générer une paire de clés
cd ~/.ssh
ssh-keygen -t rsa -b 4096 -C "yoann@gitlab.services.localhost" -f yoann_gitlab_localhost_rsa
 
# Afficher la clé publique
cat yoann_gitlab_localhost_rsa.pub
 
# copier /coller la valeur de la clé publique

Pour tester la connexion au serveur:

# Vérifier la valeur du fingerprint du serveur gitlab
ssh -l git -p 2222 -T -i ~/.ssh/yoann_gitlab_localhost_rsa  gitlab.services.localhost

On notera qu'on utilise toujours le login git pour la connexion SSH. Le serveur différencie les utilisateurs via la clé publique déposée sur l'interface Web.

Pour faciliter la connexion, on peut définir une entrée dans le fichier ~/.ssh/config

Host gitlab
  HostName gitlab.services.localhost
  User git
  Port 2222
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/yoann_gitlab_localhost_rsa

Valider la configuration par un test:

$ ssh -T gitlab
Welcome to GitLab, @yoann!

Créer un projet à partir d'un dépot existant:

# Depuis dans le dépot git local
cd filez
 
# Commande de création du dépot référence proposée par l'interface Web
git push --set-upstream ssh://git@gitlab/yoann/$(git rev-parse --show-toplevel | xargs basename).git $(git rev-parse --abbrev-ref HEAD)

Modifier la page d'accueil

Par défaut les utilisateurs non authentifiés sont redirigés sur la page de login. On peut changer ce comportement et proposer la page listant les projets publics.

Depuis le compte root:

Déploiement sur serveur distant

Pour déployer l'instance créée localement sur une machine distante:

# copier le docker-compose.yml et le .env via ssh
scp docker-compose.yml .env server.fqdn:/path/to/gitlab
 
# les commandes suivantes utilisent des conteneurs temporaires pour monter les volumes,
# écrire leurs données sur la sortie standard, rediriger la sortie standard via un tunnel ssh
# sur l’entrée standard du conteneur sur l'hote distant et écrire les données dans
# de nouveaux volumes sur le serveur distant:
docker container run --rm -v gitlab_config:/mnt:ro busybox:latest /bin/tar -C /mnt -cf- . | ssh server.fqdn docker container run --rm -i -v gitlab_config:/mnt busybox:latest tar -C /mnt -xf-
 
docker container run --rm -v gitlab_logs:/mnt:ro busybox:latest /bin/tar -C /mnt -cf- . | ssh server.fqdn docker container run --rm -i -v gitlab_logs:/mnt busybox:latest tar -C /mnt -xf-
 
docker container run --rm -v gitlab_data:/mnt:ro busybox:latest /bin/tar -C /mnt -cf- . | ssh server.fqdn docker container run --rm -i -v gitlab_data:/mnt busybox:latest tar -C /mnt -xf-

Références