Installieren und Konfigurieren von Syncthing zum Synchronisieren von Verzeichnissen unter Ubuntu 14.04

Einführung

Es gibt viele Programme, die Dateien zwischen verschiedenen Computern synchronisieren können. * Syncthing * ist eine überzeugende neue Option, die plattformübergreifend, vollständig Open Source, sehr flexibel und benutzerfreundlich ist.

In diesem Handbuch zeigen wir Ihnen, wie Sie mit Syncthing Daten zwischen zwei Ubuntu 14.04-Serverinstanzen synchronisieren können. Auf diese Weise können Sie Dateien zwischen diesen Servern basierend auf konfigurierten Überwachungsverzeichnissen nahtlos synchronisieren.

Voraussetzungen und Ziele

Um dieses Handbuch zu vervollständigen, benötigen Sie Zugriff auf zwei Ubuntu 14.04-Serverinstanzen.

Für die Zwecke dieses Handbuchs bezeichnen wir diese Server als:

  • * Serverone *

  • * Servertwo *

Diese werden gleichberechtigte Partner sein, sodass keine primäre / sekundäre Beziehung besteht. Sie sollten für jedes Konto ein reguläres Benutzerkonto eingerichtet haben (Informationen dazu finden Sie in den Schritten 1 bis 4 unter https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu- 14-04 [Anleitung zur Ersteinrichtung des Servers für Ubuntu 14.04] hier).

Das reguläre Benutzerkonto in diesem Handbuch heißt "++", Sie sollten jedoch einen beliebigen Benutzernamen verwenden. Dies muss nicht von Ihrem regulären Nicht-Root-Konto getrennt sein.

Wir werden Syncthing auf jedem dieser Computer installieren und konfigurieren, damit Dateien zwischen ihnen geteilt werden können. Nachdem Sie die in diesem Handbuch beschriebenen Schritte ausgeführt haben, sollten Sie über zwei Server mit einem Verzeichnis verfügen, das die Änderungen auf dem anderen Computer spiegelt.

Wir installieren Syncthing als Anwendung auf Systemebene und erstellen ein Upstart-Skript. Auf diese Weise können unsere Syncthing-Instanzen beim Booten gestartet und korrekt neu gestartet werden, anstatt standardmäßig jedes Mal neue Instanzen zu erzeugen.

Erster Download und Installation

Als Erstes müssen wir die Syncthing-Binärdatei auf jeden unserer Server herunterladen.

Die neueste Paketversion finden Sie auf der GitHub-Seite releases. Es gibt Schaltflächen für jeden Betriebssystemtyp im unteren Bereich.

Wenn Ihre Linux-Systeme 32-Bit sind, wählen Sie die Auswahl, die mit "` + syncthing-linux-386 -…​ + " beginnt. Wenn es sich bei den von Ihnen verwendeten Servern um 64-Bit-Server handelt, wählen Sie den Server mit der Bezeichnung " + syncthing-linux-amd64 -…​ + `". Laden Sie die Datei nicht auf Ihren lokalen Computer herunter. Klicken Sie stattdessen mit der rechten Maustaste auf die entsprechende Datei und wählen Sie "Linkadresse kopieren" oder eine ähnliche Option aus.

Wir werden diese Dateien mit dem Befehl "+ wget " auf jedem unserer Server herunterladen. Geben Sie auf Ihren Servern " wget +" gefolgt von einem Leerzeichen ein und fügen Sie den von Ihnen kopierten Link ein. Die Version und die Systemarchitektur können für Sie unterschiedlich sein:

cd ~
wget

Jetzt können wir den Tarball entpacken, indem wir Folgendes eingeben:

tar xzvf syncthing*.tar.gz

In das neu erstellte Verzeichnis verschieben:

cd syncthing*

Hier haben wir eine ausführbare Datei mit dem Namen "+ syncthing ", mit der wir den Dienst starten können. Wir möchten dies an einen Ort in unserem ` PATH +` kopieren, damit wir es wie eine normale Anwendung aufrufen können.

Führen Sie dies mit sudo-Berechtigungen durch, indem Sie Folgendes eingeben:

sudo cp syncthing /usr/local/bin

Jetzt können wir zu unserem Ausgangsverzeichnis zurückkehren und alle verbleibenden Syncthing-Dateien und -Verzeichnisse sicher entfernen.

