如何在 Elastic Beanstalk 上为特定容器设置文件夹权限
Posted
技术标签:
【中文标题】如何在 Elastic Beanstalk 上为特定容器设置文件夹权限【英文标题】:How to set folder permissions for a particular container on Elastic Beanstalk 【发布时间】:2016-04-28 22:22:08 【问题描述】:我在为 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,但我没有找到如何为特定容器运行“container_commands”。
【问题讨论】:
【参考方案1】:AWS EB 部署在 /var/app/ondeck
中启动您的应用程序
-
部署 elastic beanstalk 时,您的应用首先解压缩到
/var/app/ondeck/
很可能,您正在部署的本地文件夹没有您想要的权限。
如果您需要在部署期间对您的应用程序或外壳进行调整,.ebextensions/*.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 " ========== "
【讨论】:
嗨@Tony,您能否检查一下我在尝试commands: 03_attachment_directory_permission: command: chmod 777 /var/app/ondeck/manellen/ticketing/attachments/
时会出现错误,并在日志文件中返回错误because: (ElasticBeanstalk::ExternalInvocationError)
@Manellen,你不应该使用 cmets 来提问。这个问题has already been asked and answered,通常是由尝试访问尚不存在的路径上的文件引起的。即:/home
在应用部署时还不存在。此答案/etc/ profile.d/myalias.sh
中创建的文件不存在。 /var/app/ondeck
一切都在准备中。
@TonyChiboucas 获得'/var/app/ondeck/my_app_folder': No such file or directory
@TonyChiboucas 您能否提供有关部署目录的官方文档链接?
仅供参考,我想在这里补充一点,我也没有得到任何关于“ondeck”的信息 - python env【参考方案2】:
是的,您应该使用 ebextensions。
在您的应用源根目录中创建一个名为 .ebextensions
的文件夹。创建一个扩展名为.config
的文件,例如01-folder-permissions.config
。文件按其名称的字典顺序处理。
文件内容可以是:
container_commands:
change_permissions:
command: chmod 777 /var/www/some-folder
替换为适当的文件夹和权限。阅读容器命令here。
【讨论】:
/var/www
在容器命令运行时还不存在。
chmod 777 不好。从不 777。无处。这是黑客的头奖。
@TonyChiboucas 我刚刚遇到这个,需要更改 /var/app/current 下文件夹的权限,但正如你所说,该文件夹不存在,我该如何执行将文件复制到实例后执行命令?
@BenOsborne,见上面的my answer to this question。在部署过程中,文件夹位于/var/app/ondeck/
,您可以在那里更改它们的权限。部署后,它们会从那里移至 /var/app/current/
。以上是关于如何在 Elastic Beanstalk 上为特定容器设置文件夹权限的主要内容,如果未能解决你的问题,请参考以下文章
使用 Elastic Beanstalk 在 Amazon AWS 上为非 Rails ruby 脚本安装 Gems
使用 Postgres 在 Elastic Beanstalk 上设置 Django
如何为我的 Elastic Beanstalk 单实例配置 SSL
AWS:具有用于外部注册器的静态 IP 地址的 Elastic Beanstalk