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?
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.
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.
/home/ubuntu/.ssh/authorized_keys
fichier.mkdir sitesrepo.git websites
.cd sitesrepo.git && git init --bare
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
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
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
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.