我意识到没有 yum 包mod_xsendfile
(这是一个很大的遗憾),所以我想知道是否可以通过.ebextensions
配置来添加它,因为它需要下载和编译。
是否仅通过.ebextensions
配置就可以做到这一点,还是我需要创建和维护自定义 AMI 才能使其在 Elastic Beanstalk 上运行? 如果可能的话,如何在没有 yum 包的情况下配置它?
答案1
除了您自己的答案之外:
除了 httpd24-devel,您还需要安装 gcc,否则 apxs -cia mod_xsendfile.c 将失败。
答案2
值得庆幸的是,我设法仅使用配置就完成了配置.ebextensions
。我创建了以下配置文件...
packages:
yum:
httpd24-devel: []
commands:
xsendfile_download:
command: wget https://tn123.org/mod_xsendfile/mod_xsendfile.c
cwd: /home/ec2-user
ignoreErrors: true
xsendfile_install:
command: apxs -cia mod_xsendfile.c
cwd: /home/ec2-user
ignoreErrors: true
第一的,这确保正确版本的 httpd-devel 与 apxs 一起安装,这是编译 Apache 扩展所必需的。
由于apxs
默认情况下不包含在任何 EB 版本的 Amazon Linux 中,并且由于 php 5.6 的库存 AMI 包含 Apache 2.4,因此我们必须确保使用 httpd24 的特定 yum 包。
下一个,我们运行两个自定义命令:第一个命令下载 mod_xsendfile
到主目录(始终位于/home/ec2-user/
Amazon Linux 上),而第二个编译它。由于每次创建实例时都会发生这种情况,因此mod_xsendfile
在 apache 启动时始终可以使用。
事实证明这实际上是一个非常简单的解决方案,它可以用于确保每次在 AWS Elastic Beanstalk 上创建新实例时下载和编译任何 Apache 包。
笔记:如果您想要使其更具容错性(例如,如果mod_xsendfile
在启动实例时链接处于离线状态),您可以将文件托管在其他地方,例如 S3,然后从那里加载它。
但这至少可以让它工作...不需要自定义 AMI!