Comment sauvegarder votre référentiel Git dans les espaces DigitalOcean

introduction

S’appuyer sur un référentiel de code source pour la gestion des versions est une pratique recommandée qui peut nous permettre de fonctionner à nouveau dès qu’un changement de code provoque le blocage ou le comportement erratique de notre application. Cependant, en cas d’événement catastrophique, tel qu’une branche complète supprimée accidentellement ou perdant l’accès à un référentiel, nous devrions tirer parti de stratégies de reprise après sinistre supplémentaires.

La sauvegarde de notre référentiel de code dans une infrastructure de stockage d’objets nous fournit une copie hors site de nos données que nous pouvons récupérer en cas de besoin. Spaces est la solution de stockage d’objets de DigitalOcean qui offre aux utilisateurs une destination pour stocker des sauvegardes d’actifs, de documents et de codes numériques.

Compatible avec l’API S3, Spaces nous permet d’utiliser des outils S3 tels que S3cmd pour s’y interfacer. S3cmd est un outil client que nous pouvons utiliser pour le téléchargement, la récupération et la gestion de données provenant du stockage d’objets via la ligne de commande ou via un script.

Dans ce tutoriel, nous montrerons comment sauvegarder un référentiel Git distant dans un espace DigitalOcean à l’aide de S3cmd. Pour atteindre cet objectif, nous allons installer et configurer Git, installer S3cmd et créer des scripts pour sauvegarder le référentiel Git dans notre espace.

Conditions préalables

Pour pouvoir utiliser Spaces, vous devez disposer d’un compte DigitalOcean. Si vous n’en avez pas déjà un, vous pouvez vous inscrire sur la page signup.

À partir de là, vous devrez configurer votre espace DigitalOcean et créer une clé API. Pour ce faire, suivez notre didacticiel: https://www.digitalocean.com/community/tutorials/how-to-create-a-digitalocean. -space-and-api-key [Comment créer un espace DigitalOcean et une clé API].

Une fois créé, vous devez conserver les détails suivants concernant votre espace:

  • Clef d’accès

  • Clé secrète (également appelée jeton)

De plus, vous devez avoir un serveur Ubuntu 16.04 configuré avec un utilisateur sudo non root. Vous pouvez obtenir des conseils pour le configurer en suivant this tutorial sur la configuration initiale du serveur Ubuntu 16.04.

Une fois que vous avez configuré les informations sur les espaces et le serveur, passez à la section suivante pour installer Git.

Installer Git

Dans ce didacticiel, nous allons travailler avec un référentiel Git distant que nous allons cloner sur notre serveur. Ubuntu a Git installé et prêt à être utilisé dans ses référentiels par défaut, mais cette version peut être plus ancienne que la version disponible la plus récente.

Nous pouvons utiliser les outils de gestion de paquets + apt + pour mettre à jour l’index de paquet local et pour télécharger et installer la version la plus récente de Git.

sudo apt-get update
sudo apt-get install git

Pour plus de flexibilité dans l’installation de Git et pour vous assurer que vous disposez de la dernière version, vous pouvez envisager https://www.digitalocean.com/community/tutorials/how-to-install-git-on-ubuntu-16-04 # how-to-install-git-from-source [installer Git depuis la source].

Nous allons sauvegarder à partir de l’URL d’un référentiel Git, nous n’aurons donc pas besoin de configurer Git dans ce tutoriel. Pour obtenir des conseils sur la configuration de Git, lisez cette section à l’adresse https://www.digitalocean.com/community/tutorials/how-to-install-git-on-ubuntu-16-04#how-to-set-up-git [ Comment configurer Git].

Nous allons maintenant passer au clonage de notre référentiel Git distant.

Cloner un référentiel Git distant

Afin de cloner notre référentiel Git, nous allons créer un script pour effectuer la tâche. La création d’un script nous permet d’utiliser des variables et nous évite de commettre des erreurs sur la ligne de commande.

Pour écrire notre script exécutable, nous allons créer un nouveau fichier de script shell appelé + .sh + avec l’éditeur de texte nano.

nano .sh

Dans ce fichier vide, écrivons le script suivant.

cloneremote.sh

#!/bin/bash

remoterepo=
localclonedir=
clonefilename=.git

git clone --mirror $remoterepo $localclonedir/$clonefilename

Passons en revue chaque élément de ce script.

La première ligne - + #! / Bin / bash + - indique que le script sera exécuté par le shell Bash. À partir de là, nous définissons les variables qui seront utilisées dans la commande, qui seront exécutées une fois le script exécuté. Ces variables définissent les éléments de configuration suivants:

  • + remoterepo + est affecté à l’URL du référentiel Git distant à partir duquel nous allons sauvegarder

  • + localclonedir + fait référence au répertoire ou au dossier du serveur dans lequel nous allons cloner le référentiel distant. Dans ce cas, nous l’avons appelé ++

  • + nom_fichier_clone + fait référence au nom de fichier que nous fournirons au référentiel cloné local, dans ce cas nous l’avons appelé + .git +

Chacune de ces variables est ensuite appelée directement dans la commande à la fin du script.

