【发布时间】:2016-01-24 12:47:41
【问题描述】:
重要提示:这个问题与 Symfony 和 Elastic Beanstalk Docker 平台的古老版本有关。环境变量在 Symfony 4+ 中是一等公民,因此下面描述的问题不再存在。
部署多容器 docker symfony 应用程序的正确方法是什么?
到目前为止,我有以下知识库和情况:
- 我的 docker-compose 环境在本地工作,由 nginx、php5-fpm、memcached、mysql 和 mailcatcher 组成
- 我正在使用多容器 EB 应用程序,目标是使用单独的配置运行单独的“测试”和“生产”环境
- 我已经知道我不能简单地在 EB 中构建整个东西并且必须已经构建了图像,因此我将它们全部放在了这里:https://hub.docker.com/u/sunbake/dashboard/
- 我知道我可以为每个 EB 环境设置自定义环境变量
- 我知道 SYMFONY__WHATEVER_NAME 可以很容易地用作应用程序参数
现在真正困扰我并正在询问如何以更好的方式做到这一点?
- 插入数据库密码等敏感值似乎有点可疑 - 如果不出意外,HTML 输入字段值可以存储在浏览器缓存/历史记录中
- 为整个操作系统设置包含敏感数据的环境变量几乎是一样的——想象一下有人获得任何类型的系统访问权限,然后打印环境变量。即使这是唯一可能做的事情,得到一个不好的明文密码
- 为了通过 nginx 获取环境变量到通过 php-fpm 运行的 PHP 脚本,nginx 配置文件必须传递它们。换句话说,如果我想使用这种方法,我必须在我的 nginx.conf 中有硬编码参数(是的,没有值,但请继续阅读)。
第八条是我的重点和问题:
- 鉴于本文中的第 3 个项目符号,这意味着我每次要添加参数时都必须重建整个图像,这可以做到,但似乎是开销,也意味着我不能使用多个应用程序的图像,可能具有不同的参数
- 鉴于图像及其来源必须是公开的(在此用例中我不打算为 docker hub 付费),它还公开了应用程序的部分工作原理。例如,如果潜在的攻击者能够以某种方式执行代码来列出我的 env 变量,他就会知道要准确查找哪些 env 变量。
我希望使用整个 bitbucket-docker-dockerhub-eb 在多个环境中自动部署:
- 在本地主机上使用一组特定的 docker 映像(mailcatcher、本地 mysql 实例、启用 xdebug)进行开发
- AWS EB 上的测试环境,RDS 中没有邮件捕获器和数据库
- 生产环境与测试环境相同,但没有 xdebug 和一些小的优化调整
当然,必须有一种方法来解决这个问题。我相信我已经走了很远,但是我弄错了一些地方。任何提示将不胜感激。
【问题讨论】:
标签: symfony nginx docker environment-variables amazon-elastic-beanstalk