Я работаю над приложением Drupal, которое планируется разместить в среде Amazon Elastic Beanstalk. По сути, Elastic Beanstalk позволяет приложению автоматически масштабироваться путем запуска дополнительных экземпляров веб-сервера на основе предопределенных правил. Общая база данных работает на инстансе Amazon RDS, к которому все инстансы имеют надлежащий доступ. Проблема в том общие файлы папка (сайты / по умолчанию / файлы).
Мы используем мерзавец как SCM, и с его помощью мы можем развертывать новые версии, выполняя $ git aws.push
. В фоновом режиме Elastic Beanstalk автоматически удаляет ($ rm -rf
) текущую кодовую базу со всех серверов, работающих в среде, и развертывает новую версию.
Планировалось использовать S3 (s3fs) для общих файлов в промежуточной среде и NFS в производственной среде. Нам удалось настроить среду до такой степени, что папка с общими файлами правильно монтируется после перезагрузки. Но...
Эта проблема заключается в том, что в этой настройке развертывание новых версий на запущенных экземплярах не удается, потому что $ rm -rf
не может удалить смонтированный каталог, и в результате вся среда выходит из строя, и нам нужно перезапустить среду, что на самом деле не является элегантным решением.
Вопрос 1 это то, что было бы правильным способом управления общими файлами при таком развертывании? Вы работаете в такой среде? Как вы решили проблему?
Посмотрев на код Elastic Beanstalk Hostmanager (Ruby), кажется, есть способ подключить нашу функциональность (отключение, если оно установлено перед развертыванием и монтирование после развертывания) в Hostmanager (/ opt / hostmanager / srv / lib / elasticbeanstalk / hostmanager / application / phpapplication.rb), но скрипты, определенные в файле (т.е. /tmp/php_post_deploy_app.sh), похоже, не работают. Это может быть потому, что наши навыки Ruby отсутствуют.
Вопрос 2 Вам удалось перенести свою функциональность в Hostmanager (т.е. не изменять основные файлы Hostmanager)?
S3fs - плохая идея с точки зрения производительности, а также S3 не предназначен для монтирования, это не файловая система, это хранилище объектов.
Вместо этого используйте EFS -> https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/services-efs.html
В документации вы увидите, что в Beanstalk есть процедура для Drupal.
С Уважением,
Вы рассматривали возможность использования sources
через .ebextensions
с вашими общими файлами, хранящимися в S3?
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
я использовал sources
для развертывания общих файлов (карт сайта), которые создаются нашим сервером приложений (и хранятся в S3).
sources:
"c:/inetpub/sitemaps": http://[S3 bucket]/sitemaps.zip
container_commands:
01-copy-sitemaps-to-www:
command: copy c:\\inetpub\\sitemaps\\*.* c:\\inetpub\\wwwroot\\ > copy_sitemaps_to_www.log 2>&1
waitAfterCompletion: 5