4

我正在尝试配置我的 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

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

帮助将不胜感激,谢谢!:)

4

3 回答 3

5

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

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

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

如果test结果是true, ie exit(0),则command执行 - 否则不执行。请注意,退出代码0在 shell 上下文中表示“无错误”。

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

于 2014-01-21T08:31:03.057 回答
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,以便安装生效。

于 2013-03-20T08:57:00.237 回答
1

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

# ~/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;
于 2013-04-19T15:14:44.253 回答