Руководство по Разработка приложения на основе PHP и MySQL в Службе приложений Azure

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

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

Снимок экрана: пример приложения PHP с названием Task List.

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

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

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

Предварительные требования

Для работы с этим руководством сделайте следующее:

  • Используйте среду Bash в Azure Cloud Shell.

    Запуск Cloud Shell в новом окне

  • При необходимости установите Azure CLI, чтобы выполнять справочные команды CLI.

    • Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о дополнительных возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.

    • Если появится запрос, установите расширения Azure CLI при первом использовании. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.

    • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

Подготовка локальной базы данных MySQL

На этом шаге вы создадите базу данных на локальном сервере MySQL для использования в этом руководстве.

Подключение к локальному серверу MySQL

В окне терминала подключитесь к локальному серверу MySQL. Используйте это окно терминала для выполнения всех команд в рамках этого руководства.

mysql -u root -p

Если появится предложение ввести пароль, введите пароль для учетной записи root. Если вы не помните пароль учетной записи привилегированного пользователя, ознакомьтесь с разделом MySQL: How to Reset the Root Password (MySQL: как сбросить пароль привилегированного пользователя).

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

Локальное создание базы данных

  1. В командной строке mysql создайте базу данных.

    CREATE DATABASE sampledb;
    
  2. Завершите подключение к серверу, введя команду quit.

    quit
    

Локальное создание приложения PHP

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

Клонирования репозитория

Откройте окно терминала и c помощью команды cd перейдите в рабочий каталог.

  1. Клонируйте пример репозитория и перейдите в корневой каталог репозитория.

    git clone https://github.com/Azure-Samples/laravel-tasks
    cd laravel-tasks
    
  2. Убедитесь, что по умолчанию задана ветвь main.

    git branch -m main
    

    Совет

    В Службе приложений не требуется менять имя ветви. Но так как для многих репозиториев меняется ветка по умолчанию на main, в этом руководстве также показано, как развернуть репозиторий из main. Дополнительные сведения см. в разделе Изменение ветви развертывания.

  3. Установите необходимые пакеты.

    composer install
    

Настройка подключения к MySQL

В корне репозитория создайте файл .env. Скопируйте в файл .env приведенные ниже переменные. Замените заполнитель <root_password > паролем привилегированного пользователя MySQL.

APP_ENV=local
APP_DEBUG=true
APP_KEY=

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=sampledb
DB_USERNAME=root
DB_PASSWORD=<root_password>

Сведения о том, как Laravel использует файл .env, см. в разделе Environment Configuration (Конфигурация среды).

Локальный запуск примера

  1. Выполните перенос базы данных Laravel, чтобы создать таблицы, необходимые для приложения. Чтобы узнать, какие таблицы создаются при переносе, просмотрите каталог database/migrations в этом репозитории Git.

    php artisan migrate
    
  2. Создайте ключ приложения Laravel.

    php artisan key:generate
    
  3. Запустите приложение.

    php artisan serve
    
  4. Откройте браузер и перейдите по адресу http://localhost:8000. Добавьте несколько задач на странице.

    Приложение PHP успешно подключается к базе данных MySQL

  5. Чтобы остановить приложение PHP, введите Ctrl + C в окне терминала.

Создание базы данных MySQL в Azure

На этом шаге вы создадите базу данных MySQL в Базе данных Azure для MySQL. Позже вы настроите приложение PHP для подключения к этой базе данных.

Создание группы ресурсов

Группа ресурсов — это логический контейнер, в котором происходит развертывание ресурсов Azure (например, веб-приложений, баз данных и учетных записей хранения) и управление ими. Например, в дальнейшем можно удалить всю группу ресурсов при помощи одного простого действия.

В Cloud Shell создайте группу ресурсов с помощью команды az group create. В следующем примере создается группа ресурсов с именем myResourceGroup в расположении Западная Европа. Чтобы просмотреть все поддерживаемые расположения для службы приложений уровня Бесплатный, выполните команду az appservice list-locations --sku FREE.

az group create --name myResourceGroup --location "West Europe"

Обычно группа ресурсов и ресурсы создаются в ближайших регионах.

