请教部署在 docker (daocloud) 上的 Laravel 应用,如何做到开发环境和生产环境的 .env 配置参数分离?

2016-05-17 10:03:09 +08:00
 my101du
docker 初学者。

按照 daocloud 的官方教程,做了一个 Laravel 的镜像,然后用它部署了一个应用(从 conding.net 上抓取最新 push 的代码)。

因为本地的 .gitignore 文件里 .env 是排除的,所以在 Dockerfile 里写了两句命令,一句是生成 .env 文件,一句是运行 php artisan key:generate

所以就导致每次更新应用,都会覆盖掉生产环境的 .env ,并且得不到我本地开发环境 .env 最新的一些配置参数。

我没有 daocloud 高级账号的“终端”权限,所以没法进去手动修改这个 .env 文件。

那么如何可以做到在开发环境和生产环境分别维护两个不同的 .env 呢?
2537 次点击
所在节点    问与答
9 条回复
kslr
2016-05-17 10:08:19 +08:00
不是有.env.example
my101du
2016-05-17 10:10:19 +08:00
@kslr 对,现在是在 Dockerfile 里写 CP .env.example app/.env 的。
你的意思是说,我直接把生产环境需要的参数写在 .env.example 里?但是这样和别人共享代码库的时候不是大家都能看到敏感的 appid , key 等信息了吗?
xujif
2016-05-17 10:34:56 +08:00
@my101du 也可以直接不要 env ,直接写在 docker-compose 里或者干脆直接写在 Dockerfile 里
xujif
2016-05-17 10:35:13 +08:00
不过需要修改 phpfpm 选项加载系统变量
gamexg
2016-05-17 12:23:33 +08:00
2 各方法,
1 、另建一个部署 docker 继承代码的那一个 docker ,然后这里面些配置文件。
2 、环境变量
zrp1994
2016-05-17 15:21:11 +08:00
@my101du
.env 文件是可以食用系统环境变量的
例如:
DB_PASSWORD="${123456}"
我自己的做法是把敏感的信息通过 docker-compose 的 env_file 参数暴露给 container ,然后.env 可以通过上面这种方式从环境变量里读取这些敏感信息。
zrp1994
2016-05-17 15:22:12 +08:00
@my101du
打错了,应该是
DB_PASSWORD="${SYS_ENV_VAR}"
zrp1994
2016-05-17 15:25:04 +08:00
@my101du
@xujif
确实需要修改 phpfpm 的配置,可以参考 https://github.com/ppoffice/docker-laravel-phpfpm/blob/master/Dockerfile#L6
我这里是把所有的环境变量都暴露给 docker ,当然你也可以选择性的暴露指定参数(参见: https://github.com/dylanlindgren/docker-laravel-phpfpm/blob/master/Dockerfile#L39
xujif
2016-05-17 16:14:06 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/279133

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX