Руководство по созданию PHP (Laravel) и База данных Azure для MySQL — гибкое приложение сервера в службе приложение Azure

ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для MySQL — гибкий сервер

Служба приложений Azure — это высокомасштабируемая служба размещения с самостоятельной установкой исправлений на основе операционной системы Linux. В этом руководстве показано, как создать безопасное приложение PHP в Службе приложений Azure, подключенное к базе данных MySQL (с помощью гибкого сервера Базы данных Azure для MySQL). По завершении вы получите приложение Laravel, работающее в Службе приложений Azure в Linux.

Снимок экрана: пример приложения Azure с названием Task List, в котором показаны добавленные новые задачи.

В этом руководстве описано следующее:

  • Создание изначально безопасного приложения на основе PHP и MySQL в Azure
  • Настройка секретов подключения к MySQL с помощью параметров приложения
  • Развертывание кода приложения с помощью GitHub Actions
  • Обновление и повторное развертывание приложения
  • Безопасные переносы баз данных
  • Потоковая передача журналов диагностики из Azure.
  • Управление приложением на портале Azure.

Необходимые компоненты

Пример приложения

Для работы с этим руководством клонируйте или скачайте пример приложения из репозитория:

git clone https://github.com/Azure-Samples/laravel-tasks.git

Если вы хотите запустить приложение локально, сделайте следующее:

  • В .env настройте параметры базы данных (напримерDB_DATABASE, DB_USERNAMEиDB_PASSWORD) с помощью параметров в локальной База данных Azure для MySQL гибкой базе данных сервера. Для выполнения этого примера требуется локальный База данных Azure для MySQL гибкий экземпляр сервера.

  • В корне репозитория запустите Laravel с помощью следующих команд:

    composer install
    php artisan migrate
    php artisan key:generate
    php artisan serve
    

1. Создание Служба приложений и База данных Azure для MySQL гибких ресурсов сервера

В этом шаге вы создадите ресурсы Azure. Действия, описанные в этом руководстве, создают Служба приложений и База данных Azure для MySQL гибкую конфигурацию сервера, безопасную по умолчанию. В процессе создания вы укажете следующее:

  • Имя веб-приложения. Это имя используется в составе DNS-имени вашего веб-приложения в виде https://<app-name>.azurewebsites.net.
  • Среда выполнения для приложения. Здесь следует выбрать версию PHP, которая будет использоваться для приложения.
  • Группа ресурсов для приложения. Группа ресурсов позволяет группировать (в логическом контейнере) все ресурсы Azure, необходимые для приложения.

Войдите на портал Azure и выполните следующие действия, чтобы создать ресурсы Службы приложений Azure.

Instructions Снимок экрана
В портал Azure:
  1. Введите "веб-приложение база данных" в строке поиска в верхней части портала Azure.
  2. Выберите элемент с меткой Веб-приложение и база данных под заголовком Marketplace.
Вы также можете перейти напрямую к мастеру создания.
Снимок экрана, на котором показано, как использовать поле поиска на верхней панели инструментов для поиска мастера создания
На странице Создание веб-приложения+базы данных заполните форму следующим образом.
  1. Группа ресурсов — выберите Создать и используйте имя msdocs-laravel-mysql-tutorial.

  2. Регион → любой ближайший к вам регион Azure.

  3. Имя — используйте имя msdocs-laravel-mysql-XYZ, где XYZ представляет три произвольных символа. Это имя должно быть уникальным в Azure.

  4. Стек среды выполненияPHP 8.0.

    MySQL — гибкий сервер выбран по умолчанию в качестве ядра СУБД. База данных Azure для MySQL — это полностью управляемая система "база данных как услуга" MySQL в Azure, совместимая с последними выпусками сообщества.

  5. Запишите созданное имя базы данных (<имя-приложения>-database). Оно понадобится вам позже.

  6. Щелкните Просмотреть и создать.

