So sichern Sie Ihr Git-Repository in DigitalOcean-Spaces

Einführung

Das Verlassen auf ein Quellcode-Repository für die Versionierung ist eine bewährte Methode, mit der wir wieder in Betrieb genommen werden können, wenn eine Codeänderung dazu führt, dass unsere Anwendung abstürzt oder sich fehlerhaft verhält. Im Falle eines katastrophalen Ereignisses wie dem versehentlichen Löschen eines vollständigen Zweigs oder dem Verlust des Zugriffs auf ein Repository sollten wir jedoch zusätzliche Notfallwiederherstellungsstrategien nutzen.

Durch das Sichern unseres Code-Repositorys in einer Objektspeicherinfrastruktur erhalten wir eine externe Kopie unserer Daten, die wir bei Bedarf wiederherstellen können. Spaces ist die Objektspeicherlösung von DigitalOcean, mit der Benutzer Backups von digitalen Assets, Dokumenten und Code speichern können.

Mit Spaces, das mit der S3-API kompatibel ist, können wir S3-Tools wie S3cmd für die Schnittstelle verwenden. S3cmd ist ein Client-Tool, mit dem wir Daten aus dem Objektspeicher über die Befehlszeile oder per Skript hochladen, abrufen und verwalten können.

In diesem Tutorial zeigen wir Ihnen, wie Sie mit S3cmd ein entferntes Git-Repository in einem DigitalOcean Space sichern. Um dieses Ziel zu erreichen, werden wir Git installieren und konfigurieren, S3cmd installieren und Skripte erstellen, um das Git-Repository in unserem Space zu sichern.

Voraussetzungen

Um mit Spaces arbeiten zu können, benötigen Sie ein DigitalOcean-Konto. Wenn Sie noch keinen haben, können Sie sich auf der signup page registrieren.

Von dort aus müssen Sie Ihren DigitalOcean Space einrichten und einen API-Schlüssel erstellen. Dies erreichen Sie, indem Sie unserem Tutorial https://www.digitalocean.com/community/tutorials/how-to-create-a-digitalocean folgen -space-and-api-key [So erstellen Sie einen DigitalOcean-Space und einen API-Schlüssel].

Nach dem Erstellen müssen Sie die folgenden Details zu Ihrem Space griffbereit halten:

  • Zugangsschlüssel

  • Geheimschlüssel (auch Token genannt)

Außerdem sollte ein Ubuntu 16.04-Server mit einem Benutzer ohne Rootberechtigung eingerichtet sein. Anleitungen zum Einrichten finden Sie unter this Ubuntu 16.04 initial server setup tutorial.

Sobald Sie Ihre Spaces-Informationen und Ihren Server eingerichtet haben, fahren Sie mit dem nächsten Abschnitt fort, um Git zu installieren.

Installieren Sie Git

In diesem Tutorial arbeiten wir mit einem entfernten Git-Repository, das wir auf unseren Server klonen. In Ubuntu ist Git installiert und kann in den Standard-Repositorys verwendet werden. Diese Version ist jedoch möglicherweise älter als die neueste verfügbare Version.

Wir können die + apt + - Paketverwaltungstools verwenden, um den lokalen Paketindex zu aktualisieren und die neueste verfügbare Version von Git herunterzuladen und zu installieren.

sudo apt-get update
sudo apt-get install git

Eine flexiblere Möglichkeit, Git zu installieren und sicherzustellen, dass Sie über die neueste Version verfügen, finden Sie unter https://www.digitalocean.com/community/tutorials/how-to-install-git-on-ubuntu-16-04 # How-to-Install-Git-From-Source [Installieren von Git From Source].

Wir werden von der URL eines Git-Repositorys sichern, daher müssen wir Git in diesem Lernprogramm nicht konfigurieren. Anleitungen zum Konfigurieren von Git finden Sie in diesem Abschnitt unter https://www.digitalocean.com/community/tutorials/how-to-install-git-on-ubuntu-16-04#how-to-set-up-git [ Git einrichten].

Jetzt fahren wir mit dem Klonen unseres entfernten Git-Repository fort.

