【问题标题】:Elastic Beanstalk: what's the best way to create folders & set permissions after deploy?Elastic Beanstalk:部署后创建文件夹和设置权限的最佳方法是什么?
【发布时间】:2016-07-09 12:48:19
【问题描述】:

我在 Elastic Beanstalk 上运行 Rails 4.2 应用,需要设置日志权限并在部署后创建 /tmp/uploads 文件夹(加上权限)。

我正在运行两个 ebextensions 脚本来执行此操作,但在某些情况下它们会失败,因为文件夹 /var/app/current/ 尚不存在。

我假设这是因为权限和/或文件夹应该首先在 /app/ondeck/ 上创建,以便 EB 可以将内容复制到 /var/app/current/,但我很想看看是否有推荐的更简单的方法来执行此操作?

作为参考,我的两个 ebextension 脚本是:

commands: 
    01_set_log_permissions:
        command: "chmod 755 /var/app/current/log/*"

commands: 
    01_create_uploads_folder: 
        command: "mkdir -p /var/app/current/tmp/uploads/"
    02_set_folder_permission: 
        command: "chmod 755 /var/app/current/tmp/uploads/"

谢谢, 丹

【问题讨论】:

    标签: ruby-on-rails amazon-web-services amazon-elastic-beanstalk


    【解决方案1】:

    你应该使用文件标签而不是命令:

    commands:
      create_post_dir:
        command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post"
        ignoreErrors: true
    files:
        "/opt/elasticbeanstalk/hooks/appdeploy/post/99_make_changes.sh":
        mode: "000777"
        content: |
          #!/bin/bash
          mkdir -p /var/app/current/tmp/uploads/
          chmod 755 /var/app/current/tmp/uploads/
    

    应用部署完成后触发

    【讨论】:

    • 顺便说一句,对于其他阅读本文的人来说,缩进存在问题,从mode: "000777" 向下的区域需要缩进一层。
    • 知道如何在 Windows 服务器上完成这项工作吗?
    【解决方案2】:

    我使用了以下步骤:

    • 创建文件夹 .ebextensions
    • 创建一个文件 .config
    • 将 .config 移至 .ebextensions
    • 编辑 .config 文件,它必须具有以下 sintaxe
      命令:
      命令1:
      命令:mkdir /opt/jenkins
      命令2:
      命令:chmod 644 /opt/jenkins

    https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#linux-commands

    *注意*

    不能再次运行command1 "mkdir /opt/jenkins",会报错,必须先做个测试。

    【讨论】:

    • 为防止在您多次运行时出错(即因为该文件夹已经存在),并且不想在首次部署后更改代码,请将command1 更改为@987654323 @ 并在其下方添加以下内容以获得良好的衡量标准ignoreErrors: true
    【解决方案3】:

    如何使用容器命令?

    http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/customize-containers-ec2.html#linux-container-commands

    您可以使用container_commands 键为您的容器执行命令。 container_commands 中的命令按名称按字母顺序处理。它们在应用程序和 Web 服务器已设置并且应用程序版本文件已被提取,但在应用程序版本部署之前运行。他们还可以访问环境变量,例如您的 AWS 安全凭证。

    容器命令从暂存目录运行,您的源代码在部署到应用程序服务器之前被提取出来。当源代码部署到其最终位置时,您使用容器命令对暂存目录中的源代码所做的任何更改都将包含在内。

    container_commands: 
        01_set_log_permissions:
            command: "chmod 755 log/*"
    

    container_commands: 
        01_create_uploads_folder: 
            command: "mkdir -p tmp/uploads/"
        02_set_folder_permission: 
            command: "chmod 755 tmp/uploads/"
    

    【讨论】:

    • 容器命令相对于常规命令的主要优势是什么?
    猜你喜欢
    • 2013-08-13
    • 2015-06-10
    • 2011-11-15
    • 2016-03-08
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 2014-11-27
    相关资源
    最近更新 更多