Недавно довелось поработать с интересным сервисом от AWS — Elastic Beanstalk. Сервис специально разработан для быстрого развёртывания приложений на различных языках программирования, в том числе и PHP. Сервис будет заниматься обслуживанием, мониторингом и масштабированием вашего приложения в автоматическом режиме, что довольно удобно и позволяет избавится от ручной настройки серверов, баллансировщиков и т.д., предлагая что-то похожее на IaC (Инфраструктура как код).
Почему я решил написать этот гайд? В интернете нет нормальных руководств по настройке деплоя вашего приложения в Beanstalk, авторы большинства гайдов предлагают вручную архивировать код приложения, открывать браузер, загружать туда код, что меня не устраивает, этот процесс должен быть автоматизирован.
Оглавление
Создание окружения
Процесс регистрации аккаунта описывать я не буду, там всё тривиально, мы сразу приступим к работе.
Находим в меню сервисов, Elastic Beanstalk (раздел Compute). Переходим в в этот сервис и нажимаем кнопку Create Application:

Application name — это имя вашего приложения, пишем своё. В моем случае — laravel test deploy.
Application tags — опционально, можно не добавлять теги. Они используются для группировки/фильтрации ваших ресурсов.
Platform — Выбираем PHP, версию PHP выбираем по желанию, я выбрал 7.4
Application code — оставляем Sample Application, позже загрузим свой код
Вы также можете настроить больше параметров нажав на кнопку внизу формы Configure more options, но нам пока это не нужно, нажимаем Create application.
Ожидаем пару минут пока AWS сделает все нужные настройки и по завершению мы попадаем на страницу нашего приложения. Слева вверху есть ссылка по которой мы можем просмотреть сайт в браузере.

Переходим по ссылке и видим:

Это значит, что вы всё правильно сделали. Пора приступать к деплою Laravel приложения.
Подготовка приложения
Вы можете использовать уже готовое приложение, но для деплоя я создам новый проект.
composer create-project --prefer-dist laravel/laravel aws-beanstalk
Дожидаемся установки всех компонентов и переходим к следующему шагу.
Установка утилит AWS
Подробно процесс установки утилит для работы с AWS и AWS Beanstalk описан по этой ссылке — https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-advanced.html. Выбирайте вашу операционную систему и запускайте команды по очереди. Мы же приступим к настройке.
Настройка eb cli
Открываем терминал, переходим в директорию проекта и запускаем команду eb init
:

Выбираем регион, можно оставить стандартный который предлагают.
Теперь нужно установить ключи доступа, как их получить описано в статье — https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys.
Краткое руководство:
- Переходим по ссылке — https://console.aws.amazon.com/iam/home?#/users
- Нажимаем кнопку Add User
- Вводим имя пользователя и ставим галочку Programmatic access
- Переходим к следующему шагу.
- Выбираем — Attach existing policies directly
- В строке поиска пишем beanstalk, находим — AWSElasticBeanstalkFullAccess
- Шаг с тегами прокликиваем
- В конце нажимаем Create User
После этих действий мы увидим ключи доступа для юзера, желательно их скачать.
Возвращаемся в консоль и копируем нужные значения. Сначала Access key ID, следом — Secret access key. Нажимаем ENTER.
Выбираем приложение которое мы создали и на этом начальная настройка утилит закончена, приступаем к деплою приложения.
Загрузка приложения в Elastic Beanstalk
Создадим директорию в корне проекта с именем .ebextensions
, а внутри этой директории создаем файл php-settings.config
, скопируйте в него данный код:
option_settings: aws:elasticbeanstalk:container:php:phpini: document_root: /public memory_limit: 128M zlib.output_compression: "Off" allow_url_fopen: "On" display_errors: "Off" max_execution_time: 60 composer_options: --optimize-autoloader
Теперь можем приступить к деплою, запускаем команду eb deploy
и ждем. Через некоторое время проверяем вашу ссылку и видим:

Приложение удалось загрузить, всё работает, но еще нет подключения к базе данных и переменных окружения. Об этом я напишу в следующей статье.