После завершения проверки нажмите Создать.
Снимок экрана: настройка нового приложения и базы данных в мастере
Развертывание занимает несколько минут и создает следующие ресурсы:
  • Группа ресурсов — Контейнер для всех созданных ресурсов.
  • План службы приложений — определяет вычислительные ресурсы для Службы приложений. Создается план Linux на уровне P1v2.
  • Служба приложений — представляет приложение и выполняется в плане службы приложений.
  • Виртуальная сеть — интегрирована с приложением Службы приложений и изолирует внутренний сетевой трафик.
  • База данных Azure для MySQL — гибкий сервер → доступен только из виртуальной сети. База данных и пользователь создаются на этом сервере.
  • Частная зона DNS — включает разрешение DNS сервера базы данных MySQL в виртуальной сети.
После завершения развертывания нажмите кнопку Перейти к ресурсу. Вы перейдете непосредственно в приложение Службы приложений.
Снимок экрана: форма, заполняемая при создании веб-приложения в Azure.

2. Настройка подключения к базе данных

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

Instructions Снимок экрана
В левом меню на странице Службы приложений выберите Конфигурация. Снимок экрана: открытие страницы конфигурации в Службе приложений.
На вкладке "Параметры приложения" на странице "Конфигурация" для каждого из следующих параметров нажмите кнопку "Изменить", обновите поле "Имя" с новыми значениями и нажмите кнопку "ОК".
Текущее имя Новое имя
AZURE_MYSQL_DBNAME DB_DATABASE
AZURE_MYSQL_HOST DB_HOST
AZURE_MYSQL_USERNAME DB_USERNAME
AZURE_MYSQL_PASSWORD DB_PASSWORD
Снимок экрана: просмотр автоматически созданной строки подключения.
Создайте новый MYSQL_ATTR_SSL_CA параметр базы данных:
  1. Щелкните Новый параметр приложения.

  2. В поле "Имя" введите MYSQL_ATTR_SSL_CA.

  3. В поле "Значение" введите /home/site/wwwroot/ssl/DigiCertGlobalRootCA.crt.pem.

    Этот параметр приложения указывает на путь к TLS/SSL-сертификату, необходимому для доступа к серверу MySQL. Для удобства он включен в пример репозитория.

  4. Щелкните OK.

Снимок экрана: создание параметра приложения.
Создайте следующие дополнительные параметры приложения, выполнив те же действия, а затем нажмите кнопку "Сохранить".
  • 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 выполнить развертывание автоматически.

Instructions Снимок экрана
В новом окне браузера:
  1. Войдите в свою учетную запись GitHub.

  2. Перейдите к https://github.com/Azure-Samples/laravel-tasks.

  3. Нажмите кнопку Вилка.

  4. Нажмите Создать вилку.

Снимок экрана: создание вилка примера репозитория GitHub.
На странице GitHub откройте Visual Studio Code в браузере, нажав клавишу .. Снимок экрана: открытие окна браузера с Visual Studio Code в GitHub.
В Visual Studio Code в браузере откройте файл config/database.php в обозревателе. В подключении mysql убедитесь, что уже используются параметры приложения, созданные ранее для подключения MySQL (DB_HOST, DB_DATABASE, DB_USERNAME, DB_PASSWORD, MYSQL_ATTR_SSL_CA). Снимок экрана: Visual Studio Code в браузере и открытый файл.
Вернитесь на страницу Службы приложений и в меню слева выберите Центр развертывания. Снимок экрана: открытие центра развертывания в Службе приложений.
На странице Центра развертывания:
  1. В поле Источник выберите GitHub. По умолчанию в качестве поставщика сборки выбрано GitHub Actions.

  2. Войдите в свою учетную запись GitHub и следуйте инструкциям по авторизации Azure.

  3. В поле Организация выберите свою учетную запись.

  4. В поле Репозиторий выберите laravel-tasks.

  5. В поле Ветвь выберите main.

  6. В верхнем меню выберите Сохранить.

