在生产环境中如何更新 .env 文件?

请教一个问题

我本地的 .env 文件更新了,然后将更新的内容也同时更新到 .env.example 文件中,然后再将 .env.example 提交到代码库,那么在生产服务器上将 .env.example 文件更新之后, 如何将更新的内容放到 .env 文件中去呢?还是只能手动去修改 .env 文件?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 11

给你一个方案参考,哈:

生产环境配置保存到.env.prod,测试环境配置保存到.env.test,开发环境配置保存到.env.local(或dev),这3个文件都提交到版本库。内容有变化时,直接提交更新到版本库。
在不同的环境下,将文件.env做软链接到对应的文件,比如生产环境,.env文件软链接到.env.prod。另.env文件不提交版本库。

4年前 评论
半人间 4年前
奔跑啊超超 (作者) 4年前

如果就一套环境,没必要搞那么麻烦,手动调整一下安全放心

4年前 评论

@Xingchao 我觉得这是个好方法,不过我不推荐 .env.prod 放在代码库中,因为这块会有生产的数据库等机密信息,可以使用一个对象存储服务器,例如阿里的 OSS。将 .env.prod 放进去,部署的时候,去这里拉文件即可。

4年前 评论
奔跑啊超超 4年前

@lxping 但是如果是放到 OSS 的话,也可以不做软链了吧?在 CD 的时候指定保存为 .env 文件即可

wget <URL FOR ENV PRODUCTION> -O <WEB DIRECTORY>/.env
4年前 评论

@Tsukasa_Kanzaki 是的,而且 OSS 跟 ECS 之间可以很容易解决权限的问题。各大云产商都其实有一套这种解决方案,比如: aws s3 & ec2

4年前 评论
xianyunyehe

放到oss里。自动发布的时候,把最新的文件拉回来跟代码一起打包发布

4年前 评论
leung0826

可以使用 apollo

4年前 评论

用 ETCD 或 consul 保存配置信息,然后在线上和线下环境中使用 confd 来订阅配置并更新到.env 配置文件

可以参考:使用 Consul 管理配置

4年前 评论

我觉得还是手动吧,本身框架没有这方面的设计,改个一个两个配置项也不会耗费多少时间的。

4年前 评论

都是打包在镜像里面的。当 Docker 遇到 CI/CD,让 DevOps 落地于实践、了解一下。
传统的做法、关于环境配置参数而言,不同的环境有不同的参数与参数值,配置数据敏感信息,不能放在仓库,运维来维护就行。

4年前 评论
JANCE 3年前

.env文件可能包含重要的私密信息,不应该提交到代码库。如果要更新线上环境其实也不难,使用 XShell 直接将.env文件拖拽到线上项目根目录即可(先删除项目里已经存在的.env文件,不然拖不进去)

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!