资讯动态

生产环境配置分离:让密码彻底离开代码

发布时间:2026/10/2 2:27:48 来源:尧图企业网站定制
现象最初写代码时数据库密码直接写在 app.py 里DB_PASSWORDYOUR_DB_PASSWORD三个问题1.密码进了 Git 历史——即使后来改了历史记录里还在2.改密码要改代码——还要重新部署3.多人协作时——每个人拿到代码就拿到了密码原因代码和配置必须分离。代码是逻辑配置是环境相关的值密码、主机名、端口。同一份代码本地和线上要用不同配置。环境变量就是干这个的——代码读 os.environ真实值放在 .env 文件里.env 不进 Git。解决代码里读环境变量importos DB_HOSTos.environ.get(DB_HOST,db)DB_USERos.environ.get(DB_USER,root)DB_PASSWORDos.environ.get(DB_ROOT_PASSWORD)# 不设默认值强制显式配置DB_NAMEos.environ.get(DB_NAME,test_db)写一个 .envDB_ROOT_PASSWORDYOUR_DB_PASSWORDDB_NAMEtest_dbDB_HOSTdb.gitignore 里排除.env *.env!.env.example给团队一个模板 .env.exampleDB_ROOT_PASSWORDchangemeDB_NAMEtest_dbDB_HOSTdbcompose 里引用services: db: environment: MYSQL_ROOT_PASSWORD:${DB_ROOT_PASSWORD}MYSQL_DATABASE:${DB_NAME}进阶让 Crontab 也能读 .env宿主机上有个定时任务要跑脚本* * * * * /usr/bin/python3 /home/ubuntu/dashboard/write_db.py但 Crontab 的环境没有那些变量脚本会挂。解决先加载 .env 再执行* * * * *export$(cat/home/ubuntu/dashboard/.env|xargs)/usr/bin/python3 /home/ubuntu/dashboard/write_db.py/home/ubuntu/dashboard/write_db.log21再加个锁防进程堆积* * * * * flock-xn/tmp/write_db.lockbash-cexport $(cat /home/ubuntu/dashboard/.env | xargs) /usr/bin/python3 /home/ubuntu/dashboard/write_db.py/home/ubuntu/dashboard/write_db.log21flock -xn 含义排他锁 非阻塞。拿不到锁立即退出不会堆积进程。三个坑坑 1.env 一定要加进 .gitignore。忘了的话密码就进 GitHub 了——而且即使后来删了Git 历史里还在。坑 2.env.bak-* 这类备份文件也要忽略。我加 .env 规则时忘了加 *.bak差点把备份文件提交上去。坑 3Crontab 读环境变量要显式 export $(cat .env | xargs)不会自动读。而且 flock 是标配——定时任务可能超时的时候都该加。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