如何使用配置文件 (.ebextensions) 在 AWS Elastic Beanstalk 上安装 PHP IMAP 扩展?

Posted

技术标签:

【中文标题】如何使用配置文件 (.ebextensions) 在 AWS Elastic Beanstalk 上安装 PHP IMAP 扩展?【英文标题】:How to Install PHP IMAP Extension on AWS Elastic Beanstalk Using Configuration Files (.ebextensions)? 【发布时间】:2017-12-08 12:32:04 【问题描述】:

有谁知道如何使用配置文件 (.ebextensions) 在 AWS Elastic Beanstalk 上安装和启用 php IMAP 扩展?

我正在使用运行 PHP 7.0.16 的 64 位 Amazon Linux 2017.03 v2.4.0

我尝试了以下几种方法:

第一种方式 我尝试在配置文件中使用files,但它不起作用,配置文件名为phpini.config,位于.ebextensions 目录中,设置如下:

files:
  "/etc/php.d/phpimap.ini":
    mode: "000755"
    owner: root
    group: root
    content: |
      extension=imap.so

通过显示/etc/php-7.0.d/phpimap.ini 将附加的.ini 文件解析为phpinfo(),但不会安装IMAP。

第二种方式 使用container_command 安装 php-imap 但出现错误。

container_commands:
  install_php_imap:
    command: yum install php55-imap

错误如下图:

第三种方式 使用组合 commandsfiles,它只会成功安装 IMAP 和依赖项(php common),但它不会激活 IMAP

一个。通过添加以下脚本在我的 .ebextensions 中创建 installdependencies.config:

commands:
  install_phpcommon:
    test: '[ ! -f /etc/php.d/curl.ini ] && echo "php common not installed"'
    command:
      yum -y install https://archipelagointernational.s3.amazonaws.com/libs/php70w-common-7.0.16-1.w6.x86_64.rpm

b.通过添加以下脚本在我的 .ebextensions 中创建 phpini.config:

commands:
  install_phpimap:
    test: '[ ! -f /etc/php.d/imap.ini ] && echo "php imap not installed"'
    command:
      yum -y install https://archipelagointernational.s3.amazonaws.com/libs/php70w-imap-7.0.16-1.w6.x86_64.rpm

files:
  "/etc/php.d/imap.ini":
    mode: "000755"
    owner: root
    group: root
    content: |
      extension=imap.so

4th Way 我正在通过将upload_max_filesizepost_max_sizeextension=imap.so 添加到zzzphp.ini 进行测试,并且只包含upload_max_filesizepost_max_size 两个值。 extension=imap.so 未包含在 zzzphp.ini 文件中。

下面是phpini.config.ebextensions中的脚本:

commands:
  install_phpimap:
    test: '[ ! -f /etc/php.d/imap.ini ] && echo "php imap not installed"'
    command:
      yum -y install https://archipelagointernational.s3.amazonaws.com/libs/php70w-imap-7.0.16-1.w6.x86_64.rpm

files:
  "/etc/php.d/zzzphp.ini":
    mode: "644"
    content: |
      upload_max_filesize = 50M
      post_max_size = 58M
      extension=imap.so

有什么建议吗?

提前致谢。

【问题讨论】:

【参考方案1】:

这对我有用,也使用ebextensions(我正在使用 PHP 7.2 运行一个容器,它应该适用于您的环境,相应地替换):

packages:
    yum:
        php72-imap: []

【讨论】:

【参考方案2】:

我遵循了这里的所有建议,但我的命令一直失败,因为我的作曲家需要 imap 支持并且容器命令在之后运行... 这对我有用:

packages:
    yum:
        php72-imap.x86_64: []

【讨论】:

【参考方案3】:

对我来说,phpini.config 中的以下代码解决了这个问题。请注意每个 php 版本的文件夹名称。我的 php 版本是 7.2,因此下面的代码有效:

commands:
  install_phpimap:
    test: '[ ! -f /etc/php-7.2.d/imap.ini ] && echo "php imap not installed"'
    command:
      sudo yum -y install php72-imap

files:
  "/etc/php-7.2.d/imap.ini":
    mode: "000755"
    owner: root
    group: root
    content: |
      extension=imap.so

【讨论】:

【参考方案4】:

终于成功了

在 .ebextensions 中创建两个文件,如下所示:

installdependencies.config,需要的话安装php common

commands:
  01_install_phpcommon:
    command:
      sudo yum -y install php70-common

phpini.config,安装php imap并启用imap

commands:
  02_install_phpimap:
    command:
      sudo yum -y install php70-imap

files:
  "/etc/php.d/zzzphp.ini":
    mode: "644"
    content: |
      extension=imap.so

【讨论】:

在我的情况下,添加 imap.so 元素给了我“模块 'imap' 已加载 - 未知 (0)”。我所需要的只是 imap 的 yum-install。【参考方案5】:

您在 php 的配置文件中包含了 php-imap 扩展,但这还不足以安装它。

您必须将一些内容传递给您选择的 EBS 配置方法,告诉它在系统级别安装 php-imap(或在该环境中调用的任何东西)。

【讨论】:

能否给我更多的技术细节?除了上述方法,我使用container_commands如下:container_commands: install_php_imap: command: yum install php55-imap但没有运气:(。它返回错误如下:[Instance: i-0e3225fd33d1d6e07] Command failed on instance. Return code: 1 Output: (TRUNCATED)...======== Install 1 Package (+9 Dependent packages) Total download size: 7.2 M Installed size: 23 M Is this ok [y/d/N]: Exiting on user command Your transaction was saved, rerun it with: yum load-transaction /tmp/yum_save_tx.2017-

以上是关于如何使用配置文件 (.ebextensions) 在 AWS Elastic Beanstalk 上安装 PHP IMAP 扩展?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 ebextensions 配置文件添加 nginx 缓存控制标头?

AWS Elastic Beanstalk - .ebextensions

使用 Rails 部署 AWS - .ebextensions 中的配置文件

AWS Elastic Beanstalk:如何在 ebextensions 中使用环境变量?

从 .ebextensions 配置文件访问 Elastic Beanstalk 环境属性

使用配置文件 (.ebextensions) 在自定义 VPC 中为 TCP 直通配置 Elastic Beanstalk 环境的负载均衡器