Klonen Sie ein Remote-Git-Repository

Um unser Git-Repository zu klonen, erstellen wir ein Skript, um die Aufgabe auszuführen. Durch das Erstellen eines Skripts können wir Variablen verwenden und sicherstellen, dass in der Befehlszeile keine Fehler auftreten.

Um unser ausführbares Skript zu schreiben, erstellen wir mit dem Texteditor nano eine neue Shell-Skriptdatei mit dem Namen "+ .sh +".

nano .sh

Schreiben Sie in diese leere Datei das folgende Skript.

cloneremote.sh

#!/bin/bash

remoterepo=
localclonedir=
clonefilename=.git

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

Lassen Sie uns die einzelnen Elemente dieses Skripts durchgehen.

Die erste Zeile - + #! / Bin / bash + - zeigt an, dass das Skript von der Bash-Shell ausgeführt wird. Von dort aus definieren wir die Variablen, die im Befehl verwendet werden, der ausgeführt wird, sobald wir das Skript ausführen. Diese Variablen definieren die folgenden Konfigurationselemente:

  • + remoterepo + wird die entfernte Git-Repository-URL zugewiesen, von der gesichert wird

  • + localclonedir + bezieht sich auf das Serververzeichnis oder den Ordner, in den das Remote-Repository geklont werden soll. In diesem Fall haben wir ihn "++" genannt

  • + clonefilename + bezieht sich auf den Dateinamen, den wir dem lokalen geklonten Repository zur Verfügung stellen. In diesem Fall haben wir ihn + .git + genannt

Jede dieser Variablen wird dann direkt im Befehl am Ende des Skripts aufgerufen.

In der letzten Zeile des Skripts wird der Git-Befehlszeilenclient verwendet, der mit dem Befehl "+ git " beginnt. Von dort fordern wir an, ein Repository mit ` clone ` zu klonen und es als Spiegelversion des Repositorys mit dem Tag ` - mirror ` auszuführen. Dies bedeutet, dass das geklonte Repository genau dasselbe ist wie das ursprüngliche. Die drei Variablen, die wir oben definiert haben, werden mit ` $ +` aufgerufen.

Wenn Sie überzeugt sind, dass das von Ihnen geschriebene Skript korrekt ist, können Sie nano durch Eingabe der Tasten "+ STRG " + " x " beenden. Wenn Sie zum Speichern der Datei aufgefordert werden, drücken Sie " y +".

Zu diesem Zeitpunkt können wir das Shell-Skript mit dem folgenden Befehl ausführen.

sh .sh

Sobald Sie den Befehl ausführen, erhalten Sie eine Ausgabe ähnlich der folgenden.

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.

Wenn Sie zu diesem Zeitpunkt die Elemente in Ihrem aktuellen Verzeichnis auflisten, sollte dort Ihr Sicherungsverzeichnis angezeigt werden. Wenn Sie in dieses Verzeichnis wechseln, wird der Unterordner mit dem Dateinamen angezeigt, den Sie im Skript angegeben haben. Dieses Unterverzeichnis ist der Klon des Git-Repository.

Wenn unser entferntes Git-Repository geklont ist, können wir jetzt S3cmd installieren, mit dem wir das Repository im Objektspeicher sichern können.

Installieren Sie S3cmd

Mit dem S3cmd-Tool können wir über die Befehlszeile eine Verbindung zur Spaces-Umgebung herstellen. Wir werden die neueste Version von S3cmd von seinem public GitHub-Repository herunterladen und die empfohlenen Richtlinien für die Installation befolgen.

Vor der Installation von S3cmd müssen wir die Setuptools von Python installieren, da dies bei unserer Installation hilfreich ist (S3cmd ist in Python geschrieben).

sudo apt-get install python-setuptools

Drücken Sie + y +, um fortzufahren.

Mit diesem Download können wir nun die S3cmd + tar.gz + Datei mit + curl + herunterladen.

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

Beachten Sie, dass wir die Datei in unser + tmp + Verzeichnis herunterladen. Dies ist eine gängige Praxis beim Herunterladen von Dateien auf unseren Server.