cd ~
rm -rf syncthing*

Führen Sie alle oben genannten Schritte auf beiden Servern aus.

Die Anwendung ist jetzt installiert, aber es gibt noch ein paar Dinge, die wir tun müssen, bevor sie einsatzbereit ist.

Ändern Sie die GUI-Optionen, um die Remote-Anzeige zuzulassen

Standardmäßig ist die Syncthing-Weboberfläche nur für Verbindungen von demselben Computer verfügbar. Dies funktioniert für unsere Zwecke nicht, da wir mit Remoteservern arbeiten.

Um dies zu beheben, müssen Sie eine Zeile in der Syncthing-Konfigurationsdatei bearbeiten. Die Konfigurationsdatei wurde jedoch noch nicht erstellt.

Um die Datei automatisch zu erstellen, können wir den Dienst kurz starten. Geben Sie den Befehl + syncthing + ein, um dies in Betrieb zu nehmen:

syncthing

Der "+ syncthing +" - Prozess ist kein Daemon, was bedeutet, dass er in der aktuellen Shell-Sitzung ausgeführt wird (wir werden dies umgehen, indem wir vorübergehend ein Upstart-Skript implementieren). Es wird den Prozess starten und einige notwendige Dateien erstellen.

Nach einem Moment sehen Sie eine Informationsnachricht über Ihre Knoten-ID, die folgendermaßen aussieht:

[2EQK3] 15:47:15 OK: Ready to synchronize default (read-write)
[2EQK3] 15:47:15 INFO: Node 2EQK3ZR77PTBQGM44KE7VQIQG7ICXJDEOK34TO3SWOVMUL4QFBHA is "server1" at [dynamic]

Wenn Sie dies sehen, bedeutet dies, dass der Prozess korrekt initialisiert wurde. Wir können den Vorgang jetzt stoppen, indem wir Folgendes eingeben:

CTRL-C

Dies stoppt den Prozess und gibt uns wieder die Kontrolle über das Terminal.

Wir können jetzt die erstellte Konfigurationsdatei bearbeiten. Öffnen Sie die Datei in Ihrem Texteditor:

nano ~/.config/syncthing/config.xml

Suchen Sie nach einem Abschnitt, der sich mit der GUI befasst. Es sollte so aussehen:

<gui enabled="true" tls="false">
   <address>127.0.0.1:8080</address>
</gui>

Die einzige Änderung, die wir vornehmen müssen, besteht darin, die localhost-Adresse (+ 127.0.0.1 +) durch + 0.0.0.0 + zu ersetzen, die alle Netzwerkschnittstellen darstellt. Dieser Abschnitt sieht dann so aus:

<gui enabled="true" tls="false">
   <address>:8080</address>
</gui>

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Wir werden später eine umfassendere Konfiguration über das Webinterface vornehmen.

Führen Sie diese Prozeduren erneut auf beiden Servern aus, die Sie konfigurieren.

Erstellen Sie ein Upstart-Skript zum Behandeln von Dienstzuständen

Als Nächstes implementieren wir ein Upstart-Skript, um unseren Prozess zu verwalten. Auf diese Weise können wir den Synchronisierungsprozess automatisch starten, wenn der Server gestartet wird. Wir können es auch als Dienst ausführen, ohne die Kontrolle über unsere Sitzung zu übernehmen.

Das von uns verwendete Upstart-Skript stammt aus einem post in den Syncthing-Diskussionsforen. Erstellen und öffnen Sie die Upstart-Datei mit Root-Rechten in Ihrem Editor, indem Sie Folgendes eingeben:

sudo nano /etc/init/syncthing.conf

Im Inneren werden wir die folgenden Zeilen verwenden, um unseren Upstart-Prozess zu steuern:

description "Syncthing P2P sync service"

start on (local-filesystems and net-device-up IFACE!=lo)
stop on runlevel [!2345]

env STNORESTART=yes
env HOME=/home/
setuid ""
setgid ""

exec /usr/local/bin/syncthing

respawn

Lassen Sie uns überlegen, was dies bedeutet.

