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