Статьи

Развертывание веб-приложений на PHP с использованием Laravel Forge

Разработчики любят автоматизировать вещи — для каждого процесса между разработкой и производством они стремятся иметь сценарий, который облегчает их рабочий процесс. Это также относится и к развертыванию.

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

Некоторые из нас предпочитают отправлять файлы на сервер вручную по FTP или помещать код в репозиторий GitHub, тогда как другие предпочитают инструмент развертывания, чтобы упростить процесс. Одним из таких инструментов, который делает развертывание PHP легким, является Laravel Forge.

Не позволяйте бренду Laravel вводить вас в заблуждение. Помимо Laravel, вы можете использовать сервис для размещения WordPress, Symphony, Statamic или любого другого веб-проекта, если это PHP. Лично мне нравится Laravel Forge за его простоту и легкость привыкания.

В этом уроке я расскажу вам, как подключить Laravel Forge к AWS, и выяснить, что он может предложить.

Laravel Forge позволяет вам раскручивать облачные серверы и управлять процессами развертывания с помощью Git и некоторых популярных поставщиков серверов. Процесс объясняется ниже:

Во-первых, вам необходимо подключить AWS или любого другого облачного провайдера к своей учетной записи Forge. Затем свяжите ваш источник контроля, такой как GitHub, с Forge. Теперь вы сможете создавать серверы. Установите свой репозиторий системы контроля версий на сервере. Наконец, нажмите кнопку развертывания. Достаточно просто, правда?

Серверы с Laravel Forge поставляются со следующим стеком:

  • Ubuntu 16.06
  • Nginx
  • PHP 7.2 / 7.1 / 7.0 / 5.6
  • MySQL / MariaDB / Postgres
  • Redis
  • Memcached

После того, как сервер был создан, вы можете дополнительно настроить вещи.

Когда вы регистрируетесь, вы можете выбирать между различными планами, которые они предлагают. Я выбрал базовый план за 12 долларов в месяц; однако вы получите бесплатную пробную версию с доступом ко всему списку в течение пяти дней.

После того, как вы вошли в систему, вы увидите что-то вроде этого ниже.

Снимок экрана главного экрана Laravel Forge после входа в систему

Для поставщика услуг вы можете выбрать между Digital Ocean, AWS, Linode и Vultr. Также вы можете использовать Forge с пользовательским VPC. Что касается контроля версий, Forge поддерживает GitHub, GitLab и Bitbucket. В этом руководстве я собираюсь обсудить основы настройки AWS для работы с Forge и GitHub для управления исходным кодом. Когда вы закончите, вы сможете создавать и предоставлять любое количество серверов.

Если вы используете другого поставщика услуг в списке, вы можете пропустить этот шаг и связаться с нами позже, после того, как мы настроили AWS и Laravel Forge.

Чтобы настроить Forge и AWS, выполните следующие действия.

Войдите в Laravel Forge и выберите AWS в качестве поставщика услуг. Вам будет предложено ввести идентификатор ключа доступа (ключ) и секретный ключ доступа (секретный). Вам нужно будет создать конкретного пользователя IAM с политикой, обеспечивающей достаточный доступ к Laravel Forge. IAM — это способ отображения разрешений Amazon для каждого пользователя, так что вы можете отозвать доступ, если что-то пойдет не так.

Войдите в консоль AWS и создайте нового пользователя IAM.

Создайте пользователя IAM в AWS с программным доступом

Дайте пользователю осмысленное имя и установите флажок « Программный доступ» .

Установите правильное разрешение для пользователя IAM laravel-forge. Создайте новую группу пользователей, потому что группы пользователей идеально подходят для управления разрешениями. Теперь естественный вопрос: «К каким политикам должен иметь доступ пользователь подделки?» Хотя вы можете предоставить ему AdministratorAccess, вы не должны этого делать.

Создайте группу пользователей с соответствующими правами

Если вам нужен Forge для создания и подготовки серверов от вашего имени, вам нужно будет добавить две политики:

  1. AmazonEC2FullAccess
  2. AmazonVPCFullAccess

Подтвердите учетную запись IAM, и на следующей странице вы найдете ключ доступа и секретный код.

Вновь сгенерированный ключ доступа и секрет

Перейдите на страницу Laravel Forge и вставьте их туда. Вот и все.