Sie können überprüfen, ob eine neuere Version von S3cmd verfügbar ist, indem Sie die Seite Releases im GitHub-Repository des Tools aufrufen. Wenn Sie eine neuere Version finden, können Sie die URL "+ tar.gz " kopieren und in den obigen Befehl " curl +" einfügen.

Wenn der Download abgeschlossen ist, entpacken und entpacken Sie die Datei mit dem Dienstprogramm tar:

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

In den obigen Befehlen haben wir zurück in unser Home-Verzeichnis gewechselt und dann den Befehl "+ tar" ausgeführt. Wir haben mit dem Befehl zwei Flags verwendet, das "+ x " zeigt an, dass wir aus einer tar-Datei e ** x ** ziehen möchten, und das " f " zeigt an, dass der unmittelbar benachbarte String der vollständige Pfadname von sein wird die Datei, aus der wir expandieren möchten. Im Dateipfad der TAR-Datei geben wir außerdem an, dass sie sich im Verzeichnis " tmp +" befindet.

Wechseln Sie nach dem Extrahieren der Datei in das resultierende Verzeichnis und installieren Sie die Software mit sudo:

cd s3cmd-*
sudo python setup.py install

Damit der obige Befehl ausgeführt werden kann, müssen wir + sudo + verwenden. Der Befehl + python + ruft den Python-Interpreter auf, um das Python-Skript + setup.py + zu installieren.

Testen Sie die Installation, indem Sie S3cmd nach den Versionsinformationen fragen:

s3cmd --version
Outputs3cmd version

Wenn Sie eine ähnliche Ausgabe sehen, wurde S3cmd erfolgreich installiert. Als Nächstes konfigurieren wir S3cmd so, dass eine Verbindung zu unserem Objektspeicherdienst hergestellt wird.

Konfigurieren Sie S3cmd

S3cmd verfügt über einen interaktiven Konfigurationsprozess, mit dem die Konfigurationsdatei erstellt werden kann, die für die Verbindung zu unserem Objektspeicherserver erforderlich ist. Während des Konfigurationsvorgangs werden Sie nach Ihrem Zugangsschlüssel und Ihrem geheimen Schlüssel gefragt, damit Sie diese zur Hand haben.

Beginnen wir den Konfigurationsprozess mit dem folgenden Befehl:

s3cmd --configure

Wir werden aufgefordert, unsere Schlüssel einzugeben. Fügen Sie sie also ein und akzeptieren Sie "+ US +" für die * Standardregion *. Es ist zu beachten, dass das Ändern der Standardregion für die AWS-Infrastruktur relevant ist, für die das S3cmd-Tool ursprünglich erstellt wurde. Da DigitalOcean für die Konfiguration weniger Informationen benötigt, ist dies nicht relevant, sodass wir die Standardeinstellungen akzeptieren.

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]:

Als nächstes geben wir den DigitalOcean-Endpunkt "+ nyc3.digitaloceanspaces.com" ein.

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

Da Spaces DNS-basierte Buckets unterstützt, geben wir bei der nächsten Aufforderung den Bucket-Wert im erforderlichen Format an:

%(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 []:

An dieser Stelle werden wir aufgefordert, ein Verschlüsselungskennwort anzugeben. Wir geben ein Passwort ein, damit es für den Fall verfügbar ist, dass wir die Verschlüsselung verwenden möchten.

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]:

Das nächste Mal werden wir aufgefordert, eine Verbindung über HTTPS herzustellen, aber DigitalOcean Spaces unterstützt keine unverschlüsselte Übertragung. Drücken Sie daher "+ ENTER ", um die Standardeinstellung " Yes +" zu akzeptieren.

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]:

Da wir keinen HTTP-Proxyserver verwenden, lassen wir die nächste Eingabeaufforderung leer und drücken "+ 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:

