Настройка Git на EC2 для вывода из репозитория GitHub

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

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

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

Ответ 1

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

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

Ответ 2

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

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

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

    [core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        worktree = /home/ubuntu/websites
    [receive]
        denycurrentbranch = ignore
    
  • Теперь, на вашей собственной машине, в рабочей папке локального репозитория 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

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

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