我最近一直在使用 Opsworks,它通过 GIT 集成在我的服务器上部署应用程序给我留下了深刻的印象。但是我有一个使用 PHP 5.4 的外部库的要求 > Amazon Linux 产品安装了 PHP5.3。现在我创建了一个基于 Amazon Linux 的单独的 ec2 实例并升级了 PHP 版本,我实际上使用自定义用户数据来完成这个。然后我将其保存为自定义 AMI。当我将此设置为 AMI 以在 opsworks 中用于实例时,启动服务器时会出现错误,这些错误是由 Apache 的冲突版本等引起的。所以看起来我的 AMI 几乎被忽略了,或者它构建了我的 AMI 并使用了自定义数据,然后尝试运行 CHEF 食谱。然后我相信这实际上可能是厨师食谱未能安装他们需要的东西,因此出现错误。
我已经尝试对默认使用 PHP 5.5 的 Ubuntu AMI 做同样的事情,但我在尝试为我的应用程序目录启用 mod_rewrite 时遇到了单独的问题。虽然我正在尝试解决这个问题以及解决我的 Amazon Linux AMI 问题
所以我的问题是,厨师食谱是否在我的 user_data 之后运行?或者我理论上是否能够卸载 Chef 将在我的自定义 user_data 中安装的所有内容,然后安装我的实际依赖项?我目前对 Chef 还不够熟悉,无法尝试编辑默认的 PHP-APP-Server 配方来做我需要的事情(我也不确定我需要从 AWS GitHub 存储库中获得什么来做到这一点)
或者有人有更好的想法吗?
据我了解,您需要修改您的厨师食谱(即学习一点厨师)以更改安装的 PHP 版本。否则你会继续遇到问题,即使你安装了不同的 PHP 版本,厨师也会自动尝试恢复它,因为这是它应该做的。
我相信 PHP 5.5 现在作为 php55 在 AL repos 中可用。
您可以在此处通过您的厨师食谱覆盖 PHP 包:https ://github.com/aws/opsworks-cookbooks/blob/release-chef-11.4/mod_php5_apache2/attributes/default.rb#L19
您可以使用自定义 JSON 或使用属性文件覆盖它:http: //docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook-installingcustom-components-attributes.html
不过,您很可能需要先添加自定义配方以删除旧版本的 php,例如:在 Amazon Linux 上使用 yum 更新 PHP