【问题标题】:Elastic Beanstalk: `.ebextensions` not getting executedElastic Beanstalk:`.ebextensions` 未执行
【发布时间】:2020-07-24 01:10:46
【问题描述】:

我正在向 Beanstalk 部署一个 PHP 应用程序,一切似乎都很好,但是我的 .ebextensions 配置文件似乎没有运行。

我只有一个配置文件,应该创建一个文件,然后重新加载 nginx。
/my-project/.ebextensions/nginx.config:

files:
  "/etc/nginx/conf.d/elasticbeanstalk/extend-nginx.conf" :
    mode: "000755"
    owner: root
    group: root
    content: |
      add_header X-Frame-Options "SAMEORIGIN";
      add_header X-XSS-Protection "1; mode=block";
      add_header X-Content-Type-Options "nosniff";

      location / {
          try_files $uri $uri/ /index.php?$query_string;
      }

container_commands:
    reload_nginx:
        command: "sudo service nginx reload"

我的架构目前是:
1. CodePipeline 连接到 GitHub,每次更新 master 时都会将应用程序部署到 CodeDeploy。
2. CodeDeploy 从 CodePipeline 接收部署。
3. CodeDeploy 将其安装到 Elastic Beanstalk 实例。

以上所有步骤都可以正常工作。我只是不明白为什么.ebextensions 中的配置文件没有按预期创建文件。

注意:我已通过手动下载其中一个修订版并检查,确认 .ebextensions 文件夹位于修订版 .zip 的根目录中。

【问题讨论】:

  • 您通过ssh进入实例并验证文件没有被创建?还是只是 nginx 上的配置没有更新?
  • 无论如何,我正在检查另一个我们做类似事情的项目,唯一的区别是我们没有指定modeownergroup,文件夹是.. .conf.d/file.conf,所以我们在 conf.d 上没有另一个文件夹,我们在没有 sudo 的情况下运行 service nginx reload,尝试更改这些,看看是否适合您,这是我们唯一的区别一个工作文件
  • 你有没有得到真正的答案@Musa?我也不想用户 sed,AWS 文档显然不起作用(至少对于 AL2)-> docs.aws.amazon.com/elasticbeanstalk/latest/dg/… 这正是您尝试过的

标签: amazon-web-services nginx amazon-elastic-beanstalk aws-code-deploy aws-codepipeline


【解决方案1】:

对我来说,我很困惑为什么我尝试创建的文件在部署时没有显示出来。部署出现错误,系统会因为错误而自动删除文件,而不是让它在失败时回滚到之前的状态时继续存在。这给了我一个错误的概念,即该文件从一开始就没有被创建。

我能够从/var/log/nginx/error.log 确定这一点,它给出了以下信息:

2020/07/29 20:11:36 [emerg] 23006#0: "gzip" directive is duplicate in /var/proxy/staging/nginx/conf.d/elasticbeanstalk/gzip.conf:1

这至少对我来说意味着,我需要覆盖 nginx.conf 而不是添加配置文件。 如果您没有看到文件被创建,请确保您的部署不会出错。

【讨论】:

    【解决方案2】:

    我可以参考以下链接,该链接描述了在 EB 环境中配置 nginx 反向代理的官方方法:

    [1] 配置代理服务器 - https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/nodejs-platform-proxy.html

    另一种选择是使用 'sed' 之类的命令来更新 nginx 配置,如下所示:

    container_commands:
        enable_websockets:
            command: |
                sed -i '/\s*proxy_set_header\s*Connection/c \
                        proxy_set_header Upgrade $http_upgrade;\
                        proxy_set_header Connection "upgrade";\
                ' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf
    

    【讨论】:

    • 您链接的文档是针对 Node 的,更何况它和我现在拥有的几乎相同......我不想使用 sed。
    【解决方案3】:

    尝试简单地将这个文件放入.ebextensions/nginx/conf.d/elasticbeanstalk 而不使用脚本。

    至少 Java SE 平台是这样工作的:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-se-nginx.html。我认为这对于 PHP 来说并没有什么不同。

    还在您的 EC2 实例上检查日志文件的输出(cfn-init.log、cfn-init-cmd.log 等)。

    【讨论】:

    • 我试过你的方法,但似乎也不起作用。我检查了/var/log/cfn-init.log 文件,它说“reload-nginx”命令成功。所以它实际上是在运行 reload 命令,但是文件并没有生成。
    猜你喜欢
    • 2020-02-28
    • 2016-08-10
    • 2018-06-05
    • 2020-08-17
    • 2015-12-09
    • 2017-05-24
    • 2014-07-31
    • 2016-05-12
    • 2017-06-22
    相关资源
    最近更新 更多