Entwicklung und Datenbanken

Klonen und Deployment aus einem privaten Remote-Repository

Geprüft am 7 Min. Lesezeit Git GitHub Deployments

Wichtig: Ihnen steht inzwischen das Tool Deploy zur Verfügung, ein fortschrittliches und einfach zu bedienendes System, das sich in Ihr GitHub-Repository integriert. Mehr dazu unter Deploy, das Tool für automatisches Deployment von GitHub.

In anderen Artikeln haben wir über Deployment-Strategien gesprochen, etwa darüber, wie Sie ein Repository in cPanel erstellen oder klonen und sogar Änderungen über diese Oberfläche übernehmen.

Hier geht es um eine andere Methode, denn die Oberfläche von cPanel ist meist nicht die beste Wahl, wenn Sie mit einem privaten Remote-Repository arbeiten.

Im folgenden Beispiel klonen wir ein privates Repository, das bei GitHub liegt, und holen bei Bedarf Änderungen daraus ab.

Voraussetzungen

Wir arbeiten im Terminal; Sie brauchen also grundlegende Kenntnisse im Umgang damit und müssen in Ihrem Hosting-Dienst den SSH-Zugang aktivieren.

Erstellen Sie dort einen Ed25519-Schlüssel, der ausschließlich für dieses Repository bestimmt ist. Existiert der Dateiname bereits, wählen Sie einen anderen; überschreiben Sie keine verwendete Identität:

umask 077
mkdir -p ~/.ssh
ssh-keygen -t ed25519 -f ~/.ssh/github_repositorio_deploy -C "Repository-Deployment cPanel"
chmod 600 ~/.ssh/github_repositorio_deploy
chmod 644 ~/.ssh/github_repositorio_deploy.pub

Verwenden Sie eine Passphrase und einen SSH-Agenten, wenn der Vorgang Interaktion erlaubt. Müssen Sie ein pull unbeaufsichtigt ausführen, kann der Schlüssel ohne Passphrase bleiben, muss dann aber außerhalb von public_html liegen, die Berechtigungen 600 haben, darf nicht wiederverwendet werden und nur Lesezugriff auf ein einziges Repository haben. Den öffentlichen Schlüssel zeigen Sie so an:

cat ~/.ssh/github_repositorio_deploy.pub

Berechtigungen bei GitHub erteilen

Nun müssen Sie den Zugriff von Ihrem Server auf das private Repository erlauben. Öffnen Sie bei GitHub das betreffende Repository:

  • Klicken Sie im jeweiligen Repository auf Settings.
  • Öffnen Sie im Seitenmenü Deploy keys.
  • Klicken Sie auf Add deploy key, fügen Sie den öffentlichen Schlüssel ein und vergeben Sie einen erkennbaren Titel.
  • Aktivieren Sie keine Schreibrechte, wenn das Hosting den Code nur klonen und aktualisieren muss.

Richten Sie einen Alias ein, damit Git diese Identität verwenden muss:

Host github-repositorio
    HostName github.com
    User git
    IdentityFile ~/.ssh/github_repositorio_deploy
    IdentitiesOnly yes

Speichern Sie den Block in ~/.ssh/config, führen Sie chmod 600 ~/.ssh/config aus und prüfen Sie vorher den Fingerabdruck von GitHub über einen unabhängigen Kanal.

Um zu prüfen, ob alles stimmt, führen Sie per SSH in Ihrem Konto aus:

ssh -T git@github-repositorio

Erhalten Sie eine Ausgabe wie:

Hi usuario/repositorio! You've successfully authenticated, but GitHub does not provide shell access.

ist die Authentifizierung erfolgreich, und Sie können mit den Schritten fortfahren.

Erhalten Sie dagegen Permission denied (publickey)., fehlen Ihnen die Berechtigungen. Gehen Sie den Ablauf noch einmal durch; ein Schritt wurde wahrscheinlich nicht korrekt ausgeführt.

Diese Schritte gelten für GitHub; andere Plattformen wie Bitbucket haben aber einen ähnlichen Ablauf mit Authentifizierung über SSH-Schlüssel.

Das private Repository klonen

Kopieren Sie die URL des Repositorys über die Schaltfläche Code, Tab SSH, und ersetzen Sie github.com durch den zuvor eingerichteten Alias github-repositorio.

Klonen Sie das Repository außerhalb des öffentlichen Verzeichnisses:

mkdir -p ~/repositories
git clone git@github-repositorio:usuario/repositorio.git ~/repositories/repositorio

Klonen Sie nicht direkt in public_html: Sie würden das Verzeichnis .git offenlegen, wenn der Webserver es nicht blockiert. Veröffentlichen Sie nur die nötigen Dateien über das Tool Deploy, .cpanel.yml oder eine Strategie mit Releases und symbolischen Links.

Änderungen abrufen

Git zu klonen oder zu aktualisieren installiert keine Abhängigkeiten und veröffentlicht nicht automatisch eine Website. Um den Klon zu aktualisieren, prüfen Sie zuerst seinen Zustand:

cd "$HOME/repositories/repositorio" || exit 1
git status --short
git branch --show-current

Gibt es lokale Änderungen oder ist der Branch nicht der erwartete, halten Sie an und prüfen Sie deren Herkunft. Für den Branch main sähe eine Aktualisierung, die nicht automatisch einen Merge erzeugt, so aus:

git pull --ff-only origin main

Passen Sie den Branch an und führen Sie danach das Deployment-Verfahren des Projekts aus. Verwenden Sie git reset --hard nicht, um eine Abweichung zu verdecken, ohne zu prüfen, was Sie verlieren würden.

Der Leseschlüssel dieses Beispiels erlaubt kein git push. Müssen Sie eine im Hosting vorgenommene Änderung übernehmen, prüfen Sie sie und überführen Sie sie in Ihren Entwicklungsablauf, ohne die Berechtigung des Deployment-Schlüssels aus Bequemlichkeit zu erweitern.

Hinweise

Git funktioniert in unserem System wie auf Ihrem lokalen Rechner. Wenn Sie auf GitHub verzichten möchten, können Sie ein privates Repository außerhalb von public_html anlegen und Ihren Rechner mit diesem Remote verbinden. Halten Sie auch jeden Arbeitsklon außerhalb des öffentlichen Verzeichnisses und veröffentlichen Sie in public_html nur die nötigen Dateien über Deploy, .cpanel.yml oder eine Release-Strategie. Die Git-Oberfläche von cPanel ermöglicht es, diesen Ablauf zu verwalten.

Der Test ssh -T bei GitHub kann mit dem Code 1 enden, obwohl er die Authentifizierung bestätigt, weil GitHub keine interaktive Shell anbietet. Prüfen Sie die Meldung und das autorisierte Repository, nicht nur den Exit-Code.

Das könnte Ihnen auch helfen

Stimmt etwas nicht oder hat sich etwas geändert? Erzählen Sie es uns, und wir prüfen es.