84 votes

Comment pousser à git sur EC2

Je suis en train de suivre cet enseignement. J'ai un repo git local et quand je fais un git push, j'ai besoin de la mise en pension d'être poussé à mon instance EC2.

Mais, dans le tutoriel ci-dessus, quand je fais un git push origin master, j'obtiens Permission denied (publickey) d'erreur parce que je n'ai pas précisé l'identité de fichier.

Dire, - je me connecter à EC2 comme ceci: ssh -i my_key.pem username@11.111.11.11

Donc, puis-je faire quelque chose de similaire ici: git -i my_key.pem push origin master ou de définir l'identité de fichier dans .git/config

Alors, comment puis-je le configurer?

Mise à jour: Sortie de la git config -l

user.name=my name
user.email=my_email_addreess@gmail.com
github.user=userid
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
remote.origin.url=ec2_id@my_e2_ip_address:express_app
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*

Mise à jour (à partir de @Jon commentaire):

Si vous avez votre clé dans une drôle de chemin il suffit d'exécuter ssh-add /private/key/path. Cela a fonctionné pour moi.

58voto

realgt Points 1181

Pour copier votre clé ssh locale sur amazon, essayez ceci.

 cat ~/.ssh/id_dsa.pub | ssh -i amazon-generated-key.pem ec2-user@amazon-instance-public-dns "cat >> .ssh/authorized_keys"
 

remplacer les noms de la clé et du dns public amazon ec2, bien sûr.

vous pourrez alors installer votre télécommande sur amazon

31voto

TinyTimZamboni Points 940

Les instructions énumérées ici m'ont été plus utiles.

Du lien:

Ajustez votre ~/.ssh/config et ajoutez:

 Host example
Hostname example.com
User myuser
IdentityFile ~/.ssh/other_id_rsa
 

Utilisez maintenant l’alias d’hôte ssh comme référentiel:

 $ git remote add origin example:repository.git
$ git pull origin master
 

Et il devrait utiliser la touche other_id_rsa !

24voto

devdrc Points 111

Sur votre ordinateur, modifiez votre ~/.ssh/config et ajouter:

Host example
Hostname example.com
User myuser
IdentityFile ~/.ssh/YOURPRIVATEKEY

Vous devriez être en mesure de vous connecter à votre instance avec "ssh exemple". Souvenez-vous de votre clé privée doit être chmod 400. Une fois que vous pouvez ssh sans l'aide de "ssh -i maclé.pem username@host", procédez de la manière suivante.

Sur votre instance EC2, initialiser un dépôt nu, qui est utilisé pour le pousser à exclusivement. La convention est d'ajouter l'extension ".git" du nom du dossier. Cela peut être différent de votre local repo qui, normalement, a comme .git dossier à l'intérieur de votre "projet" du dossier. Nu référentiels (par définition) ne disposent pas d'un arbre de travail attaché à eux, de sorte que vous ne pouvez pas facilement ajouter des fichiers à eux comme vous le feriez normalement non-dépôt nu. C'est juste qu'ils manière dont c'est fait. Sur votre instance ec2:

mkdir project_folder.git
cd project_folder.git
git init --bare

Maintenant, de retour sur votre machine locale, utilisez l'alias d'hôte ssh lors de la configuration de votre télécommande.

git remote add ec2 EXAMPLEHOSTFROMSSHCONFIG:/path/to/project_folder.git

Maintenant, vous devriez être en mesure de le faire:

git push ec2 master

Maintenant, votre code est poussé vers le serveur sans aucun problème. Mais le problème à ce point, c'est que votre dépôt nu sur l'instance ec2 ne contient pas les "fichiers de travail" de votre serveur web a besoin pour s'exécuter. Donc, vous devez configurer un "crochet" script qui s'exécute lorsque vous poussez à l'ec2. Ce script va remplir le dossier approprié sur votre instance ec2 avec votre réelle des fichiers de projet.

Donc, sur votre instance ec2, allez dans votre project_folder.git/hooks répertoire. Ensuite, créez un fichier appelé "post-recevoir" et chmod 775 (il doit être exécutable). Ensuite, insérez ce script bash:

#!/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

Maintenant, sur votre machine locale, faire un "git push ec2 maître" et il devrait pousser le code de votre nu repo, et puis l'après-recevoir crochet script checkout vos fichiers dans le dossier approprié que votre serveur web est configuré pour lire.

5voto

Jon Points 1680

Vous devez générer et télécharger une clé SSH sur l'instance EC2. Suivez ce tutoriel: http://alestic.com/2010/10/ec2-ssh-keys

2voto

Alastair Points 1492
  1. Exécuter ssh-keygen localement
  2. Copiez le contenu de (ou transférez) ~/.ssh/id_rsa.pub sur votre instance distante
  3. Coller ou cat la clé dans /etc/ssh/authorized_keys
    • echo "{paste key from clipboard}" >> /etc/ssh/authorized_keys
    • cat id_rsa.pub >> /etc/ssh/authorized_keys

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X