如何将Flask的ssl_context设置为环境变量或通过配置文件加载
解决方案
- 第一步:在配置类中新增不同环境的SSL_CONTEXT配置项,仅开发环境配置adhoc证书
import os from decouple import config class Config: DEBUG = False DEVELOPMENT = False SECRET_KEY = config('SECRET_KEY') # 默认全局不启用自定义SSL配置 SSL_CONTEXT = None class ProductionConfig(Config): pass class StagingConfig(Config): DEBUG = True class DevelopmentConfig(Config): DEBUG = True DEVELOPMENT = True # 仅本地开发环境启用临时自签名证书 SSL_CONTEXT = 'adhoc'
- 第二步:修改应用启动入口的代码,直接读取配置项作为ssl_context参数值
if __name__ == "__main__": app.run( ssl_context=app.config.get('SSL_CONTEXT'), )
- 补充说明:
- 部署到Heroku时,平台会自动处理SSL证书,且Heroku默认使用Gunicorn等WSGI服务器启动应用,不会执行
if __name__ == "__main__"下的启动逻辑,上述配置不会对线上环境产生任何影响,无需手动修改代码提交。 - 如果你习惯使用
flask run命令启动本地服务,之前配置的FLASK_RUN_CERT = 'adhoc'不生效大概率是因为你没在本地开发环境加载该环境变量,只需在本地的.env文件中添加该配置即可,该参数是flask run命令的专属参数,仅本地生效,不会影响Heroku环境。
- 部署到Heroku时,平台会自动处理SSL证书,且Heroku默认使用Gunicorn等WSGI服务器启动应用,不会执行
内容的提问来源于stack exchange,提问作者cording12
相关产品推荐
相关产品推荐

