发布于 2026-01-06 0 阅读
0

在 AWS Elastic Beanstalk 上部署您的第一个 Docker 化 Django REST API:综合指南 1. 创建 API 2. 将 API Docker 化 3. 在 AWS Elastic Beanstalk 上部署 Docker 化 API 结论 DEV 的全球展示挑战赛,由 Mux 呈现:展示您的项目!

在 AWS Elastic Beanstalk 上部署您的第一个 Docker 化 Django REST API:一份全面的指南

1.创建API

2. API Docker化

3.在AWS Elastic Beanstalk上部署Docker化API

结论

由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!

欢迎阅读这篇关于在 AWS Elastic Beanstalk 上部署 Docker 化 Django REST API 的全面指南。本教程旨在引导您完成整个过程,从设置 Django 应用程序开始,最终将其部署到 AWS Elastic Beanstalk 上。

但首先,让我们花点时间了解一下为什么这很重要。

在日益数字化的世界中,Web 服务和 API 在实现不同软件应用程序之间的无缝通信方面发挥着至关重要的作用。在众多框架中,Django 以其稳健性和简洁性脱颖而出,成为许多 Python 开发人员的首选。

此外,Docker 通过将应用程序及其所有依赖项打包到称为容器的标准化单元中,简化了部署过程。这消除了诸如“在我的机器上运行正常,但在服务器上却不行”之类的常见问题。因此,将 Django REST API 容器化不仅能使项目更易于管理,还能确保其在任何环境下都能正常运行。

AWS Elastic Beanstalk 是部署的热门选择,因为它能处理所有基础设施细节,让您专注于应用程序本身。它支持包括 Docker 在内的多个平台,并能自动完成部署、容量配置、负载均衡和自动扩展等流程。

完成本教程后,您将学会如何设置 Django REST API、将其 Docker 化并部署到 AWS Elastic Beanstalk。本指南面向对 Django、Docker 和 AWS 有基本了解,但希望将所有组件整合到一个可用于生产环境的环境中的开发人员。

接下来的章节中,我们将深入探讨每个步骤,解释相关概念,提供代码片段,并向您展示具体需要做什么。让我们开始吧!

1.创建API

创建虚拟环境:

virtualenv env
source env/bin/activate

创建一个新的 Django 项目

首先,我们需要安装 Django 和 Django REST framework。请确保您的计算机上已安装 Python。您可以使用 pip 安装 Django 和 Django REST framework:

pip install django
pip install djangorestframework

现在,我们可以创建一个新的 Django 项目。我们把它命名为“书店”:

django-admin startproject bookstore

创建一个新的 Django 应用:

cd bookstore
python manage.py startapp books
Enter fullscreen mode Exit fullscreen mode

定义图书模型

在 books/models.py 文件中,定义一个 Book 模型:

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.CharField(max_length=100)
    publication_date = models.DateField()
    isbn = models.CharField(max_length=20)
    summary = models.TextField()

Enter fullscreen mode Exit fullscreen mode

别忘了在 bookstore/settings.py 文件中将“书籍”添加到已安装的应用列表中:

INSTALLED_APPS = [
    ...
    'rest_framework',
    'books',
]
Enter fullscreen mode Exit fullscreen mode

运行迁移以创建相应的数据库表:

python manage.py makemigrations
python manage.py migrate

Enter fullscreen mode Exit fullscreen mode

为 Book 模型创建序列化器

在 books/serializers.py 文件中,定义一个 BookSerializer:

from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'

Enter fullscreen mode Exit fullscreen mode

设置一个用于处理 REST API 请求的视图

在 books/views.py 文件中,定义一个 BookViewSet:

from rest_framework import viewsets
from .models import Book
from .serializers import BookSerializer

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

Enter fullscreen mode Exit fullscreen mode

配置 URL 路由

在 bookstore/urls.py 文件中,为图书应用程序添加路由:

from django.urls import include, path
from rest_framework.routers import DefaultRouter
from books.views import BookViewSet

router = DefaultRouter()
router.register(r'books', BookViewSet)

urlpatterns = [
    path('', include(router.urls)),
]

Enter fullscreen mode Exit fullscreen mode

在本地测试 API

启动 Django 开发服务器:

python manage.py runserver

现在您应该能够通过本地主机访问 API ,如下所示:

