.env 文件是一个简单的文本文件,用于定义环境变量,这些变量可以被应用程序或工具(例如 Docker Compose)加载并使用。它在管理配置和简化部署方面非常有用,尤其是对于多环境(开发、测试、生产)应用。
.env 文件的作用
1. 集中管理环境变量:
• 将配置参数集中存储在一个文件中,避免硬编码在代码或配置文件中。
• 示例:
DB_HOST=localhost
DB_PORT=5432
DB_USER=myuser
DB_PASSWORD=mypassword
2. 提高安全性:
• 敏感信息(如密码、令牌)可以存放在 .env 文件中,避免直接暴露在代码仓库中。
• 配合 .gitignore 文件,防止 .env 文件被提交到版本控制系统。
3. 方便环境切换:
• 每个环境(如开发、测试、生产)可以使用不同的 .env 文件,只需简单替换即可适配不同的配置。
4. 支持工具和框架:
• 常见的工具(如 Docker Compose)和框架(如 Node.js 的 dotenv)会自动读取 .env 文件,加载其中的环境变量。
.env 在 Docker Compose 中的使用
1. 默认加载 .env 文件:
• Docker Compose 会自动在当前目录下查找 .env 文件,并加载其中的变量。
• 示例 .env 文件:
MYSQL_ROOT_PASSWORD=secret
MYSQL_DATABASE=mydb
MYSQL_USER=user
MYSQL_PASSWORD=password
2. 在 docker-compose.yml 中使用环境变量:
• 使用 ${VARIABLE_NAME} 的语法引用环境变量。
• 示例:
version: ‘3.9’
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
3. 指定自定义 .env 文件:
• 使用 --env-file 参数指定其他 .env 文件。
• 示例:
docker compose --env-file ./custom.env up
在其他场景中的使用
1. Node.js 和 dotenv:
• 使用 dotenv 包加载 .env 文件的内容为环境变量。
• 示例:
require(‘dotenv’).config();
console.log(process.env.DB_HOST); // 输出 .env 文件中的 DB_HOST
2. Python 和 python-decouple:
• 使用 python-decouple 加载 .env 文件。
• 示例:
from decouple import config
DB_HOST = config(‘DB_HOST’)
print(DB_HOST) # 输出 .env 文件中的 DB_HOST
3. 其他工具(如 Kubernetes 和 CI/CD 系统):
• .env 文件可以作为输入,帮助工具设置环境变量。
最佳实践
1. 不要将 .env 文件提交到版本控制:
• 在 .gitignore 中添加 .env,避免泄露敏感信息。
2. 为每个环境创建独立的 .env 文件:
• 例如:.env.dev、.env.test、.env.prod。
3. 使用模板文件:
• 提供一个 .env.example 文件,作为模板,展示需要定义的变量和默认值。
• 示例:
DB_HOST=localhost
DB_PORT=5432
DB_USER=username
DB_PASSWORD=password
4. 敏感信息管理:
• 配合秘密管理工具(如 HashiCorp Vault、AWS Secrets Manager)加载 .env 文件中的内容。
总结
.env 文件是一个轻量级、便捷的方式,用于管理和加载环境变量。它在配置管理、安全性和环境切换中扮演重要角色,是现代开发和部署中的重要工具。