Transférer des container docker
Sur l’ancien serveur
Préparation : récupérer les fichiers non présents dans le dossier à l’origine
Recopier le fichier de config nginx nettoyé du certificat SSL
SERVICE_DIR="myservice" && SERVICE_URL="exemple.fr" && CONF_FILE=$(grep -l "server_name.*$SERVICE_URL" /etc/nginx/conf.d/*.conf) && cp "$CONF_FILE" "$SERVICE_DIR/" && sed -i '/# managed by Certbot/d; /ssl_certificate/d; /ssl_certificate_key/d; /include \/etc\/letsencrypt/d; /ssl_dhparam/d; /if ($host =/d; /listen 443 ssl;/d; /return 301/d; /return 404;/d' "$SERVICE_DIR/$(basename "$CONF_FILE")"
Attention : supprimer la dernière section et repasser le listen 80; dans la section "server" du haut !
Récupérer les volumes qui ne sont pas des fichiers (s’il y en a)
$ docker volume ls
docker run --rm -v mydockervolume:/data -v $(pwd):/backup alpine tar czvf /backup/mydockervolume.tar.gz -C /data
1. Créer une archive
a. En une commande
SERVICE_DIR="myservice" && VOLUMES_TO_BACKUP="volumeOne volumeTwo" && cd "$SERVICE_DIR" && docker run --rm -v $(pwd):/backup alpine tar -C /backup -cvf /backup/volume_backup.tar $VOLUMES_TO_BACKUP && echo "volumes: $VOLUMES_TO_BACKUP saved" && cd .. && tar cvf ${SERVICE_DIR}.tar --exclude-from=<(echo -e "${VOLUMES_TO_BACKUP// /\\n}\nother_file.txt") "$SERVICE_DIR" && echo "service: $SERVICE_DIR saved"
Changer "myservice" et "volumeOne volumeTwo" par le nom du répertoire du service et par les différents volumes à enlever.
Ensuite, on a directement une archive à envoyer
b. en plusieurs commandes
1. Créer une archive avec les volumes
$ docker run --rm -v $(pwd):/backup alpine tar -C /backup -cvf /backup/volume_backup.tar volumeOne volumeTwo volumeThree
2. Créer une archive avec tous les fichiers du dossier, sauf les volumes
$ tar cvf myservice.tar --exclude-from=<(echo -e "config\naddons\nweb-datas\n*~") myservice
2. Envoyer l’archive
rsync -avzP --delete -e "ssh -p 22 -T -o Compression=no -x" /opt/docker/myservice.tar username@ip:/opt/docker/
Vérifier l’intégrité de l’archive (checksum) : l’option "p" est changée par "c"
rsync -avzc —delete -e "ssh -p 22 -T -o Compression=no -x" /opt/docker/myservice.tar username@ip :/opt/docker/
3. Extraire sur le serveur distant
Attention à ouvrir les ports 80, 88 et 334 (http, https) si ce n’est pas encore le cas.
Il faut que rsync, docker, nginx et letsencrypt soient installés.
SERVICE_DIR="myservice" && echo "" && tar xvf ${SERVICE_DIR}.tar && cd $SERVICE_DIR && [ -f "volume_backup.tar" ] && (tar -xvf "volume_backup1.tar" 2>/dev/null || echo "**WARNING** Il n'y a pas de volume à extraire.") && rm -rf volume_backup.tar && cd .. && echo ""
Configurer letsencrypy
Pour rappel, voici un tuto https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-debian-11
Et il faut que l’utilisateur ai les droits ou être en root :
Pour donner à l’utilisateur les droits :
# vi /etc/nginx/nginx.conf # : user : doit être sur www-data
# chgrp www-data /etc/nginx/conf.d
# chmod g+w /etc/nginx/conf.d/
# # ls -la /etc/nginx/conf.d
# cp myservice/myurl.fr.conf /etc/nginx/conf.d/
Décompresser les volumes docker
docker run --rm -v myvolume:/data -v $(pwd):/backup alpine tar xzvf /backup/myvolume.tar.gz -C /data
============
Ce qui m’a aidé (à nettoyer)
(Perplexity)
Pour transférer entièrement un volume Docker d’un VPS vers un autre, voici la procédure recommandée :
## Étape 1 : Sauvegarde du volume sur le VPS source
1. Arrêtez le conteneur utilisant le volume :
docker stop <nom_conteneur>
2. Créez une archive tar du volume :
docker run --rm -v <nom_volume>:/source -v $(pwd):/backup alpine tar cvf /backup/volume_backup.tar /source
Cette commande crée une archive volume_backup.tar dans le répertoire courant.
## Étape 2 : Transfert de l’archive vers le nouveau VPS
Utilisez scp pour transférer l’archive :
scp volume_backup.tar utilisateur@nouveau_vps:/chemin/destination/
## Étape 3 : Restauration du volume sur le nouveau VPS
1. Sur le nouveau VPS, créez un nouveau volume Docker :
docker volume create <nouveau_nom_volume>
2. Restaurez les données dans le nouveau volume :
docker run --rm -v <nouveau_nom_volume>:/destination -v /chemin/destination:/backup alpine sh -c "cd /destination && tar xvf /backup/volume_backup.tar --strip 1"
## Étape 4 : Utilisation du volume restauré
Modifiez votre fichier docker-compose.yml ou la commande docker run pour utiliser le nouveau volume :
volumes:
- <nouveau_nom_volume>:/chemin/dans/conteneur
## Considérations importantes
– **Taille du volume** : Pour les volumes volumineux, envisagez de compresser l’archive ou d’utiliser un transfert par morceaux[1].
– **Cohérence des données** : Assurez-vous que le conteneur est arrêté pendant la sauvegarde pour garantir l’intégrité des données[4].
– **Permissions** : Vérifiez que les permissions des fichiers sont correctement préservées lors de la restauration[2].
– **Noms de volumes** : Adaptez les noms des volumes dans vos configurations Docker sur le nouveau VPS si nécessaire[5].
En suivant ces étapes, vous pouvez transférer efficacement et en toute sécurité un volume Docker complet d’un VPS à un autre, en préservant toutes les données et la structure du volume.
Citations :
[1] https://bitlaunch.io/blog/how-to-transfer-docker-volumes-between-your-vps-and-local-pc/
[2] https://vsys.host/how-to/transferring-a-docker-volume-to-another-host
[3] https://www.ionos.fr/digitalguide/serveur/know-how/volumes-de-conteneurs-docker/
[4] https://docs.docker.com/engine/storage/volumes/
[5] https://www.reddit.com/r/docker/comments/18oxsk7/how_to_move_everything/?tl=fr
[6] https://mondedie.fr/d/10982-migrations-conteneurs
[7] https://www.youtube.com/watch?v=0ZcePSwZ41w
[8] https://cnil.fr/fr/les-outils-de-securisation-dapplications-web-dans-linformatique-en-nuage-cloud
=====================================================
Pour copier efficacement et complètement les données d’un VPS vers un autre en utilisant rsync, tout en maximisant la vitesse de transfert, voici la procédure recommandée :
## Préparation
1. Assurez-vous que rsync est installé sur les deux VPS. Si ce n’est pas le cas, installez-le :
sudo apt-get install rsync # Pour Debian/Ubuntu
sudo yum install rsync # Pour CentOS/RHEL
2. Vérifiez que vous avez un accès SSH aux deux VPS.
## Commande rsync optimisée
Utilisez la commande suivante depuis le VPS de destination :
rsync -avzP --delete --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} -e "ssh -p 22 -T -c aes128-gcm@openssh.com -o Compression=no -x" root@IP_SOURCE:/ /
## Explication des options
– -a : mode archive (préserve les permissions, propriétés, etc.)
– -v : mode verbeux
– -z : compresse les données pendant le transfert
– -P : montre la progression et permet la reprise des transferts interrompus
– --delete : supprime les fichiers de destination qui n’existent plus à la source
– --exclude : exclut certains répertoires non nécessaires ou problématiques
– -e "ssh ..." : options SSH pour optimiser la vitesse :
- -T : désactive l’allocation de pseudo-terminal
- -c aes128-gcm@openssh.com : utilise un chiffrement rapide
- -o Compression=no : désactive la compression SSH (rsync s’en charge)
- -x : désactive le transfert X11
## Considérations importantes
1. **Arrêt des services** : Arrêtez les services critiques sur le VPS source pour assurer la cohérence des données.
2. **Vérification** : Après le transfert, vérifiez l’intégrité des données :
rsync -avzc --delete [mêmes options que précédemment]
L’option -c effectue une vérification par checksum.
3. **Permissions** : Assurez-vous que les permissions sont correctement transférées, particulièrement pour les fichiers système critiques.
4. **Bande passante** : Cette méthode utilise beaucoup de bande passante. Assurez-vous que cela ne pose pas de problème avec votre fournisseur VPS.
5. **Temps** : Le processus peut prendre plusieurs heures selon la quantité de données et la vitesse de connexion.
En suivant cette méthode, vous obtiendrez une copie complète et fidèle de votre VPS source vers le VPS de destination, tout en optimisant la vitesse du transfert.
Citations :
[1] https://www.hostwinds.fr/tutorials/how-to-sync-a-vps-to-your-local-computer-with-rsync-linux
[2] https://www.hostinger.fr/tutoriels/commande-rsync-linux
[3] https://eroambahub.com/transferer-vos-donnees-autrement-rsync-et-scp/
[4] https://www.ionos.fr/digitalguide/serveur/outils/creer-une-sauvegarde-de-serveur-avec-rsync/
[5] https://www.easyhoster.com/aide/migration-rsync/
[6] https://www.scrample.xyz/sauvegarde-avec-rsync/
[7] https://bitlaunch.io/blog/how-to-transfer-docker-volumes-between-your-vps-and-local-pc/
[8] https://www.webhi.com/how-to/fr/comment-utiliser-rsync-pour-copier-des-fichiers-via-ssh/