AWS ElasticBeanstalk 对 WebP 的支持
WebP support with AWS ElasticBeanstalk
我试图通过 EB 支持使用 webp 格式,但是它没有按预期工作...
我在 .ebextensions 中创建了一个 .config 文件:
commands:
01-command:
command: wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-0.5.0.tar.gz
02-command:
command: tar xvzf libwebp-0.5.0.tar.gz
03-command:
command: cd libwebp-0.5.0
04-command:
command: ./configure
05-command:
command: make
06-command:
command: sudo make install
但是在部署时出现了这个错误:
ERROR: Command failed on instance. Return code: 127 Output: /bin/sh: ./configure: No such file or directory.
我是不是做错了什么?
(环境: 64bit Amazon Linux 2015.09 v2.0.6 运行 PHP 5.6)
您需要执行安装 post 部署。 AWS 还没有真正记录如何执行命令 post 部署,所以我会在这里这样做。
commands:
create_post_dir:
command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post"
ignoreErrors: true
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/99_install_libwebp.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
. /opt/elasticbeanstalk/support/envvars
cd $EB_CONFIG_APP_CURRENT
wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-0.5.0.tar.gz
tar xvzf libwebp-0.5.0.tar.gz
cd libwebp-0.5.0
sudo ./configure
sudo make
sudo make install
正如我提到的,AWS 并没有真正记录您可以在 ElasticBeanstalk post 部署上实际执行脚本。如果您查看 eb-commandprocessor.log 文件,您将看到 eb 查找 AppDeployPreHook(6 个中的 4 个)和 AppDeployPostHook(2 个中的 1 个)。它看起来像这样:
[2016-04-13T14:15:22.955Z] DEBUG [8851] : Loaded 6 actions for stage 0.<br>
[2016-04-13T14:15:22.955Z] INFO [8851] : Running 1 of 6 actions: InfraWriteConfig...<br>
[2016-04-13T14:15:22.962Z] INFO [8851] : Running 2 of 6 actions: DownloadSourceBundle...<br>
[2016-04-13T14:15:23.606Z] INFO [8851] : Running 3 of 6 actions: EbExtensionPreBuild...<br>
[2016-04-13T14:15:24.229Z] INFO [8851] : Running 4 of 6 actions: AppDeployPreHook...<br>
[2016-04-13T14:15:28.469Z] INFO [8851] : Running 5 of 6 actions: EbExtensionPostBuild...<br>
[2016-04-13T14:15:28.970Z] INFO [8851] : Running 6 of 6 actions: InfraCleanEbextension...<br>
[2016-04-13T14:15:28.974Z] INFO [8851] : Running stage 1 of command CMD-AppDeploy...<br>
[2016-04-13T14:15:28.974Z] DEBUG [8851] : Loaded 2 actions for stage 1.<br>
[2016-04-13T14:15:28.974Z] INFO [8851] : Running 1 of 2 actions: AppDeployEnactHook...<br>
[2016-04-13T14:15:29.600Z] INFO [8851] : Running 2 of 2 actions: AppDeployPostHook...<br>
[2016-04-13T14:16:42.048Z] INFO [8851] : Running AddonsAfter for command CMD-AppDeploy... <br>
那个 "AppDeployPostHook" 告诉我们它正在搜索要 运行 post 部署的脚本。您可以在服务器上的 /opt/elasticbeanstalk
目录中找到 eb 部署脚本,如果您 ssh 进入并在该目录中 ls
您会找到 hooks
,这就是我们正在寻找的对于,如果你 cd hooks
你会找到 appdeploy 目录,cd appdeploy
然后 ls
你会得到两个目录 pre 和 enact。这看起来很普通,但确实很棒,因为现在我们知道 eb 在哪里寻找脚本,它是 运行ning。由于 AppDeployPreHook 脚本是从 "pre" 目录执行的,我们知道我们需要一个 "post" 目录来执行命令 post 部署,其中 eb 是 运行ning .现在我们知道要做什么了,我们可以开始编写命令了。
- create_post_dir 第一步是使用 mkdir 命令在服务器上实际创建 "post" 目录。
mkdir "/opt/elasticbeanstalk/hooks/appdeploy/post"
会为我们做这些,所以我们将创建它作为命令。
- files 文件配置允许我们通过 ElasticBeanstalk 在目录中创建文件。对我们的目的来说非常方便!文件操作的第一行为我们提供了要创建的文件的名称。我们将创建一个 shell 脚本来执行命令,您可以随意调用它,但我会从 99 开始,然后继续。我们将创建的这个 shell 脚本称为“99_install_libwebp.sh”。
- 文件设置 接下来的三行设置文件设置。确保 root 拥有它们并且有 000755'd。
- 文件内容 这是我们正在创建的文件的内容。直截了当。将您的 shell 脚本放在那里,您就可以开始了。
- 加载环境变量 我们选择加载 eb 环境变量,这样我们的脚本就可以知道应用程序的当前版本在哪里。它通常位于 /var/app/current 中,但也可能位于其他位置,具体取决于多种因素。我们将使用环境变量让我们的生活更轻松。
- 切换到我们当前的应用程序目录我们将 cd 到我们当前的应用程序目录,这样我们就可以做我们在这里要做的事情了。
- 获取我们想要的包使用wget获取我们想要的libwebp
- 解压包一目了然
- 切换到包目录 现在我们已经解压了包,我们可以切换到包目录了。
- 做我们需要做的事我们现在可以运行我们的 ./configure、make 和 make install。
就是这样。您可以使用隐蔽的 AppDeployPostHook 运行 几乎任何您需要的 post 部署命令。如果你需要安装包、重启服务或做任何其他事情,超级有用 post 部署。
我将部署的代码添加到 Github,以便于参考。 https://github.com/hephalump/testphp
注意:我在一个略有不同的环境中成功地做到了这一点 运行。我使用 ElasticBeanstalk 在 64 位 Amazon Linux 2016.03 v2.1.0 上使用最新环境版本 PHP 5.6 部署了一个新的 PHP 应用程序;您正在使用的环境类型对我来说不可用...实际上,这是唯一可用的 PHP 5.6 版本,所以我选择了它。
我试图通过 EB 支持使用 webp 格式,但是它没有按预期工作...
我在 .ebextensions 中创建了一个 .config 文件:
commands:
01-command:
command: wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-0.5.0.tar.gz
02-command:
command: tar xvzf libwebp-0.5.0.tar.gz
03-command:
command: cd libwebp-0.5.0
04-command:
command: ./configure
05-command:
command: make
06-command:
command: sudo make install
但是在部署时出现了这个错误:
ERROR: Command failed on instance. Return code: 127 Output: /bin/sh: ./configure: No such file or directory.
我是不是做错了什么? (环境: 64bit Amazon Linux 2015.09 v2.0.6 运行 PHP 5.6)
您需要执行安装 post 部署。 AWS 还没有真正记录如何执行命令 post 部署,所以我会在这里这样做。
commands:
create_post_dir:
command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post"
ignoreErrors: true
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/99_install_libwebp.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
. /opt/elasticbeanstalk/support/envvars
cd $EB_CONFIG_APP_CURRENT
wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-0.5.0.tar.gz
tar xvzf libwebp-0.5.0.tar.gz
cd libwebp-0.5.0
sudo ./configure
sudo make
sudo make install
正如我提到的,AWS 并没有真正记录您可以在 ElasticBeanstalk post 部署上实际执行脚本。如果您查看 eb-commandprocessor.log 文件,您将看到 eb 查找 AppDeployPreHook(6 个中的 4 个)和 AppDeployPostHook(2 个中的 1 个)。它看起来像这样:
[2016-04-13T14:15:22.955Z] DEBUG [8851] : Loaded 6 actions for stage 0.<br>
[2016-04-13T14:15:22.955Z] INFO [8851] : Running 1 of 6 actions: InfraWriteConfig...<br>
[2016-04-13T14:15:22.962Z] INFO [8851] : Running 2 of 6 actions: DownloadSourceBundle...<br>
[2016-04-13T14:15:23.606Z] INFO [8851] : Running 3 of 6 actions: EbExtensionPreBuild...<br>
[2016-04-13T14:15:24.229Z] INFO [8851] : Running 4 of 6 actions: AppDeployPreHook...<br>
[2016-04-13T14:15:28.469Z] INFO [8851] : Running 5 of 6 actions: EbExtensionPostBuild...<br>
[2016-04-13T14:15:28.970Z] INFO [8851] : Running 6 of 6 actions: InfraCleanEbextension...<br>
[2016-04-13T14:15:28.974Z] INFO [8851] : Running stage 1 of command CMD-AppDeploy...<br>
[2016-04-13T14:15:28.974Z] DEBUG [8851] : Loaded 2 actions for stage 1.<br>
[2016-04-13T14:15:28.974Z] INFO [8851] : Running 1 of 2 actions: AppDeployEnactHook...<br>
[2016-04-13T14:15:29.600Z] INFO [8851] : Running 2 of 2 actions: AppDeployPostHook...<br>
[2016-04-13T14:16:42.048Z] INFO [8851] : Running AddonsAfter for command CMD-AppDeploy... <br>
那个 "AppDeployPostHook" 告诉我们它正在搜索要 运行 post 部署的脚本。您可以在服务器上的 /opt/elasticbeanstalk
目录中找到 eb 部署脚本,如果您 ssh 进入并在该目录中 ls
您会找到 hooks
,这就是我们正在寻找的对于,如果你 cd hooks
你会找到 appdeploy 目录,cd appdeploy
然后 ls
你会得到两个目录 pre 和 enact。这看起来很普通,但确实很棒,因为现在我们知道 eb 在哪里寻找脚本,它是 运行ning。由于 AppDeployPreHook 脚本是从 "pre" 目录执行的,我们知道我们需要一个 "post" 目录来执行命令 post 部署,其中 eb 是 运行ning .现在我们知道要做什么了,我们可以开始编写命令了。
- create_post_dir 第一步是使用 mkdir 命令在服务器上实际创建 "post" 目录。
mkdir "/opt/elasticbeanstalk/hooks/appdeploy/post"
会为我们做这些,所以我们将创建它作为命令。 - files 文件配置允许我们通过 ElasticBeanstalk 在目录中创建文件。对我们的目的来说非常方便!文件操作的第一行为我们提供了要创建的文件的名称。我们将创建一个 shell 脚本来执行命令,您可以随意调用它,但我会从 99 开始,然后继续。我们将创建的这个 shell 脚本称为“99_install_libwebp.sh”。
- 文件设置 接下来的三行设置文件设置。确保 root 拥有它们并且有 000755'd。
- 文件内容 这是我们正在创建的文件的内容。直截了当。将您的 shell 脚本放在那里,您就可以开始了。
- 加载环境变量 我们选择加载 eb 环境变量,这样我们的脚本就可以知道应用程序的当前版本在哪里。它通常位于 /var/app/current 中,但也可能位于其他位置,具体取决于多种因素。我们将使用环境变量让我们的生活更轻松。
- 切换到我们当前的应用程序目录我们将 cd 到我们当前的应用程序目录,这样我们就可以做我们在这里要做的事情了。
- 获取我们想要的包使用wget获取我们想要的libwebp
- 解压包一目了然
- 切换到包目录 现在我们已经解压了包,我们可以切换到包目录了。
- 做我们需要做的事我们现在可以运行我们的 ./configure、make 和 make install。
就是这样。您可以使用隐蔽的 AppDeployPostHook 运行 几乎任何您需要的 post 部署命令。如果你需要安装包、重启服务或做任何其他事情,超级有用 post 部署。
我将部署的代码添加到 Github,以便于参考。 https://github.com/hephalump/testphp
注意:我在一个略有不同的环境中成功地做到了这一点 运行。我使用 ElasticBeanstalk 在 64 位 Amazon Linux 2016.03 v2.1.0 上使用最新环境版本 PHP 5.6 部署了一个新的 PHP 应用程序;您正在使用的环境类型对我来说不可用...实际上,这是唯一可用的 PHP 5.6 版本,所以我选择了它。