你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:使用服务连接器在 Azure 应用服务上通过 Postgres 构建 Django 应用

注意

在本教程中,你将使用服务连接器简化将 Web 应用连接到数据库服务的过程。 本教程是对应用服务教程的修改,因此你可能会看到一些相似之处。 查看配置环境变量以连接数据库部分,以了解服务连接器的具体作用以及如何简化应用服务教程中提供的连接过程。

本教程介绍如何将数据驱动的 Python Django Web 应用部署到 Azure 应用服务,并将其连接到 Azure Database for PostgreSQL 灵活服务器数据库。

在本教程中,你将使用 Azure CLI 完成以下任务:

  • 使用 Python 和 Azure CLI 设置初始环境
  • 创建 Azure Database for PostgreSQL 灵活服务器数据库
  • 将代码部署到 Azure 应用服务并连接到 PostgreSQL 灵活服务器
  • 更新代码并重新部署
  • 查看诊断日志
  • 在 Azure 门户中管理 Web 应用

设置初始环境

  1. 安装 Python 3.8 或更高版本。 若要检查 Python 版本是否为 3.8 或更高版本,请在终端窗口中运行以下代码:

    python3 --version
    
  2. 安装 Azure CLI 2.30.0 或更高版本。 若要检查 Azure CLI 版本是否为 2.30.0 或更高版本,请运行 az --version 命令。 如果需要升级,请运行 az upgrade(需要版本 2.30.0+)。

  3. 使用 CLI 通过 az login 登录 Azure。 此命令将打开浏览器以获取凭据。 命令完成后,会显示包含订阅相关信息的 JSON 输出。 登录后,可以使用 Azure CLI 运行 Azure 命令,处理订阅中的资源。

克隆或下载示例应用

克隆示例存储库:

git clone https://github.com/Azure-Samples/serviceconnector-webapp-postgresql-django.git

导航到以下文件夹:

cd serviceconnector-webapp-postgresql-django

使用示例的灵活服务器分支,其中包含一些必要的更改,例如,如何设置数据库服务器 URL,以及如何根据 Azure PostgreSQL 灵活服务器的要求将 'OPTIONS': {'sslmode': 'require'} 添加到 Django 数据库配置。

git checkout flexible-server

Djangoapp 示例包含数据驱动的 Django 投票应用,该应用是根据 Django 文档中的编写你的第一个 Django 应用创建的。 为便于参考,本文在此提供了已完成的应用。

示例还会修改为在应用服务等生产环境中运行:

  • 生产设置位于“azuresite/production.py”文件中。 开发设置位于 azuresite/settings.py 中。
  • 当设置了 WEBSITE_HOSTNAME 环境变量时,应用将使用生产设置。 Azure 应用服务会自动将此变量设置为 Web 应用的 URL,例如 msdocs-django.azurewebsites.net

生产设置特定于将 Django 配置为在任何生产环境中运行,而不是特定于应用服务。 有关详细信息,请参阅 Django 部署清单。 另请参阅 Azure 上 Django 的生产设置,以了解某些更改的详细信息。

遇到问题? 请告诉我们

在 Azure 中创建 Postgres 数据库

  1. 启用 Azure CLI 的参数缓存,以便不需要为每个命令提供这些参数。 (缓存值保存在 .azure 文件夹中。)

    az config param-persist on 
    
  2. 创建一个资源组(如果需要,可以更改名称)。 资源组名称会进行缓存并自动应用于后续命令。

    az group create --name ServiceConnector-tutorial-rg --location eastus
    
  3. 创建数据库服务器(此过程需要几分钟才能完成):

    az postgres flexible-server create --sku-name Standard_B1ms --public-access all
    

    如果无法识别 az 命令,请确保按照设置初始环境中所述安装 Azure CLI。

    az postgres flexible-server create 命令执行以下操作,这需要几分钟的时间:

    • 如果还没有缓存的名称,请创建一个默认资源组。
    • 创建 PostgreSQL 灵活服务器:
      • 默认情况下,命令使用生成的名称,如 server383813186。 你可以使用 --name 参数指定自己使用的名称。 该名称在全 Azure 中必须是唯一的。
      • 该命令使用成本最低的 Standard_B1ms 定价层。 省略 --sku-name 参数以使用默认 Standard_D2s_v3 层。
      • 该命令使用从上一个 az group create 命令缓存的资源组和位置,在本例中是 eastus 区域中的 ServiceConnector-tutorial-rg 资源组。
    • 使用用户名和密码创建一个管理员帐户。 可以使用 --admin-user--admin-password 参数直接指定这些值。
    • 创建一个名称默认为 flexibleserverdb 的数据库。 你可以使用 --database-name 参数指定数据库名称。
    • 启用完全公共访问权限,你可以使用 --public-access 参数进行控制。
  4. 当命令完成后,将命令的 JSON 输出复制到文件,因为本教程后面的内容需要输出中的值,特别是主机、用户名和密码以及数据库名称。

遇到问题? 请告诉我们

将代码部署到 Azure 应用服务

在本部分中,你将在应用服务应用中创建应用主机,将此应用连接到 Postgres 数据库,然后将代码部署到该主机。

创建应用服务应用

  1. 在终端中,请确保位于包含应用代码的“djangoapp”存储库文件夹中。

  2. 切换到示例应用的 flexible-server 分支。 此分支包含 PostgreSQL 灵活服务器所需的特定配置:

    git checkout flexible-server
    
  3. 运行以下 az webapp up 命令,为应用创建应用服务主机:

    az webapp up --name <app-name> --sku B1 
    

    此命令执行以下操作(可能需要几分钟的时间),使用上一个 az group create 命令中缓存的资源组和位置(本例中是 eastus 区域中的组 Python-Django-PGFlex-rg)。

    • 在“基本”定价层 (B1) 中创建应用服务计划。 可以省略 --sku 以使用默认值。
    • 创建应用服务应用。
    • 为应用启用默认日志记录。
    • 在启用了生成自动化的情况下,使用 ZIP 部署上传存储库。

成功部署后,该命令会生成类似于以下示例的 JSON 输出:

终端的屏幕截图,其中显示了 az webapp up 命令的示例输出。

遇到问题? 请先参阅故障排除指南,如果问题未能解决,请告诉我们

配置环境变量以连接数据库

将代码部署到应用服务后,下一步是将应用连接到 Azure 中的 Postgres 数据库。

应用代码预期在以下四个环境变量中查找数据库信息:AZURE_POSTGRESQL_HOSTAZURE_POSTGRESQL_NAMEAZURE_POSTGRESQL_USERAZURE_POSTGRESQL_PASS

若要在应用服务中设置环境变量,则使用以下 az connection create 命令创建“应用设置”。

az webapp connection create postgres-flexible --client-type django

资源组、应用名称和数据库名称是从缓存的值中提取的。 在执行此命令期间,你需要提供 postgres 数据库的管理员密码。

  • 该命令按照应用程序代码的预期创建名为“AZURE_POSTGRESQL_HOST”、“AZURE_POSTGRESQL_NAME”、“AZURE_POSTGRESQL_USER”、“AZURE_POSTGRESQL_PASS”的设置。
  • 如果忘记了管理员凭据,该命令将指导你重置你的管理员凭据。

注意

如果看到错误消息“该订阅未注册为使用 Microsoft.ServiceLinker”,请运行 az provider register -n Microsoft.ServiceLinker 注册服务连接器资源提供程序,然后再次运行连接命令。

在 Python 代码中,可以使用 os.environ.get('AZURE_POSTGRESQL_HOST') 之类的语句来访问这些设置(作为环境变量)。 有关详细信息,请参阅访问环境变量

遇到问题? 请先参阅故障排除指南,如果问题未能解决,请告诉我们

运行 Django 数据库迁移

Django 数据库迁移可确保 Azure 上 PostgreSQL 数据库中的架构与你的代码相匹配。

  1. 运行 az webapp ssh 以在浏览器中打开 Web 应用的 SSH 会话:

    az webapp ssh
    
  2. 在 SSH 会话中运行以下命令:

    # Run database migrations
    python manage.py migrate
    
    # Create the super user (follow prompts)
    python manage.py createsuperuser
    

    如果遇到与连接到数据库相关的任何错误,请检查在上一部分创建的应用程序设置的值。

  3. createsuperuser 命令会提示输入超级用户凭据。 针对本教程,请使用默认的用户名 root,对于电子邮件地址,按 Enter 以留空,并输入 Pollsdb1 作为密码。

  4. 如果看到“数据库已锁定”错误,请确保已在上一部分运行 az webapp settings 命令。 如果没有这些设置,migrate 命令将无法与数据库通信,从而导致错误。

遇到问题? 请先参阅故障排除指南,如果问题未能解决,请告诉我们

在应用中创建投票问题

  1. 打开应用网站。 应用应显示“投票应用”和“无可用投票”消息,这是因为数据库中尚无特定投票。

    az webapp browse
    

    如果看到“应用程序错误”,可能是由于你没有在上一步(配置环境变量以连接数据库)中创建所需的设置,或者这些值存在错误。 运行命令 az webapp config appsettings list 以检查设置。

    更新设置以更正所有错误后,请等待应用重启,然后刷新浏览器。

  2. 通过将 /admin 追加到 URL(例如 http://<app-name>.azurewebsites.net/admin),浏览到 Web 应用的管理页。 使用上一部分中的 Django 超级用户凭据登录(rootPollsdb1)。 在“投票”下,选择“问题”旁边的“添加”,创建一个包含一些选项的投票问题 。

  3. 返回到主网站 (http://<app-name>.azurewebsites.net),确认问题现已呈现给用户。 回答你希望如何在数据库中生成某些数据。

恭喜! 你将在适用于 Linux 的 Azure 应用服务中使用主动 Postgres 数据库运行 Python Django Web 应用。

注意

应用服务将通过在每个 manage.py startproject 默认创建的子文件夹中查找“wsgi.py”文件来检测 Django 项目。 应用服务找到该文件后,就会加载 Django Web 应用。 有关详细信息,请参阅配置内置的 Python 映像

清理资源

如果想要保留应用或者继续查看更多教程,请直接跳转到后续步骤。 否则,若要避免产生持续的费用,请删除为本教程创建的资源组:

az group delete --name ServiceConnector-tutorial-rg --no-wait

通过删除资源组,还可以解除分配并删除其中包含的所有资源。 在运行该命令之前,请确认不再需要该组中的资源。

删除所有资源可能需要一些时间。 --no-wait 参数允许命令立即返回。

遇到问题? 请告诉我们

下一步