Elastic Beanstalk - 在特定环境中设置 .htpasswd

Posted

技术标签:

【中文标题】Elastic Beanstalk - 在特定环境中设置 .htpasswd【英文标题】:Elastic Beanstalk - set .htpasswd on specific environment 【发布时间】:2014-04-27 01:24:45 【问题描述】:

我在 Elastic Beanstalk 中在两个环境(生产环境和舞台环境)中配置了一个 php 网站。在每个环境中,我都有一个 APPLICATION_ENV 环境变量集,用于标识代码运行的环境。我不希望公众可以访问我的舞台网站,我想在这个环境中放置一个 htpasswd,而不是在生产环境中。

为了实现这一点,我在 .ebextensions 中创建了一个配置。整个 .ebextensions 文件夹包含三个文件:

    01stage.config

    container_commands:
      command-01:
        command: "/bin/bash .ebextensions/set_stage_htpasswd.sh"
        leader_only: true
    

    set_stage_htpasswd.sh

    #!/bin/bash
    if [ "$APPLICATION_ENV" == "stage" ]; then
      cp /var/app/current/.ebextensions/.htpasswd /var/app/current/ 
    fi
    

    .htpasswd

    my_username:my_password
    

我希望 Elastic Beanstalk 运行配置文件 01stage.config,然后运行 ​​shell 脚本 set_stage_htpasswd.sh 将 .htpasswd 文件复制到特定位置。

但是当我尝试部署这个时:

    我在事件日志中收到一条错误消息:

    实例:i-2f795c6e 模块:AWSEBAutoScalingGroup ConfigSet:null 实例上的命令失败。返回代码:1 输出:构建期间发生错误:命令 command-01 失败。

    Elastic Beanstalk 通知我它已部署应用程序并且正在运行新版本,但它实际上并未部署新代码并且仍在运行之前的代码。

这是尝试实现这一目标的正确方法还是有更好的选择。

【问题讨论】:

【参考方案1】:

我认为您command: 行上的引号给您带来了问题。如果 shell 正在寻找一个非常奇怪的命令,我不会感到惊讶......但即使没关系,使用 test: 指令有条件地执行你想要的文件复制操作可能更容易。尝试一些类似的东西:

container_commands:
    command-01: cp .ebextensions/.htpasswd /var/app/current
    test: "[ .$APPLICATION_ENV. = .stage. ]"

(环境变量are available tocontainer_commands:,但我不确定——您需要验证——它们是否也可以在该部分的test: 部分中使用。)

【讨论】:

以上是关于Elastic Beanstalk - 在特定环境中设置 .htpasswd的主要内容,如果未能解决你的问题,请参考以下文章

替换 AWS Elastic BeanStalk 上的特定实例?

在 Elastic Beanstalk 上部署 Docker 环境

如何将特定日志文件从多容器 Docker Elastic Beanstalk 流式传输到 CloudWatch?

如何在 ASP MVC 中使用 Elastic Beanstalk 环境属性

AWS Elastic Beanstalk:如何在 ebextensions 中使用环境变量?

Elastic Beanstalk:将分支部署到环境