Wir beginnen mit einer allgemeinen Beschreibung des Dienstes. Als Nächstes definieren wir, wann der Dienst gestartet und beendet werden soll. Hier teilen wir dem System mit, dass es nach dem Aufrufen des Dateisystems und der nicht lokalen Netzwerkschnittstellen gestartet werden soll. Sie wird angehalten, wenn das System einen der normalen Runlevel verlässt.

Als Nächstes legen wir eine Umgebungsvariable fest, die Syncthing anweist, nicht mit eigenen Mechanismen neu zu starten. Dies liegt daran, dass jedes Mal ein neuer Prozess erstellt wird, ohne den alten zu bereinigen. Um dies zu vermeiden, werden wir die Möglichkeit zum Neustart später in diesem Upstart-Skript implementieren.

Die nächste Umgebungsvariable legt das Ausgangsverzeichnis fest, das von Syncthing verwendet wird. Dies wird verwendet, um die richtigen Konfigurationsdateien zu finden und Felder in der GUI vorab auszufüllen. Wir werden auch den Benutzer und die Gruppe mit den Parametern + setuid + und + setgid + angeben. Ändern Sie alle drei Werte, um auf die Informationen Ihres Benutzers zu verweisen.

Als nächstes setzen wir den Pfad zu dem eigentlichen Befehl, den wir ausführen werden. Schließlich verwenden wir "+ respawn +", um Upstart anzuweisen, den Prozess automatisch neu zu starten, wenn er vorzeitig gestoppt wird. Dies wird verwendet, um den Prozess automatisch (sauber) neu zu starten, wenn der Syncthing-Prozess versucht, sich selbst intern neu zu starten.

Wenn Sie fertig sind, speichern und schließen Sie die Datei.

Sie können den Dienst jetzt starten, indem Sie Folgendes eingeben:

sudo initctl start syncthing

Führen Sie die obigen Schritte auf beiden Servern aus.

Einrichten der Sicherheit in der Webbenutzeroberfläche

Endlich können wir unsere Instanzen über die Webbenutzeroberfläche konfigurieren.

Melden Sie sich bei den Syncthing-Schnittstellen der einzelnen Server an, indem Sie deren öffentliche IP-Adresse und Port "+ 8080 +" aufrufen:

http://:8080
http://:8080

Sie sehen den Hauptbildschirm für die Synchronisierung:

Das erste, was wir tun müssen, ist, unserer Oberfläche etwas Sicherheit zu verleihen. Gehen Sie zum Menü "Bearbeiten" in der oberen rechten Ecke und klicken Sie auf die Auswahl "Einstellungen":

Auf der rechten Seite müssen Sie einen Benutzernamen und ein Passwort für das Webinterface einrichten. Wir möchten auch die TLS-Verschlüsselung für unsere Sitzungen aktivieren, damit unser Datenverkehr während der Übertragung nicht abgefangen werden kann, indem Sie das Kontrollkästchen "HTTPS" aktivieren:

Wenn Sie fertig sind, klicken Sie unten auf die Schaltfläche "Speichern".

Sie erhalten eine Meldung, in der Sie aufgefordert werden, den Dienst neu zu starten, damit die Änderungen wirksam werden:

Klicken Sie auf die Schaltfläche "Neustart".

Möglicherweise müssen Sie die Seite aktualisieren, damit die Änderungen richtig geladen werden. Wenn Sie dies tun, wird höchstwahrscheinlich eine SSL-Warnung angezeigt, die folgendermaßen aussieht:

Dies weist Sie lediglich darauf hin, dass die Entität, die das SSL-Zertifikat signiert hat, nicht in der Liste der vertrauenswürdigen Zertifizierungsstellen Ihres Browsers aufgeführt ist. Dies wird erwartet, da die Zertifikate selbst signiert sind. Es ist sicher, auf "Trotzdem fortfahren" zu klicken, um fortzufahren.

Sie erhalten dann eine Authentifizierungsaufforderung für den Benutzernamen und das Kennwort, die Sie konfiguriert haben:

image: https://assets.digitalocean.com/articles/syncthing_1404/auth_required.png [Benutzername und Passwort synchronisieren]

Füllen Sie die entsprechenden Werte aus und melden Sie sich an. Ihre Schnittstelle ist jetzt sicherer vor externem Datenverkehr.

Führen Sie diese Schritte auf beiden Servern aus.

Verbinden der beiden Server und Freigeben von Verzeichnissen

