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

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

Удалить все контейнеры и образы Docker

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

#!/bin/bash

docker rm $(docker ps -a -q)
docker rmi $(docker images -q)

 

Первая команда удаляет все ваши контейнеры, а вторая образы.

Как видите, всё очень просто)