在生产环境中如何更新 .env 文件?
请教一个问题
我本地的 .env
文件更新了,然后将更新的内容也同时更新到 .env.example
文件中,然后再将 .env.example
提交到代码库,那么在生产服务器上将 .env.example
文件更新之后, 如何将更新的内容放到 .env
文件中去呢?还是只能手动去修改 .env
文件?
给你一个方案参考,哈:
生产环境配置保存到.env.prod,测试环境配置保存到.env.test,开发环境配置保存到.env.local(或dev),这3个文件都提交到版本库。内容有变化时,直接提交更新到版本库。
在不同的环境下,将文件.env做软链接到对应的文件,比如生产环境,.env文件软链接到.env.prod。另.env文件不提交版本库。
如果就一套环境,没必要搞那么麻烦,手动调整一下安全放心
@Xingchao 我觉得这是个好方法,不过我不推荐 .env.prod 放在代码库中,因为这块会有生产的数据库等机密信息,可以使用一个对象存储服务器,例如阿里的 OSS。将 .env.prod 放进去,部署的时候,去这里拉文件即可。
@lxping 但是如果是放到 OSS 的话,也可以不做软链了吧?在 CD 的时候指定保存为
.env
文件即可@Tsukasa_Kanzaki 是的,而且 OSS 跟 ECS 之间可以很容易解决权限的问题。各大云产商都其实有一套这种解决方案,比如:
aws s3 & ec2
放到oss里。自动发布的时候,把最新的文件拉回来跟代码一起打包发布
可以使用 apollo
用 ETCD 或 consul 保存配置信息,然后在线上和线下环境中使用 confd 来订阅配置并更新到.env 配置文件
可以参考:使用 Consul 管理配置
我觉得还是手动吧,本身框架没有这方面的设计,改个一个两个配置项也不会耗费多少时间的。
都是打包在镜像里面的。当 Docker 遇到 CI/CD,让 DevOps 落地于实践、了解一下。
传统的做法、关于环境配置参数而言,不同的环境有不同的参数与参数值,配置数据敏感信息,不能放在仓库,运维来维护就行。
.env文件可能包含重要的私密信息,不应该提交到代码库。如果要更新线上环境其实也不难,使用 XShell 直接将.env文件拖拽到线上项目根目录即可(先删除项目里已经存在的.env文件,不然拖不进去)