Настройка Git на EC2 для извлечения из репозитория GitHub - PullRequest
46 голосов
/ 20 октября 2011

Я новичок в EC2 и Git, и я только что установил свой первый экземпляр EC2, используя чистый Amazon Linux AMI.Я также установил MySQL, Apache и PHP и открыл несколько портов, чтобы он работал как обычный веб-сервер, также отвечая на эластичный IP.

Теперь мой код находится в частном репозитории на GitHub, и яхотел бы выполнить простое развертывание, выполнив git pull или что-то в этом роде.Git также уже установлен на сервере.Я знаю, что могу настроить мое git-репо на сервере, используя мой личный ключ ssh, но это кажется странным.Я полагаю, что другим решением было бы создать нового пользователя GitHub и использовать его на сервере, но оно тоже кажется неправильным.

Как мне добиться этого элегантным, безопасным способом?

Ответы [ 2 ]

36 голосов
/ 20 октября 2011

Чтобы избежать необходимости хранить закрытый ключ SSH в вашем экземпляре EC2, люди часто используют рабочий процесс, который включает отправку на этот удаленный сервер для развертывания.По сути, вы создали там пустой репозиторий git с хуком pre-receive, который развертывается в другом каталоге.В этом руководстве приведен простой пример этого.Тогда вам нужно только иметь ваш SSH открытый ключ в ~/.ssh/authorized_keys на сервере.Тем не менее, с этим рабочим процессом вы не можете развернуть непосредственно из своего репозитория GitHub - вам нужно будет извлечь его локально, а затем отправить на компьютер EC2.

Альтернативой является использование ключей развертывания GitHub механизм.Это может включать создание новой пары ключей SSH в вашем экземпляре EC2 и добавление открытого ключа в качестве ключа развертывания в ваш личный репозиторий на GitHub.Затем вы можете напрямую извлекать данные из личного хранилища GitHub в свой экземпляр EC2.

10 голосов
/ 02 августа 2014

Я только что решил такую ​​ситуацию, следуя учебнику , который Mark Longair указывал ранее. Единственной проблемой, с которой я столкнулся, было создание чистого git-репозитория. Итак, позвольте мне возобновить, как я решил это.

  1. У меня уже есть свой частный репозиторий на github.
  2. Я создал EC2 Linux ECI (Ubuntu для практических процедур)
  3. Я установил git, mysql, php, apache и ssh на экземпляр EC2 и добавил свой открытый ключ ssh в файл /home/ubuntu/.ssh/authorized_keys.
  4. Однажды в экземпляре EC2 я создал две папки, первую для хранения репозитория (я назвал его так, как назвал свой репозиторий github), а вторая для хранения сайтов: mkdir sitesrepo.git websites .
  5. Затем я подошел к папке, в которой собирался репозиторий, и инициализировал пустой репозиторий: cd sitesrepo.git && git init --bare
  6. Я создал файл ловушек через vim со следующим содержимым в файле с именем post-receive, а затем сделал его исполняемым через chmod +x post-receive (как указано в руководстве). Этот файл должен быть помещен в /home/ubuntu/sitesrepo.git/hooks

    #!/bin/sh
    GIT_WORK_TREE=/home/ubuntu/websites git checkout -f
    
  7. Вот где мои шаги отличаются от упомянутого выше урока: конфликт в пустом git-репозитории, из-за которого рабочее дерево не может быть пустым (это не имеет смысла, так как это пустой репозиторий. - голые репозитории должны иметь рабочее пространство, т. е. рабочее дерево). К счастью, вы можете вручную настроить файл репозитория config. Таким образом, редактируя файл /home/ubuntu/sitesrepo.git/config, вы должны гарантировать что-то вроде этого:

    [core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        worktree = /home/ubuntu/websites
    [receive]
        denycurrentbranch = ignore
    
  8. Теперь, на вашем собственном компьютере, в вашей рабочей папке локального репозитория git, идея состоит в том, чтобы добавить новый удаленный репозиторий. В настоящее время вы настроили по умолчанию origin, который сообщает вашему хранилищу, что вы должны загружать ваш контент в хранилище github. Учебник вызывает такой удаленный репозиторий web. Таким образом, вы должны запустить один раз: git remote add web ssh://mysite.com/home/ubuntu/sitesrepo.git && git push web +master:refs/heads/master. Последующие нажатия могут быть выполнены с помощью простого git push web

  9. В зависимости от того, сколько сайтов вы планируете держать, вы должны настроить свой Apache sites-enabled hosts . Кроме того, поскольку вы используете apache, не забудьте изменить веб-папку, указав /home/ubuntu/websites, поскольку по умолчанию она указывает на /var/www Но вы готовы к работе, просто не забудьте перезапустить служба apache после определения новой веб-папки.

Надеюсь, это поможет с вашим вопросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...