在AWS Elastic Beanstalk

时间:2015-10-25 10:09:23

标签: symfony nginx docker environment-variables elastic-beanstalk

部署多容器docker symfony应用程序的正确方法是什么?

到目前为止,我有以下知识库和情况:

  1. 我的docker-compose环境在本地工作,由nginx,php5-fpm,memcached,mysql和mailcatcher组成
  2. 我正在使用多容器EB应用程序,目标是使用单独的配置运行单独的“测试”和“生产”环境
  3. 我已经知道我不能简单地在EB中构建整个东西并且必须已经构建了图像,因此我在这里有所有这些:https://hub.docker.com/u/sunbake/dashboard/
  4. 我知道我可以为每个EB环境设置自定义环境变量
  5. 我知道SYMFONY__WHATEVER_NAME可以很容易地用作应用程序参数
  6. 现在真正困扰我的是什么,并且询问如何以更好的方式做到这一点?

    1. 插入敏感值(如数据库密码)似乎有点可疑 - 如果不出意外,HTML输入字段值可以存储在浏览器缓存/历史记录中
    2. 为整个操作系统设置敏感数据的环境变量大致相同 - 想象某人获得任何类型的系统访问权限然后引用env变量。即使这是唯一可行的事情,但要获得一个不好的明文密码
    3. 为了通过nginx将环境变量传递到通过php-fpm运行的PHP skript,nginx配置文件必须传递它们。换句话说,如果我想使用这种方法,我必须在我的nginx.conf中有硬编码的参数(是的,没有值,但继续阅读)。
    4. 第8个子弹是我的全部观点和问题:

      1. 鉴于本文中的第3个子弹,这意味着我每次想要添加参数时都必须重建整个图像,这可以完成,但似乎是一个开销,也意味着我无法使用多个应用程序的图像,可能有不同的参数
      2. 鉴于图像及其来源必须是公开的(我不打算在此用例中支付docker hub),它还会公开应用程序的部分工作方式。例如,如果潜在的攻击者可以某种方式执行代码来列出我的env变量,他就知道要查找哪些env变量。
      3. 我希望使用整个bitbucket-docker-dockerhub-eb在多个环境中自动部署:

        • 在具有一组特定docker镜像的本地主机上进行开发(mailcatcher,本地mysql实例,已启用xdebug)
        • AWS EB上的测试环境,其RDS中没​​有mailcatcher和数据库
        • 生产环境与测试环境相同,但没有xdebug和一些小的优化调整

        当然必须有办法如何做到这一点。我相信我走得很远,但我有些不对劲。任何提示都将不胜感激。

1 个答案:

答案 0 :(得分:0)

这篇文章完全值得TL; DR部分

  1. 您可以从Dockerhub切换到Tutom,后者提供10个免费的私人存储库
  2. 您不应该在docker中放置硬编码参数。这与拥有码头图像的整个观点相矛盾
  3. 您应该使用EB环境变量在运行时动态添加/删除env变量。这将使您无需每次都重新构建一个docker(您只需要从aws控制台重新启动应用服务器,这只需要一分钟)
  4. 您可以加密env变量的值,并在代码中解密它们。这样他们仍然是个秘密。