Лучший способ развернуть приложение 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
Спасибо!
Надеюсь, это поможет вам начать свое дело. Пожалуйста, сообщайте больше знаний, которые вы получаете во время процедуры, или если есть простой способ решить эту сложную проблему развертывания.