Vous êtes ici

Gitlab dans un conteneur Docker

logoIl y a un peu plus d'un an, j'ai commencé à jouer avec Docker. Je fais maintenant tourner persque toutes mes applications serveurs dans des conteneurs : deux sites web Drupal, un forum phpBB, un serveur mandataire inverse, un serveur DNS, un serveur MineOS pour mon fils, etc. J'ai eu l'occasion d'avoir à gérer divers besoins : persistance des données, mise à jour de l'applicatif, architecture micro-services, dépendance des services, etc. Mais je me considèe encore comme un débutant naïf : les applications que j'ai dockerisées sont pour mon usage personnel seulement. Par conséquent, je n'ai jamais été exposé aux contraintes de la vraie vie (grand nombre de connexions, sécurité, haute disponibilité, etc.)

De temps en temps, des amis me demandent de les aider, dans mon domaine d'expertise[1], en résolvant des problèmes auxquels ils doivent faire face ou en développant rapidement des preuves de concepts. Les livrables sont du code source et parfois des schémas électroniques. Jusqu'à récemment, pour livrer ces éléments, j'utilisais le courriel et le transfert de fichiers. J'avais également un serveur privé de contrôle de version. Il y a quelques semaines, j'ai décidé de passer un peu de temps à vérifier si une instance dockerisée de GitLab ne pourrait pas être une bonne solution pour remplacer ma méthode archaïque actuelle de gestion et partage de code source et de schémas.

Après quelques tests, j'ai obtenu la réponse: oui ! Cet article décrit les quelques étapes que j'ai suivies pour installer ma configuration.

Installation

La documentation de référence détaillée est disponible. En la suivant :

  • créer les répertoires qui vont contenir les données persistantes. Pour moi :
    • /var/www/runninggitlab/config
    • /var/www/runninggitlab/logs
    • /var/www/runninggitlab/data
  • créer et démarrer le conteneur:
$ sudo docker run --detach \
--hostname <hostName> \
--env VIRTUAL_HOST=<FQDN> \
--publish <publicPort>:80 \
--name gitlab \
--restart always \
--volume /var/www/runninggitlab/config:/etc/gitlab \
--volume /var/www/runninggitlab/logs:/var/log/gitlab \
--volume /var/www/runninggitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:8.2.1-ce.0

Quelques mots d'explications :

  • hostname permet de choisir le nom d'hôte du conteneur
  • j'utilise jwilder/nginx-proxy comme serveur mandataire inverse. La variable d'environnement VIRTUAL_HOST est là pour lui.
  • publicPort doit être défini à un port disponible. Le serveur mandataire inverse l'utilisera.
  • je préfère avoir le contrôle de la version installée, plutôt que de me reposer sur la version disponible sur Docker Hub la plus récente. C'est pourquoi j'utilise l'étiquette 8.2.1-ce.0.

Configuration

Maintenant que le conteneur est démarré :

  • attendre qu'il soit actif
  • j'utilise mon propre serveur SMTP pour envoyer des courriels. Pour configurer GitLab afin de l'utiliser, je décommente et mets à jour les lignes suivantes dans /var/www/runninggitlab/config/gitlab.rb:
external_url "http://<myGitLabURL>"
gitlab_rails['gitlab_email_from'] = '<fromEmail>'
gitlab_rails['gitlab_email_reply_to'] = '<replyToEmail>'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "<SMTPServerAddress>"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "<SMTPUserName>"
gitlab_rails['smtp_password'] = "<SMTPPassword>"
gitlab_rails['smtp_domain'] = "<SMTPDomain>"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_openssl_verify_mode'] = 'none'
  • redémarrer le conteneur
  • attendre qu'il soit à nouveau actif
  • se connecter, avec l'utilisateur root et le mot de passe 5iveL!fe. Et voilà !

Sauvegarde

Pour sauvegarder les données GitLab, entrer dans le conteneur, et lancer la commande de sauvegarde :

$ sudo docker exec -it gitlab bash
# gitlab-rake gitlab:backup:create

Le fichier de sauvegarde est créé dans le répertoire /var/www/runninggitlab/data/backups/, sur le système hôte.

J'automatiserai bientôt la procédure de sauvegarde. Revenez voir...

Mise à jour GitLab

Se référer à la documentation associée. Je l'ai suivie ce matin, sans aucun problème.

GitLab + HTTPS + SSH + proxy inverse

Voir cet article (en anglais uniquement).


[1] Depuis 25 ans, je développe des systèmes dans le domaine de ce qui est aujourd'hui appelé IoT ou M2M. Mon expertise principale concerne la conception et l'implémentation de la communication au niveau applicatif entre des objets connectés et une application centrale. Ceci comprend le développement logiciel embarqué sur cible sans système d'exploitation, la conception et l'implémentation de protocoles au niveau applicatif, l'interfaçage avec des modules de communicaiton divers, de l'électronique numérique, etc. La conception d'architecture système globale fait également partie de mon expertise.