Elastic Beanstalk:什么是创建文件夹的最佳方式&部署后设置权限?

时间:2016-03-22 14:50:56

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

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

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

我假设这是因为应该在/ app / ondeck / first上创建权限和/或文件夹,以便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/"

谢谢, 丹

3 个答案:

答案 0 :(得分:2)

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

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/

应用程序部署完成后会触发

答案 1 :(得分:2)

使用容器命令怎么样?

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/"

答案 2 :(得分:1)

我使用了下面的表格:

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

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

*注意*

您无法再次运行command1“mkdir / opt / jenkins”,您将遇到错误,因此您必须先进行测试。