练习 - 在 Azure 应用服务上部署 PHP 和 MySQL 灵活服务器应用
在本单元中,你将生成示例 PHP 应用程序并将其部署到 Azure 应用服务,然后将其与后端的 Azure Database for MySQL 灵活服务器集成。
步骤 1 - 创建 Azure Database for MySQL 灵活服务器
首先预配具有公共访问连接的 MySQL 灵活服务器,配置防火墙规则以允许应用程序访问服务器,然后创建生产数据库。
我们将使用 Azure 门户演练 MySQL 灵活服务器创建体验。
使用激活沙盒时所用的同一帐户登录到 Azure 门户。
在页面顶部的搜索框中,输入“MySQL”,然后选择“Azure Database for MySQL 灵活服务器”。
在“Azure Database for MySQL 灵活服务器”页上,选择“+ 创建”,然后选择“灵活服务器”。
在“灵活服务器”页的“基本信息”选项卡上,输入下表中的信息。
设置 建议的值 订阅 Concierge 订阅 资源组 从下拉列表中,选择以 learn- 开头的资源组 服务器名称 输入可标识灵活服务器的全局唯一名称。 MySQL 版本 8.0 工作负荷类型 选择“用于开发或兴趣项目” 管理员用户名 输入 mysqladmin。 不要使用“azure-superuser”、“admin”、“administrator”、“root”、“guest”或“public”。 密码 输入 Passw0rd123。 它必须包含 8 到 128 个字符,并且包含三类字符:英文大写字母、英文小写字母、数字(0 到 9)以及非字母数字字符(例如 !、$、#、%)。 对所有其他设置保留保留默认值。
在“基本”选项卡上,在“计算 + 存储”下选择“配置服务器”。
在“计算 + 存储”页上,配置以下设置:
- 计算
- 选择“可突发”计算层。
- 在“计算大小”下拉列表中,选择“Standard_B1s(1 vCore,1 GiB 内存,400 最大 IOPS)”。
- 存储
- 确保“存储大小(以 GB 为单位)”设置为 20。
- 选择“预配的 IOPS”,并将值设置为 360。
- 确保已选中“存储自动增长”复选框。
- 高可用性
- 确保“启用高可用性”复选框处于未选中状态。
- 备份
- 确保将“备份保持期(天数)”设置为“7”。
- 确保“从区域中断或灾难中恢复”复选框处于未选中状态。
- 计算
选择“保存”,然后导航到“网络”选项卡。
在“网络”选项卡中,选择“公共访问(允许的 IP 地址)”连接方法,并选中“允许使用公共 IP 地址从互联网访问此资源”,然后选中“允许从 Azure 内的任何 Azure 服务公开访问此服务器”,如以下屏幕截图所示。
选择“查看 + 创建”,查看你的 MySQL 灵活服务器配置。
选择“创建”以预配服务器。 预配可能需要长达 10 分钟的时间。
部署完成后,选择“转到资源”以查看 Azure Database for MySQL 灵活服务器的“概述”页。
在本练习的其余部分中,你要使用显示在此窗口右侧的 Azure Cloud Shell 运行命令。
要创建新的 MySQL 生产数据库 sampledb 以用于 PHP 应用程序,请运行以下命令:
az mysql flexible-server db create \
--resource-group <rgn>[Sandbox resource group name]</rgn> \
--server-name <your-mysql-server-name> \
--database-name sampledb
步骤 2 - 克隆应用程序
对于本练习而言,你使用显示和管理产品目录的示例 PHP 应用程序。 该应用程序提供基本功能,如查看目录中的产品、添加新产品、更新现有项目价格,以及删除产品。
直接克隆编码的应用,并了解如何将其部署到 Azure 应用服务上。
注意
要详细了解应用程序代码,请继续探索 GitHub 存储库中的应用!
要克隆示例应用程序存储库并转到存储库根路径,请运行以下命令:
git clone https://github.com/Azure-Samples/php-mysql-app-service.git cd php-mysql-app-service
运行以下命令以确保默认分支为
main
。git branch -m main
步骤 3 - 创建和配置 Azure 应用服务 Web 应用
在 Azure 应用服务(Web 应用、API 应用或移动应用)中,应用始终在应用服务计划中运行。 应用服务计划为要运行的 Web 应用定义一组计算资源。 在此步骤中,你将创建一个 Azure 应用服务计划,并在该计划中创建一个应用服务 Web 应用以托管示例应用程序。
要使用免费定价层创建应用服务计划,请运行以下命令:
az appservice plan create --name plan-learn \ --resource-group <rgn>[Sandbox resource group name]</rgn> \ --location centralus \ --sku FREE --is-linux
如果要使用 FTP 或本地 Git 等部署方法将应用程序部署到 Azure Web 应用,则需使用用户名和密码凭据配置部署用户。 配置部署用户之后,可将其用于所有 Azure 应用服务部署。
az webapp deployment user set \ --user-name <your-deployment-username> \ --password <your-deployment-password>
要使用 PHP 8.0 运行时创建应用服务 Web 应用,并配置本地 Git 部署选项以在本地计算机上部署 Git 存储库中的应用,请运行以下命令。
注意:请将
<your-app-name>
替换为全局唯一的应用名称(有效字符为 a-z、0-9 和 -)。az webapp create \ --resource-group <rgn>[Sandbox resource group name]</rgn> \ --plan plan-learn \ --name <your-app-name> \ --runtime "PHP|8.0" \ --deployment-local-git
重要
在 Azure CLI 输出中,Git 远程的 URL 以
https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git
格式显示在deploymentLocalGitUrl
属性中。 保存此 URL,因为稍后将需要它。示例 PHP 应用程序中的
config.php
文件使用getenv()
函数从环境变量检索数据库连接信息(服务器名、数据库名、服务器用户名和密码)。 在应用服务中,要将环境变量设置为应用程序设置 (appsettings),请运行以下命令:az webapp config appsettings set \ --name <your-app-name> \ --resource-group <rgn>[Sandbox resource group name]</rgn> \ --settings DB_HOST="<your-server-name>.mysql.database.azure.com" \ DB_DATABASE="sampledb" \ DB_USERNAME="<your-mysql-admin-username>" \ DB_PASSWORD="<your-mysql-admin-password>" \ MYSQL_SSL="true"
此命令将在 Web 应用上配置 MySQL 灵活服务器数据库连接设置。
步骤 4 - 使用本地 Git 部署应用程序
现在,你将使用本地 Git 部署选项将示例 PHP 应用程序部署到 Azure 应用服务。
由于要部署主分支,因此需要将应用服务应用的默认部署分支设置为主分支。 要在“应用程序设置”下设置 DEPLOYMENT_BRANCH,请运行以下命令:
az webapp config appsettings set \ --name <your-app-name> \ --resource-group <rgn>[Sandbox resource group name]</rgn> \ --settings DEPLOYMENT_BRANCH='main'
验证你是否在应用程序存储库的根目录中。
要将 Azure 远程添加到本地 Git 存储库,请运行以下命令。
注意:请将
<deploymentLocalGitUrl>
替换为你在“创建应用服务 Web 应用”步骤中保存的 Git 远程的 URL。git remote add azure <deploymentLocalGitUrl>
要向 Azure 远程执行
git push
来部署应用,请运行以下命令。 当 Git 凭据管理器提示你输入凭据时,请输入你在“配置部署用户”步骤中创建的部署凭据。git push azure main
部署可能需要几分钟时间才能完成。
步骤 5 - 测试应用
最后,浏览到 https://<app-name>.azurewebsites.net
来测试应用程序,然后在产品目录中添加、查看、更新或删除项目。
祝贺你! 你已成功将示例 PHP 应用程序部署到 Azure 应用服务,并将其与后端的 Azure Database for MySQL 灵活服务器集成。