Лучший способ развернуть приложение play2 с помощью Amazon Beanstalk

Я нашел фрагментированные инструкции здесь и некоторые другие места о развертывании приложения Play2 на amazon ec2. Но не нашел никакого опрятного способа развертывания с использованием Beanstalk.

Игра - хорошая структура, а AWS beanstalk - одна из самых популярных сервисов, тогда почему нет официальной инструкции для этого?

Кто-нибудь нашел лучшее решение?

Ответ 1

Развертывание приложения Play2 на эластичном бобовом стебле теперь легко с Docker Containers в сочетании с экспериментальной функцией docker sbt.

В build.sbt укажите открытые порты докеров:

dockerExposedPorts in Docker := Seq(9000)

Вам следует автоматизировать следующие шаги, но вы можете попробовать это вручную, чтобы проверить, что он работает:

Создайте a Dockerfile для проекта, выполнив команду: sbt docker:stage. Перейдите в каталог ./target/docker/. Создайте файл эластичного beanstalk Dockerrun.aws.json со следующим содержимым:

{
   "AWSEBDockerrunVersion": "1",
   "Ports": [
       {
           "ContainerPort": "9000"
       }
   ]
}

Замените все в этом каталоге, скажем, в файл с именем play2-test-docker.zip. Zip файл должен содержать файлы: Dockerfile, Dockerrun.aws.json и files/*.

Перейдите в консоль aws beanstalk и создайте новое приложение, используя m3.medium или любой тип экземпляра с достаточной памятью для запуска jvm. Любой экземпляр с слишком маленькой памятью приведет к ошибке JVM.

Выберите "Docker Container" в раскрывающемся меню Predefined Configuration.

На экране выбора приложения выберите "Загрузить" и выберите созданный ранее почтовый файл. Запустите приложение, а затем выберите brew немного чая. Это может занять очень много времени. Протокол. Последующие развертывания одной и той же версии приложения должны быть немного быстрее.

Как только приложение будет запущено и зеленое в консоли aws, щелкните URL-адрес приложения, и вы увидите экран приветствия приложения (или любой другой файл индекса).

Ответ 2

Изменить 2016. Теперь гораздо лучший способ развернуть ваши приложения Playframework на ElasticBeanstalk с помощью новых контейнеров Java SE.

Здесь вы найдете статью, в которой вы можете поэтапно развертывать, используя Jenkins для создания и развертывания вашего проекта: https://www.davemaple.com/articles/deploy-playframework-elastic-beanstalk-jenkins/


Вы можете использовать пользовательские AMI, которые я постоянно обновляю здесь: https://github.com/davemaple/playframework-nginx-elastic-beanstalk

Они запускают Nginx + Playframework и поддерживают стандартные zip файлы, созданные с использованием "активатора dist".

Ответ 3

Здесь мое решение, которое не требует каких-либо дополнительных сервисов/контейнеров, таких как Docker или Jenkins.

Создайте папку dist в корне каталога приложений Play. Создайте файл Procfile, содержащий следующее содержимое, и поместите его в папку dist (для ЭБ требуется порт 5000):

web: ./bin/YOUR_APP_FILE_NAME -Dhttp.port=5000 -Dconfig.file=conf/application.conf

YOUR_APP_FILE_NAME - это имя исполняемого файла в каталоге bin, который находится внутри .zip, созданного activator dist.

После запуска activator dist вы можете просто загрузить созданный zip файл в Elastic Beanstalk и автоматически развернуть приложение. Вы также помещаете все .ebextension папки и файлы конфигурации в папку dist, которая требуется для конфигурации Elastic Beanstalk. Ex. У меня есть dist/.ebextensions/nginx/conf.d/proxy.conf для настроек обратного прокси-сервера NGINX или dist/.ebextensions/env.config для переменных среды.

Ответ 4

Мы также видели это как слишком больную и добавили поддержку родной Play 2 для Boxfuse, чтобы решить эту проблему.

Теперь вы можете просто сделать boxfuse run my-play-app-1.0.zip -env=prod, и это будет автоматически:

  • создайте минимальный AMI, предназначенный для вашего приложения Play 2.
  • создать эластичный IP
  • создать группу безопасности с правильными разрешениями
  • запустите экземпляр вашего приложения.

Все будущие обновления выполняются как синие/зеленые развертывания с нулевым временем простоя.

Это также работает с эластичными балансирами нагрузки и группами автомасштабирования, а свободный ящик Boxfuse рассчитан на свободный уровень AWS.

Подробнее об этом можно прочитать здесь: https://boxfuse.com/blog/playframework-aws

Отказ от ответственности: я являюсь основателем и генеральным директором Boxfuse

Ответ 5

У меня были некоторые проблемы с другими решениями, найденными здесь и там. Думаю, проблема в том, что я развиваюсь на Play 2.4.

В любом случае, я могу развернуть приложение в Beanstalk с помощью Activator Activator и Docker:

  • В build.sbt я добавил следующие строки:
import com.typesafe.sbt.packager.docker.{ExecCmd, Cmd}

// [...]

dockerCommands := Seq(
  Cmd("FROM","java:openjdk-8-jre"),
  Cmd("MAINTAINER","myname"),
  Cmd("EXPOSE","9000"),
  Cmd("ADD","stage /"),
  Cmd("WORKDIR","/opt/docker"),
  Cmd("RUN","[\"chown\", \"-R\", \"daemon\", \".\"]"),
  Cmd("RUN","[\"chmod\", \"+x\", \"bin/myapp\"]"),
  Cmd("USER","daemon"),
  Cmd("ENTRYPOINT","[\"bin/myapp\", \"-J-Xms128m\", \"-J-Xmx512m\", \"-J-server\"]"),
  ExecCmd("CMD")
)
  • Я пошел в каталог проекта и запустил эту команду в терминале
$ ./activator clean docker:stage
  • Я открыл каталог [project]/target/docker и создал файл Dockerrun.aws.json. Это было его содержание:
{
  "AWSEBDockerrunVersion": "1",
  "Ports": [
    {
      "ContainerPort": "9000"
    }
  ]
}
  • В том же каталоге target/docker я проверил результат, построил, проверил и запустил изображение:
$ docker build -t myapp .
$ docker images
$ docker run -p 9000:9000 myapp
  • Как все было в порядке, я закрепил содержимое:
$ zip -r myapp.zip *

В моем zip файле были Dockerfile, Dockerrun.aws.json и stage/* файлы

  • Наконец, я создал новое приложение Beanstalk и загрузил zip, созданный на последнем шаге. Я позаботился о том, чтобы выбрать "Generic Docker" в "Predefined configuration", когда я создавал приложение.

Ответ 6

Beanstalk поддерживает только развертывание WAR, а Play официально не поддерживает развертывание WAR. Если вы хотите использовать EC2, вместо этого вы должны просто создать экземпляр EC2 и следовать инструкциям по развертыванию: http://www.playframework.com/documentation/2.2.x/ProductionDist

Ответ 7

Развертывание игры 2. * Приложения в aws ec2 очень разные, пока вы не найдете этот гораздо лучший способ сделать это. Я имею в виду, что обезьяна обещает отличное решение. хотя по-прежнему необходимо работать с новой настройкой доступной и ее playbook, но это должно быть достойно. Я нашел эти чтения совсем недавно и все же применил их в своем проекте. Я надеюсь, что следующие чтения помогут вам узнать больше:

Ansible + play + aws ec2

Прочитайте его, чтобы узнать больше о Ansible, чтобы показать игру в aws

Спасибо! Надеюсь, это поможет вам начать свое дело. Пожалуйста, сообщайте больше знаний, которые вы получаете во время процедуры, или если есть простой способ решить эту сложную проблему развертывания.