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