Руководство по развертыванию приложения PHP, MySQL и Redis в службе приложение Azure
В этом руководстве показано, как создать безопасное приложение PHP в Службе приложений Azure, подключенное к базе данных MySQL (с помощью гибкого сервера Базы данных Azure для MySQL). Вы также развернете Кэш Azure для Redis, чтобы включить код кэширования в приложении. Служба приложений Azure — это высокомасштабируемая веб-служба с поддержкой самостоятельного исправления, которая позволяет легко развертывать приложения в Windows или Linux. По завершении вы получите приложение Laravel, работающее в Службе приложений Azure в Linux.
Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
Пример приложения
Чтобы следовать этому руководству, клонируйте или скачайте пример приложения Laravel из репозитория:
git clone https://github.com/Azure-Samples/laravel-tasks.git
Если вы хотите запустить приложение локально, сделайте следующее:
В файле ENV настройте параметры базы данных (например,
DB_DATABASE
,DB_USERNAME
иDB_PASSWORD
) с помощью параметров в локальной базе данных MySQL. Для запуска этого примера потребуется локальный сервер MySQL.В корне репозитория запустите Laravel с помощью следующих команд:
composer install php artisan migrate php artisan key:generate php artisan serve
1. Создание ресурсов Службы приложений и MySQL
В этом шаге вы создадите ресурсы Azure. Действия, описанные в этом руководстве, позволяют создать изначально безопасную конфигурацию Службы приложений и Базы данных Azure для MySQL. В процессе создания вы укажете следующее:
- Имя веб-приложения. Это имя используется в составе DNS-имени вашего веб-приложения в виде
https://<app-name>.azurewebsites.net
. - Среда выполнения для приложения. Здесь следует выбрать версию PHP, которая будет использоваться для приложения.
- Группа ресурсов для приложения. Группа ресурсов позволяет группировать (в логическом контейнере) все ресурсы Azure, необходимые для приложения.
Войдите на портал Azure и выполните следующие действия, чтобы создать ресурсы Службы приложений Azure.
Шаг 1. В портал Azure:
- Введите "веб-приложение база данных" в строке поиска в верхней части портала Azure.
- Выберите элемент с меткой Веб-приложение и база данных под заголовком Marketplace. Вы также можете перейти напрямую к мастеру создания.
Шаг 2. На странице "Создание веб-приложения + база данных " заполните форму следующим образом.
- Группа ресурсов — выберите Создать и используйте имя msdocs-laravel-mysql-tutorial.
- Регион → любой ближайший к вам регион Azure.
- Имя — используйте имя msdocs-laravel-mysql-XYZ, где XYZ представляет три произвольных символа. Это имя должно быть уникальным в Azure.
- Стек среды выполнения → PHP 8.2.
- Добавьте Кэш Azure для Redis? → Да.
- План размещения — Базовый. Позже, когда все будет готово, вы сможете вертикально увеличить масштаб до рабочей ценовой категории.
- MySQL — гибкий сервер выбран по умолчанию в качестве ядра СУБД. База данных Azure для MySQL — это полностью управляемая система "база данных как услуга" MySQL в Azure, совместимая с последними выпусками сообщества.
- Выберите Review + create (Просмотреть и создать).
- После завершения проверки щелкните Создать.
Шаг 3. Развертывание занимает несколько минут. После завершения развертывания нажмите кнопку Перейти к ресурсу. Вы перейдете непосредственно в приложение Службы приложений, но будут созданы следующие ресурсы:
- Группа ресурсов — Контейнер для всех созданных ресурсов.
- План службы приложений — определяет вычислительные ресурсы для Службы приложений. Создается план Linux на уровне Базовый.
- Служба приложений — представляет приложение и выполняется в плане службы приложений.
- Виртуальная сеть — интегрирована с приложением Службы приложений и изолирует внутренний сетевой трафик.
- Частные конечные точки → конечные точки Access для сервера базы данных и кэша Redis в виртуальной сети.
- Сетевые интерфейсы → Представляют частные IP-адреса, по одному для каждой из частных конечных точек.
- База данных Azure для MySQL гибкий сервер → доступен только за частной конечной точкой. База данных и пользователь создаются на этом сервере.
- Кэш Azure для Redis → доступно только за частной конечной точкой.
- Частная зона DNS зонах → включить разрешение DNS сервера базы данных и кэш Redis в виртуальной сети.
2. Настройка подключения к базе данных
Шаг 1. На странице Служба приложений в меню слева выберите "Конфигурация".
Шаг 2.
- Найдите параметры приложения, начинающиеся с AZURE_MYSQL_. Они были созданы из новой базы данных MySQL мастером создания.
- Кроме того, найдите параметры приложения, начинающиеся с AZURE_REDIS_. Они были созданы из нового кэша Redis мастером создания. Чтобы настроить приложение, это имя все, что вам нужно.
- Если вы хотите, нажмите кнопку "Изменить " справа от каждого параметра и просмотреть или скопировать его значение. Позже вы измените код приложения на использование этих параметров.
Шаг 3. На вкладке "Параметры приложения" на странице "Конфигурация" создайте CACHE_DRIVER
параметр:
- Выберите Новый параметр приложения.
- В поле "Имя" введите CACHE_DRIVER.
- В поле "Значение" введите redis.
- Нажмите ОК.
CACHE_DRIVER
уже используется в коде приложения Laravel. Этот параметр указывает Laravel использовать Redis в качестве кэша.
Шаг 4. Используя те же действия, что и в шаге 3, создайте следующие параметры приложения:
- MYSQL_ATTR_SSL_CA: используйте /home/site/wwwroot/ssl/DigiCertGlobalRootCA.crt.pem в качестве значения. Этот параметр приложения указывает на путь к TLS/SSL-сертификату, необходимому для доступа к серверу MySQL. Для удобства он включен в пример репозитория.
- LOG_CHANNEL. Используйте stderr в качестве значения. Этот параметр сообщает Laravel каналу журналов stderr, что делает его доступным для журналов Служба приложений.
- APP_DEBUG: используйте true в качестве значения. Это переменная отладки Laravel, которая включает страницы режима отладки.
- APP_KEY: используйте base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= в качестве значения. Это переменная шифрования Laravel.
- В строке меню вверху выберите Сохранить.
- При появлении запроса выберите Далее.
Внимание
Это APP_KEY
значение используется здесь для удобства. В рабочих сценариях его необходимо создать специально для конкретного развертывания с помощью командной строки php artisan key:generate --show
.
3. Развертывание примера кода
На этом шаге вы настроите развертывание GitHub с помощью GitHub Actions. Это всего лишь один из множества способов развертывания в Службе приложений, но это также отличный способ обеспечения непрерывной интеграции в процессе развертывания. По умолчанию каждый git push
из репозитория GitHub запускает действие сборки и развертывания. Вы внесете некоторые изменения в базу кода с помощью Visual Studio Code непосредственно в браузере, а затем позволите GitHub Actions выполнить развертывание автоматически.
Шаг 1. В новом окне браузера:
- Войдите в свою учетную запись GitHub.
- Перейдите к https://github.com/Azure-Samples/laravel-tasks.
- Выберите Создать вилку.
- Щелкните Создать вилку.
Шаг 2. На странице GitHub откройте Visual Studio Code в браузере, нажав клавишу .
.
Шаг 3. В Visual Studio Code в браузере откройте конфигурацию или database.php в обозревателе. mysql
Найдите раздел и внесите следующие изменения:
- Замените
DB_HOST
наAZURE_MYSQL_HOST
. - Замените
DB_DATABASE
наAZURE_MYSQL_DBNAME
. - Замените
DB_USERNAME
наAZURE_MYSQL_USERNAME
. - Замените
DB_PASSWORD
наAZURE_MYSQL_PASSWORD
. - Замените
DB_PORT
наAZURE_MYSQL_PORT
. Помните, что этиAZURE_MYSQL_
параметры были созданы мастером создания.
Шаг 4. В config/database.php прокрутите страницу в раздел Redis cache
и внесите следующие изменения:
- Замените
REDIS_HOST
наAZURE_REDIS_HOST
. - Замените
REDIS_PASSWORD
наAZURE_REDIS_PASSWORD
. - Замените
REDIS_PORT
наAZURE_REDIS_PORT
. - Замените
REDIS_CACHE_DB
наAZURE_REDIS_DATABASE
. - В том же разделе добавьте строку с
'scheme' => 'tls',
. Эта конфигурация сообщает Laravel использовать шифрование для подключения к Redis. Помните, что этиAZURE_REDIS_
параметры были созданы мастером создания.
Шаг 5.
- Выберите расширение Система управления версиями.
- В текстовом поле введите сообщение фиксации, например
Configure DB & Redis variables
. - Выберите "Фиксация" и "Отправить".
Шаг 6. Вернитесь на страницу Служба приложений в меню слева выберите Центр развертывания.
Шаг 7. На странице Центра развертывания:
- В поле Источник выберите GitHub. По умолчанию в качестве поставщика сборки выбрано GitHub Actions.
- Войдите в свою учетную запись GitHub и следуйте инструкциям по авторизации Azure.
- В поле Организация выберите свою учетную запись.
- В репозитории выберите laravel-task.
- В поле Ветвь выберите main.
- В меню сверху выберите Сохранить. Служба приложений фиксирует файл рабочего процесса в выбранном репозитории GitHub в каталоге
.github/workflows
.
Шаг 8. На странице Центра развертывания:
- Выберите Журналы. Прогон развертывания уже запущен.
- В элементе журнала для прогона развертывания выберите Журналы сборки и развертывания.
Шаг 9. Вы перейдете в репозиторий GitHub и увидите, что действие GitHub выполняется. Файл рабочего процесса определяет два отдельных этапа: сборку и развертывание. Дождитесь, пока в выполнении действия GitHub не будет показано состояние Завершено. Это занимает около 15 минут.
4. Создание схемы базы данных
Мастер создания помещает сервер базы данных MySQL за частной конечной точкой, поэтому он доступен только из виртуальной сети. Так как приложение Службы приложений уже интегрировано с виртуальной сетью, выполнять миграции баз данных с вашей базой данных проще всего непосредственно из контейнера Службы приложений.
Шаг 1. Вернитесь на страницу Служба приложений в меню слева выберите SSH.
Шаг 2. В терминале SSH:
- Запустите
cd /home/site/wwwroot
. Вот все развернутые файлы. - Запустите
php artisan migrate --force
. При успешном завершении Служба приложений успешно подключается к базе данных MySQL. После перезапуска приложения могут сохраняться только изменения в файлах в/home
. Изменения за пределами/home
не сохраняются.
5. Изменение корня сайта
Жизненный цикл приложения Laravel начинается в каталоге /public. Контейнер PHP по умолчанию для Служба приложений использует Nginx, который начинается в корневом каталоге приложения. Чтобы изменить корневой каталог сайта, необходимо изменить файл конфигурации Nginx в контейнере PHP (/etc/nginx/sites-available/default). Для удобства пример репозитория содержит пользовательский файл конфигурации, который называется default. Как отмечалось ранее, вы не хотите заменить этот файл с помощью оболочки SSH, так как изменение выходит за /home
пределы и будет потеряно после перезапуска приложения.
Шаг 1.
- В меню слева выберите Конфигурация.
- Выберите вкладку Общие параметры.
Шаг 2. На вкладке "Общие параметры"
- В поле "Команда запуска" введите следующую команду: cp /home/site/wwwroot/default /etc/nginx/sites-available/default &> nginx reload.
- Выберите Сохранить. Команда заменяет файл конфигурации Nginx в контейнере PHP и перезапускает Nginx. Эта конфигурация гарантирует, что одно и то же изменение выполняется в контейнер при каждом запуске.
6. Переход в приложение
Шаг 1. На странице Служба приложений:
- В меню слева выберите Обзор.
- Выберите URL-адрес своего приложения. Также можно перейти непосредственно по адресу
https://<app-name>.azurewebsites.net
.
Шаг 2. Добавление нескольких задач в список. Поздравляем, вы запускаете защищенное приложение PHP на основе данных в службе приложение Azure.
Совет
Пример приложения реализует шаблон кэша в сторону . Когда вы перезагрузите страницу после внесения изменений данных, время отклика на веб-странице показывает гораздо быстрее, так как оно загружает данные из кэша вместо базы данных.
7. Потоковая передача журналов диагностики
Служба приложений Azure захватывает все сообщения, выводимые на консоль, чтобы помочь в диагностике проблем приложения. Пример приложения выводит сообщения журнала консоли в каждой из своих конечных точек для демонстрации этой возможности. По умолчанию функция ведения журнала Laravel (например, Log::info()
) выводит в локальный файл. Параметр LOG_CHANNEL
приложения из предыдущей версии делает записи журнала доступными из потока журналов Служба приложений.
Шаг 1. На странице Служба приложений:
- В меню слева выберите Журналы службы приложений.
- Под элементом Ведение журнала приложения выберите Файловая система.
Шаг 2. В меню слева выберите поток журналов. Вы увидите журналы для своего приложения, включая журналы платформы и журналы из контейнера.
Очистка ресурсов
По завершении работы можно удалить все ресурсы из вашей подписки Azure, удалив соответствующую группу ресурсов.
Шаг 1. В строке поиска в верхней части портал Azure:
- Введите имя группы ресурсов.
- Выберите группу ресурсов.
Шаг 2. На странице группы ресурсов выберите "Удалить группу ресурсов".
Шаг 3.
- Введите имя группы ресурсов для подтверждения удаления.
- Выберите команду Удалить.
Часто задаваемые вопросы
- Сколько стоит такая конфигурация?
- Как подключиться к базе данных MySQL, защищенной виртуальной сетью, с помощью других средств?
- Как осуществляется разработка локальных приложений с использованием GitHub Actions?
- Почему развертывание GitHub Actions идет так медленно?
Сколько стоит такая конфигурация?
Цены на создание ресурсов приведены ниже:
- План службы приложений создается на уровне Базовый, и его можно масштабировать вверх или вниз. См. цены на Службу приложений.
- Гибкий сервер MySQL создается на уровне B1ms, и его можно масштабировать вверх или вниз. При использовании бесплатной учетной записи Azure уровень B1ms предоставляется бесплатно в течение 12 месяцев до достижения ежемесячных пределов. См. цены на Базу данных Azure для MySQL.
- Кэш Azure для Redis создается на уровне "Базовый" с минимальным размером кэша. Существует небольшая стоимость, связанная с этим уровнем. Его можно масштабировать до более высоких уровней производительности для повышения доступности, кластеризации и других функций. См. Кэш Azure для Redis цены.
- Плата за виртуальную сеть не взимается, если только вы не настроите дополнительные функциональные возможности, такие как пиринг. См. цены на виртуальные сети Azure.
- За частную зону DNS взимается небольшая плата. См. цены на Azure DNS.
Как подключиться к базе данных MySQL, защищенной виртуальной сетью, с помощью других средств?
- Для базового доступа из программы командной строки можно запустить
mysql
из терминала SSH приложения. - Чтобы подключиться из средства для настольных систем, например MySQL Workbench, компьютер должен находиться в соответствующей виртуальной сети. Например, это может быть виртуальная машина Azure, подключенная к одной из подсетей, или компьютер в локальной сети с VPN-подключением типа "сеть — сеть" к виртуальной сети Azure.
- Вы также можете интегрировать Azure Cloud Shell с виртуальной сетью.
Как осуществляется разработка локальных приложений с использованием GitHub Actions?
Возьмем автоматически созданный файл рабочего процесса из Службы приложений в качестве примера, где каждый git push
запускает новый прогон сборки и развертывания. Из локального клона репозитория GitHub вы вносите необходимые обновления в GitHub. Например:
git add .
git commit -m "<some-message>"
git push origin main
Почему развертывание GitHub Actions идет так медленно?
Автоматически созданный файл рабочего процесса из Службы приложений определяет прогон из двух заданий — сначала сборка, потом развертывание. Так как каждое задание выполняется в собственной чистой среде, файл рабочего процесса гарантирует, что задание deploy
имеет доступ к файлам из задания build
:
- В конце задания
build
отправьте файлы в виде артефактов. - В начале задания
deploy
скачайте эти артефакты.
Большая часть времени, затрачиваемого процессом из двух заданий, уходит на отправку и скачивание артефактов. При желании файл рабочего процесса можно упростить, объединив два задания в одно, что устраняет необходимость в шагах отправки и скачивания.
Следующие шаги
Перейдите к следующему руководству, чтобы узнать, как защитить приложение с помощью личного домена и сертификата.
Также ознакомьтесь с другими ресурсами: