【问题标题】:Deploying Laravel to Elastic Beanstalk: "failed to open stream: Permission denied"将 Laravel 部署到 Elastic Beanstalk:“无法打开流:权限被拒绝”
【发布时间】:2021-02-04 20:49:36
【问题描述】:

有时当我将 Laravel 项目部署到 AWS Elastic Beanstalk 时,我会遇到一个恼人的错误,提示无法打开日志文件:

The stream or file "/var/app/current/storage/logs/laravel-2020-10-21.log" could not be opened: failed to open stream: Permission denied

在我的 eb deploy.config 文件中,我有一个声明,理论上应该可以解决问题,但没有:

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/99_make_storage_writable.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      echo "Making /storage writeable..."
      chmod -R 755 /var/app/current/storage

      if [ ! -f /var/app/current/storage/logs/laravel.log ]; then
          echo "Creating /storage/logs/laravel.log..."
          touch /var/app/current/storage/logs/laravel.log
          chown webapp:webapp /var/app/current/storage/logs/laravel.log
      fi

这是因为它没有引用每日日志文件。

我有一个 .ebignore 文件,它明确阻止部署本地日志,因此导致问题的不是现有日志文件的存在:

/storage/logs/*

问题是 Laravel 将每日日志创建为 root,因此普通用户 (webapp) 无法写入。

我只是不知道它为什么这样做?

【问题讨论】:

  • 不同的所有权通常可以归因于如何原始生成日志文件。如果您有一个运行调度程序的CRON,并且它遇到错误,则.log 文件将被创建为root。如果网络服务器遇到记录的错误,它将使用webapp(或基于您的配置的类似名称)创建。如果您可以使用相同或兼容的用户/组/权限集来获取这两个进程,那么就不会有冲突。 (至少这是我以前遇到过的;不确定它是否适用于 EB)
  • 另一种解决方案是在部署到 EB 时删除日志文件和目录,并在已部署时让它创建它吗?
  • @FabricioG 没有部署日志文件(引用:“我有一个 .ebignore 文件,它明确阻止部署本地日志”)。问题是具有不同权限的不同进程正在尝试写入同一个日志文件。

标签: laravel amazon-web-services amazon-elastic-beanstalk


【解决方案1】:

解决方案是让每个进程创建自己的日志文件。这样每个进程都将拥有正确的写入权限。

您可以在 config/logging.php 文件中执行此操作,并将进程名称 (php_sapi_name()) 添加到文件名中:

    'daily' => [
        'driver' => 'daily',
        'path' => storage_path('logs/' . php_sapi_name() . '-laravel.log'),
        'level' => 'debug',
        'days' => 14,
    ],

现在每个进程都可以写入自己的文件,不会出现权限问题。

【讨论】:

    【解决方案2】:

    尝试为此设置存储文件夹权限

    chmod -R gu+w storage/
    chmod -R guo+w storage/
    

    【讨论】:

    • 这本身并不能解决问题。这是一个 CD 环境。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 2020-05-31
    • 2013-06-05
    • 2019-05-02
    • 2018-06-27
    • 2018-10-20
    • 1970-01-01
    相关资源
    最近更新 更多