Python: 处理机密信息(环境变量)

本文件是高级用法指南的一部分。您可以在这里查看完整指南:深入了解您的 Python 部署

👋 欢迎来到 Stackhero 文档!

Stackhero 提供现成的 Python 云 解决方案,具有众多优势,包括:

  • 通过简单的 git push 在几秒钟内 部署您的应用程序。
  • 使用您自己的域名,并享受 HTTPS 证书的自动配置以增强安全性。
  • 享受 自动备份一键更新,以及简单、透明和可预测的定价带来的安心。
  • 通过私有和专用的 VM获得最佳的性能和强大的安全性

节省时间简化您的生活:尝试 Stackhero 的 Python 云托管 解决方案只需 5 分钟

在某些时候,您需要存储诸如数据库或第三方服务的令牌和密码等机密信息。重要的是要安全地存储这些信息。避免将它们直接嵌入到您的仓库或代码中,因为这会带来重大的安全风险。

使用环境变量有两个主要好处:

  1. 您的机密信息从未存储在您的 Git 仓库中,从而降低了未经授权访问的风险。
  2. 您可以为不同的环境使用不同的凭据,例如在生产中使用生产数据库,在开发中使用开发数据库。

在开发环境中,在项目的根目录创建一个 .env 文件。此文件应从 Git 中排除,以确保它永远不会被提交。

要自动读取 .env 文件,您可以使用 python-dotenv 模块:

pip install python-dotenv
pip freeze > requirements.txt

然后,在项目的根目录创建一个 .env 文件并添加您的变量:

ENV="development"
DATABASE_PASSWORD="secretPassword"
THIRD_API_PRIVATE_KEY="secretKey"
# ...

最后,通过将 .env 添加到 .gitignore 中,确保它被 Git 排除:

echo ".env" >> .gitignore

.env 文件对于 staging 和生产环境来说不够安全。相反,Stackhero 允许您将环境变量直接安全地存储在您的 Python 服务配置中。

您可以通过选择您的 Python 服务,然后点击“配置”按钮,在 Stackhero 仪表板中设置这些变量。

Stackhero 上的 Python 环境变量Stackhero 上的 Python 环境变量

在 Python 中访问环境变量很简单。只需使用 os.environ.get(),如下所示:

import os

print(os.environ.get('ENV'))

例如,使用环境变量连接到 Redis 服务器可以这样完成:

import os
import redis

r = redis.from_url(os.environ.get("REDIS_URL"))

在开发环境中,在 .env 文件中设置 REDIS_URL 如下:

REDIS_URL="redis://localhost:6379"

对于生产和 staging,在 Stackhero 仪表板的 Python 服务配置中定义 REDIS_URL

REDIS_URL="rediss://default:<yourPassword>@<XXXXXX>.stackhero-network.com:6380"