La dernière ligne du script utilise le client en ligne de commande Git commençant par la commande + git +. À partir de là, nous demandons de cloner un référentiel avec + clone + et de l’exécuter en tant que version miroir du référentiel avec la balise + - mirror +. Cela signifie que le référentiel cloné sera exactement le même que celui d’origine. Les trois variables que nous avons définies ci-dessus sont appelées avec + $ +.

Lorsque vous êtes convaincu que le script que vous avez écrit est exact, vous pouvez quitter nano en tapant les touches + CTRL + + + + + , et lorsque le système vous invite à enregistrer le fichier, appuyez sur ` y +`.

À ce stade, nous pouvons exécuter le script shell avec la commande suivante.

sh .sh

Une fois la commande exécutée, vous recevrez une sortie similaire à celle-ci.

OutputCloning into bare repository './/.git'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
Checking connectivity... done.

À ce stade, si vous répertoriez les éléments de votre répertoire actuel, vous devez y voir votre répertoire de sauvegarde. Si vous accédez à ce répertoire, vous verrez le sous-dossier avec le nom de fichier que vous avez fourni dans le script. Ce sous-répertoire est le clone du référentiel Git.

Avec notre référentiel Git distant cloné, nous pouvons maintenant passer à l’installation de S3cmd, que nous pouvons utiliser pour sauvegarder le référentiel dans le stockage d’objets.

Installer S3cmd

L’outil S3cmd nous permet de nous connecter à l’environnement Spaces à partir de la ligne de commande. Nous téléchargerons la dernière version de S3cmd à partir de son référentiel GitHub public et suivrons les instructions recommandées pour son installation.

Avant d’installer S3cmd, nous devons installer Setuptools de Python, car cela facilitera notre installation (S3cmd est écrit en Python).

sudo apt-get install python-setuptools

Appuyez sur + y + pour continuer.

Ceci téléchargé, nous pouvons maintenant télécharger le fichier S3cmd + tar.gz + avec + curl +.

cd /tmp
curl -LO https://github.com/s3tools/s3cmd/releases/download//s3cmd-.tar.gz

Notez que nous téléchargeons le fichier dans notre répertoire + tmp +. Ceci est une pratique courante lors du téléchargement de fichiers sur notre serveur.

Vous pouvez vérifier si une version plus récente de S3cmd est disponible en visitant la page Releases du référentiel GitHub de l’outil. Si vous trouvez une version plus récente, vous pouvez copier l’URL + tar.gz + et la remplacer dans la commande + curl + ci-dessus.

Une fois le téléchargement terminé, décompressez et décompressez le fichier à l’aide de l’utilitaire tar:

cd ~
tar xf /tmp/s3cmd-*.tar.gz

Dans les commandes ci-dessus, nous sommes revenus dans notre répertoire personnel, puis nous avons exécuté la commande + tar. Nous avons utilisé deux indicateurs avec la commande, le + x + indique que nous voulons e x extraire d’un fichier tar et le + f + indique que la chaîne immédiatement adjacente sera le nom de chemin complet de le fichier que nous voulons développer. Dans le chemin du fichier tar, nous indiquons également qu’il se trouve dans le répertoire + tmp +.

Une fois le fichier extrait, accédez au répertoire résultant et installez le logiciel à l’aide de sudo:

cd s3cmd-*
sudo python setup.py install

Pour que la commande ci-dessus soit exécutée, nous devons utiliser + sudo +. La commande + python + est un appel à l’interpréteur Python pour installer le script Python + setup.py +.

Testez l’installation en demandant à S3cmd ses informations de version:

s3cmd --version
Outputs3cmd version

Si vous voyez une sortie similaire, S3cmd a été installé avec succès. Ensuite, nous allons configurer S3cmd pour qu’il se connecte à notre service de stockage d’objets.

Configurer S3cmd

S3cmd a un processus de configuration interactif qui permet de créer le fichier de configuration nécessaire pour se connecter à notre serveur de stockage d’objets. Au cours du processus de configuration, votre clé d’accès et votre clé secrète vous seront demandées afin qu’elles soient facilement disponibles.

Commençons le processus de configuration en tapant la commande suivante:

s3cmd --configure

Nous sommes invités à entrer nos clés, nous allons donc les coller, puis accepter «+ US +» pour la * région par défaut *. Il est à noter que le fait de pouvoir modifier la région par défaut est pertinent pour l’infrastructure AWS avec laquelle l’outil S3cmd a été créé à l’origine. Étant donné que DigitalOcean nécessite moins d’informations pour la configuration, ceci n’est pas pertinent et nous acceptons les valeurs par défaut.

Enter new values or accept defaults in brackets with Enter.
Refer to user manual for detailed description of all options.
Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.
Access Key []:
Secret Key []:
Default Region [US]:

Ensuite, nous allons entrer dans le noeud final DigitalOcean, + nyc3.digitaloceanspaces.com.

Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3.
S3 Endpoint [s3.amazonaws.com]:

Etant donné que Spaces prend en charge les compartiments basés sur DNS, à la prochaine invite, nous fournirons la valeur du compartiment au format requis:

