首页 > 解决方案 > AWS 上的 Laravel:日志文件权限问题

问题描述

我在将 Laravel Web 应用程序部署到 Amazon Web Services Elastic Beanstalk 时遇到了非常令人沮丧的事情。有时它很好,但大约 50% 的时间我会遇到以下崩溃:

无法打开流或文件“/var/app/current/storage/logs/laravel-2019-10-18.log”:无法打开流:权限被拒绝

(其中日期是当前日期。)

果然,当我通过 SSH 连接到服务器时,我可以看到该特定日志文件的权限设置为root:root.

-rw-r--r-- 1 root   root   3400 Oct 18 13:39 laravel-2019-10-18.log
-rw-rw-r-- 1 webapp webapp    0 Oct 18 13:39 laravel.log

如果我将所有者更改为webapp:webapp然后应用程序再次正常工作。同样,如果我删除日志文件,该站点将再次正常工作......直到下一次部署。

我的问题是如何防止这种情况发生。禁用所有日志?在部署期间更改权限?仅仅是因为调试设置为“真”吗?

这是我的deploy.config。有什么问题或遗漏吗?

container_commands:
  01-migrations:
    command: "php artisan migrate --force"
  02-import:
    command: "php artisan import:initial-data"

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
          sudo chown -R webapp:webapp /var/app/current/storage/logs
          sudo chmod -R ug+w /var/app/current/storage/logs

      fi


#https://serverfault.com/a/669547/24863
  "/opt/elasticbeanstalk/hooks/appdeploy/post/99_restart_workers.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      echo "Spawn worker..."
      nohup php /var/app/current/artisan queue:work >/dev/null 2>&1 &

  "/opt/elasticbeanstalk/tasks/publishlogs.d/laravel-logs.conf":
    mode: "000755"
    owner: root
    group: root
    content: |
      /var/app/current/storage/logs/*.log

#https://stackoverflow.com/a/38751749/199700
  "/etc/httpd/conf.d/https_redirect.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      RewriteEngine on
      <If "-n '%{HTTP:X-Forwarded-Proto}' && %{HTTP:X-Forwarded-Proto} != 'https'">
      RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
      </If>

#https://stackoverflow.com/a/38600025/199700
  "/etc/php.d/project.ini" :
    mode: "000644"
    owner: root
    group: root
    content: |
      upload_max_filesize=10M
      post_max_size=32M

标签: laravelamazon-web-servicesamazon-elastic-beanstalk

解决方案


这通常是因为您正在运行php artisan以 root 身份写入日志的命令。查看 的初始内容laravel-2019-10-18.log应该可以了解涉及哪个命令。


推荐阅读