如何在Elastic Beanstalk上为特定容器设置文件夹权限

时间:2016-01-22 10:39:26

标签: linux amazon-web-services amazon-ec2 elastic-beanstalk

我在Elastic Beanstalk上设置Web文件夹的权限时遇到了麻烦。我在一个实例中使用自定义docker镜像运行多个容器:apache-php,mysql,memcached等。对于容器" apache-php"我将我的yii2应用程序的文件夹映射到/ var / www / html /。

当我手动创建一个捆绑包并通过Elastic Beanstalk控制台上传/部署时,我确实拥有该文件夹的正确权限,一切正常。

现在,当我使用" eb deploy"部署应用程序时,它会丢弃所有权限,我收到服务器错误,并且" Web进程无法写入该目录:/ var / www / HTML /后端/网络/资产"在日志中。

我可以通过ssh连接并手动设置必要的权限,但确定这不方便,因为每次重新部署应用程序时都需要这样做。

那么,我的问题是在Elastic Beanstalk上为特定容器中的特定文件夹自动设置权限的最佳方法是什么?

也许,我可以使用.ebextensions,但我还没有找到如何运行" container_commands"特殊容器。

2 个答案:

答案 0 :(得分:12)

AWS EB Deployment在/var/app/ondeck

中启动您的应用
  1. 在部署弹性beanstalk时,您的应用首先会被解压缩到/var/app/ondeck/
    • 最有可能的是,您部署的本地文件夹没有您想要的权限。
  2. 如果您需要在部署期间对您的应用或外壳进行调整,.ebextensions/*.config是正确的选择。
  3. 容器命令应该运行到该路径

    但请记住,除非您使用某种方法测试预配置,否则无论是否需要,这些命令都会在您部署时运行。

    container_commands:
      08user_config:
        test: test ! -f  /opt/elasticbeanstalk/.preconfig-complete
        command: |
          echo "jail-me" > /home/ec2-user/.userfile
      09writable_dirs:
        command: |
           chmod -R 770 /var/app/ondeck/backend/web/assets
           chmod -R 770 /var/app/ondeck/[path]
      99complete:
        command: |
          touch /opt/elasticbeanstalk/.preconfig-complete
    
    files:
      "/etc/profile.d/myalias.sh":
        mode: "000644"
        owner: root
        group: root
        content: |
          alias webroot='cd /var/www/html/backend/web; ls -al --color;'
          echo " ========== "
          echo " The whole point of Elastic Beanstalk is that you shouldn't need to SSH into the server. "
          echo " ========== "
    

答案 1 :(得分:-1)

是的,你应该使用ebextensions。

在您的应用源根目录中创建一个名为.ebextensions的文件夹。创建一个.config扩展名为01-folder-permissions.config的文件。文件按其名字的字典顺序处理。

该文件的内容可以是:

container_commands:
    change_permissions:
        command: chmod 777 /var/www/some-folder

替换为适当的文件夹和权限。阅读容器命令here