Um Inhalte freizugeben, müssen bei der Synchronisierung beide Enden der Verbindung den anderen Server zu ihrer Knotenliste hinzufügen. Dann müssen beide Seiten auch ein Repository (Verzeichnis) hinzufügen, um die Synchronisierung durchzuführen.

Um einen Knoten hinzuzufügen, benötigen Sie die ID des Begleitknotens. Sie können diese ID erhalten, indem Sie zum Menü "Bearbeiten" in der oberen rechten Ecke gehen und die Option "ID anzeigen" auswählen.

Dadurch wird ein Overlay mit einer langen ID angezeigt, die Sie kopieren können. Außerdem erhalten Sie einen QR-Code, falls Sie eine Smartphone-Anwendung konfigurieren. Kopieren Sie die ID des ersten Knotens.

Klicken Sie auf dem zweiten Server auf das Menü "Bearbeiten" und wählen Sie "Knoten hinzufügen".

Ein Overlay mit Feldern wird angezeigt, die Sie konfigurieren müssen, um den anderen Server hinzuzufügen. Fügen Sie im Feld "Node ID" die ID ein, die Sie vom ersten Server kopiert haben. Wählen Sie im Feld "Knotenname" einen aussagekräftigen Namen aus, den Sie für Ihren anderen Server verwenden möchten. Belassen Sie die "Adressen" als "dynamisch":

Wenn Sie fertig sind, klicken Sie auf "Speichern", um den neuen Knoten hinzuzufügen.

Führen Sie denselben Vorgang in umgekehrter Reihenfolge aus, damit beide Server den entgegengesetzten Server in ihrer Konfiguration haben. Ignorieren Sie vorerst alle Anforderungen zum Neustart des Dienstes, da wir zuerst einige weitere Änderungen vornehmen werden.

In der Webschnittstelle werden die Knoten, mit denen Sie verbunden sind, auf der rechten Seite angezeigt. Die Repositorys, die Sie freigeben, werden auf der linken Seite aufgelistet. Standardmäßig wird in Ihrem Home-Verzeichnis ein Ordner mit dem Namen "+ Sync +" erstellt, der als Standard-Repository fungiert. Wenn das Menü komprimiert ist, klicken Sie auf den Namen, um die Liste zu erweitern:

Klicken Sie auf die Schaltfläche "Bearbeiten", um das Repo zu konfigurieren. Ganz unten haben Sie die Möglichkeit, dieses Repository mit einem der von Ihnen konfigurierten Knoten gemeinsam zu nutzen. Aktivieren Sie das Kontrollkästchen für den gegenüberliegenden Knoten und klicken Sie auf die Schaltfläche "Speichern":

image: https://assets.digitalocean.com/articles/syncthing_1404/share_repo.png [Freigabe mit Knoten synchronisieren]

Jetzt können Sie auf die Schaltfläche "Neu starten" klicken, um Ihre Änderungen zu übernehmen:

Jetzt werden alle Änderungen, die im Verzeichnis "+ ~ / Sync +" vorgenommen wurden, auf den gegenüberliegenden Server gespiegelt. Standardmäßig wird diese alle 60 Sekunden synchronisiert, dies kann jedoch im Menü "Einstellungen" geändert werden.

Sie können zusätzliche Verzeichnisse hinzufügen, die Sie spiegeln möchten, indem Sie im Menü "Bearbeiten" die Option "Repository hinzufügen" auswählen. Die „Repository-ID“ muss auf jedem Server identisch sein, damit die Verzeichnisse zugeordnet werden können.

Fazit

Zu diesem Zeitpunkt sollten zwei Server verbunden sein und die Inhalte eines einzelnen Verzeichnisses synchronisieren. Sie können dies problemlos erweitern, indem Sie entweder zusätzliche Repositorys (Verzeichnisse) hinzufügen oder zusätzliche Knoten hinzufügen, die ebenfalls synchronisiert werden sollen.

Wenn Sie vorhaben, Systemdateien mit Verzeichnissen zu synchronisieren, auf die ein normaler Benutzer keinen Schreibzugriff hätte, müssen Sie die Upstart-Datei möglicherweise ändern, um das "+ root +" - Konto oder ein anderes Benutzerkonto zu verwenden, das zum Ausführen der erforderlichen Aktionen erforderlich ist.