我正在使用弹性beanstalk来部署我的laravel应用程序。除了我的图像,一切都工作正常,因为我需要创建一个带存储的符号链接以公开访问它。
附:在我当地工作正常
我的.ebextensions文件如下 -
commands:
composer_update:
command: export COMPOSER_HOME=/root && /usr/bin/composer.phar self-update
option_settings:
- namespace: aws:elasticbeanstalk:application:environment
option_name: COMPOSER_HOME
value: /root
container_commands:
01-install_dependencies:
command: "php /usr/bin/composer.phar install"
cwd: "/var/app/ondeck"
02_storage_sym_link:
command: "php artisan storage:link"
cwd: "/var/app/ondeck"
leader_only: true
下面是来自我的ec2实例的日志,以确认该命令工作正常并且链接已成功创建。
[2019-04-21T15:47:16.899Z] INFO [21538] - [Application update symlink alt2@208/AppDeployStage0/EbExtensionPostBuild/Infra-EmbeddedPostBuild/postbuild_0_Synchro/Test for Command 02_storage_sym_link] : Starting activity...
[2019-04-21T15:47:16.903Z] INFO [21538] - [Application update symlink alt2@208/AppDeployStage0/EbExtensionPostBuild/Infra-EmbeddedPostBuild/postbuild_0_Synchro/Test for Command 02_storage_sym_link] : Completed activity. Result:
Completed successfully.
[2019-04-21T15:47:16.903Z] INFO [21538] - [Application update symlink alt2@208/AppDeployStage0/EbExtensionPostBuild/Infra-EmbeddedPostBuild/postbuild_0_Synchro/Command 02_storage_sym_link] : Starting activity...
[2019-04-21T15:47:17.014Z] INFO [21538] - [Application update symlink alt2@208/AppDeployStage0/EbExtensionPostBuild/Infra-EmbeddedPostBuild/postbuild_0_Synchro/Command 02_storage_sym_link] : Completed activity. Result:
The [public/storage] directory has been linked.
我得到的错误如下,使图像不可用于公共访问。
Forbidden
You don't have permission to access /storage/blog/images/8Yhb4OZJQIKwlMGaGE803niTxyjfzNSVTj2BiPaP.gif on this server.
任何帮助指导我走正确道路的人都表示赞赏。干杯!
编辑1:
container_commands:
01-install_dependencies:
command: "php /usr/bin/composer.phar install"
cwd: "/var/app/ondeck"
02_storage_sym_link:
command: "ln -s storage/app/public public/storage"
cwd: "/var/app/ondeck"
03_give_ec2_user_perm_1:
command: "sudo chown -R ec2-user /var/app/current"
03_give_ec2_user_perm_2:
command: "sudo chmod -R 777 /var/app/current"
尝试手动创建符号链接,并授予ec2用户权限。但仍然没有运气:(
放下一个替代选项,为那些/可能有类似问题的人做好工作 -
在Laravel应用程序中使用S3进行文件存储。
要实现它 -
filesystems.php
以使用S3存储桶。 (此配置处理应用程序的存储配置。)有关详细信息,请参阅Laravel Doc。
感谢@PranavanSp的建议。
容器命令以root身份运行,这就是为什么当你尝试以ec2-user运行它时你不能。 ec2-user不在root用户组中。
然后,当您创建符号链接时,尝试在实际的应用程序目录(当前)中执行此操作:
container_commands:
01-install_dependencies:
command: "php /usr/bin/composer.phar install"
cwd: "/var/app/ondeck"
02_storage_sym_link:
command: "ln -s storage/app/public public/storage"
cwd: "/var/app/current"
或者尝试直接链接:
container_commands:
01-install_dependencies:
command: "php /usr/bin/composer.phar install"
cwd: "/var/app/ondeck"
02_storage_sym_link:
command: "ln -s /var/app/ondeck/storage/app/public /var/app/current/public/storage"
EBS文件一开始可能很烦人,但最终还是值得的。如果这仍然不起作用,那么运行服务器的用户(我认为是appache)可能无权访问该文件夹。要快速验证这一点,只需执行以下操作:
sudo chmod -R 755 /var/app/ondeck/storage/app/public