Подключите свою учетную запись GitHub / Bitbucket к Forge, если вы этого еще не сделали. Forge добавит открытый ключ в вашу учетную запись при создании сервера. Если вам нужно добавить нового поставщика услуг и / или обновить систему контроля версий, у вас есть эти опции в вашем профиле.

Перейдите на страницу Создать сервер, чтобы добавить новый сервер.

Интерфейс Laravel Forges для добавления нового сервера

Выберите t2.micro с 1 ГБ ОЗУ, если вы используете бесплатный уровень AWS. Что касается других настроек, я собираюсь перейти с настройками по умолчанию. Это включает в себя MySQL для базы данных и PHP версии 7.2. Вы можете настроить имя базы данных позже. Для простоты я решил не использовать балансировщик нагрузки. Если вас интересует рецепт пост-продакшн, я рассмотрел его в конце этого урока.

Создание сервера может занять до пяти минут. Вам будут предоставлены учетные данные для доступа к sudo. Храните их в надежном месте, чтобы вы могли использовать их в будущем. Чтобы увидеть, что все работает как положено, перейдите на IP-адрес сервера, и вы должны увидеть вывод phpinfo() на вашем экране.

Интерфейс, который вы видите после создания сервера — это панель управления сервером.

Панель управления сервером

Вы можете сделать много вещей здесь, таких как:

  • управление сайтом
  • добавление ключей SSH
  • конфигурация базы данных
  • обновление настроек PHP
  • планирование задачи
  • запуск демона
  • управление сетью и настройка брандмауэра
  • приложение для мониторинга с использованием Blackfire или Papertail
  • настройка мета-настроек

Это много функций, связанных там. Я рассмотрел важные из них в этом уроке. Начнем с управления сайтом. Согласно документам Forge:

Сайты представляют каждый «домен» на вашем сервере. Сайт «по умолчанию» включен в каждый недавно подготовленный сервер; однако вы должны удалить его и создать новый сайт с допустимым доменным именем, когда будете готовы запустить производственный сайт.

Как видите, Forge уже создал для нас сайт по умолчанию. Вы можете создать любое количество сайтов и перенаправить их на ваши субдомены. Для целей этого урока я буду придерживаться сайта по умолчанию. По умолчанию для веб-каталога установлено значение /public . Вот как это должно быть настроено для Laravel и большинства других веб-приложений.

Если вы нажмете на конкретный сайт, вы увидите интерфейс управления сайтом. Здесь вы можете управлять, развертывать и настраивать отдельные сайты.

Вот как изначально выглядит интерфейс.

Вы можете добавить репозиторий Git с этого экрана.

Вы можете установить из репозитория Git или установить WordPress. Для этого руководства я создал образец приложения « Свяжитесь с нами», которое можно подключить к своей учетной записи. Вы можете указать название проекта и филиала. Когда вы закончите, у вас должны быть элементы управления для развертывания приложения.

Панель управления сайтом с элементами управления развертыванием

Я дам вам краткий обзор доступных вариантов.

Для развертывания вы можете выполнить развертывание вручную с помощью кнопки « Развернуть сейчас» . Кроме того, вы можете включить опцию быстрого развертывания , которая автоматически развертывает проект, когда вы помещаете код в основную ветку выбранного репозитория GitHub.

Сценарий развертывания по умолчанию извлекает код из хранилища, устанавливает зависимости, запускает сервер и выполняет миграции при каждом развертывании приложения. Вот фактический сценарий развертывания.

1
2
3
4
5
6
7
8
9
cd /home/forge/redmonark.com
git pull origin laravelapi
composer install —no-interaction —prefer-dist —optimize-autoloader
echo «» |
 
if [ -f artisan ]
then
    php artisan migrate —force
fi

Если вам нужно настроить его и добавить что-то еще, вы можете.

Вы можете использовать это, чтобы интегрировать ваше приложение в стороннюю службу или создать собственный сценарий развертывания. Когда URL получает запрос, сценарий развертывания запускается.

Если вам нужно обновить ветку или установить более новую версию того же проекта в другом хранилище, вы можете использовать эти опции. Если вы обновляете ветку, вам, возможно, придется обновить имя ветки в сценарии развертывания.

Forge автоматически генерирует файл среды для приложения. Некоторые детали, такие как учетные данные базы данных, автоматически добавляются в среду. Однако, если приложение использует API, вы можете безопасно разместить ключ API в среде. Даже если вы работаете с обычным веб-приложением PHP, вы можете получить доступ к переменным ENV с помощью метода getenv() .

