Site iconSite icon Anthony Jacob

Migration Docker d’une instance Gitlab de production

image de mise en avant pour l'article migration docker d'un serveur Gitlabimage de mise en avant pour l'article migration docker d'un serveur Gitlab

image de mise en avant pour l'article migration docker d'un serveur Gitlab

Temps de lecture estimé: 2 minutes

Cet article fait partie d’une série d’articles sur la Dockerisation de toute mon infra, mes services et applications en ligne.

je m’attaque maintenant au dernier et plus gros morceau de la migration, mon instance de Gitlab.

je commence par créer un backup depuis mon serveur de prod

gitlab-backup create

je récupère mes fichiers de configuration /etc/gitlab/gitlab.rb et /etc/gitlab/gitlab-secrets.json

sur mon serveur Docker, je crée les volumes qui accueilleront les données persistantes

docker volume create --driver local --name gitlab-data
docker volume create --driver local --name gitlab-logs
docker volume create --driver local --name gitlab-config

ma version de prod est la 15.3.1, j’utilise donc (pour l’instant) l’image Docker gitlab/gitlab-ce:15.3.1-ce.0

mon premier Dockerfile ressemble à

FROM gitlab/gitlab-ce:15.3.1-ce.0

EXPOSE 443
EXPOSE 80
EXPOSE 22

je build et je lance une première fois l’image pour qu’elle s’initialise

docker build -t anthonygj/gitlab . -f ./Dockerfile

docker run -dit  \
--network=infra \
--volume /etc/letsencrypt/live/anthony-jacob.com/:/etc/gitlab/ssl \
--volume gitlab-config:/etc/gitlab \
--volume gitlab-logs:/var/log/gitlab \
--volume gitlab-data:/var/opt/gitlab \
-p 4443:443 -p 8080:80 -p 22:22 -p 8181:8181 \
-h gitlab.anthony-jacob.com \
--name gitlab \
--restart always \
--shm-size 256m \
anthonygj/gitlab

Après quelques minutes de déploiement et une fois que l’initialisation est terminée, je restaure mon backup de prod.

je copie l’archive de backup sur le container

docker cp 1662119451_2022_09_02_15.3.1_gitlab_backup.tar gitlab:/var/opt/gitlab/backups/1662119451_2022_09_02_15.3.1_gitlab_backup.tar

je lance ensuite un bash sur le container et je change le propriétaire de l’archive

docker exec -it gitlab bash
chown git:git /var/opt/gitlab/backups/1662119451_2022_09_02_15.3.1_gitlab_backup.tar

après avoir stoppé unicorn et sidekiq, je peux  lancer la restauration du backup

gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-backup restore

Une fois terminé, je redémarre le container et je m’assure que tout va bien jusque là. Je m’attaque maintenant à la restauration de mes fichiers gitlab.rb et gitlab-secrets.json

docker cp /home/docker-infra/docker-gitlab/conf/gitlab/gitlab-docker.rb gitlab:/etc/gitlab/gitlab.rb
docker cp /home/docker-infra/docker-gitlab/conf/gitlab/gitlab-secrets.json gitlab:/etc/gitlab/gitlab-secrets.json

une fois les fichiers copiés

docker exec -it gitlab bash
gitlab-ctl reconfigure

À partir de là, pratiquement tout semble OK, je peux me connecter avec mes identifiants de prod, mes clés ssh fonctionnent… il n’y a que les emails qui ne partent pas.

Après quelques tâtonnements, je rajoute postfix à l’image.

mon Dockerfile final

FROM gitlab/gitlab-ce:15.3.1-ce.0

ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update -yq \
&& apt-get install -yq postfix --no-install-recommends 

RUN postfix start

EXPOSE 443
EXPOSE 22
EXPOSE 80

je rebuild et relance l’image Docker puis je fais un dernier test pour l’envoi d’email

docker exec -it gitlab bash
gitlab-rails console
Notify.test_email('contact@anthony-jacob.com', 'Message Subject', 'Message Body').deliver_now

Dernière étape, mettre à jour Gitlab avec la dernière version (15.3.3-ce.0 au moment de la migration). pour ça, j’ai changé l’image de base de mon Dockerfile pour utiliser le tag de la dernière version

FROM gitlab/gitlab-ce:latest

je rebuild et je relance

docker build -t anthonygj/gitlab . -f ./Dockerfile
docker container rm -f gitlab

docker run -dit  \
--network=infra \
--volume /etc/letsencrypt/live/anthony-jacob.com/:/etc/gitlab/ssl \
--volume gitlab-config:/etc/gitlab \
--volume gitlab-logs:/var/log/gitlab \
--volume gitlab-data:/var/opt/gitlab \
-p 4443:443 -p 8080:80 -p 22:22 -p 8181:8181 \
-h gitlab.anthony-jacob.com \
--name gitlab \
--restart always \
--shm-size 256m \
anthonygj/gitlab

et pour finir, une fois lancé

docker exec -it gitlab bash
gitlab-ctl reconfigure

voilà!! Mon instance de Gitlab est bien migré dans un container Docker.

Pour avoir les bonnes redirections, je n’oublie pas d’ajouter un nouveau fichier de configuration et de redéployer mon reverse proxy apache pour qu’il prenne en compte ce nouveau site.

Pour suivre les autres étapes de la migration de mon serveur, ça se passe sur l’article récapitulatif

Partagez l'article:
Quitter la version mobile