本地主机

请注意本地 URL,这意味着您的 API 正在您的计算机上运行。

太棒了!Django RESTful API 准备就绪后,下一步就是将应用程序 Docker 化。

2. API Docker化

下载 Docker

我们将使用命令行界面 (CLI) 下载 Docker。通过使用 Docker CLI,您可以获得一套强大的工具集,用于与 Docker 交互、管理容器以及高效地编排应用程序。无论您是在本地运行 Docker 还是在云环境中运行,它都提供了一个一致且灵活的界面。

对于 Linux 系统:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

适用于 macOS:
brew install --cask docker

适用于 Windows/PowerShell:
iex "& { $(irm https://aka.ms/win-docker/cli-latest.ps1) }"

使用以下命令在您的系统上运行 Docker
sudo systemctl start docker

创建 Dockerfile:

在项目根目录(与 manage.py 所在的目录相同)下创建一个名为 Dockerfile 的新文件。该文件将定义如何构建应用程序的 Docker 镜像。以下是一个 Django 应用程序的基本 Dockerfile 示例:

# Use an official Python runtime as a parent image
FROM python:3.9-slim-buster

# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# Set the working directory in the container to /app
WORKDIR /app

# Add the current directory files (on your machine) to the container
ADD . /app/

# Install any needed packages specified in requirements.txt
RUN pip install --upgrade pip
RUN pip install -r requirements.txt

# Expose the port server is running on
EXPOSE 8000

# Start the server
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

Enter fullscreen mode Exit fullscreen mode

Dockerfile 提供了构建 Django 应用 Docker 镜像的指令。它以官方的 Python 3.9 slim 镜像为基础。环境变量被设置为禁用字节码写入并启用无缓冲输出。
工作目录被设置为 /app,并将当前目录下的文件添加到容器中。requirements.txt 文件用于安装必要的 Python 包。
端口 8000 被开放以允许传入连接。最后,使用命令 `python manage.py runserver 0.0.0.0:8000` 启动 Django 开发服务器。
此 Dockerfile 允许您将 Django 应用及其依赖项打包到一个容器中,使其具有可移植性,并易于在不同环境中部署。

创建 requirements.txt 文件

您还需要创建一个 requirements.txt 文件,列出项目的 Python 依赖项,以便 Docker 可以安装它们。您可以使用以下命令生成 requirements.txt 文件:

pip freeze > requirements.txt

构建 Docker 镜像

现在您可以从 Dockerfile 构建 Docker 镜像。请确保 Docker Desktop 正在运行,然后在包含 Dockerfile 的目录中,在终端中运行以下命令:

docker build -t bookstore .

您可以使用以下命令查看您的新 Django 镜像:
docker images

使用 Docker 运行应用程序:

'docker run -p 8000:8000 bookstore'

您可能会遇到 DisallowedHost 错误,这是因为您的 Django 项目中的 ALLOWED_HOSTS 设置未配置为允许给定的主机值“0.0.0.0”。要解决此问题,您可以将 Django 项目中的 ALLOWED_HOSTS 设置更新为包含“0.0.0.0”。

现在您应该可以再次通过http://0.0.0.0:8000/访问 API 了,这次是在 Docker 容器内运行,如下所示:

Docker 依赖

请注意新的 URL,您的 API 现在以 Docker 容器的形式运行。

现在您的应用程序已 Docker 化,可以部署到 AWS Elastic Beanstalk 了。

3.在AWS Elastic Beanstalk上部署Docker化API

在部署应用之前,您需要确保拥有一个 Docker Hub 帐户。Docker Hub 是一个基于云的镜像仓库服务,允许您链接到代码仓库、构建和测试镜像、存储手动推送的镜像,以及连接到 Docker Cloud 以便将镜像部署到主机。它为容器镜像的发现、分发、变更管理和协作提供了一个集中式资源。

创建账户后,您现在可以使用 CLI 登录:

docker login

它会要求您输入 Docker Hub 用户名和密码。

使用您的 Docker Hub 用户名标记您的镜像。Docker 要求您推送的镜像包含您的 Docker Hub 用户名。使用以下命令:
docker tag bookstore:latest <your-docker-hub
username>/nice-reads:latest

注:我把我的 Docker Hub 仓库命名为 nice-reads,但你可以随意命名。另外,我保留了默认标签 latest。

