从 Elastic Beanstalk 安装 PHP 模块
Posted
技术标签:
【中文标题】从 Elastic Beanstalk 安装 PHP 模块【英文标题】:installing PHP module from Elastic Beanstalk 【发布时间】: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
但我不太了解如何执行此特定任务
我们将不胜感激,谢谢! :)
【问题讨论】:
【参考方案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;
【讨论】:
以上是关于从 Elastic Beanstalk 安装 PHP 模块的主要内容,如果未能解决你的问题,请参考以下文章
AWS Elastic Beanstalk 在 url 中插入文件夹
检查 Elastic Beanstalk JVM 堆的最佳方法
AWS Elastic Beanstalk CLI 安装错误
text 在Elastic Beanstalk上安装telegraf代理