公开部署在 AWS Fargate 上的 Dockerized Django 应用程序的主机端口 80

问题描述 投票:0回答:1

我有一个非常简单的 Django Rest Framework (DRF) 应用程序,该应用程序经过 Docker 化并使用 Fargate 部署在 AWS ECS 上。我创建了一个安全组,在入站规则上公开端口 8000,并且能够在公共 IP 上看到该应用程序

12.34.56:78:8000/

我想让应用程序在端口 80 上运行,但不知道如何操作。我是否需要在 Dockerfile 上公开 80 并在创建任务定义时指定该端口?或者我需要设置 nginx 在内部将 HTTP 请求传递到端口 8000 吗?

Dockerfile:

# Pull base image
FROM python:3.12

# Set environment variables
ENV PIP_DISABLE_PIP_VERSION_CHECK 1
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# Set work directory
WORKDIR /app

# Install dependencies
COPY ./requirements.txt .
RUN pip install -r requirements.txt

# Copy project
COPY . .

# Expose the Django development server port
EXPOSE 8000

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

任务定义:

{
    "taskDefinitionArn": "arn:aws:ecs:us-west-1:123:task-definition/app-task:12",
    "containerDefinitions": [
        {
            "name": "container-name",
            "image": "dockerhub/app:latest",
            "cpu": 0,
            "portMappings": [
                {
                    "name": "default",
                    "containerPort": 8000,
                    "hostPort": 8000,
                    "protocol": "tcp",
                    "appProtocol": "http"
                }
            ],
            "essential": true,
            "environment": [],
            "mountPoints": [],
            "volumesFrom": [],
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-create-group": "true",
                    "awslogs-group": "/ecs/app-api-task",
                    "awslogs-region": "us-west-1",
                    "awslogs-stream-prefix": "ecs"
                }
            }
        }
    ],
    ....

}
django amazon-web-services docker dockerfile aws-fargate
1个回答
0
投票

嗯,你可以用几种不同的方式来做到这一点,但要遵循你的推理思路:

您可以将应用程序的端口以及 Dockerfile 中的端口更改为端口 80,并为 sec-group 配置相同的端口。

执行此操作的另一种方法是添加 ALB,它将端口 80 上的请求转发到端口 8000 上的容器。

另一种可能性是使用 nginx 创建另一个容器,并将其配置为应用程序的反向代理,最后一种方法有点难做到,请参阅这篇文章

© www.soinside.com 2019 - 2024. All rights reserved.