AWS ElasticBeanstalk 支持 WebP 格式

4

我尝试支持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

但是在部署时,我遇到了这个错误:

错误:实例上的命令失败。返回代码:127 输出:/ bin / sh:./ configure:没有那个文件或目录。

我做错了什么吗? (环境:运行PHP 5.6的64位Amazon Linux 2015.09 v2.0.6)

1个回答

3

您需要在部署后执行安装过程。AWS并没有真正记录如何在部署后执行命令,因此我将在此处进行说明。

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部署后执行脚本的方法。如果您查看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" 告诉我们它正在寻找脚本来运行部署后操作。您可以在服务器上的 /opt/elasticbeanstalk 目录中找到 eb 部署脚本,如果您 ssh 进入并在该目录上输入 ls,则会找到 hooks,这就是我们要找的内容,如果您 cd hooks,则会找到 appdeploy 目录,cd appdeploy 然后 ls,您将得到两个目录 pre 和 enact。这似乎很平凡,但实际上非常棒,因为现在我们知道了 eb 正在运行的脚本所在的位置。由于 AppDeployPreHook 脚本是从 "pre" 目录执行的,因此我们知道我们需要一个 "post" 目录来使用 AppDeployPostHook 在部署后执行命令。既然我们知道该怎么做了,我们就可以开始编写命令了。
  1. create_post_dir 第一步是实际上使用 mkdir 命令在服务器上创建 "post" 目录。 mkdir "/opt/elasticbeanstalk/hooks/appdeploy/post" 将为我们完成此操作,因此我们将其创建为命令。
  2. files files 配置允许我们通过 ElasticBeanstalk 在目录中创建文件。对于我们的目的非常方便! files 操作的第一行给出了要创建的文件名。我们将创建一个 shell 脚本来执行命令,您可以随意命名,但我建议从 99 开始并继续向后。我们将称这个正在创建的 shell 脚本为 "99_install_libwebp.sh"。
  3. File settings 接下来的三行设置文件设置。确保根拥有它们,并且它们是 000755 的。
  4. File Contents 这是我们正在创建的文件的内容。直截了当。将您的 shell 脚本放在那里,就可以了。
  5. Load environment vars 我们选择加载 eb 环境变量,以便我们的脚本可以知道应用程序的当前版本位于何处。通常在 /var/app/current 中,但根据各种因素可能在其他位置。我们将使用环境变量使生活变得更加轻松。
  6. Change to our current app directory 我们将 cd 到当前应用程序目录,以便我们可以做我们要做的事情。
  7. Get the package we want 使用 wget 获取我们想要的 libwebp
  8. Unpack the package 不言自明
  9. Change to the package directory 现在我们已经解压了包,我们可以切换到包目录。
  10. Do what we need to do 现在我们可以运行 ./configure、make 和 make install。

就是这样。您可以使用隐秘的AppDeployPostHook来运行几乎任何需要的部署后命令。如果需要安装软件包、重启服务或进行其他任何部署后操作,这将非常有用。

我还将我部署的代码添加到了Github上,以便轻松参考。https://github.com/hephalump/testphp

注意:我在稍微不同的环境下成功地完成了此操作。我使用ElasticBeanstalk部署了一个新的PHP应用程序,使用的是最新的环境版本,即64位Amazon Linux 2016.03 v2.1.0上的PHP 5.6;您正在使用的环境类型对我来说不可用作选项...实际上,这是唯一提供给我的PHP 5.6版本,所以我选择了它。


非常顺利地完成了工作。非常感谢! - Ben Moreton
这个回答被低估了!应该得到更多的赞!! - Sisir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接