Служба приложений фиксирует файл рабочего процесса в выбранном репозитории GitHub в каталоге .github/workflows.
Снимок экрана: настройка CI/CD с помощью GitHub Actions.
На странице Центра развертывания:
  1. Выберите Журналы. Прогон развертывания уже запущен.

  2. В элементе журнала для прогона развертывания выберите Журналы сборки и развертывания.

    Вы перейдете в репозиторий GitHub и увидите, что выполняется действие GitHub. Файл рабочего процесса определяет два отдельных этапа: сборку и развертывание.

Снимок экрана: открытие журналов развертывания в центре развертывания.
Чтобы внести изменения в код, перейдите в Visual Studio Code в браузере:
  1. Выберите расширение Система управления версиями.

  2. Рядом с измененным файлом, например database.php, выберите + для подготовки изменений.

  3. В текстовом поле введите сообщение о фиксации, например add certificate.

  4. Выберите галочку для фиксации и отправки в GitHub.

Если вы вернетесь на страницу "Центр развертывания", то увидите новую запись журнала, так как запускается другой прогон. Дождитесь завершения выполнения. Это занимает около 15 минут.

Совет

Действие GitHub определяется файлом в репозитории GitHub в .github/workflow. Его можно ускорить, настроив этот файл.

Снимок экрана: фиксация изменений в интерфейсе Visual Studio Code в браузере.

4. Создание схемы базы данных

Мастер создания помещает База данных Azure для MySQL гибкий экземпляр сервера за частную конечную точку, поэтому он доступен только из виртуальной сети. Так как приложение Службы приложений уже интегрировано с виртуальной сетью, выполнять миграции баз данных с вашей базой данных проще всего непосредственно из контейнера Службы приложений.

Instructions Снимок экрана
На странице Служба приложений:
  1. В меню слева выберите SSH.

  2. Выберите Перейти.

В браузере открывается сеанс SSH с контейнером Службы приложений. При желании вместо этого можно перейти непосредственно к https://<app-name>.scm.azurewebsites.net/webssh/host.
Снимок экрана: открытие оболочки SSH для  вашего приложения с портала Azure.
В терминале SSH:
  1. С помощью команды CD перейдите в корневой каталог кода приложения:

    cd /home/site/wwwroot
    
  2. Запустите миграции баз данных из корневого каталога приложения.

    php artisan migrate --force
    

    Примечание.

    После перезапуска приложения могут сохраняться только изменения в файлах в /home. Изменения за пределами /home не сохраняются.

Снимок экрана: команды для запуска в оболочке SSH и их выходные данные.

5. Изменение корня сайта

Жизненный цикл приложения Laravel начинается в каталоге /public. Контейнер PHP 8.0 по умолчанию для Службы приложений использует Nginx, который запускается в корневом каталоге приложения. Чтобы изменить корневой каталог сайта, нужно изменить файл конфигурации Nginx в контейнере PHP 8.0 (/etc/nginx/sites-available/default). Для удобства пример репозитория содержит пользовательский файл конфигурации, который называется default. Как отмечалось ранее, не следует заменять этот файл с помощью оболочки SSH, так как после перезапуска приложения такие изменения будут потеряны.

Instructions Снимок экрана
На странице Служба приложений:
  1. В меню слева выберите Конфигурация.

  2. Выберите вкладку Общие параметры.

Снимок экрана: открытие  общих параметров на странице конфигурации в Службе приложений.
На вкладке "Общие параметры":
  1. В поле "Команда запуска" введите следующую команду: cp /home/site/wwwroot/default /etc/nginx/sites-available/default &> nginx reload.

    Она заменяет файл конфигурации Nginx в контейнере PHP 8.0 и перезапускает Nginx. Такая конфигурация обеспечивает внесение этого изменения в контейнер при каждом его запуске.

  2. Выберите Сохранить.

