【问题标题】:How to start Dockerized Python Flask app with https instead of http?如何使用 https 而不是 http 启动 Dockerized Python Flask 应用程序?
【发布时间】:2021-01-26 12:13:59
【问题描述】:

我有一个使用 Python & Flask 框架 开发的 REST api 服务器,并使用 Docker 部署在主服务器中。当我通过sudo docker-compose buildsudo docker-compose up 构建和启动docker 容器时,docker 容器从http://0.0.0.0:5000/localhost 开始并使用端口5000

这在non-ssl 环境或浏览器或域中运行良好。但最近我的主要网站(假设www.example.com)开始使用ssl 证书。要与主站点通信,我必须在 https 而不是 http 中提供我的 api

现在我正在尝试使用此代码以 https 模式启动服务器,但出现了一些错误。

我的代码:

import ssl
ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
ctx.load_cert_chain('certificate.pem', 'privateKey.pem')

.
.

if __name__ == "__main__":
    app.run(debug=True, host='0.0.0.0',ssl_context=ctx)

这是我的错误:

在 https 模式下启动 Docker 支持的 Python Flask 应用程序的正确程序是什么?

【问题讨论】:

    标签: python docker ssl flask https


    【解决方案1】:

    经过 2 天的繁琐工作,我找到了合适的解决方案。我的域在实施 sslhttps 时有 2 个文件。一个是 mydomain_com.crt 文件,另一个是 private.key

    我在服务器的主目录中找到了这两个文件。当我使用 Apache 时,我在 /etc/var/www/html 文件夹中找到了这些文件。

    我复制了2个文件如下:

    1. mydomain_com.crt 文件中复制许可证并粘贴到 文本文件 中,然后将其重命名为 certificate.pem

    2. private.key 复制许可证并粘贴到 文本文件 中,然后将其重命名为 privateKey.pem

    然后我在我的 Flask 应用程序中使用了我的域的默认 ssl 证书,如下所示:

    import ssl
    ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
    ctx.load_cert_chain('certificate.pem', 'privateKey.pem')
    .
    .
    .
    if __name__ == "__main__":
        app.run(debug=True, host='0.0.0.0', ssl_context=ctx)
    

    并像这样在我的 Dockerfile 中暴露了 2 个端口

    FROM python:3
    WORKDIR /usr/src/app
    COPY requirements.txt ./
    RUN pip install --no-cache-dir -r requirements.txt
    COPY . .
    CMD [ "python", "app.py" ]
    EXPOSE 80
    EXPOSE 443
    

    重启后,我的 Dockerized Flask 应用现在可以使用我域的默认 ssl 证书并正确地提供 API。

    例如:https://example.com:5000/getUsers

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-24
      相关资源
      最近更新 更多