核心方法是让敏感变量完全不进入代码仓库——通过 .env 文件隔离配置与代码、加入 .gitignore、设置文件权限、使用多环境文件分层、提交前 git 钩子自动检查、ci/cd 中启用 secrets 并禁用日志回显。

核心方法是让敏感变量完全不进入代码仓库——不是靠“记得别提交”,而是靠机制隔离+自动拦截。
用 .env 文件隔离配置与代码
把 SECRET_KEY、数据库密码、API 密钥等全写进 .env 文件,而代码里只通过环境变量读取(如 Python 的 config('SECRET_KEY') 或 Go 的 os.Getenv("DB_PASS"))。这样代码本身不带密钥,即使仓库公开也无风险。
-
.env 文件必须加进
.gitignore:这是第一道防线,确保它根本不会被git add捕获 - 提供
.env.example或example.env供团队参考:里面只写变量名和示例值(如DATABASE_USER=your_username),不含真实凭证 - 文件权限设为仅所有者可读写:
chmod 600 .env,防止同服务器其他用户意外读取
用多环境文件进一步分层
区分通用配置和敏感配置,比如:
-
.env.common:端口、日志级别等非敏感项,可提交到 Git -
.env.production:生产环境密钥,不提交,仅部署时注入
Docker Compose、Django、Go Clean Arch 等主流框架都支持按需加载多个 env 文件,后加载的同名变量会覆盖前一个,灵活又安全。
加一道提交前自动检查
光靠人工容易漏,用 Git 钩子在 git commit 前扫描是否误含敏感词:
- 写一个简单 Shell 脚本,检查暂存区是否有
.env、password、SECRET_KEY等关键词 - 把它放进
.git/hooks/pre-commit,并赋予执行权限 - 一旦命中,中止提交并提示:“检测到疑似敏感内容,请确认是否应提交”
CI/CD 中避免回显密钥
流水线里也要防泄露:
- 在 GitHub Actions、Bitbucket Pipelines 等平台中,把密钥设为 Secrets,而非普通环境变量
- 禁用命令输出日志(如
set +x或echo off),防止echo $DB_PASS把值打在控制台 - 敏感配置不写进
docker-compose.yml明文字段,改用env_file引用外部文件











