doc-locale/fr-fr/install/docker/migrate.md
{{< details >}}
{{< /details >}}
Migrez votre instance GitLab sur package Linux existante vers Docker en utilisant l'une des deux approches suivantes :
Migrez une instance GitLab sur package Linux vers Docker en réutilisant les répertoires de données existants.
Arrêtez tous les services GitLab :
sudo gitlab-ctl stop
La façon dont vous préparez les répertoires de volume dépend de l'emplacement où Docker s'exécute :
Si Docker s'exécute sur le même serveur que l'instance du package Linux, vous pouvez monter les répertoires existants directement sans les copier. Définissez les chemins de volume dans votre fichier Docker Compose aux emplacements du package Linux :
volumes:
- '/etc/gitlab:/etc/gitlab'
- '/var/log/gitlab:/var/log/gitlab'
- '/var/opt/gitlab:/var/opt/gitlab'
Si vous migrez vers un serveur différent, ou souhaitez conserver les volumes Docker séparés des chemins du package Linux, copiez d'abord les répertoires vers un nouvel emplacement.
Définissez $GITLAB_HOME sur le répertoire cible :
export GITLAB_HOME=/srv/gitlab
sudo mkdir -p $GITLAB_HOME
Copiez (ou déplacez) les répertoires de données, de journaux et de configuration :
sudo cp -a /var/opt/gitlab $GITLAB_HOME/data
sudo cp -a /var/log/gitlab $GITLAB_HOME/logs
sudo cp -a /etc/gitlab $GITLAB_HOME/config
Pour déplacer au lieu de copier, utilisez mv à la place de cp -a.
[!warning] Ne modifiez pas la propriété des répertoires hôtes en
root:rootavant de démarrer le conteneur. Cela empêche le démarrage du conteneur et empêche le scriptupdate-permissionsde corriger la propriété par la suite.
Vérifiez que le répertoire du dépôt existe et est un répertoire réel, et non un lien symbolique brisé :
ls -la $GITLAB_HOME/data/git-data/repositories
Si le répertoire est manquant ou constitue un lien symbolique brisé, créez-le :
sudo mkdir -p $GITLAB_HOME/data/git-data/repositories
L'image Docker GitLab inclut un script intégré appelé update-permissions qui définit la propriété correcte sur tous les répertoires GitLab. Si l'instance du package Linux a utilisé des UID différents de ceux attendus par l'image Docker (soit les valeurs par défaut du système d'exploitation qui varient selon la distribution, soit des valeurs explicitement configurées), exécutez update-permissions depuis un conteneur temporaire avec vos volumes montés avant de démarrer le conteneur. Cela corrige la propriété avant le premier démarrage :
docker run --rm \
-v <config_path>:/etc/gitlab \
-v <logs_path>:/var/log/gitlab \
-v <data_path>:/var/opt/gitlab \
--entrypoint /bin/bash \
gitlab/gitlab-ee:<version> \
-c "update-permissions"
Remplacez <config_path>, <logs_path> et <data_path> par les chemins hôtes que vous avez identifiés dans Préparer les répertoires de volume.
Suivez les instructions d'installation pour créer un fichier Docker Compose ou une commande Docker Engine qui monte les répertoires que vous avez préparés :
volumes:
- '$GITLAB_HOME/config:/etc/gitlab'
- '$GITLAB_HOME/logs:/var/log/gitlab'
- '$GITLAB_HOME/data:/var/opt/gitlab'
Une fois le conteneur démarré, exécutez reconfigure :
docker exec -it <container_name> gitlab-ctl reconfigure
Vérifiez l'installation :
docker exec -it <container_name> gitlab-rake gitlab:check
Avant d'arrêter votre instance du package Linux, créez une sauvegarde :
sudo gitlab-backup create
Copiez votre fichier de secrets vers un emplacement sécurisé :
sudo cp /etc/gitlab/gitlab-secrets.json /your/backup/location/
Pour plus d'informations, consultez Sauvegarder GitLab.
Arrêtez tous les services GitLab :
sudo gitlab-ctl stop
Suivez les instructions d'installation pour configurer une nouvelle instance Docker. Définissez $GITLAB_HOME sur le répertoire que vous créez pour les volumes, par exemple :
export GITLAB_HOME=/srv/gitlab
Démarrez le conteneur une fois pour initialiser les répertoires de volume, puis arrêtez-le avant de restaurer :
docker compose up -d
docker compose stop
Copiez l'archive de sauvegarde dans le volume de données Docker :
sudo cp <timestamp>_gitlab_backup.tar $GITLAB_HOME/data/backups/
Copiez le fichier de secrets dans le volume de configuration Docker :
sudo cp gitlab-secrets.json $GITLAB_HOME/config/gitlab-secrets.json
Démarrez le conteneur et exécutez la restauration :
docker compose start
docker exec -it <container_name> gitlab-backup restore BACKUP=<timestamp>
Reconfigurez et redémarrez une fois la restauration terminée :
docker exec -it <container_name> gitlab-ctl reconfigure
docker exec -it <container_name> gitlab-ctl restart
Vérifiez l'installation :
docker exec -it <container_name> gitlab-rake gitlab:check
Lors de la migration d'une instance GitLab sur package Linux vers Docker, vous pourriez rencontrer les problèmes suivants.
Si le conteneur démarre mais signale des erreurs de permissions, exécutez :
sudo docker exec <container_name> update-permissions
sudo docker restart <container_name>
Cela se produit lorsque l'instance du package Linux a utilisé des UID différents pour les comptes système de ceux attendus par l'image Docker. Pour éviter cela, exécutez update-permissions avant le démarrage comme décrit dans Aligner les identifiants utilisateur et groupe.
Lors de la réutilisation de données d'une autre instance, vous pourriez rencontrer les problèmes suivants.
stat: missing operand au démarrage {#stat-missing-operand-error-on-startup}Cette erreur se produit lorsque le conteneur ne trouve pas le répertoire git-data/repositories :
stat: missing operand
Expected process to exit with [0], but received '1'
Ran stat --printf='%U' $(readlink -f /var/opt/gitlab/git-data/repositories) returned 1
Sur l'hôte, créez le répertoire manquant, puis redémarrez le conteneur :
sudo mkdir -p $GITLAB_HOME/data/git-data/repositories
sudo docker restart <container_name>
docker exec {#container-exits-immediately-and-restart-loop-blocks-docker-exec}Si le conteneur se ferme immédiatement après le démarrage, vous ne pouvez pas utiliser docker exec pour effectuer des investigations ou exécuter update-permissions. À la place, exécutez update-permissions directement en utilisant la même commande depuis Aligner les identifiants utilisateur et groupe, qui démarre un conteneur temporaire avec vos volumes montés et corrige la propriété sans nécessiter que le conteneur principal soit en cours d'exécution.