接下来,给镜像添加标签后,可以使用以下命令将其推送到 Docker Hub:
docker push <your-docker-hub-username>/nice-reads:latest

请确保将上述命令中的 `<your Docker Hub username>` 替换为您的 Docker Hub 用户名。

太好了,现在你已经将 Docker 镜像推送到 Docker Hub,可以将其部署到 AWS Elastic Beanstalk 了。

如果您尚未安装 Elastic Beanstalk 命令行界面 (EB CLI),请先安装。您可以使用 pip 安装它:

pip install awsebcli

初始化 Elastic Beanstalk 环境。在项目根目录下运行:

eb init

系统会提示您选择区域,并提供您的 AWS 访问密钥 ID 和秘密访问密钥。如果您尚未创建这些密钥,可以在 AWS IAM 控制台中创建它们。系统还会要求您选择平台;您可以选择 Docker。

接下来,在项目根目录下创建一个 Dockerrun.aws.json 文件。AWS Elastic Beanstalk 需要此文件来了解如何运行您的 Docker 容器。以下是该文件的示例:

{
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "<your-docker-hub-username>/nice-reads:latest",
    "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "8000"
    }
  ]
}

Enter fullscreen mode Exit fullscreen mode

有了 Dockerrun.aws.json 文件,就可以创建 Elastic Beanstalk 环境了:

eb create

`eb create` 命令会要求您输入环境名称和 CNAME 前缀。环境名称用于标识环境,而 CNAME 前缀用于创建应用程序的 URL。AWS
Elastic Beanstalk 随后会为您的应用程序创建一个环境,其中包含负载均衡器、自动扩展组、安全组、用于存储应用程序版本和日志的 Amazon S3 存储桶,以及用于监控环境运行状况并触发自动扩展操作的 CloudWatch 警报。
它还会从 Docker Hub 拉取 Docker 镜像并运行它。

命令执行完毕后,您的应用程序应该可以通过互联网访问。您可以使用以下命令获取 URL:

eb open

这将通过如下所示的 URL 打开我们已部署的 API:

降E开

请注意确认部署的新 URL。

最后,您可以通过运行以下命令来查看您在 Eb 上的应用程序状态:

eb status

看起来应该和这个类似:

地位

注意:如果您遇到与 ALLOWED_HOSTS 相关的部署问题,可以使用 ['*'] 作为临时措施,但迁移到生产环境时,不要忘记将其替换为实际的主机名。

结论

恭喜!如果您按照本教程操作,即可成功将 Docker 化的 Django REST API 部署到 AWS Elastic Beanstalk。现在您可以访问应用程序的 URL,体验功能齐全的在线应用程序。

建议您在 Elastic Beanstalk 控制台上检查一下环境状态。如果看到绿色对勾且状态显示为“健康”,则表示您的应用程序运行正常。

请记住,您还可以通过访问 AWS 控制台上的“账单和成本管理”控制面板来跟踪 AWS 使用情况并管理成本。如果您正在处理大型项目或使用多个 AWS 服务,这一点尤为重要。
虽然有多种方法可以将应用程序部署到 AWS Elastic Beanstalk,但本教程始终使用 AWS CLI。AWS CLI 是一款强大的工具,允许您通过命令行管理 AWS 服务,从而提供跨服务的统一界面。值得一提的是,这种方法还允许您通过脚本自动执行流程,从而提高工作效率并减少人为错误。
要实现这一切,您需要正确配置 AWS 账户,包括设置 IAM 角色和权限。AWS 网站上提供了全面的指南,帮助您了解这些配置设置。

本教程中使用的 Django REST API 应用程序可在我的 GitHub 代码库BookstoreApp中找到。欢迎克隆、探索并将其用作您自己项目的基础。

在软件开发的旅程中,请记住学习是一个持续的过程,技术格局也在不断变化。今天,您已经迈出了重要的一步,学会了如何在 AWS Elastic Beanstalk 上部署 Docker 化的 Django 应用程序。继续探索,继续学习,最重要的是,享受这个过程。下次再见,祝您编码愉快!

文章来源:https://dev.to/ki3ani/deploying-your-first-dockerized-django-rest-api-on-aws-elastic-beanstalk-a-compressive-guide-2m77