Migration d’un serveur Gitlab
Après onze mois à l’essai j’ai enfin prit le temps de trouver une demeure définitive à mon Gitlab. En effet plus les mois passent, plus il est devenu indispensable dans ma vie de tous les jours. Il me permet de garder un historique de mes scripts, fichiers de configurations et autres projets sur lesquels je travaille.
Gitlab est une sur-couche à git écrite en ruby qui permet de faire tourner un serveur git à la github chez soi. Beaucoup plus complet que ce propose github (avis très personnel), il est parfait lorsque l’on veut maintenir de petits fichiers de configurations. Il peut être aussi utilisé en complément de Github comme je le fais, ainsi je partage mes projets avec beaucoup plus de monde. Pour plus d’information rendez-vous sur le site officiel www.gitlab.com. Si vous voulez vous lancer dans l’aventure je vous conseille la “comunauty edition”.
Préparation
Sur l’ancien serveur j’effectue une sauvegarde totale (base de données, dépôts …)
cd /home/git/gitlab sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production
Par défaut celle-ci se trouve dans “/home/git/gitlab/tmp/backups”, c’est un fichier compressé qui ressemble à ça :
[TIMESTAMP]_gitlab_backup.tar #[TIMESTAMP] fait référence au moment de la sauvegarde
Je fais une copie de ce fichier pour plus tard, l’idée est de restaurer cette sauvegarde sur le nouveau serveur fraîchement installé. Se nouveau serveur sera installé à la même version que l’ancien, dans mon cas la 6.7.5. Lors de mes tentatives de restauration j’avais fait l’inverse, mais la migration ne s’est pas déroulée correctement.
Pour installer le nouveau serveur j’ai tout simplement suivit la documentation sur le site.
Migration
Première étape j’importe le fichier [TIMESTAMP]_gitlab_backup.tar dans le dossier /root. A ne pas copier directement dans le dossier /home/git/gitlab/tmp/backups cela changera les droits. Ensuite la migration est très simple :
cd /home/git/gitlab/tmp #Création du dossier de sauvegarde mkdir backups #Copie du fichier de sauvegarde cp /root/[TIMESTAMP]_gitlab_backup.tar /home/git/gitlab/tmp/backups/[TIMESTAMP]_gitlab_backup.tar #Attribution des droits à l'utilisateur git sudo chown -R git:git /home/git/gitlab/tmp/backups/[TIMESTAMP]_gitlab_backup.tar #Lancement de la restauration cd /home/git/gitlab sudo -u git -H bundle exec rake gitlab:backup:restore RAILS_ENV=production
Après quelques secondes la restauration est terminée. Tout y est la base de données, les utilisateurs, les dépôts, toutes les données de l’ancien serveur.
Maintenant tout le travail de configuration reste à faire, afin basculer définitivement sur le nouveau serveur.
Configuration post migration
Gitlab
Dans un premier temps il faut indiquer à gitlab l’url à utiliser pour l’interface web. Deux fichiers sont à modifier, je profite aussi de l’occasion pour activer les connexions ssl de mon futur serveur.
Le premier se trouve dans /home/git/gitlab/config/gitlab.yml – ATTENTION avec les fichiers en Yaml les espaces sont très important il faut les respecter scrupuleusement !
## GitLab settings gitlab: ## Web server settings host: url.monserveur.tld port: 443 https: true #activation des connexions ssl
Le second se trouve dans /home/git/gitlab-shell/config.yml – ATTENTION avec les fichiers en Yaml les espaces sont très important il faut les respecter scrupuleusement !
# Url to gitlab instance. Used for api calls. Should be ends with slash. gitlab_url: "https://url.monserveur.tld/"
Pour valider les modifications un redémarrage du service gitlab.
service gitlab restart
Un peu plus haut j’abordais l’activation du SSL pour l’interface web mais aussi pour toutes les communication avec git. J’ai créé un certificat de classe1 signé chez StartSSL. Par la suite je me suis trouvé dans l’obligation de le modifier pour l’utiliser avec Nginx. Depuis le site de startSSL j’ai récupéré le certificat, la clef non chiffrée et le certificat intermédiaire. Afin d’utiliser conjointement le certificat et l’intermédiaire dans nginx il faut les combiner.
cat gitlab_ssl.crt sub.class.server.ca.pem > gitlab.combined.crt
Nginx
Activation des connexions ssl nginx. D’abords créer une sauvegarde de l’ancien fichier.
mv /etc/nginx/sites-available/gitlab /etc/nginx/sites-available/gitlab_bak
Pour récupérer le nouveau fichier :
git clone https://labo.olivierdelort.net/colmaris/gitlab-recipes.git
Ce fichier réécrit les requêtes entrantes sur le port 80 vers le port 443, de plus il corrige l’erreur 400 Bad request que j’ai eu lors du premier démarrage.
ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab service nginx restart
Hop un nouveau lien symbolique vers les sites activés, et je relance nginx.
Lors de ma première connexion j’ai retrouvé tous mes utilisateurs, les dépôts, comme si de rien n’était. Je dois encore mettre à jour mon nouveau serveur et profiter des dernières nouveautés de la 7.3.0 au moment où j’écris ses lignes.