Laravel部署AWS Elastic Beanstalk遇目录权限错误,求排查部署配置问题
Laravel部署AWS Elastic Beanstalk配置问题分析
核心权限问题根源
你遇到的/var/app/staging/storage/logs权限错误,本质是Elastic Beanstalk部署流程中,container_commands默认以root用户执行,但Laravel的存储目录需要让Web服务器用户(通常是apache或nginx/www-data)拥有读写权限,而你的配置完全没处理存储目录权限。
你的.ebextensions配置存在的具体问题
- 目录切换无效:
container_commands里的每个命令都是独立执行的,cd /var/www/html或cd /var/app/current/不会影响后续命令的工作目录。所有命令默认在/var/app/staging目录执行,后续php artisan命令可能因目录不对导致错误。 - 重复执行冗余命令:
10-migrate和13-migrate都执行key:generate,11-migrate和14-migrate都执行config:cache,完全没必要重复操作,反而可能引发冲突。 - Composer命令未指定生产环境:
composer install没加--no-dev参数,会安装开发依赖,增加部署体积且可能带来安全风险。 - 环境变量配置时机错误:你在
/var/www/html目录下操作.env,但实际部署时代码在/var/app/staging,后续artisan命令可能读取不到正确的.env文件。 - 未处理存储目录权限:完全没有配置
storage和bootstrap/cache目录的权限,这是Laravel部署的必备步骤,Web服务器用户需要对这两个目录有读写权限才能创建日志、缓存文件。 - 命令命名混乱:多个命令用
migrate作为后缀,但实际执行的不是迁移操作(比如key:generate、config:cache),命名不清晰不利于排查问题。
修正后的配置参考
container_commands: 01_install_composer: command: "composer.phar install --optimize-autoloader --no-dev" cwd: "/var/app/staging" 02_copy_env: command: "cp .env.empty .env" cwd: "/var/app/staging" 03_populate_env: command: "/opt/elasticbeanstalk/bin/get-config environment | jq -r 'to_entries | .[] | \"\\(.key)=\\(.value)\"' >> .env" cwd: "/var/app/staging" 04_set_permissions: command: | chown -R apache:apache /var/app/staging/storage chown -R apache:apache /var/app/staging/bootstrap/cache chmod -R 775 /var/app/staging/storage chmod -R 775 /var/app/staging/bootstrap/cache cwd: "/var/app/staging" 05_generate_key: command: "php artisan key:generate --no-interaction --force" cwd: "/var/app/staging" 06_config_cache: command: "php artisan config:cache" cwd: "/var/app/staging" 07_run_migrations: command: "php artisan migrate --no-interaction --force" cwd: "/var/app/staging"
补充说明
- 用
cwd参数指定每个命令的工作目录为/var/app/staging,确保所有操作都在部署的代码目录下执行。 - 添加权限配置命令,给Web服务器用户(这里用
apache,如果是Nginx环境可能是nginx或www-data,根据你的EB环境调整)赋予存储目录的读写权限。 - 移除冗余重复的命令,统一命名让每个命令的作用清晰。
- Composer命令添加
--no-dev参数,只安装生产依赖。 - 环境变量用
>>追加而不是>覆盖,避免清空.env.empty里的默认配置。
内容的提问来源于stack exchange,提问作者Devin Dixon
相关产品推荐
相关产品推荐

