You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel部署AWS Elastic Beanstalk遇storage/logs权限问题,求用.platform hooks解决

解决AWS Elastic Beanstalk上Laravel应用storage/logs权限错误问题

问题

通过Amazon S3自动部署Laravel应用到AWS Elastic Beanstalk,每次推送新代码后,应用都会触发storage/logs目录的权限错误。试过用.platform postdeploy钩子修复,但没效果。

之前的无效操作

  • 新建了.platform/hooks/postdeploy/50_run_something_after_app_deployment.sh脚本:
#!/bin/bash
chmod -R 777 storage
mkdir -p /storage/logs
chmod -R 777 /storage/logs
  • 在.ebextension文件夹下加了.config文件,试图让钩子可执行:
container_commands:
  40_post_deploy:
    command: chmod -R 777 .platform/hooks/postdeploy/50_run_something_after_app_deployment.sh

正确修复步骤

问题根因

  1. 脚本错误创建了系统根目录下的/storage/logs,但Laravel的storage目录实际在应用部署根目录/var/app/current/storage下,而非系统根目录。
  2. 777权限过于开放且不符合运行规范,EB的Web进程以webapp用户运行,需给对应用户组设置合理权限。

修正后的postdeploy脚本

替换.platform/hooks/postdeploy/50_fix_storage_permissions.sh内容:

#!/bin/bash
# 切换到应用部署后的根目录
cd /var/app/current

# 确保logs目录存在
mkdir -p storage/logs

# 设置正确的用户组和权限
chown -R webapp:webapp storage
chmod -R 755 storage
chmod -R 775 storage/logs

确保钩子可执行

无需额外.ebextension配置,本地先给脚本添加可执行权限:

chmod +x .platform/hooks/postdeploy/50_fix_storage_permissions.sh

之后再将代码上传到S3进行部署即可。

关键说明

  • EB部署完成后,应用代码会存放在/var/app/current目录,必须切换到该目录操作才生效。
  • webapp是EB运行Web应用的默认用户,将storage目录所有权设为该用户组,才能让应用正常读写文件。
  • 755保证目录的基础访问权限,775给logs目录额外的组写权限,既满足安全要求又适配Laravel运行需求。

内容的提问来源于stack exchange,提问作者Muhammad Kashif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:52:26