Laravel - AWS Beanstalk - 存储符号链接无效(403错误)

问题描述 投票:2回答:2

我正在使用弹性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 amazon-web-services laravel-5 amazon-ec2 amazon-elastic-beanstalk
2个回答
1
投票

放下一个替代选项,为那些/可能有类似问题的人做好工作 -

在Laravel应用程序中使用S3进行文件存储。

要实现它 -

  1. 创建一个公共S3存储桶。
  2. 创建一个对S3存储桶具有完全访问权限的IAM用户。 (使用访问密钥,应用程序将具有在S3存储桶中读取和写入的权限。)
  3. 更新配置文件filesystems.php以使用S3存储桶。 (此配置处理应用程序的存储配置。)

有关详细信息,请参阅Laravel Doc

感谢@PranavanSp的建议。


0
投票

容器命令以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
© www.soinside.com 2019 - 2024. All rights reserved.