Раскрытие порта 80 хоста приложения Django, развернутого в Docker на AWS Fargate

У меня есть очень простое приложение Django rest framework (DRF), которое докеризовано и развернуто на AWS ECS с помощью Fargate. Я создал группу безопасности для выставления порта 8000 во входящих правилах и смог увидеть приложение на публичном IP 12.34.56:78:8000/

Я хотел бы, чтобы приложение запускалось на 80-м порту, но не знаю, как это сделать. Нужно ли мне прописать 80 в Dockerfile и указать этот порт при создании определения задачи? Или мне нужно настроить 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"
                }
            }
        }
    ],
    ....

}

Ну, вы можете сделать это несколькими разными способами, но, следуя вашей линии рассуждений:

Вы можете изменить порт вашего приложения, а также в Dockerfile на порт 80 и настроить тот же порт для sec-group.

Другой способ сделать это - добавить ALB, который будет перенаправлять запросы на порт 80 в контейнер на порт 8000.

Другая возможность - создать еще один контейнер с nginx и настроить его как обратный прокси для вашего приложения, этот последний способ немного сложнее, смотрите эту статью.

Вернуться на верх