目录
在这里,我们将介绍Azure应用服务的工作原理,并演示如何通过Azure门户创建应用,然后使用Visual Studio Code Azure应用服务扩展进行部署。
在本系列的第一篇文章中,我们准备了一个Django应用程序来迁移到云。然后,在第二篇文章中,我们设置了一个Azure PostgreSQL数据库,将本地PostgreSQL数据库迁移到Azure Database for PostgreSQL,并将我们的本地应用连接到我们的云数据库。然后,我们在连接到Azure Postgres数据库时在本地运行Django应用。
在第三篇文章中,我们将对Python应用进行现代化改造,并将其发布到Azure上。我们将使用Azure应用服务将本地Python应用的副本移动到Azure云基础结构,只需最少的重新设计和修改。
可以按照本文中的步骤运行应用程序,也可以下载并打开此GitHub存储库文件夹,以查看第3部分末尾的代码。
Azure应用服务的工作原理
Azure应用服务是一个平台即服务(PaaS),用于在Azure上托管代码。借助Azure应用服务,我们不再需要花费时间和精力维护基础结构,这与管理虚拟机或虚拟机场来托管应用程序不同。对于希望以最少的维护保持旧版应用程序运行的开发团队来说,这使其成为一个不错的选择。
Azure应用服务允许我们部署和缩放Web、移动和API应用。它的配置集和控制面板有助于调整环境以托管我们的应用程序,而无需维护操作系统或Web服务器。
设置新的Azure应用服务时,我们可以在各种编程语言之间进行选择,包括.NET Framework、.NET Core、Node.js、PHP、Java、Python和HTML5。它还允许我们在Linux或Windows容器之间进行选择。
除了开发灵活性外,Azure App Services还具有各种部署模型:FTP,Azure DevOps,GitHub,Bitbucket,Dropbox或OneDrive。或者我们可以简单地部署一个ZIP文件。
一个应用服务计划可以有多个关联的应用服务,因此创建应用服务计划后,我们可以创建一个作为容器的应用服务。我们可以在该应用服务计划中安装大量应用程序。
适用于Web应用的应用服务具有部署槽位。部署槽位允许我们运行应用程序实例,以便应用服务可能具有一个或多个部署槽位。此设置使我们能够在将网站或应用程序的版本部署到应用服务时在它们之间基本上进行交换。
将应用部署到部署槽位后,Azure应用服务允许我们将该部署槽位交换到生产槽位。这种交换是即时发生的,在我们的部署和我们的应用程序投入生产之间没有停机时间。
通过Azure门户创建应用
让我们转到Azure门户并导航在Microsoft Azure上创建应用服务,我们将在其中部署本地Django应用。首先,在搜索文本框中键入“应用服务”,然后选择“Azure应用服务”。
接下来,门户会显示可拉取到应用服务中的应用类型:Web应用或函数应用。
可以将Web应用添加到在上一篇文章“myresourcegroup”中创建适用于PostgreSQL的Azure数据库的同一资源组下。在实例详情部分,为应用命名。我选择了名称“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之前,我们需要升级一些要求.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文件并包括本地主机和允许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)以确认它可以成功从我们在上一篇文章中创建的Azure数据库PostgreSQL数据源中提取文章。
还可以通过Azure门户测试Django后端应用,方法是配置我们在上一篇文章中下载的Vue前端Web应用。打开\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服务上运行它。
若要详细了解用于将容器映像从容器注册表部署到Azure应用服务的Visual Studio Code,请查看我们的教程使用Visual Studio Code将Docker容器部署到Azure应用服务。
https://www.codeproject.com/Articles/5326409/Modernizing-Python-Apps-and-Data-on-Azure-Part-3-S