从Elastic Beanstalk安装PHP模块

从Elastic Beanstalk安装PHP模块,php,mongodb,amazon-elastic-beanstalk,Php,Mongodb,Amazon Elastic Beanstalk,我正在尝试将AWS Elastic Beanstalk配置为与mongo一起使用,我所需要做的就是为PHP安装mongo驱动程序并更新PHP.ini文件 要做到这一点,通常我会使用ssh连接到EC2并运行: sudo pecl install mongo 但是这需要使用定制的AMI,这不是最好的方法 最好使用配置文件将所需软件安装到标准AMI上 为此,我做了以下工作: 已创建目录.ebextensions 已创建文件mongo.config 我在信中说了以下几点: packages: pec

我正在尝试将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.

所以我想知道为了安装mongo扩展,这个配置文件需要如何布局

我在这里读到了信息:

但我不太明白如何完成这项具体任务


非常感谢您的帮助,谢谢!:)

我已经找到了答案,并想与大家分享我的发现。感谢Hudku()的精彩文章:

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,以便安装生效

多亏了上面的答案,我才完成了同样的事情,我发现对于那些感兴趣的人来说,可以用更少的行和更少的文件来完成

# ~/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;

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);\""
如果
测试
结果为
,即
退出(0)
,则执行
命令
,否则不执行。请注意,退出代码
0
在shell上下文中表示“无错误”

另请参见中的说明

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