Bearbeiten Sie auf Ihrem lokalen Computer Ihre ~ / .ssh / config und fügen Sie Folgendes hinzu:
Host example
Hostname example.com
User myuser
IdentityFile ~/.ssh/YOURPRIVATEKEY
Sie sollten sich mit "ssh example" bei Ihrer Instanz anmelden können. Denken Sie daran, dass Ihr privater Schlüssel chmod 400 sein sollte. Wenn Sie ohne Verwendung von "ssh -i mykey.pem Benutzername @ Host" ssh können, gehen Sie wie folgt vor.
Initialisieren Sie auf Ihrer EC2-Instanz ein nacktes Repository, das ausschließlich zum Pushen verwendet wird. Die Konvention besteht darin, die Erweiterung ".git" zum Ordnernamen hinzuzufügen. Dies kann anders aussehen als Ihr lokales Repo, das sich normalerweise als .git-Ordner in Ihrem "Projekt" -Ordner befindet. Bare Repositorys (per Definition) haben keinen funktionierenden Baum, sodass Sie ihnen nicht einfach Dateien hinzufügen können, wie Sie es in einem normalen nicht nackten Repository tun würden. Dies ist genau so, wie es gemacht wird. Auf Ihrer ec2-Instanz:
mkdir project_folder.git
cd project_folder.git
git init --bare
Verwenden Sie jetzt auf Ihrem lokalen Computer den SSH-Host-Alias, wenn Sie Ihre Fernbedienung einrichten.
git remote add ec2 EXAMPLEHOSTFROMSSHCONFIG:/path/to/project_folder.git
Jetzt sollten Sie in der Lage sein:
git push ec2 master
Jetzt wird Ihr Code ohne Probleme auf den Server übertragen. Das Problem an dieser Stelle ist jedoch, dass Ihr WWW-Ordner auf der ec2-Instanz nicht die tatsächlichen "Arbeitsdateien" enthält, die Ihr Webserver ausführen muss. Sie müssen also ein "Hook" -Skript einrichten, das ausgeführt wird, wenn Sie auf ec2 pushen. Dieses Skript füllt den entsprechenden Ordner auf Ihrer ec2-Instanz mit Ihren tatsächlichen Projektdateien.
Wechseln Sie also auf Ihrer ec2-Instanz in Ihr Verzeichnis project_folder.git / hooks. Erstellen Sie dann eine Datei mit dem Namen "post-receive" und chmod 775 (sie muss ausführbar sein). Fügen Sie dann dieses Bash-Skript ein:
#!/bin/bash
while read oldrev newrev ref
do
branch=`echo $ref | cut -d/ -f3`
if [ "ec2" == "$branch" -o "master" == "$branch" ]; then
git --work-tree=/var/www/example.com/public_html/ checkout -f $branch
echo 'Changes pushed to Amazon EC2 PROD.'
fi
done
Führen Sie nun auf Ihrem lokalen Computer einen "git push ec2 master" aus, der den Code auf Ihr nacktes Repo übertragen soll. Anschließend checkt das Post-Receive-Hook-Skript Ihre Dateien in den entsprechenden Ordner aus, für den Ihr Webserver konfiguriert ist.
ssh-add /private/key/path
hat funktioniert!