从Elastic Beanstalk安装PHP模块

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,但我不太明白如何完成这个具体任务。
希望得到帮助,谢谢! :)
3个回答

5

pecl 不是亚马逊 Linux 上的有效软件包管理器,因此不能在 .ebextensions 配置文件的 packages 键下使用。

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

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

如果“测试”结果为“真”,即“exit(0)”,则执行“命令”-否则不执行。请注意,在shell上下文中,“0”的退出代码意味着“无错误”。请参见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,以便安装生效。

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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接