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
正确修复步骤
问题根因
- 脚本错误创建了系统根目录下的
/storage/logs,但Laravel的storage目录实际在应用部署根目录/var/app/current/storage下,而非系统根目录。 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
相关产品推荐
相关产品推荐