Nach der Aufforderung zur Eingabe des HTTP-Proxyservernamens zeigt das Konfigurationsskript eine Zusammenfassung der verwendeten Werte an, gefolgt von der Möglichkeit, diese zu testen. Wenn der Test erfolgreich abgeschlossen wurde, geben Sie "+ Y +" ein, um die Einstellungen zu speichern.

Sobald Sie die Konfiguration gespeichert haben, erhalten Sie eine Bestätigung des Speicherorts.

Wenn Sie alle Installationsschritte abgeschlossen haben, können Sie die Richtigkeit Ihrer Einrichtung überprüfen, indem Sie den folgenden Befehl ausführen.

s3cmd ls

Dieser Befehl sollte eine Liste der Bereiche ausgeben, die unter den von Ihnen angegebenen Anmeldeinformationen verfügbar sind.

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

Dies bestätigt, dass wir uns erfolgreich mit unseren DigitalOcean Spaces verbunden haben. Wir können jetzt mit dem Sichern unseres Git-Repositorys in den Objektspeicher fortfahren.

Sichern Sie das Git-Repository im Objektspeicher

Nachdem alle unsere Tools installiert und konfiguriert wurden, erstellen wir jetzt ein Skript, mit dem das lokale Repository komprimiert und in unseren DigitalOcean Space verschoben wird.

Rufen Sie in unserem Ausgangsverzeichnis unser Skript "+ .sh +" auf und öffnen Sie es in nano.

cd ~
nano .sh

Wir werden unser Skript wie folgt schreiben.

movetospaces.sh

#!/bin/sh

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

Früher in diesem Tutorial haben wir "+ tar " verwendet, um " s3cmd " zu entpacken. Jetzt verwenden wir " tar ", um das Git-Repository zu komprimieren, bevor wir es an Spaces senden. Im Befehl " tar +" geben wir vier Flags an:

  • + z + komprimiert mit der gzip-Methode

  • + c + erstellt eine neue Datei, anstatt eine vorhandene zu verwenden

  • + v + zeigt an, dass die in der komprimierten Datei enthaltenen Dateien ausführlich sind

  • + f + benennt die resultierende Datei mit dem Namen, der in der nächsten Zeichenfolge definiert ist

Nach den Flags geben wir einen Dateinamen für die komprimierte Datei an, in diesem Fall + .tar.gz +. Wir geben auch den Namen des Verzeichnisses an, das wir komprimieren möchten + //. Git +.

Das Skript führt dann "+ s3cmd put " aus, um " .tar.gz " an unseren Zielbereich " s3: // +" zu senden.

Unter den Befehlen, die Sie normalerweise mit S3cmd verwenden, sendet der Befehl + put + Dateien an Spaces. Weitere nützliche Befehle sind der Befehl "+ get " zum Herunterladen von Dateien aus dem Space und der Befehl " delete " zum Löschen von Dateien. Sie können eine Liste aller von S3cmd akzeptierten Befehle erhalten, indem Sie ` s3cmd +` ohne Optionen ausführen.

Um Ihr Backup in Ihren Space zu kopieren, führen wir das Skript aus.

sh .sh

Sie werden die folgende Ausgabe sehen:

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

Sie können überprüfen, ob der Prozess ordnungsgemäß funktioniert hat, indem Sie den folgenden Befehl ausführen:

s3cmd ls s3://

Die folgende Ausgabe zeigt an, dass sich die Datei in Ihrem Space befindet.

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

Wir haben jetzt unser Git-Repository erfolgreich in unserem DigitalOcean Space gesichert.

Fazit

Um sicherzustellen, dass der Code bei Bedarf schnell wiederhergestellt werden kann, ist es wichtig, Sicherungen zu führen. In diesem Tutorial wurde erläutert, wie Sie ein entferntes Git-Repository mit Git, dem S3cmd-Client und Shell-Skripten in einem DigitalOcean Space sichern. Dies ist nur eine Methode aus Dutzenden von möglichen Szenarien, in denen Sie Spaces verwenden können, um Ihre Disaster Recovery- und Datenkonsistenzstrategien zu unterstützen.

In den folgenden Tutorials erfahren Sie mehr darüber, was wir im Objektspeicher ablegen können: