在 Azure 上现代化 Python 应用和数据(第三部分):切换到 Azure App Service





5.00/5 (2投票s)
在本文中,我们将演示如何以最小的重新设计和修改,将 Python 应用程序和数据的副本迁移到 Azure 云基础设施。
在本系列第一篇文章中,我们准备了一个 Django 应用程序以迁移到云端。然后,在第二篇文章中,我们设置了一个 Azure PostgreSQL 数据库,将本地 PostgreSQL 数据库迁移到适用于 PostgreSQL 的 Azure 数据库,并将我们的本地应用程序连接到我们的云数据库。然后,我们在连接到 Azure Postgres 数据库的情况下本地运行了 Django 应用程序。
在第三篇文章中,我们将对 Python 应用程序进行现代化改造并将其发布到 Azure。我们将使用 Azure 应用服务将本地 Python 应用程序的副本以最小的重新设计和修改迁移到 Azure 云基础设施。
您可以按照本文中的步骤来运行您的应用程序,或者下载并打开此GitHub 存储库文件夹,查看第 3 部分结束时的代码。
Azure 应用服务的工作原理
Azure 应用服务是用于在 Azure 上托管代码的平台即服务 (PaaS)。使用 Azure 应用服务,我们不再需要花费时间和精力维护基础设施,这与管理虚拟机或虚拟机场来托管应用程序不同。这使得它成为希望以最少维护来运行旧版应用程序的开发团队的绝佳选择。
Azure 应用服务允许我们部署和扩展 Web、移动和 API 应用程序。其配置集和控制面板有助于调整环境以托管我们的应用程序,而无需维护操作系统或 Web 服务器。
设置新的 Azure 应用服务时,我们可以选择各种编程语言,包括 .NET Framework、.NET Core、Node.js、PHP、Java、Python 和 HTML5。它还允许我们选择 Linux 或 Windows 容器。
除了开发灵活性之外,Azure 应用服务还具有各种部署模型:FTP、Azure DevOps、GitHub、Bitbucket、Dropbox 或 OneDrive。或者我们也可以简单地部署一个 ZIP 文件。
一个应用服务计划可以有多个关联的应用服务,因此一旦我们创建了一个应用服务计划,我们就可以创建一个作为容器的应用服务。我们可以在该应用服务计划中安装许多应用程序。
Web 应用的应用服务具有部署槽位。部署槽位允许我们运行应用程序实例,因此应用服务可能有一个或多个部署槽位。此设置使我们能够在将网站或应用程序部署到应用服务时,本质上在不同版本之间进行切换。
一旦我们将应用程序部署到部署槽位,Azure 应用服务允许我们将该部署槽位交换到生产槽位。该交换会立即发生,在部署和应用程序投入生产之间没有停机时间。
通过 Azure 门户创建应用程序
让我们前往 Azure 门户,导航到在 Microsoft Azure 上创建应用服务,我们将在那里部署我们的本地 Django 应用程序。首先,在搜索文本框中键入“应用服务”,然后选择Azure 应用服务。
接下来,门户会显示您可以拉入应用服务的应用程序类型:Web 应用或函数应用。选择Web 应用。
您可以将您的 Web 应用添加到您在上一篇文章中创建 Azure Database for PostgreSQL 的同一资源组下:“myresourcegroup”。在实例详细信息部分中,为应用程序命名。我选择了名称“ConduitWebApp”,因此我的 Web 应用将可以通过 https://conduitwebapp.azurewebsites.net 访问。
对于运行时堆栈,选择Python 3.9。然后,选择一个 Azure 区域,例如美国中部。
您需要一个应用服务计划才能在 Azure 应用服务中创建 Web 应用。该计划定义了您的应用程序将可用的范围和规模:它有多少存储空间、有多少 CPU、有多少可用内存等等。本质上,它是您的应用服务可用的计费模型和功能集。
在这种情况下,我们选择基于 Linux 的免费 F1 计划,具有 1GB 内存。
最后,审查 + 创建您的应用服务配置。
创建新应用程序会自动部署一个基于 Python 的最小 Web 应用。请等待部署完成。
一旦您的 Web 应用部署完成,您就可以通过您的网站 URL 打开它,例如 https://conduitwebapp.azurewebsites.net。
调整一些代码
在将本地 Django Web 应用程序迁移到 Azure 云之前,我们应该调整我们的 Python 代码。这些更改是必要的,因为原始的 Django RealWorld 示例已过时。在将应用程序发布到 Azure 之前,我们需要升级一些 requirement.txt 文件中的包版本,而这次升级在我们的代码中引入了一些我们需要现在解决的重大更改。
首先,打开 requirements.txt 文件,并将其内容替换为以下配置块
Django==2.2.3
django-cors-middleware==1.3.1
django-extensions==3.1.5
djangorestframework==3.13.1
psycopg2==2.8.6
psycopg2-binary==2.8.6
PyJWT==1.4.2
six==1.10.0
接下来,打开 \conduit\settings.py 文件,并包含 localhost 和 conduitwebapp.azurewebsites.net 允许的主机
ALLOWED_HOSTS = ['127.0.0.1', 'localhost', 'conduitwebapp.azurewebsites.net']
现在,我们需要对 is_authenticated
的使用方式进行一些更改。由于它在新版本中不再是方法,因此我们必须从 request.user.is_authenticated()
表达式中删除括号。
然后,打开 \conduit\apps\articles\serializers.py 文件,并将 if not request.user.is_authenticated()
: 替换为 if not request.user.is_authenticated:
。
此外,打开 \conduit\apps\profiles\serializers.py 文件,并将 if not request.user.is_authenticated()
: 替换为 if not request.user.is_authenticated:
。
最后,打开下面的 urls.py 文件,并提供 app_name
变量,这是较新 Python 版本所要求的
\conduit\apps\articles\urls.py
(...removed for brevity...)
app_name = 'articles'
urlpatterns = [
(...removed for brevity...)
\conduit\apps\authentication\urls.py
(...removed for brevity...)
app_name = 'authentication'
urlpatterns = [
(...removed for brevity...)
\conduit\apps\profiles\urls.py
(...removed for brevity...)
app_name = 'profiles'
urlpatterns = [
(...removed for brevity...)
要使用新包重新安装应用程序,请运行此命令
pip install -r requirements.txt
然后,在您的终端中运行 python manage.py runserver
,以确认应用程序仍能正常运行
(.venv) article3> python manage.py runserver Django version 2.2.3, using settings 'conduit.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.
将应用程序部署到 Azure 应用服务
现在,让我们探索使用 Visual Studio Code Azure 应用服务扩展来快速创建、管理并将本地 Python 应用程序部署到 Azure 网站。
首先,打开 Visual Studio Code,然后点击扩展选项卡。然后,搜索Azure 应用服务扩展,并点击安装。
安装完成后,活动栏中会出现一个 Azure 图标。点击登录 Azure。然后,点击 Azure 图标,并在应用服务部分中点击您的 Azure 订阅
当您登录到 Azure 帐户并在 Visual Studio Code 中打开您的应用程序时,展开 Azure 订阅。然后,选择您之前在 Azure 门户中创建的应用程序名称,并单击 Azure 应用服务资源管理器中的部署按钮(带箭头的云)以部署您的应用程序。
选择您的运行时堆栈:Python。然后,当弹出窗口询问您是否要更新工作区配置以在目标服务器上运行构建命令时,点击是
接下来,在选择要部署的文件夹文本框下,点击浏览
然后,选择您正在部署的本地 Django 应用程序的根文件夹
接下来,选择您之前在 Azure 门户上创建的 Web 应用的名称
等待应用程序部署。部署完成后,导航到 https://YOUR-APP-NAME.azurewebsites.net/api/articles(例如,https://conduitwebapp.azurewebsites.net/api/articles)以确认它可以成功地从我们在上一篇文章中创建的适用于 PostgreSQL 的 Azure 数据库数据源中获取文章。
您还可以通过配置我们在上一篇文章中下载的 Vue 前端 Web 应用程序,通过 Azure 门户测试 Django 后端应用程序。打开 \vue-realworld-example-app-master\src\common\config.ts 文件,然后进行以下修改
// export const API_URL = "http://127.0.0.1:8000/api";
export const API_URL = "https://conduitwebapp.azurewebsites.net/api";
export default API_URL;
该应用程序现在在云中运行,并从基于云的数据库中获取数据。
后续步骤
在本系列的第三篇文章中,我们探讨了对 Python 应用程序进行现代化改造并将其发布到 Azure。我们使用 Azure 应用服务,仅进行少量代码调整,就将本地 Python 应用程序的副本迁移到 Azure 云基础设施。
Azure 应用服务允许您选择多种部署模型。VS Code 的 Azure 应用服务扩展是一个无价的工具,它提供了与 IDE 的便捷集成,并简化了部署过程。
Azure 应用服务帮助开发团队以很少的更改和最少的维护将旧版应用程序迁移到云端。您现在已准备好更新并将现有应用程序和数据库迁移到云环境。
尽管您的应用程序现在已在云中,但仍有许多有用的云原生功能有待探索。继续本系列的第四部分,对您的应用程序进行容器化,并了解如何在 Azure Kubernetes 服务上运行它。
要了解更多关于使用 Visual Studio Code 将容器映像从容器注册表部署到 Azure 应用服务的信息,请查看我们的教程《使用 Visual Studio Code 将 Docker 容器部署到 Azure 应用服务》。