web-dev-qa-db-fra.com

Configuration de Git sur EC2 pour tirer du dépôt 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 IP élastique.

Maintenant, mon code est sur un dépôt privé sur GitHub, et je voudrais effectuer des déploiements simples en faisant git pull ou quelque chose comme ça. Git est également déjà installé sur le serveur. Je sais que je pourrais configurer mon dépôt 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 non plus correct.

Comment y parvenir de manière élégante et sûre?

46
luchomolina

Pour éviter d'avoir à conserver une clé privée SSH sur votre instance EC2, les gens utilisent souvent un flux de travail qui implique de pousser vers ce serveur distant afin de déployer. Essentiellement, vous y configurez un référentiel nu avec un pre-receive hook qui se déploie vers un autre répertoire. Il y a un exemple simple de le faire dans ce tutoriel . Ensuite, il vous suffit d'avoir votre clé SSH publique dans ~/.ssh/authorized_keys sur le serveur. Cependant, avec ce flux de travail, vous ne pouviez pas déployer directement à partir de votre référentiel GitHub - vous auriez besoin de le tirer localement puis de le pousser vers la machine EC2.

Une alternative consiste à utiliser le mécanisme déployer les clés 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 GitHub privé vers votre instance EC2.

36
Mark Longair

Je viens de résoudre une telle situation en suivant le tutoriel que Mark Longair indiqué précédemment. Le seul problème que j'ai eu était dans la création du dépôt bare git. Alors laissez-moi reprendre comment je l'ai résolu.

  1. J'ai déjà mon dépôt privé github.
  2. J'ai créé l'EC2 Linux AMI (Ubuntu pour les procédures pratiques)
  3. J'ai installé git, mysql, php, Apache et ssh sur l'instance EC2 et ajouté ma clé publique ssh au /home/ubuntu/.ssh/authorized_keys fichier.
  4. Une fois à l'instance EC2, j'ai créé deux dossiers, le premier pour contenir le référentiel (je viens de le nommer comme j'ai nommé mon référentiel github) et le second pour contenir le (s) site (s): mkdir sitesrepo.git websites.
  5. Ensuite, je suis allé dans le dossier qui allait contenir le référentiel et j'ai initialisé le référentiel 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 indiqué dans le tutoriel). Ce fichier doit être placé à /home/ubuntu/sitesrepo.git/hooks

    #!/bin/sh
    GIT_WORK_TREE=/home/ubuntu/websites git checkout -f
    
  7. Voici où mes étapes diffèrent du didacticiel mentionné ci-dessus: Un référentiel git nu a un conflit où il ne peut pas contenir l'arbre de travail comme un référentiel nu (cela n'a pas de sens puisqu'il s'agit d'un référentiel nu. Les référentiels non nus sont destinés à avoir un espace de travail, c'est-à-dire un arbre de travail). Heureusement, vous pouvez configurer manuellement le fichier config du référentiel. Donc en éditant le fichier /home/ubuntu/sitesrepo.git/config vous devez vous assurer d'avoir quelque chose comme ça:

    [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'ajouter un nouveau référentiel distant. Actuellement, vous avez configuré par défaut Origin qui indique à votre référentiel de pousser votre contenu dans le référentiel de github. Le didacticiel appelle ce référentiel distant web. Vous devez donc 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 détenir, vous devez configurer votre Apache sites-enabled hôtes . De plus, puisque vous utilisez Apache, n'oubliez pas de modifier le dossier Web pour pointer sur /home/ubuntu/websites, car par défaut, il pointe sur /var/www Mais vous êtes prêt, n'oubliez pas de redémarrer le service Apache après avoir défini le nouveau dossier Web.

J'espère que cela répond à votre question.

10
Mesi Rendón