Снимок экрана: настройка команды запуска в Службе приложений.

6. Переход в приложение

Instructions Снимок экрана
На странице Служба приложений:
  1. В меню слева выберите Обзор.

  2. Выберите URL-адрес своего приложения.

    Также можно перейти непосредственно по адресу https://<app-name>.azurewebsites.net.

Снимок экрана: запуск Службы приложений с портала Azure.
Добавьте несколько задач в список. Вы запустили управляемое данными приложение PHP в Службе приложений Azure. Снимок экрана: приложение Laravel, выполняющееся в Службе приложений.

7. Потоковая передача журналов диагностики

Instructions Снимок экрана
На странице Служба приложений:
  1. В меню слева выберите Журналы службы приложений.

  2. Под элементом Ведение журнала приложения выберите Файловая система.

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

Очистка ресурсов

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

Instructions Снимок экрана
В строке поиска в верхней части портал Azure:
  1. Введите имя группы ресурсов.

  2. Выберите группу ресурсов.

Снимок экрана: поиск группы ресурсов на портале Azure и переход к ней.
На странице группы ресурсов выберите команду Удалить группу ресурсов. Снимок экрана: расположение кнопки
  1. Введите имя группы ресурсов для подтверждения удаления.

  2. Нажмите Удалить.

Снимок экрана: диалоговое окно подтверждения для удаления группы ресурсов на портале Azure.

Часто задаваемые вопросы

Сколько стоит такая конфигурация?

Цены на создание ресурсов приведены ниже:

  • План службы приложений создается на уровне Premium V2, и его можно масштабировать вверх или вниз. См. цены на Службу приложений.
  • База данных Azure для MySQL гибкий экземпляр сервера создается на уровне B1ms и может масштабироваться вверх или вниз. При использовании бесплатной учетной записи Azure уровень B1ms предоставляется бесплатно в течение 12 месяцев до достижения ежемесячных пределов. См. База данных Azure для MySQL гибкие цены на сервер.
  • Плата за виртуальную сеть не взимается, если только вы не настроите дополнительные функциональные возможности, такие как пиринг. См. цены на виртуальные сети Azure.
  • За частную зону DNS взимается небольшая плата. См. цены на Azure DNS.

Разделы справки подключиться к гибкой базе данных сервера База данных Azure для MySQL, защищенной виртуальной сетью?

Чтобы подключиться к гибкой базе данных сервера База данных Azure для MySQL, можно использовать несколько методов на основе средств и сред в вашем распоряжении:

  • Доступ к средству командной строки:
    • mysql Используйте команду из терминала SSH приложения для базового доступа.
  • Классические средства (например, MySQL Workbench):
    • Использование туннелирования SSH с Помощью Azure CLI:
      • Создайте сеанс SSH в веб-приложении с помощью Azure CLI.
      • Используйте сеанс SSH для туннелирования трафика в MySQL.
    • Использование VPN типа "сеть — сеть" или виртуальной машины Azure:
      • Компьютер должен быть частью виртуальной сети.
      • Рассмотрите возможность использования:
        • Виртуальная машина 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:

Большая часть времени, затрачиваемого процессом из двух заданий, уходит на отправку и скачивание артефактов. При желании файл рабочего процесса можно упростить, объединив два задания в одно, что устраняет необходимость в шагах отправки и скачивания.

Итоги

Из этого руководства вы узнали, как:

  • Создание безопасного по умолчанию PHP и База данных Azure для MySQL гибкого серверного приложения в Azure
  • Настройка секретов подключения для База данных Azure для MySQL гибкого сервера с помощью параметров приложения
  • Развертывание кода приложения с помощью GitHub Actions
  • Обновление и повторное развертывание приложения
  • Безопасные переносы баз данных
  • Потоковая передача журналов диагностики из Azure.
  • Управление приложением на портале Azure.

Следующие шаги