簡體   English   中英

如何使用 https 而不是 Z80791B3AE7002CB88FZ88FA?

[英]How to start Dockerized Python Flask app with https instead of http?

I have a REST api server developed with Python & Flask framework and deployed in the main server with Docker . When I build & start the docker container by sudo docker-compose build & sudo docker-compose up , the docker container starts at http://0.0.0.0:5000/ or localhost and using port 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)

這是我的錯誤:

在此處輸入圖像描述

在 Z5E056C500A5001C4B7BADEB7180 模式下啟動 Docker 支持的 Python Flask 應用程序的正確程序是什么?

經過 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM