Как использовать частные репозитории композитора при развертывании с помощью Amazon AWS Elastic Beanstalk в среде PHP? В частности, используя GitHub (Q & Стиль, ответьте ниже)AWS Elastic Beanstalk с использованием PHP с частными репозиториями композитора
ответ
Нам нужно было использовать частную библиотеку для одного из наших проектов PHP, которые мы развертывали с помощью эластичного бобового стека AWS (EB). Эта частная библиотека размещена на GitHub, хотя подобный git-хостинг (ваш собственный сервер, BitBucket и т. Д.), Вероятно, имеет аналогичную аутентификацию и может использовать это решение для развертывания.
Мы использовали SSH credentials, чтобы попасть в частный git-репозиторий. Поскольку мы используем GitHub, мы использовали Развертывание ключей GitHub (https://help.github.com/articles/managing-deploy-keys#deploy-keys) Эти ключи позволяют доступ только для чтения к определенному репозиторию, который идеально подходит для наших нужд. Оцените наилучшее решение для ваших нужд, GitHub имеет большие плюсы и минусы, перечисленные для каждого метода.
Наше выбранное решение включает ключ развертывания в репозиторий. Это немного дыра в безопасности. Мы имеем дело со всеми частными репозиториями, с (идеально) безопасными серверами, но это по-прежнему представляет собой угрозу безопасности.
Все это в конечном итоге стало чем-то вроде хлопот с тем, как стек PHP был развернут с помощью Elastic Beanstalk, а композитор.json автоматически запускался слишком рано, а ключи не были на месте заранее. Мы нашли обходное решение.
Предполагается, что у вас уже есть настройка развертывания, но они просто застревают при развертывании ключей. Мы использовали инструменты eb cli, предоставляемые AWS (eb init, eb branch, eb start и т. Д.), Чтобы все было в порядке, а также git hooks, git aws.push для развертывания.
После того, как у нас есть наши Deploy ключи, мы можем добавить нашу библиотеку к нашему composer.json файл, используя SSH адрес:
{
...
"require": {
"repository/project": ">=1.0.0"
},
...
"repositories": [
{
"type": "git",
"url": "[email protected]:repository/project.git"
}
]
}
Настройка вашего .gitignore поэтому файл composer.lock привержен и в вашем хранилище, а также папки поставщика без его содержимое:
[remove composer.lock from file if it exists]
vendor/*
Мы предпочитаем держать файл composer.lock в хранилище в любом случае, как он запирает в т он использовал версию. Когда мы переходим в производственную среду, мы гарантируем, что приложение работает с теми же библиотеками, которые мы тестировали. Папка поставщика должна обманывать EB, чтобы не запускать процесс установки composer.phar. Нам нужно, чтобы мы подождали, пока у нас не будут ключи ssh.
Настройка ключей: я не смог найти хороший способ связать ключ и принять github.com как known_host через скрипты. Я закончил SSHing с управляемым сервером EB с программным обеспечением, развернутым наполовину, добавил файлы ключа id_rsa и id_rsa.pub в корневой каталог/.ssh/(с 400 perms помните!), Затем попробуйте ssh -T [email protected]
(как рекомендует github). Это приведет к подсказке принять хост и добавить запись в файл ~ root/.ssh/known_hosts. Скопируйте содержимое этого файла туда, где вы работаете над проектом.
Мы создаем все сценарии установки в папке .ebextensions/ для настройки сервера Linux для развертывания. Эта папка удаляется (из того, что я могу сказать) с сервера после этапа предварительного развертывания. Мы используем 64-битное AMI-решение Amazon для PHP 5.5. Переместите ключи id_rsa и id_rsa.pub в новую папку .ebextensions.Также добавьте файл с именем known_hosts в папку с содержимым known_hosts, которое мы предоставили ранее. Теперь, когда у нас есть 3 файла нам нужно, мы должны создать конечный файл инструкции по развертыванию: 01-GitHub-Deploy-keys.config (имя файла, как вам нравится)
container_commands:
11-move-priv-key:
command: "mv ~root/.ssh/id_rsa ~root/.ssh/id_rsa.bak; cp .ebextensions/id_rsa ~root/.ssh/id_rsa; chmod 400 ~root/.ssh/id_rsa;"
12-move-pub-key:
command: "mv ~root/.ssh/id_rsa.pub ~root/.ssh/id_rsa.pub.bak; cp .ebextensions/id_rsa.pub ~root/.ssh/id_rsa.pub; chmod 400 ~root/.ssh/id_rsa.pub;"
12-known-hosts:
command: "mv ~root/.ssh/known_hosts ~root/.ssh/known_hosts.bak; cp .ebextensions/known_hosts ~root/.ssh/known_hosts; chmod 644 ~root/.ssh/known_hosts;"
20-install-composer:
command: "./composer.phar install;"
Запомнить YAML файлы использования 4 пробела, а не вкладки! См. Документацию AWS о том, как эти команды container_commands работают: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-commands Они будут запускаться после выталкивания файлов из репозитория. Эти команды в разделе «container_commands» имеют рабочий каталог вашего проекта, поэтому предпочтительны локальные пути.
Добавить все эти файлы необходимо добавить и зафиксировать в репозитории. Запустите git aws.push для развертывания.
Для правильной проверки установки вам необходимо удалить сервер из стека решений EB и повторно добавить его. Я просто зашел в панель управления EC2 и нашел управляемый сервер для этого проекта и прекратил его. EB автоматически создаст новый для вас и прикрепит его, когда он будет готов. Дважды проверьте свои журналы, в частности раздел /var/log/cfn-init.log. Вероятно, лучше всего отключить SSH-доступ к серверам через группу безопасности на этом этапе. Я полагаю, что EB ограничивает входные данные для входа в SSH, но только для того, чтобы убедиться, что вы можете отключить доступ SSH вместе через брандмауэр/группы безопасности. Вам не нужно ssh в отдельных ящиках для конфигурации, поскольку они должны рассматриваться как изменчивые.
Это было написано как Q & A на 2014-02-20, пожалуйста, оставляйте любые комментарии или исправления.
Спасибо, - Сет
TLDR: Используйте ~/.composer/auth.json, GitHub-OAuth на composer.json, или создать собственный сценарий, как показано ниже:
Этот это мой файл 02-github-deploy-keys.config. Он работает прямо сейчас. Единственным обходным решением было отключить StrictHostKeyChecking. Но вы можете включить StrictHostKeyChecking после того, как этот скрипт запускается, если хотите.
Я добавил/продал (без каких-либо файлов) Git, чтобы остановить AWS от автозапуска Composer до того, как ключи были в порядке. Для этого я создал .gitignore файл внутри/поставщика, с этим:
*
!.gitignore
Я хранения ключей (id_rsa) на ведро S3, где я позволил «Авторизованный» людей, чтобы прочитать файл, но вы можете поместить файл в свой репозиторий github. Эти ключи были сгенерированы пользователем машины (https://developer.github.com/guides/managing-deploy-keys/#machine-users).
files:
"/home/ec2-user/sshgit/composer.sh":
mode: "00755"
owner: ec2-user
group: ec2-user
encoding: plain
content: |
if [ ! -f /home/ec2-user/id_rsa ] ; then
aws s3 cp s3://eb-files/id_rsa /home/ec2-user/id_rsa
chmod 0400 /home/ec2-user/id_rsa
fi
eval `ssh-agent -s`
ssh-add /home/ec2-user/id_rsa
echo 'StrictHostKeyChecking no' >> /etc/ssh/ssh_config
export COMPOSER_HOME=/root
COMPOSER_HOME=/root
/opt/elasticbeanstalk/support/composer.phar install --no-interaction
container_commands:
01-run-composer:
command: "/home/ec2-user/sshgit/composer.sh"
Просто хотелось бы отметить, что есть более простой (может быть рискованнее) способ сделать это, добавив в composer.json:
"config": {
"github-oauth": {
"github.com": "YOUR-OAUTH-KEY"
}
}
И есть третий путь, который я did't тест , но вы можете создать ~/.composer/auth.json, и композитор, вероятно, поймет ваши токены там.
Я боролся с этим. У меня есть РЕПО в AWS CodeCommit, и он искал путь наименьшего сопротивления для его решения. Я пробовал ~/.composer/auth.json, но кажется, что композитор запускается, прежде чем я смогу получить файл на месте и т. Д. И т. Д.
Я пошел на подход, который включает каталог поставщика в моем репо (избавиться от папок .git внутри, чтобы он не обрабатывал их как подмодули), и все это затем публикуется в Elastic Beanstalk через zip-файл, включая это папка.
- 1. AWS Elastic Beanstalk и Composer
- 2. Развертывание PHP-приложения с использованием AWS Elastic Beanstalk
- 3. AWS Elastic Beanstalk «установка композитора» не удается найти пакеты
- 4. AWS Elastic Beanstalk
- 5. AWS Elastic Beanstalk Deployment Order
- 6. AWS Elastic Beanstalk и PHP-сессии
- 7. Редактирование php-файла на AWS Elastic Beanstalk
- 8. PHP AWS Elastic Beanstalk фоновые работники
- 9. AWS Elastic Beanstalk Error - Пассажир
- 10. AWS Elastic Beanstalk - проблемы с разрешением пользователя
- 11. AWS Elastic Beanstalk не удалось
- 12. Elastic Beanstalk CLI с использованием нескольких согл
- 13. AWS Elastic BeanStalk Security Group
- 14. Проверка работоспособности AWS Elastic Beanstalk
- 15. Развертывание Rails ActionCable с использованием AWS Elastic Beanstalk
- 16. AWS Elastic BeanStalk и VPC
- 17. AWS Elastic Beanstalk + Git Submodules
- 18. Cronjobs и AWS Elastic Beanstalk
- 19. AWS Elastic Beanstalk шкала запуска
- 20. AWS Elastic Beanstalk и Neo4j
- 21. Как установить расширение PHP с помощью Amazon AWS Elastic Beanstalk?
- 22. Вычислительная мощность экземпляров AWS Elastic Beanstalk
- 23. AWS Elastic Beanstalk .ebextensions' не используется
- 24. Обновить текущую версию на AWS Elastic Beanstalk
- 25. Варианты контейнера в AWS Elastic Beanstalk
- 26. AWS Elastic Beanstalk upload большое количество данных
- 27. Обновление файла php.ini AWS Elastic BeanStalk
- 28. AWS Elastic Beanstalk Установка заданий CRON
- 29. AWS Elastic Beanstalk загрузка файла не работает
- 30. Composer.json Установка на AWS Elastic Beanstalk
Примечания: GitHub ключи Deploy фактически позволяют полный доступ на чтение/доступ к единому хранилищу –
команд написать: removeHost: команда: 'SSH-keyscan -R github.com' addHost: команда: «SSH-keyscan -t rsa github.com> /root/.ssh/known_hosts ' – PachinSV