По завершении команды в выходных данных JSON будут отображаться свойства группы ресурсов.

Создание сервера MySQL

В Cloud Shell создайте сервер в службе "База данных Azure для MySQL", выполнив команду az mysql server create.

В следующей команде заполнитель <mysql-server-name> замените уникальным именем сервера, а заполнители <admin-user> и <admin-password>  — именем пользователя и паролем. Это имя используется как часть конечной точки MySQL (https://<mysql-server-name>.mysql.database.azure.com), поэтому оно должно быть уникальным на всех серверах в Azure. Дополнительные сведения о выборе номера SKU базы данных MySQL см. в разделе о создании сервера Базы данных Azure для MySQL.

az mysql server create --resource-group myResourceGroup --name <mysql-server-name> --location "West Europe" --admin-user <admin-user> --admin-password <admin-password> --sku-name B_Gen5_1

После создания сервера MySQL в Azure CLI отображаются следующие сведения.

{
  "administratorLogin": "<admin-user>",
  "administratorLoginPassword": null,
  "fullyQualifiedDomainName": "<mysql-server-name>.mysql.database.azure.com",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.DBforMySQL/servers/<mysql-server-name>",
  "location": "westeurope",
  "name": "<mysql-server-name>",
  "resourceGroup": "myResourceGroup",
  ...
  -  < Output has been truncated for readability >
}

Настройка брандмауэра сервера

  1. В Cloud Shell создайте правило брандмауэра для сервера MySQL, чтобы разрешить подключения клиентов, выполнив команду az mysql server firewall-rule create. Если для начального и конечного IP-адресов задано значение 0.0.0.0, брандмауэр открыт только для других ресурсов Azure.

    az mysql server firewall-rule create --name allAzureIPs --server <mysql-server-name> --resource-group myResourceGroup --start-ip-address 0.0.0.0 --end-ip-address 0.0.0.0
    

    Совет

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

  2. Чтобы разрешить доступ с локального компьютера, повторно выполните команду в Cloud Shell, заменив <your-ip-address> соответствующим локальным IPv4-адресом.

    az mysql server firewall-rule create --name AllowLocalClient --server <mysql-server-name> --resource-group myResourceGroup --start-ip-address=<your-ip-address> --end-ip-address=<your-ip-address>
    

Создание рабочей базы данных

  1. В окне терминала на локальном компьютере подключитесь к серверу MySQL в Azure. Используйте значение, указанное ранее для <admin-user> и <mysql-server-name> . При появлении запроса на ввод пароля используйте пароль, указанный во время создания базы данных в Azure.

    mysql -u <admin-user>@<mysql-server-name> -h <mysql-server-name>.mysql.database.azure.com -P 3306 -p
    
  2. В командной строке mysql создайте базу данных.

    CREATE DATABASE sampledb;
    
  3. Создайте пользователя базы данных с именем phpappuser и предоставьте ему все привилегии в базе данных sampledb. Для простоты в этом руководстве используется пароль MySQLAzure2017.

    CREATE USER 'phpappuser' IDENTIFIED BY 'MySQLAzure2017'; 
    GRANT ALL PRIVILEGES ON sampledb.* TO 'phpappuser';
    
  4. Завершите подключение к серверу, введя команду quit.

    quit
    

Подключение приложения к базе данных Azure MySQL

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

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

В корневой папке репозитория создайте файл .env.production и скопируйте в него следующие переменные. Замените заполнитель <mysql-server-name> в DB_HOST и DB_USERNAME.

APP_ENV=production
APP_DEBUG=true
APP_KEY=

DB_CONNECTION=mysql
DB_HOST=<mysql-server-name>.mysql.database.azure.com
DB_DATABASE=sampledb
DB_USERNAME=phpappuser@<mysql-server-name>
DB_PASSWORD=MySQLAzure2017
MYSQL_SSL=true

Сохраните изменения.

Совет

Чтобы защитить сведения о подключении к MySQL, этот файл извлекается из репозитория Git (см. файл .gitignore в корне репозитория). Позже вы узнаете, как настроить переменные среды в службе приложений для подключения к базе данных в Базе данных Azure для MySQL. Благодаря этим переменным вам не нужен файл .env в службе приложений.

Настройка TLS/SSL-сертификата

По умолчанию База данных Azure для MySQL требует использования TLS для подключений из клиентов. Чтобы подключиться к базе данных MySQL в Azure, вам потребуется SSL-сертификат с расширением PEM, предоставляемый службой "База данных Azure для MySQL".

Откройте файл config/database.php и добавьте в connections.mysql параметры sslmode и options, как показано в следующем коде.

'mysql' => [
    ...
    'sslmode' => env('DB_SSLMODE', 'prefer'),
    'options' => (env('MYSQL_SSL')) ? [
        PDO::MYSQL_ATTR_SSL_KEY    => '/ssl/BaltimoreCyberTrustRoot.crt.pem', 
    ] : []
],
'mysql' => [
    ...
    'sslmode' => env('DB_SSLMODE', 'prefer'),
    'options' => (env('MYSQL_SSL') && extension_loaded('pdo_mysql')) ? [
        PDO::MYSQL_ATTR_SSL_KEY    => '/ssl/BaltimoreCyberTrustRoot.crt.pem',
    ] : []
],

В рамках этого руководства сертификат BaltimoreCyberTrustRoot.crt.pem предоставляется в репозитории для удобства.

Локальное тестирование приложения

  1. Выполните перенос базы данных Laravel с помощью файла .env.production, указав его как файл среды, чтобы создать таблицы в базе данных MySQL, размещенной в Базе данных Azure для MySQL. Помните, что файл .env.production содержит сведения о подключении к базе данных MySQL в Azure.

    php artisan migrate --env=production --force
    
  2. Файл .env.production еще не содержит действительный ключ приложения. Создайте для него новый ключ в окне терминала.

    php artisan key:generate --env=production --force
    
  3. Запустите пример приложения, указав файл .env.production как файл среды.

    php artisan serve --env=production
    
  4. Перейдите на страницу http://localhost:8000. Если страница загрузилась без ошибок, значит, приложение PHP подключается к базе данных MySQL в Azure.

  5. Добавьте несколько задач на странице.

    Подключение приложения PHP к Базе данных Azure для MySQL

  6. Чтобы остановить приложение PHP, введите Ctrl + C в окне терминала.

Фиксация изменений

Чтобы зафиксировать изменения, выполните следующие команды Git:

git add .
git commit -m "database.php updates"

Ваше приложение готово к развертыванию.

Развертывание в Azure

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

Настойка пользователя развертывания

Для развертывания в веб-приложение Azure из FTP и локального репозитория Git можно использовать пользователя развертывания. Настроив один раз пользователя развертывания, вы сможете использовать его для всех последующих развертываний в Azure. Имя пользователя и пароль учетной записи развертывания отличаются от учетных данных подписки Azure.

Чтобы настроить пользователя развертывания, выполните в Azure Cloud Shell команду az webapp deployment user set. Вместо <username> и <password> укажите имя пользователя и пароль развертывания.

  • Имя пользователя должно быть уникальным в Azure. Кроме того, чтобы отправка в локальный репозиторий Git работала, имя пользователя не должно содержать символ "@".
  • Пароль должен содержать не менее восьми символов и включать два из трех следующих элементов: буквы, цифры и символы.
az webapp deployment user set --user-name <username> --password <password>

В выходных данных JSON пароль отображается как null. Если появляется сообщение об ошибке 'Conflict'. Details: 409, измените имя пользователя. Если появляется сообщение об ошибке 'Bad Request'. Details: 400, используйте более надежный пароль.

Запишите имя пользователя и пароль и используйте их для развертывания веб-приложений.

Создание плана службы приложений

В Cloud Shell создайте план службы приложений с помощью команды az appservice plan create.

В следующем примере создается план службы приложений с именем myAppServicePlan и ценовой категорией Бесплатный.

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE

После создания плана службы приложений в Azure CLI отображается информация следующего вида:

{ 
  "adminSiteName": null,
  "appServicePlanName": "myAppServicePlan",
  "geoRegion": "West Europe",
  "hostingEnvironmentProfile": null,
  "id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan",
  "kind": "app",
  "location": "West Europe",
  "maximumNumberOfWorkers": 1,
  "name": "myAppServicePlan",
  < JSON data removed for brevity. >
  "targetWorkerSizeId": 0,
  "type": "Microsoft.Web/serverfarms",
  "workerTierName": null
} 

В Cloud Shell создайте план службы приложений с помощью команды az appservice plan create.

В следующем примере создается план службы приложений с именем myAppServicePlan и ценовой категорией Бесплатный.

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE --is-linux

После создания плана службы приложений в Azure CLI отображается информация следующего вида:

{ 
  "freeOfferExpirationTime": null,
  "geoRegion": "West Europe",
  "hostingEnvironmentProfile": null,
  "id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan",
  "kind": "linux",
  "location": "West Europe",
  "maximumNumberOfWorkers": 1,
  "name": "myAppServicePlan",
  < JSON data removed for brevity. >
  "targetWorkerSizeId": 0,
  "type": "Microsoft.Web/serverfarms",
  "workerTierName": null
} 

Создание веб-приложения

Создайте веб-приложение в плане службы приложений myAppServicePlan.

В Cloud Shell можно использовать команду az webapp create. В следующем примере замените <app-name>глобальным уникальным именем приложения (допустимые символы: a-z, 0-9 и -). Для среды выполнения установлено значение PHP|7.2. Список всех поддерживаемых сред выполнения можно получить с помощью команды az webapp list-runtimes --linux.

# Bash
az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "PHP|7.2" --deployment-local-git
# PowerShell
az --% webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "PHP|7.2" --deployment-local-git

Когда веб-приложение будет создано, в Azure CLI отобразится примерно следующее:

Local git is configured with url of 'https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git'
{
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "cloningInfo": null,
  "containerSize": 0,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": "<app-name>.azurewebsites.net",
  "deploymentLocalGitUrl": "https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git",
  "enabled": true,
  < JSON data removed for brevity. >
}

Вы создали пустое веб-приложение с включенным развертыванием Git.

Примечание

URL-адрес удаленного репозитория Git отображается в свойстве deploymentLocalGitUrl в формате https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git. Сохраните этот URL-адрес для дальнейшего использования.

Создайте веб-приложение в плане службы приложений myAppServicePlan.

В Cloud Shell можно использовать команду az webapp create. В следующем примере замените <app-name>глобальным уникальным именем приложения (допустимые символы: a-z, 0-9 и -). Для среды выполнения установлено значение PHP|7.2. Список всех поддерживаемых сред выполнения можно получить с помощью команды az webapp list-runtimes --linux.

# Bash
az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "PHP|7.2" --deployment-local-git
# PowerShell
az --% webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "PHP|7.2" --deployment-local-git

Когда веб-приложение будет создано, в Azure CLI отобразится примерно следующее:

Local git is configured with url of 'https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git'
{
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "cloningInfo": null,
  "containerSize": 0,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": "<app-name>.azurewebsites.net",
  "deploymentLocalGitUrl": "https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git",
  "enabled": true,
  < JSON data removed for brevity. >
}

Вы создали пустое веб-приложение с включенным развертыванием Git.

Примечание

URL-адрес удаленного репозитория Git отображается в свойстве deploymentLocalGitUrl в формате https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git. Сохраните этот URL-адрес для дальнейшего использования.

Настройка параметров базы данных

В службе приложений переменные среды задаются в качестве параметров приложения с помощью команды az webapp config appsettings set.

Команда ниже позволяет настроить параметры приложения DB_HOST, DB_DATABASE, DB_USERNAME и DB_PASSWORD. Замените заполнители <app-name> и <mysql-server-name> .

az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DB_HOST="<mysql-server-name>.mysql.database.azure.com" DB_DATABASE="sampledb" DB_USERNAME="phpappuser@<mysql-server-name>" DB_PASSWORD="MySQLAzure2017" MYSQL_SSL="true"

Для доступа к параметрам можно использовать метод PHP getenv. В коде Laravel используется программа-оболочка env для PHP getenv. Например, конфигурация MySQL в файле config/database.php выглядит следующим образом:

'mysql' => [
    'driver'    => 'mysql',
    'host'      => env('DB_HOST', 'localhost'),
    'database'  => env('DB_DATABASE', 'forge'),
    'username'  => env('DB_USERNAME', 'forge'),
    'password'  => env('DB_PASSWORD', ''),
    ...
],

Настройка переменных среды Laravel

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

  1. В окне терминала на локальном компьютере используйте php artisan для создания ключа приложения без сохранения в файле .env.

    php artisan key:generate --show
    
  2. В Cloud Shell задайте ключ приложения в приложении Службы приложений с помощью команды az webapp config appsettings set. Замените заполнители <app-name> и <outputofphpartisankey:generate> .

    az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings APP_KEY="<output_of_php_artisan_key:generate>" APP_DEBUG="true"
    

    Значение APP_DEBUG="true" указывает Laravel возвращать отладочную информацию в случае ошибок в работе развернутого приложения. При выполнении рабочего приложения задайте для него более безопасное значение false.

Задание пути виртуального приложения

Задайте для приложения путь виртуального приложения. Этот шаг требуется из-за того, что жизненный цикл приложения Laravel начинается в общем каталоге, а не в корневом каталоге приложения. Другие платформы PHP, жизненный цикл которых начинается в корневом каталоге, могут работать без ручной настройки пути виртуального приложения.

В Cloud Shell задайте путь виртуального приложения с помощью команды az resource update. Замените заполнитель <app-name> .

az resource update --name web --resource-group myResourceGroup --namespace Microsoft.Web --resource-type config --parent sites/<app_name> --set properties.virtualApplications[0].physicalPath="site\wwwroot\public" --api-version 2015-06-01

По умолчанию служба приложений Azure указывает корневой путь виртуального приложения ( / ) к корневому каталогу файлов развернутого приложения (sites\wwwroot).

Жизненный цикл приложения Laravel начинается в общем каталоге, а не в корневом каталоге приложения. Образ PHP Docker по умолчанию для службы приложений использует Apache и не позволяет настраивать DocumentRoot для Laravel. Тем не менее вы можете использовать .htaccess для повторного создания всех запросов к точке в каталоге /public вместо корневого каталога. В корне репозитория для этой цели уже добавлен .htaccess. С ним приложение Laravel будет готово к развертыванию.

См. подробнее об изменении корневого каталога сайта.

Публикация в Azure из Git

  1. Так как вы развертываете ветвь main, для Службы приложений нужно указать main как ветвь развертывания по умолчанию (см. раздел Изменение ветви развертывания). В Azure Cloud Shell настройте параметр приложения DEPLOYMENT_BRANCH с помощью команды az webapp config appsettings set.

    az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DEPLOYMENT_BRANCH='main'
    
  2. Вернитесь к окну терминала (в локальном расположении) и добавьте удаленное приложение Azure в локальный репозиторий Git. Замените <deploymentLocalGitUrl-from-create-step> URL-адресом удаленного репозитория Git, который вы сохранили на этапе создания веб-приложения.

    git remote add azure <deploymentLocalGitUrl-from-create-step>
    
  3. Отправьте код в удаленное приложение Azure, чтобы развернуть приложение. При появлении запроса на ввод учетных данных в диспетчере учетных данных Git введите учетные данные, созданные на шаге настройки пользователя развертывания (а не те, которые используются для входа на портал Azure).

    git push azure main
    

    Выполнение этой команды может занять несколько минут. При выполнении эта команда выводит приблизительно следующие сведения:

   Counting objects: 3, done.
   Delta compression using up to 8 threads.
   Compressing objects: 100% (3/3), done.
   Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done.
   Total 3 (delta 2), reused 0 (delta 0)
   remote: Updating branch 'main'.
   remote: Updating submodules.
   remote: Preparing deployment for commit id 'a5e076db9c'.
   remote: Running custom deployment command...
   remote: Running deployment command...
   ...
   < Output has been truncated for readability >
   

Примечание

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

  • .deployment — этот файл означает, что служба приложений должна запустить bash deploy.sh как пользовательский скрипт развертывания.
  • deploy.sh — пользовательский скрипт развертывания. Если открыть этот файл, вы увидите, что он запускает php composer.phar install после npm install.
  • composer.phar — диспетчер пакетов Composer.

Точно так же можно добавить любые действия развертывания в службе приложений на основе Git. Дополнительные сведения см. в статье Custom Deployment Script (Пользовательский сценарий развертывания).

  1. Так как вы развертываете ветвь main, для Службы приложений нужно указать main как ветвь развертывания по умолчанию (см. раздел Изменение ветви развертывания). В Azure Cloud Shell настройте параметр приложения DEPLOYMENT_BRANCH с помощью команды az webapp config appsettings set.

    az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DEPLOYMENT_BRANCH='main'
    
  2. Вернитесь к окну терминала (в локальном расположении) и добавьте удаленное приложение Azure в локальный репозиторий Git. Замените <deploymentLocalGitUrl-from-create-step> URL-адресом удаленного репозитория Git, который вы сохранили на этапе создания веб-приложения.

    git remote add azure <deploymentLocalGitUrl-from-create-step>
    
  3. Отправьте код в удаленное приложение Azure, чтобы развернуть приложение. При появлении запроса на ввод учетных данных в диспетчере учетных данных Git введите учетные данные, созданные на шаге настройки пользователя развертывания (а не те, которые используются для входа на портал Azure).

    git push azure main
    

    Выполнение этой команды может занять несколько минут. При выполнении эта команда выводит приблизительно следующие сведения:

   Counting objects: 3, done.
   Delta compression using up to 8 threads.
   Compressing objects: 100% (3/3), done.
   Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done.
   Total 3 (delta 2), reused 0 (delta 0)
   remote: Updating branch 'main'.
   remote: Updating submodules.
   remote: Preparing deployment for commit id 'a5e076db9c'.
   remote: Running custom deployment command...
   remote: Running deployment command...
   ...
   < Output has been truncated for readability >
   

Переход к приложению Azure

Перейдите по адресу http://<app-name>.azurewebsites.net и добавьте несколько задач в список.

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

Вы запустили управляемое данными приложение PHP в службе приложений Azure.

Локальное обновление и повторное развертывание модели

На этом шаге вы внесете некоторые изменения в модель данных task и веб-приложение, а затем опубликуете обновления в Azure.

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

Добавление столбца

  1. В окне терминала на локальном компьютере перейдите к корневой папке репозитория Git.

  2. Создайте перенос базы данных для таблицы tasks:

    php artisan make:migration add_complete_column --table=tasks
    
  3. Эта команда отображает имя файла переноса, который создается. Найдите этот файл в каталоге database/migrations и откройте его.

  4. Замените метод up следующим кодом:

    public function up()
    {
        Schema::table('tasks', function (Blueprint $table) {
            $table->boolean('complete')->default(False);
        });
    }
    

    Предыдущий код добавляет столбец логических значений complete в таблицу tasks.

  5. Замените метод down следующим кодом действия отката:

    public function down()
    {
        Schema::table('tasks', function (Blueprint $table) {
            $table->dropColumn('complete');
        });
    }
    
  6. В окне терминала на локальном компьютере выполните перенос базы данных Laravel, чтобы внести изменения в локальную базу данных.

    php artisan migrate
    

    В соответствии с условиями соглашения об именовании Laravel модель Task (см. app/Task.php) сопоставляется с таблицей tasks по умолчанию.

Обновление логики приложения

  1. Откройте файл routes/web.php. В нем приложение определяет свои маршруты и бизнес-логику.

  2. В конце файла добавьте маршрут с помощью следующего кода.

    /**
     * Toggle Task completeness
     */
    Route::post('/task/{id}', function ($id) {
        error_log('INFO: post /task/'.$id);
        $task = Task::findOrFail($id);
    
        $task->complete = !$task->complete;
        $task->save();
    
        return redirect('/');
    });
    

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

Обновление представления

  1. Откройте файл resources/views/tasks.blade.php. Найдите открывающий тег <tr> и замените его приведенным ниже значением.

    <tr class="{{ $task->complete ? 'success' : 'active' }}" >
    

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

  2. Следующая строка содержит приведенный ниже код.

    <td class="table-text"><div>{{ $task->name }}</div></td>
    

    Замените всю эту строку следующим кодом.

    <td>
        <form action="{{ url('task/'.$task->id) }}" method="POST">
            {{ csrf_field() }}
    
            <button type="submit" class="btn btn-xs">
                <i class="fa {{$task->complete ? 'fa-check-square-o' : 'fa-square-o'}}"></i>
            </button>
            {{ $task->name }}
        </form>
    </td>
    

    Предыдущий код добавляет кнопку "Submit" (Отправить), которая ссылается на маршрут, определенный ранее.

Локальная проверка изменений

  1. В окне терминала на локальном компьютере запустите сервер разработки из корневого каталога репозитория Git.

    php artisan serve
    
  2. Чтобы увидеть, как изменится состояние задачи, перейдите по адресу http://localhost:8000 и установите флажок.

    Добавлен флажок для задачи

  3. Чтобы остановить приложение PHP, введите Ctrl + C в окне терминала.

Публикация изменений в Azure

  1. В окне терминала на локальном компьютере выполните перенос базы данных Laravel со строкой подключения рабочей базы данных, чтобы внести изменения в базу данных в Azure.

    php artisan migrate --env=production --force
    
  2. Зафиксируйте все изменения в Git, а затем отправьте изменения кода в Azure.

    git add .
    git commit -m "added complete checkbox"
    git push azure main
    
  3. После выполнения команды git push перейдите в приложение Azure и проверьте новые функции.

    Изменения модели и базы данных, опубликованные в Azure

Добавленные задачи сохраняются в базе данных. Изменения в схеме данных не влияют на имеющиеся данные.

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

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

Чтобы настроить потоки для журналов, выполните команду az webapp log tail в Cloud Shell.

az webapp log tail --name <app_name> --resource-group myResourceGroup

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

Чтобы остановить потоковую передачу журналов, нажмите клавиши Ctrl+C.

Чтобы получить доступ к журналам консоли, созданным в коде приложения в Службе приложений, включите ведение журнала диагностики, выполнив следующую команду в Cloud Shell:

az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose

Возможные значения для --level: Error, Warning, Info и Verbose. Каждый последующий уровень включает предыдущий уровень. Например: Error включает только сообщения об ошибках, а Verbose включает все сообщения.

Включив ведение журнала диагностики, выполните следующую команду, чтобы просмотреть поток данных журнала:

az webapp log tail --resource-group <resource-group-name> --name <app-name>

Если журналы консоли не отображаются, проверьте еще раз через 30 секунд.

Примечание

Вы также можете проверить файлы журнала в браузере на странице https://<app-name>.scm.azurewebsites.net/api/logs/docker.

Чтобы остановить потоковую передачу журналов, нажмите клавиши Ctrl+C.

Совет

Приложение PHP может использовать стандартный метод error_log() для вывода в консоль. Пример приложения использует этот подход в файле конфигурации app/Http/routes.php.

Являясь веб-платформой, Laravel использует Monolog в качестве поставщика службы ведения журнала. Дополнительные сведения см. в статье PHP: How to use monolog to log to console (php://out)? (PHP: как выполнять запись в консоль с помощью Monolog (php://out)).

Управление приложением Azure

  1. Перейдите на портал Azure, чтобы управлять созданным приложением.

  2. В меню слева щелкните Службы приложений, а затем — имя своего приложения Azure.

    Переход к приложению Azure на портале

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

    В меню слева доступны страницы для настройки приложения.

    Страница службы приложений на портале Azure

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

На предыдущем шаге вы создали ресурсы Azure в группе ресурсов. Если эти ресурсы вам не понадобятся в будущем, вы можете удалить группу ресурсов, выполнив следующую команду в Cloud Shell:

az group delete --name myResourceGroup

Ее выполнение может занять до минуты.

Дальнейшие действия

В этом руководстве вы узнали, как выполнять следующие задачи:

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

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

Также ознакомьтесь с другими ресурсами: