Laravel - AWS Beanstalk - символьная ссылка на хранилище не работает (ошибка 403) - PullRequest
2 голосов
/ 21 апреля 2019

Я использую эластичный бобовый стебель для развертывания моего приложения laravel. Все работает отлично, за исключением моих изображений, так как мне нужно создать символическую ссылку с хранилищем, чтобы получить к ней доступ публично.

P.S. Хорошо работает на моем местном

Мой файл .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. Но все равно не повезло: (

Ответы [ 2 ]

1 голос
/ 01 мая 2019

Ввод альтернативного варианта , который делает работу для людей, которые имеют / могут иметь аналогичную проблему -

Используйте S3 для хранения файлов в приложении Laravel.

Чтобы это произошло -

  1. Создайте общедоступную корзину S3.
  2. Создание пользователя IAM, который имеет полный доступ к корзине S3. (С помощью ключа доступа у приложения будут права на чтение и запись в корзину S3.)
  3. Обновите файл конфигурации filesystems.php, чтобы использовать корзину S3. (Этот конфиг обрабатывает конфигурацию хранилища приложения.)

Подробнее см. Laravel Doc .

Спасибо @PranavanSp за его предложение.

0 голосов
/ 24 апреля 2019

Контейнерные команды запускаются от имени пользователя root, поэтому, когда вы пытались запустить его от имени пользователя ec2, вы не могли этого сделать.Пользователь ec2 не входит в корневую группу пользователей.

Затем, когда вы создаете символические ссылки, попробуйте сделать это в реальном каталоге приложения (текущем):

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
...