Configurer Git sur EC2 pour extraire le repo GitHub

Je suis un peu nouveau pour EC2 et Git, et je viens de configurer ma première instance d’EC2, en utilisant une AMI Amazon Linux propre. J’ai également installé MySQL, Apache et PHP et ouvert certains ports pour le faire fonctionner comme un serveur Web normal, répondant également à une adresse IP élastique.

Maintenant, mon code est sur un repo privé sur GitHub, et je voudrais effectuer des déploiements simples en faisant git pull ou quelque chose comme ça. Git est également installé sur le serveur. Je sais que je pourrais configurer mon repo git sur le serveur en utilisant ma clé ssh personnelle, mais cela semble étrange. Je suppose qu’une autre solution serait de créer un nouvel utilisateur GitHub et de l’utiliser sur le serveur, mais cela ne semble pas correct non plus.

Comment puis-je y parvenir d’une manière élégante et sûre?

Pour éviter de devoir conserver une clé privée SSH sur votre instance EC2, les utilisateurs utilisent souvent un stream de travail qui consiste à envoyer des messages sur ce serveur distant afin de les déployer. Pour l’essentiel, vous configurez un référentiel Git nu avec un hook de pre-receive qui se déploie dans un autre répertoire. Il y a un exemple simple de le faire dans ce tutoriel . Il vous suffit alors d’avoir votre clé publique SSH dans ~/.ssh/authorized_keys sur le serveur. Cependant, avec ce stream de travail, vous ne pouviez pas déployer directement à partir de votre référentiel GitHub – vous devrez le retirer localement, puis passer à la machine EC2.

Une alternative consiste à utiliser le mécanisme de clés de déploiement de GitHub. Cela impliquerait la création d’une nouvelle paire de clés SSH sur votre instance EC2 et l’ajout de la clé publique en tant que clé de déploiement dans votre référentiel privé sur GitHub. Ensuite, vous pouvez extraire directement de votre référentiel privé GitHub vers votre instance EC2.

Je viens de résoudre une telle situation en suivant le tutoriel que Mark Longair a déjà mentionné . Le seul problème que j’ai rencontré concernait la création du repository Git nu. Alors laissez-moi reprendre comment je l’ai résolu.

  1. J’ai déjà mon repository privé github.
  2. J’ai créé l’AMI Linux EC2 (Ubuntu pour les procédures pratiques)
  3. J’ai installé git, mysql, php, apache et ssh sur l’instance EC2, et ajouté ma clé ssh publique au fichier /home/ubuntu/.ssh/authorized_keys .
  4. Une fois sur l’instance EC2, j’ai créé deux dossiers, le premier contenant le référentiel (je viens de le nommer comme j’ai nommé mon repository github) et le second mkdir sitesrepo.git websites : les mkdir sitesrepo.git websites .
  5. Puis je suis allé dans le dossier qui allait contenir le référentiel et initialisé le repository nu: cd sitesrepo.git && git init --bare
  6. J’ai créé le fichier hook via vim avec le contenu suivant dans un fichier nommé post-receive , puis je l’ai rendu exécutable via chmod +x post-receive (comme le tutoriel l’indiquait). Ce fichier doit être placé dans /home/ubuntu/sitesrepo.git/hooks

     #!/bin/sh GIT_WORK_TREE=/home/ubuntu/websites git checkout -f 
  7. Voici où mes étapes diffèrent du tutoriel mentionné précédemment: Un repository Git nu a un conflit où il ne peut pas tenir le worktree comme un repository nu (Cela n’a aucun sens car c’est un repository nu. Les repositorys non vides sont destinés à avoir un espace de travail, c’est-à-dire un worktree). Heureusement, vous pouvez configurer manuellement le fichier de config du référentiel. Donc, en éditant le fichier /home/ubuntu/sitesrepo.git/config vous devez vous assurer d’avoir quelque chose comme ceci:

     [core] repositoryformatversion = 0 filemode = true bare = false worktree = /home/ubuntu/websites [receive] denycurrentbranch = ignore 
  8. Maintenant, sur votre propre machine, dans votre dossier de travail du référentiel local git, l’idée est d’append un nouveau référentiel distant. Actuellement, vous avez configuré par défaut l’ origin qui indique à votre référentiel de transférer votre contenu dans le référentiel de github. Le tutoriel appelle ce web référentiel distant. Donc, vous devez exécuter une fois: git remote add web ssh://mysite.com/home/ubuntu/sitesrepo.git && git push web +master:refs/heads/master . Les poussées suivantes peuvent être effectuées via un simple git push web

  9. Selon le nombre de sites que vous prévoyez de conserver, vous devez configurer vos hôtes sites-enabled Apache . De plus, comme vous utilisez Apache, n’oubliez pas de changer le dossier Web pour qu’il pointe vers /home/ubuntu/websites , car par défaut il pointe vers /var/www oubliez de redémarrer le service apache après avoir défini le nouveau dossier Web.

J’espère que cela aide avec votre question.