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

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

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

Screenshot of the Azure app example titled Task List showing new tasks added.

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

  • Создание изначально безопасного приложения на основе 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.
Вы также можете перейти напрямую к мастеру создания.
A screenshot showing how to use the search box in the top tool bar to find the Web App + Database creation wizard.
На странице Создание веб-приложения+базы данных заполните форму следующим образом.
  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. Щелкните Просмотреть и создать.

После завершения проверки нажмите Создать.
A screenshot showing how to configure a new app and database in the Web App + Database wizard.
Развертывание занимает несколько минут и создает следующие ресурсы:
  • Группа ресурсов — Контейнер для всех созданных ресурсов.
  • План службы приложений — определяет вычислительные ресурсы для Службы приложений. Создается план Linux на уровне P1v2.
  • Служба приложений — представляет приложение и выполняется в плане службы приложений.
  • Виртуальная сеть — интегрирована с приложением Службы приложений и изолирует внутренний сетевой трафик.
  • База данных Azure для MySQL — гибкий сервер → доступен только из виртуальной сети. База данных и пользователь создаются на этом сервере.
  • Частная зона DNS — включает разрешение DNS сервера базы данных MySQL в виртуальной сети.
После завершения развертывания нажмите кнопку Перейти к ресурсу. Вы перейдете непосредственно в приложение Службы приложений.
A screenshot showing the form to fill out to create a web app in Azure.

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

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

Instructions Снимок экрана
В левом меню на странице Службы приложений выберите Конфигурация. A screenshot showing how to open the configuration page in App Service.
На вкладке "Параметры приложения" на странице "Конфигурация" для каждого из следующих параметров нажмите кнопку "Изменить", обновите поле "Имя" с новыми значениями и нажмите кнопку "ОК".
Текущее имя Новое имя
AZURE_MYSQL_DBNAME DB_DATABASE
AZURE_MYSQL_HOST DB_HOST
AZURE_MYSQL_USERNAME DB_USERNAME
AZURE_MYSQL_PASSWORD DB_PASSWORD
A screenshot showing how to see the autogenerated connection string.
Создайте новый MYSQL_ATTR_SSL_CA параметр базы данных:
  1. Щелкните Новый параметр приложения.

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

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

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

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

A screenshot showing how to create an app setting.
Создайте следующие дополнительные параметры приложения, выполнив те же действия, а затем нажмите кнопку "Сохранить".
  • APP_DEBUG: используйте true в качестве значения. Это переменная отладки Laravel.

  • APP_KEY: используйте base64:Dsz40HWwbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= в качестве значения. Это переменная шифрования Laravel.

    Внимание

    Это значение APP_KEY используется здесь для удобства. В рабочих сценариях его необходимо создать специально для конкретного развертывания с помощью командной строки php artisan key:generate --show.

A screenshot showing all the required app settings in the configuration page.

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. Нажмите Создать вилку.

A screenshot showing how to create a fork of the sample GitHub repository.
На странице GitHub откройте Visual Studio Code в браузере, нажав клавишу .. A screenshot showing how to open the Visual Studio Code browser experience in GitHub.
В Visual Studio Code в браузере откройте конфигурацию или database.php в обозревателе. В подключении вы увидитеmysql, что параметры приложения, созданные ранее для подключения MySQL, уже используются (DB_HOST, , DB_DATABASE, DB_USERNAMEDB_PASSWORD. MYSQL_ATTR_SSL_CA A screenshot showing Visual Studio Code in the browser and an opened file.
Вернитесь на страницу Службы приложений и в меню слева выберите Центр развертывания. A screenshot showing how to open the deployment center in App Service.
На странице Центра развертывания:
  1. В поле Источник выберите GitHub. По умолчанию в качестве поставщика сборки выбрано GitHub Actions.

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

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

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

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

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

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

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

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

A screenshot showing how to open deployment logs in the deployment center.
Чтобы внести изменения в код, перейдите в Visual Studio Code в браузере:
  1. Выберите расширение Система управления версиями.

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

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

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

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

Совет

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

A screenshot showing how to commit your changes in the Visual Studio Code browser experience.

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

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

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

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

В браузере открывается сеанс SSH с контейнером Службы приложений. При желании вместо этого можно перейти непосредственно к https://<app-name>.scm.azurewebsites.net/webssh/host.
A screenshot showing how to open the SSH shell for your app from the Azure portal.
В терминале SSH:
  1. С помощью команды CD перейдите в корневой каталог кода приложения:

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

    php artisan migrate --force
    

    Примечание.

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

A screenshot showing the commands to run in the SSH shell and their output.

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

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

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

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

A screenshot showing how to open the general settings tab in the configuration page of App Service.
На вкладке "Общие параметры":
  1. В поле "Команда запуска" введите следующую команду: cp /home/site/wwwroot/default /etc/nginx/sites-available/default &> nginx reload.

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

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

A screenshot showing how to configure a startup command in App Service.

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

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

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

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

A screenshot showing how to launch an App Service from the Azure portal.
Добавьте несколько задач в список. Вы запустили управляемое данными приложение PHP в Службе приложений Azure. A screenshot of the Laravel app running in App Service.

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

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

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

A screenshot showing how to enable native logs in App Service in the Azure portal.
В меню слева щелкните Поток журналов. Вы увидите журналы для своего приложения, включая журналы платформы и журналы из контейнера. A screenshot showing how to view the log stream in the Azure portal.

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

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

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

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

A screenshot showing how to search for and navigate to a resource group in the Azure portal.
На странице группы ресурсов выберите команду Удалить группу ресурсов. A screenshot showing the location of the Delete Resource Group button in the Azure portal.
  1. Введите имя группы ресурсов для подтверждения удаления.

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

A screenshot of the confirmation dialog for deleting a resource group in the Azure portal.

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

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

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

  • План службы приложений создается на уровне 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.

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