%(bucket)s.nyc3.digitaloceanspaces.com
Use "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars c
an be used if the target S3 system supports dns based buckets.
DNS-style bucket+hostname:port template for accessing a bucket []:

À ce stade, nous sommes invités à fournir un mot de passe de cryptage. Nous allons entrer un mot de passe pour qu’il soit disponible si nous voulons utiliser le cryptage.

Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password:
Path to GPG program [/usr/bin/gpg]:

Nous sommes ensuite invités à nous connecter via HTTPS, mais DigitalOcean Spaces ne prenant pas en charge le transfert non crypté, nous allons donc appuyer sur + ENTER + pour accepter la valeur par défaut, + Yes +.

When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP, and can only be proxied with Python 2.7 or newer
Use HTTPS protocol [Yes]:

Étant donné que nous n’utilisons pas de serveur proxy HTTP, nous laisserons l’invite suivante vierge et nous appuierons sur '+ ENTER + `.

On some networks all internet access must go through a HTTP proxy.
Try setting it here if you can't connect to S3 directly
HTTP Proxy server name:

Après l’invite du nom du serveur proxy HTTP, le script de configuration présente un résumé des valeurs qu’il utilisera, suivi de la possibilité de les tester. Une fois le test terminé, entrez + Y + pour enregistrer les paramètres.

Une fois la configuration enregistrée, vous recevrez une confirmation de son emplacement.

Lorsque vous avez terminé toutes les étapes de l’installation, vous pouvez vérifier que votre configuration est correcte en exécutant la commande suivante.

s3cmd ls

Cette commande doit générer une liste des espaces disponibles avec les informations d’identification que vous avez fournies.

Output2017-12-15 02:52  s3://

Cela confirme que nous nous sommes connectés avec succès à nos espaces DigitalOcean. Nous pouvons maintenant passer à la sauvegarde de notre référentiel Git dans le stockage d’objets.

Sauvegarder le référentiel Git dans le stockage d’objets

Avec tous nos outils installés et configurés, nous allons maintenant créer un script qui va compresser le référentiel local et le pousser dans notre espace DigitalOcean.

Depuis notre répertoire personnel, appelons notre script + .sh + et ouvrons-le dans nano.

cd ~
nano .sh

Nous écrirons notre script comme suit.

movetospaces.sh

#!/bin/sh

tar -zcvf .tar.gz //.git
./s3cmd-/s3cmd put .tar.gz s3://

Plus tôt dans ce tutoriel, nous avons utilisé + tar + pour décompresser + s3cmd +, nous utilisons maintenant + tar + pour compresser le référentiel Git avant de l’envoyer à Spaces. Dans la commande + tar +, nous spécifions quatre drapeaux:

  • + z + compresse en utilisant la méthode gzip

  • + c + crée un nouveau fichier au lieu d’utiliser un fichier existant

  • + v + indique que nous sommes en train de commenter les fichiers inclus dans le fichier compressé

  • + f + nomme le fichier résultant avec le nom défini dans la chaîne suivante

Après les drapeaux, nous fournissons un nom de fichier pour le fichier compressé, dans ce cas + .tar.gz +. Nous fournissons également le nom du répertoire que nous voulons compresser + //. Git +.

Le script exécute ensuite + s3cmd put + pour envoyer + .tar.gz + à notre espace de destination + s3: // +.

Parmi les commandes que vous pouvez couramment utiliser avec S3cmd, la commande + put + envoie des fichiers à Spaces. Parmi les autres commandes pouvant être utiles, citons la commande + get + pour télécharger des fichiers depuis l’espace, et la commande + delete + pour supprimer des fichiers. Vous pouvez obtenir une liste de toutes les commandes acceptées par S3cmd en exécutant + s3cmd + sans option.

Pour copier votre sauvegarde dans votre espace, nous exécuterons le script.

sh .sh

Vous verrez la sortie suivante:

Output.git/
...
.git/packed-refs
upload: '.tar.gz' -> 's3:///.tar.gz'  [1 of 1]
6866 of 6866   100% in    0s    89.77 kB/s  done

Vous pouvez vérifier que le processus a fonctionné correctement en exécutant la commande suivante:

s3cmd ls s3://

Vous verrez la sortie suivante, indiquant que le fichier est dans votre espace.

Output2017-12-18 20:31      6866   s3:///.tar.gz

Nous avons maintenant sauvegardé avec succès notre référentiel Git dans notre espace DigitalOcean.

Conclusion

Pour que le code puisse être rapidement récupéré si nécessaire, il est important de conserver les sauvegardes. Dans ce didacticiel, nous avons expliqué comment sauvegarder un référentiel Git distant dans un espace DigitalOcean à l’aide de Git, du client S3cmd et de scripts shell. Il ne s’agit que d’une méthode parmi des dizaines de scénarios possibles dans lesquels vous pouvez utiliser Spaces pour vous aider dans vos stratégies de reprise après sinistre et de cohérence des données.

Vous pouvez en savoir plus sur ce que nous pouvons stocker dans le stockage d’objets en lisant les tutoriels suivants: