【问题标题】:installing PHP module from Elastic Beanstalk从 Elastic Beanstalk 安装 PHP 模块
【发布时间】:2013-03-05 23:46:42
【问题描述】:

我正在尝试配置我的 AWS Elastic Beanstalk 以使用 mongo,我需要做的就是安装 PHP 的 mongo 驱动程序并更新 php.ini 文件

为此,通常我会通过 ssh 进入 EC2 并运行:

sudo pecl install mongo

但这需要使用自定义 AMI,这不是最好的方法。

最好使用配置文件将所需的软件安装到标准 AMI 上。

为此,我做了以下工作: 创建目录 .ebextensions 创建文件 mongo.config

我在里面放了以下内容:

packages: 
pecl: install mongo

但是在部署时,我收到以下错误:

"option_settings" in one of the configuration files failed validation. More details to follow.

'null' values are not allowed in templates

所以我想知道这个配置文件需要如何布局才能安装 mongo 扩展?

我已经阅读了这里的信息:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html

但我不太了解如何执行此特定任务

我们将不胜感激,谢谢! :)

【问题讨论】:

    标签: php mongodb amazon-elastic-beanstalk


    【解决方案1】:

    pecl 不是 Amazon Linux 上的有效程序包管理器,因此不能在 .ebextensions 配置的 packages 键下使用。

    要安装 PECL 包,只需在 commands 键下添加一个命令即可。为了避免 Beanstalk 在后续部署中尝试安装扩展两次,请在 test 键中添加一个 PHP 控制台命令,以检查扩展是否已安装:

    commands:
      install_mongo_driver:
        command: pecl install mongo
        test: "php -r \"exit(extension_loaded('mongo') ? 1 : 0);\""
    

    如果test 的结果是true,即exit(0),那么command 会被执行——否则不会。请注意,0 的退出代码在 shell 上下文中表示“没有错误”。

    另见http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-commands的描述。

    【讨论】:

      【解决方案2】:

      我想通了,我想我会分享我的发现。感谢 Hudku (http://blog.hudku.com/2013/02/innocuous-looking-evil-devil.html#elastic-beanstalk.config) 的精彩文章:

      1) 创建 myapp.config 2)输入以下内容

      packages:
          yum:
              dos2unix: []
      
      
      container_commands:
          01-command:
              command:        rm -rf /myapp/ebextensions
      
          02-command:
              command:        mkdir -p /myapp/ebextensions
      
          03-command:
              command:        cp -R .ebextensions/* /myapp/ebextensions/
      
          04-command:
              command:        dos2unix -k /myapp/ebextensions/mongo.sh
      
          05-command:
              command:        chmod 700 /myapp/ebextensions/mongo.sh
      
          06-command:
              command:        bash /myapp/ebextensions/mongo.sh
      

      然后创建 mongo.sh 文件并在其中放入如下内容:

      #!/bin/bash
      
      if [ ! -f /mongostatus.txt ];
      then
          pecl install mongo
          echo "mongo extension installed" > /mongostatus.txt
          apachectl restart
      fi
      

      这将安装 mongo php 扩展并重新启动 apache,以便安装生效。

      【讨论】:

        【解决方案3】:

        感谢上面的答案,我刚刚完成了同样的事情,并且发现对于那些感兴趣的人来说,它可以用更少的行和更少的文件来完成......

        # ~/project/.ebextensions/project.config
        # Logger messages can be viewed in /var/log/messages
        
        files:
            "/tmp/test.sh":
                content: |
                    # This file will be created and can then
                    # be executed by a command call below.
                    logger TEST FILE CALLED
        
        commands:
            01-command:
                command: logger CALLING TEST FILE; sh /tmp/test.sh;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-08-27
          • 2018-07-01
          • 2014-07-31
          • 2018-05-25
          • 2018-05-12
          • 2013-08-16
          • 2020-07-14
          • 2014-09-15
          相关资源
          最近更新 更多