Laravel-AWS Beanstalk-存储符号链接不工作(403错误)
我正在使用elastic beanstalk部署我的laravel应用程序。除了我的图像之外,一切都很好,因为我需要创建一个与存储的符号链接来公开访问它 p.S.在我的本地电脑上运行良好 My.ebextensions文件如下-Laravel-AWS Beanstalk-存储符号链接不工作(403错误),laravel,amazon-web-services,laravel-5,amazon-ec2,amazon-elastic-beanstalk,Laravel,Amazon Web Services,Laravel 5,Amazon Ec2,Amazon Elastic Beanstalk,我正在使用elastic beanstalk部署我的laravel应用程序。除了我的图像之外,一切都很好,因为我需要创建一个与存储的符号链接来公开访问它 p.S.在我的本地电脑上运行良好 My.ebextensions文件如下- commands: composer_update: command: export COMPOSER_HOME=/root && /usr/bin/composer.phar self-update option_settings:
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
Forbidden
You don't have permission to access /storage/blog/images/8Yhb4OZJQIKwlMGaGE803niTxyjfzNSVTj2BiPaP.gif on this server.
下面是来自我的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.
我得到的错误如下,这使得图像不可供公众访问。
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
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用户权限但仍然不走运:(容器命令以root用户身份运行,这就是为什么当您尝试以ec2用户身份运行它时无法运行的原因。ec2用户不在root用户组中 然后,当您创建符号链接时,请尝试在实际应用程序目录(当前)中执行此操作: 或者尝试直接链接,如下所示:
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
制定一个备选方案,该方案适用于/可能有类似问题的人- 将S3用于Laravel应用程序中的文件存储。
[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.
为了实现这一点——
filesystems.php
以使用S3存储桶。(此配置处理应用程序的存储配置。)感谢@PranavanSp的建议。您是否尝试检索上传的图像?是的,我是。我的最终目标是创建一个与存储文件夹的符号链接,以便我可以公开访问视图中的这些图像。检查我的答案,这可能会给您一些想法,我以前遇到过,我通过参考文档解决了它,我已经e也添加了链接。@beanstalk中的brownkid,如果将S3与用于存储和图像支持的项目一起使用,则无法更好地存储文件。@PranavanSp感谢您提出替代解决方案。它可以解决问题!!我使用S3不是为了解决beanstalk上的webapp用户权限问题,而是为了存储目的。它可以解决问题k所以我现在可以跳过符号链接问题。对于我们如何解决与beanstalk上的符号链接权限相关的问题仍然很好奇。如果您有任何相关经验,请与我们分享。没错,我也相信这一点,但找不到覆盖权限的方法。顺便说一句,非常感谢您的帮助,以及我在点击后的想法我的想法是,当我们部署应用程序时,首先对
/var/app/ondeck
进行部署,然后在上面运行所有容器命令。只有在一切就绪后,文件才会移动到/var/app/current
。因此,在current上运行命令在这个阶段根本没有帮助,因为该文件夹包含应用程序的早期版本。嗯,好的。给部署后挂钩一个机会,它基本上是一个bash脚本,在容器命令后运行,在应用程序被复制后运行。我发现这可能会有所帮助,他们专门为Laravel和AWS EBL做了一个,但首先尝试使用容器命令的权限,找到了一个示例aravel和EB:但这可能有点旧谢谢@DR.,稍后会尝试一下,并会更新您。干杯!当然,我说先尝试权限的唯一原因是错误403意味着权限,因此服务器用户可能无法读取其尝试读取的文件。如果403消失,而您得到404,则可能会出现错误ly表示符号链接不工作。这就是我将如何着手解决此问题的方法。