找回密码
 立即注册
首页 业界区 安全 环境变量应用

环境变量应用

铜坠匍 2025-5-30 13:31:10
环境变量

在开发的过程中我们经常会需要设置环境变量,特别是在 Linux 的系统下的时候,更是需要在 shell 脚本中也用到相关的环境变量,开源项目中很多关于环境变量的设置使用的都是.env文件;
1. 文件介绍

.env 文件是用于存储环境变量的配置文件,通常用于在项目中管理敏感信息(如:API 秘钥、数据库密码)或不同运行环境(开发、测试、生产)的配置差异,通过配置与代码分离,.env文件能够提高安全性和灵活性。

  • 作用‌:

    • 存储项目的环境变量,避免将敏感信息硬编码到代码中。
    • 支持不同环境(开发、生产)的配置切换,无需修改代码。
    • 简化团队协作,开发者可以基于自己的 .env 文件独立配置。

  • 语法规则

    • 每行定义一个键值对,格式为KEY=value
    • 注释用#表示
    • 值可以包裹在双引号中(处理特殊字符或空格),例如 SECRET_KEY="my secret"
    • 支持多行值(使用三引号或转义字符\),支持常见的转义序列如 \n、\t 等
    • 变量可以相互引用,如DOMAIN=example.com和URL=https://${DOMAIN}

  • 环境变量命名约定

    • 全部使用大写字母:DATABASE_NAME
    • 使用下划线分割:MYSQL_USERNAME
    • 使用前缀区分应用:MYAPP_DATABASE_URL
    • 使用前缀或者文件区分环境:
      前缀:DEV_API_URL、PROD_API_URL、TEST_API_URL
      文件:env.dev 、.env.prod、.env.test
      目录区分:test/.env  、dev/.env  、prod/.env

    • 布尔值命名标准:IS_DEBUG、HAS_CACHE、ENABLE_FEATURE

  • 示例
    1. # 数据库配置
    2. DB_HOST=localhost
    3. DB_PORT=3306
    4. DB_USER=admin
    5. DB_PASSWORD=secret123
    6. DEBUG=True
    复制代码
2. 环境变量设置方式

设置方式语法示例生效范围持久性优点缺点适用场景.env 文件DB_HOST=localhost项目级项目运行的时候易于版本控制
支持注释和文档
支持复杂值格式
方便环境切换需要额外库支持
仅对特定应用有效
需注意文件安全开发环境
团队协作项目Windows SETSET DB_HOST=localhost当前命令行会话期间简单直接
无需依赖
立即生效窗口关闭不生效
不支持复杂格式
难以批量管理临时测试
快速验证Windows SETXSETX DB_HOST "localhost"系统级永久永久保存
立即生效
无需依赖需要重启生效
长度限制1024字符
可能需要管理员权限系统级配置
全局设置Linux exportexport DB_HOST=localhost当前 shell会话期间简单直接
立即生效
可用于脚本会话结束失效
不支持复杂格式
无注释功能临时测试
shell脚本linux environmentDB_HOST=localhost系统级永久系统级永久
全局有效
所有用户可用需重新登录
需root权限
格式简单系统级配置
多用户环境Docker envENV DB_HOST=localhost或docker run -e DB_HOST=localhost容器级容器生命周期容器级隔离
支持运行时覆盖
适合容器部署仅用于Docker
注意镜像安全
批量管理繁琐容器化部署
微服务架构场景选择建议
使用场景推荐方式原因开发环境.env 文件便于团队协作,环境一致性管理生产环境Docker环境变量 (容器化)
系统环境变量 (传统部署)
云平台环境变量根据部署方式选择最适合的方案临时测试SET/export 命令简单快速,即用即弃CI/CD环境CI/CD平台环境变量安全性好,便于管理3. Python 环境变量加载
  1. # 依赖第三方库
  2. pip install python-dotenv
复制代码
简单测试
  1. import os
  2. from dotenv import load_dotenv
  3. # 加载当前路径下的 .env 文件中的内容到系统中去
  4. load_dotenv()
  5. # 指定路径的时候
  6. # load_dotenv("/path/to/custom/.env")
  7. db_host = os.getenv("DB_HOST")
  8. print(db_host)
复制代码
1.png

常见参数解释
  1. # 常见的参数释义
  2. load_dotenv(override=True)  # 默认情况下,load_dotenv() 不会覆盖已存在的系统环境变量。若需强制覆盖
  3. # 可以为不同环境创建多个文件(如 .env.prod, .env.dev),按需加载:
  4. load_dotenv(".env.prod")  # 加载生产环境配置
  5. # 带默认值的读取, 如果不存在则以默认值补充
  6. debug_mode = os.getenv('DEBUG', 'False')
复制代码
常见的配置类加载
  1. load_dotenv()
  2. class Config:
  3.    
  4.     # 根据自己的需要进行取出
  5.     DB_CONFIG = {
  6.         "host": os.getenv("DB_HOST"),
  7.         "port": os.getenv("DB_PORT"),
  8.         "user": os.getenv("DB_USER"),
  9.         "password": os.getenv("DB_PASSWORD"),
  10.     }
  11.    
复制代码
4. 安全说明

.env文件中通常保存着除环境变量外的的一些敏感信息,如密码、秘钥、盐等信息,且不同机器之间的环境变量不一致,通常不会上传到 git 上面,会在 .gitignore 中忽略提交;
继续努力,终成大器。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册