Реализация SSL со старлеткой в ​​Docker - PullRequest
0 голосов
/ 24 июня 2019

У меня есть приложение, написанное на Python 3.7, которое работает на ASGI и Starlette.Мне нужно приложение, чтобы принимать только HTTP-запросы.

Я открыл порты 443 и 80 с помощью docker-compose и добавил HTTPSRedirectMiddleware, чтобы гарантировать, что все соединения будут перенаправлены на https

docker-compose

version: '3.4'
services:
  api:
    image: api
    stop_grace_period: 30s
    environment:
      API_VERSION: $API_VERSION
    deploy:
      mode: replicated
      replicas: 1
      restart_policy:
        condition: on-failure
      update_config:
        delay: 1s
        monitor: 10s
        order: stop-first
        parallelism: 1
        failure_action: rollback
    ports:
      - 80:80
443:443
networks:
    default:
        driver: overlay
Dockerfile
ARG PYTHON_VERSION=3.7.3
FROM python:${PYTHON_VERSION} as builder
ENV PYTHONBUFFERED 1
WORKDIR /wheels
COPY ["requirements.txt","/wheels/requirements/"]
RUN pip install -U pip \
    && pip wheel -r ./requirements/requirements.txt
FROM python:${PYTHON_VERSION} as release
COPY --from=builder /wheels /wheels
ARG API_PORT

ENV PYTHONPATH=/app \
GUWORKERS=0.5\
WORKERS_PER_CORE=1\
GUWORKERS_CONNECTIONS=50

COPY ["./", "/"]

RUN pip install -r /wheels/requirements/requirements.txt\
    -f /wheels\
    && rm -rf /wheels \
    && rm -rf /root/.cache/pip/* \
    && chmod +x /scripts/entrypoint.sh
WORKDIR /app/

ENTRYPOINT ["/scripts/entrypoint.sh"]

Python

def create_app():
    app = Starlette()
    app.add_exception_handler(HTTPException, error_handler)
    app.add_middleware(ServerErrorMiddleware, handler=server_error_handler)
    app.add_middleware(HTTPSRedirectMiddleware)
    app.add_route("/", calculate, methods=["POST"])
    return app

Но когда я пытаюсь отправить POST-запрос через почтальон на контейнере, работающем на localhost, я получаю сообщение об ошибке, которое не могу подключиться, и в журналахприложение я получу

[WARNING] Invalid HTTP request received.
...