前言
在互联网时代,Web 应用是不可或缺的一部分。而 Django 作为 Python 中极为流行的 Web 框架,因其拥有先进的 ORM 映射机制以及强大的路由配置,被广泛地应用于 Web 应用的开发中。
随着 Serverless 架构的出现,越来越多的开发者将目光投向了不需要自己部署服务器的方法上。本文将会介绍如何使用 Serverless 框架部署 Django 应用,并对其具有深入的探讨和学习意义。
Serverless 框架
在介绍如何部署 Django 应用之前,我们需要了解一下 Serverless 框架。Serverless 架构为使用云服务进行构建和运行应用程序提供了一种新的方式。这种方法消除了服务器维护的需求,并将计算资源分配给处理请求的服务。
Serverless 架构中,应用程序通常被分解成一组小型、独立且可重复使用的服务。每个服务只能执行特定的 API 端口提供程序,并且可以聚合到安装程序中,以实现应用程序的各个方面。
Serverless 框架目前有很多种,本文将使用 Serverless Framework 进行部署。
Django 应用的 Serverless 部署
在部署 Django 应用之前,我们需要先准备好必要的环境。
准备工作
首先,安装 Node.js。在官网下载对应系统的安装包,安装完成之后,执行
node -v
和npm -v
命令查看版本号,如果都能正常显示,则说明安装成功。# 安装完成之后,可以执行以下命令查看版本号 $ node -v v14.15.1 $ npm -v 6.14.8
安装 Serverless Framework。执行以下命令进行全局安装:
$ npm install -g serverless
安装 pip 和 virtualenv。这里我们使用 pipenv 进行虚拟环境管理,因此可以使用 pipenv 安装 pip 和 virtualenv。
$ pipenv install
安装完成之后,执行以下命令激活虚拟环境:
$ pipenv shell
确认虚拟环境已经在激活状态:
(django) $
此时就可以开始部署过程了。
部署流程
在进行部署之前,需要先确保 Django 应用能够在本地运行。这里我们使用一个简单的 Django 应用作为示例,代码如下:
-- -------------------- ---- ------- - ---------------------- --- ----- - ---- ------------- - ----- --- - ------------------- ---- ----------- ------ ------------ --- --------------- ------ ------------------- ---------- --------
完成 Django 应用代码的编写之后,我们需要将其部署到 Amazon Web Services (AWS) Lambda 中,进行 Serverless 部署。
创建 Serverless 应用。
# 创建 serverless 应用 $ serverless create --template aws-python3 --path my-django-app
上述命令将在当前目录中创建名为
my-django-app
的 Serverless 应用,并且使用 Python 3.8 环境设置。在 serverless.yml 文件中进行配置,以定义 Django 应用的部署流程。
-- -------------------- ---- ------- - -------------- -------- ------------- ----------------- -------- ------- ------- ------------------- ------------- ---- --------- ----- --- -------- --------- ------------ ----------------------- ------------------- ------------------ - ------- ----- ------- - --------------------- --------- --- ---------- ---- -------- -------------------- ------- - ----- ----- - ------- ---
这里的配置中,我们使用了 AWS Lambda 作为 Serverless 平台,并指定了 Python 3.8 作为运行环境。此外,我们还创建了一个
app
函数,并且指定了其作为入口的handler
,并添加了一个http
触发器,用于接收来自 API Gateway 的请求,并将请求路由到app
函数中。使用 pipenv 安装必要的依赖。
$ pipenv install django gunicorn
将 Django 项目转化为 WSGI 应用,并添加到 Serverless 应用中。
导出
wsgi_handler.py
文件,并在其中通过my_django_app
引入 Django 应用,并创建一个 WSGIHandler 对象,用于处理 API Gateway 的请求。$ python manage.py migrate # 数据库初始化 $ python manage.py collectstatic --noinput # 收集静态文件 $ python manage.py findstatic --verbosity 2 dflogo.png # 查找或调试一个静态文件的引用路径 $ mkdir wsgi_handler $ touch wsgi_handler/__init__.py $ vim wsgi_handler/handler.py
-- -------------------- ---- ------- - ----------------------- ------ -- ------ --- - ------- ------ ------------- --------------------------------------------- - -- ------ -- ---- --------------- ------ ----------- -- --- --- -------------- --------- - -- --- ------- -- -------- - ---------- -------- ------ --------
部署应用到 AWS Lambda 上。
$ serverless deploy
查看应用部署状态。
$ serverless info
访问应用。
访问 https://<api-gateway-id>.execute-api.<region>.amazonaws.com/dev/,即可看到返回的
Hello Serverless World!
字符串。
总结
通过本文的介绍,我们了解了如何在 Serverless 环境中部署一个 Django 应用。Serverless 框架具有很多优点,如省去学习另一套无关技术的学习成本、降低了部署成本以及更灵活弹性地分配计算资源等。相信本文的介绍对于想要体验 Serverless 开发的开发者会有很大的帮助。
完整示例代码请见:https://github.com/Leedehai/my-django-app
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64759614968c7c53b029a492