【问题标题】:WebP support with AWS ElasticBeanstalk使用 AWS ElasticBeanstalk 支持 WebP
【发布时间】:2016-08-02 12:34:22
【问题描述】:

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

【问题讨论】:

    标签: amazon-web-services amazon-elastic-beanstalk webp


    【解决方案1】:

    您需要执行安装后部署。 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 (4 of 6) 和 AppDeployPostHook (1 of 2)。它看起来像这样:

    [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,这就是我们正在寻找的内容,如果您@ 987654327@ 你会找到 appdeploy 目录,cd appdeploy,然后是ls,你会得到两个 pre 和 enact 目录。这看起来很普通,但确实很棒,因为现在我们知道 eb 在哪里寻找它正在运行的脚本。由于 AppDeployPreHook 脚本是从“pre”目录执行的,我们知道我们需要一个“post”目录来使用 eb 正在运行的 AppDeployPostHook 执行命令后部署。现在我们知道该做什么了,我们可以开始编写我们的命令了。

    1. create_post_dir 第一步是使用 mkdir 命令在服务器上实际创建“post”目录。 mkdir "/opt/elasticbeanstalk/hooks/appdeploy/post" 将为我们执行此操作,因此我们将其创建为命令。
    2. files 文件配置允许我们通过 ElasticBeanstalk 在目录中创建文件。非常方便我们的目的! files 操作的第一行为我们提供了要创建的文件的名称。我们将创建一个 shell 脚本来执行命令,你可以随意调用它,但我会从 99 开始,然后继续。我们将创建的这个 shell 脚本称为“99_install_libwebp.sh”。
    3. 文件设置 接下来的三行设置文件设置。确保 root 拥有它们并且有 000755'd。
    4. 文件内容 这是我们正在创建的文件的内容。直线前进。把你的 shell 脚本放在那里,你就可以开始了。
    5. 加载环境变量 我们选择加载 eb 环境变量,这样我们的脚本就可以知道应用程序的当前版本在哪里。它通常位于 /var/app/current 中,但也可能位于其他位置,具体取决于各种因素。我们将使用环境变量让我们的生活更轻松。
    6. 更改到我们当前的应用目录我们将 cd 到我们当前的应用目录,这样我们就可以做我们在这里要做的事情了。
    7. 获取我们想要的包使用wget获取我们想要的libwebp
    8. 解包不言自明
    9. 切换到包目录 现在我们已经解压了包,我们可以切换到包目录了。
    10. 做我们需要做的事情我们现在可以运行我们的 ./configure、make 和 make install。

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

    我添加了我部署到 Github 的代码,也便于参考。 https://github.com/hephalump/testphp

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

    【讨论】:

    • 工作就像一个魅力。非常感谢!
    猜你喜欢
    • 2019-01-18
    • 2011-07-31
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    相关资源
    最近更新 更多