我正在尝试配置我的AWS Elastic Beanstalk以使用mongo,我需要做的就是为PHP安装mongo驱动程序并更新php.ini文件
要做到这一点,通常我会进入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
但我不太了解如何执行此特定任务
帮助将不胜感激,谢谢! :)
答案 0 :(得分:4)
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
,即exit(0)
,则command
会被执行 - 否则不会。请注意,退出代码0
在shell上下文中表示“无错误”。
答案 1 :(得分: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,以便安装生效。
答案 2 :(得分: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;