Запуск работника очереди в Forge аналогичен запуску команды queue:work Artisan. Forge управляет работниками очереди с помощью монитора процессов, называемого Supervisor, так что процесс продолжает работать постоянно. Вы можете создать несколько очередей на основе приоритета очереди или любой другой классификации, которая будет вам полезна.

Защита SSL для веб-сайта в прошлом была простой и бесплатной. Forge позволяет вам установить существующий сертификат или получить бесплатный сертификат от LetsEncrypt. Это быстро и просто. Если вам нужен SSL для подстановочных доменов, вы можете добавить бесплатные сертификаты Cloudflare в Forge.

Вернемся к интерфейсу управления сервером , у нас есть ключи SSH.

Хотя большинство настраиваемых параметров доступны на панели инструментов, если вам необходимо подключиться к серверу, вы должны сделать это с помощью SSH. SSH является более безопасным способом входа в систему VPS и обеспечивает большую защиту, чем пароли.

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

Добавление ключей SSH на сервер Forge

Примечание. Ключ SSH, добавленный с панели управления сервером, будет привязан к этому серверу. Если вам необходимо автоматически добавлять ключи ко всем серверам, вы можете добавить их в настройках своего профиля.

Чтобы создать пару ключей, выполните следующую команду.

1
ssh-keygen -t rsa

Вам будет задан ряд вопросов, таких как файл, в котором вы хотите хранить ключ, и пароль для дополнительной безопасности. Затем добавьте ключ SSH в ssh-agent.

1
ssh-add ~/.ssh/id_rsa

Скопируйте открытый ключ и добавьте его в список SSH-ключей Forge.

1
cat ~/.ssh/id_rsa.pub # Copy the output of this command

Вы можете использовать интерфейс для настройки PHP и MySQL. Для базы данных доступны следующие параметры:

  • Создать новые базы данных.
  • Добавить новых пользователей.
  • Обновить доступ пользователей к базе данных.
  • Обновите знания Forge о пароле.

Убедитесь, что вы ввели обновленные данные в свой файл .env .

Вы можете настроить следующие параметры PHP:

  • Обновите до последней версии PHP.
  • Измените размер загружаемого файла.
  • Оптимизируйте OPCache для производства, чтобы скомпилированный код PHP был сохранен в памяти.

Здесь я перечислил некоторые другие доступные настройки.

Вы можете использовать планировщик Forge для планирования повторяющихся задач или запуска заданий cron. Если вам нужно периодически отправлять электронную почту, что-то чистить или запускать скрипт, вы можете использовать планировщик задач. По умолчанию создается задача, которая запускает composer self-update каждую ночь. Вы можете попробовать составить расписание с выбранной вами частотой.

Демон — это компьютерная программа, которая работает в фоновом режиме. Laravel Forge позволяет запустить демон и использует Supervisor, чтобы гарантировать, что демон продолжает работать. Если по какой-то причине происходит сбой демона, Supervisor автоматически перезапустит скрипт.

Laravel Forge имеет встроенную поддержку инструментов, которые отслеживают ваше приложение на предмет измерения производительности, собирая данные о таких ресурсах, как память, процессорное время и операции ввода-вывода. Доступны следующие инструменты: Blackfire.io и Papertrail. Чтобы начать профилирование вашего приложения, вам просто нужно получить правильные учетные данные со стороннего веб-сайта и все.

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

Laravel Forge — невероятный инструмент, который превращает развертывание в кусочек пирога. Он имеет множество функций и простой в использовании пользовательский интерфейс, который позволяет создавать и предоставлять серверы и развертывать приложения без каких-либо хлопот. После того, как вы настроили поставщика услуг, высока вероятность того, что вам не понадобится доступ к консоли AWS для повторного управления сервером.

В этом руководстве я рассмотрел основы настройки AWS с помощью Laravel Forge и шаги по подготовке сервера и развертыванию приложения. Я также обсудил почти все функции, доступные в интерфейсе Forge.

Для тех из вас, кто только начинает работать с Laravel или хочет расширить свои знания, сайт или приложение с помощью расширений, у нас есть множество вещей, которые вы можете изучить на Envato Market .

У вас есть какой-нибудь опыт, которым вы можете поделиться с помощью развертывания приложений PHP с помощью Laravel Forge или любого другого популярного инструмента развертывания? Дайте нам знать об этом в комментариях.