我目前正在使用 Python Flask。我试图更好地理解环境变量的配置。我知道如何在开发环境中将环境变量传递给我的代码。一方面,“.flaskenv”用于非关键变量,可以由版本控制跟踪,但也有“.env”文件用于放置敏感数据。该数据会根据环境而有所不同。在开发中我将使用一个数据库,在生产中它将使用不同的数据库。我已将“.env”文件放入我的 gitignore 文件中,因此它不会被推送到 git。我希望能够将生产中的类似文件传递到我的应用程序。
所以,我有一个“init.py”文件,其中有一个应用程序工厂函数,该函数使全局应用程序变量非常有用。我可以创建多个具有不同配置的应用程序。
from flask import Flask
from config import Config
import os
from src.blog import bp as blog_bp
def create_app(config_class=Config):
app = Flask(__name__)
app.config.from_object(config_class)
app.register_blueprint(blog_bp)
return app
我使用“os.environ”从项目文件夹中的本地开发 .env 文件中获取变量。我遇到的问题是我不知道在哪里存储生产 .env 文件以及如何访问它?
我想到了 GitHub Actions,在那里我传递了环境变量 FLASK_ENV,但我不知道对于文件中具有敏感数据的许多变量来说是否是这样。
这取决于你的生产环境如何设置。是k8s部署吗?您可以在 Pod 内挂载包含机密的文件。此外,根据您使用的云提供商,您的敏感变量会有不同的存储选项。
我想到了 GitHub Actions,在那里我传递了环境变量 FLASK_ENV,但我不知道对于文件中具有敏感数据的许多变量来说是否是这样
既然你提到了这一点,我认为使用 GitHub Actions 来实现这一目的没有问题。实际上,在存储库设置>安全>秘密和变量>操作下,您可以创建可以在工作流程中调用的秘密。这些是 GitHub Actions 不允许输出的特殊变量。
您可以使用以下语法在工作流程步骤中调用它们:
steps:
- name: some-service-login
run: |
some-service-cli login --username ${{ secrets.SERVICE_LOGIN }} --password ${{ secrets.SERVICE_PASSWORD }}