Skip to main content
Деплой Laravel в AWS Beanstalk

Деплой Laravel приложения в AWS Beanstalk

Недавно довелось поработать с интересным сервисом от 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 и ждем. Через некоторое время проверяем вашу ссылку и видим:

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

Laravel Form Request, как использовать один класс для обновления и создания записи

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

Подробнее

Laravel whereHas / has. Выбираем только модели со связями

Очень часто возникает ситуация, когда нужно выбрать только те модели у которых есть связь. Например посмотреть сколько пользователей оставили комментарий, статьи с комментариями, вывести список пользователей у которых есть корзина с товарами и так далее. Для этого разработчики фреймворка подготовили нам несколько полезных методов — has, whereHas.

Подробнее
Сортировка по полю из связанной модели

Laravel — Сортировка по полю из связанной модели

Очень часто возникает ситуация, когда вам необходимо получить коллекцию моделей отсортированную по полю из связанной модели. Например, вы хотите получить список постов отсортированных по последнему оставленному комментарию. Сегодня мы разберем один способ применения такой сортировки используя Eloquent.

Подробнее

Laravel Single Action Controller

Single Action Controller — это контроллер в приложении который включает в себя магический метод __invoke который и является обработчиком запроса. 

Пакет написал разработчик Илья Сакович, смысл пакета заключается в том, чтобы не раздувать контроллеры до больших размеров и сделать маршруты более приятными.

Подробнее

Бот для Telegram на PHP. Часть 2

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

Подробнее

Регистрация на PHP, AJAX, MYSQL

Добрый день друзья, продолжаю небольшую серию уроков по PHP и AJAX, сегодня у нас написание простой системы регистрации пользователя. В данной статье мы будем использовать PHP, MySQL(PDO), JavaScript. Урок рассчитан на новичков, потому я не буду использовать ООП и сторонние пакеты, а наоборот покажу как на чистом PHP написать регистрацию. Для обработки формы регистрации мы будем использовать javascript, отправляя запрос на сервер и получая ответ. Давайте приступим.

Подробнее