Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel-AWS Beanstalk-存储符号链接不工作(403错误)_Laravel_Amazon Web Services_Laravel 5_Amazon Ec2_Amazon Elastic Beanstalk - Fatal编程技术网

Laravel-AWS Beanstalk-存储符号链接不工作(403错误)

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:

我正在使用elastic beanstalk部署我的laravel应用程序。除了我的图像之外,一切都很好,因为我需要创建一个与存储的符号链接来公开访问它

p.S.在我的本地电脑上运行良好

My.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
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.
为了实现这一点——

  • 创建一个公共S3存储桶
  • 创建具有完全访问权限的IAM用户 S3存储桶。(使用访问密钥,应用程序将 S3存储桶中的读写权限。)
  • 更新配置文件
    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表示符号链接不工作。这就是我将如何着手解决此问题的方法。