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

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

当我手动进行捆绑,并通过Elastic Beanstalk控制台上传/部署我确定有权限的文件夹,一切工作正常。

现在,当我使用“eb deploy”部署应用程序时,它将删除所有权限,并在日志中收到服务器错误和“Web目录不可写入:/ var / www / html / backend / web / assets” 。

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

所以,我的问题是什么是自动设置Elastic Beanstalk的特定容器中的特定文件夹的权限的最佳方式是什么?

也许,我可以使用.ebextensions,但我没有find如何运行特定容器的“container_commands”。

AWS EB Deployment将在/var/app/ondeck启动您的应用/var/app/ondeck

  1. 在部署弹性beanstalk时,您的应用程序首先解压到/var/app/ondeck/
    • 最有可能的是,您正在部署的本地文件夹没有您想要的权限。
  2. 如果您需要在部署期间对应用程序或shell进行调整,则.ebextensions/*.config是正确的位置。

容器命令应该运行到该路径

但请记住,无论是否需要,这些命令都会在您每次部署时运行,除非您使用某种方法来测试pre-config。

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

是的,你应该使用ebextensions。

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

该文件的内容可以是:

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

替换为适当的文件夹和权限。 在这里阅读关于容器命令。