iT邦幫忙

0

Laravel 項目 移機至 AWS ec2 ubuntu 20.04 卻一直出現 HTTP ERROR 500

  • 分享至 

  • xImage

在此先向各位前輩拜年:祝大大們虎年行大運,福虎生豐發大財
小弟欲將 1個 Laravel 項目移到 AWS主機
PS:我在ec2 裡面開了2個虛擬站點:
i58d.com (正式=從 git clone 而來---一直出現問題)
ifafafa.com (測試= composer create-project --prefer-dist laravel/laravel blog "6.*" ---一切正常)
i58d.com無法開啟網頁,log出現報錯如下:

[Mon Feb 07 20:08:40.068728 2022] [php7:error] [pid 32125] [client 114.46.44.99:55245] PHP Fatal error:  Uncaught ErrorException: file_put_contents(/var/www/i58d/storage/framework/views/b8cb7b9cd9118997da160c32f6162cca18f820f5.php): failed to open stream: Permission denied in /var/www/i58d/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:133\nStack trace:\n#0 [internal function]: Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError()\n#1 /var/www/i58d/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(133): file_put_contents()\n#2 /var/www/i58d/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php(129): Illuminate\\Filesystem\\Filesystem->put()\n#3 /var/www/i58d/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php(51): Illuminate\\View\\Compilers\\BladeCompiler->compile()\n#4 /var/www/i58d/vendor/facade/ignition/src/Views/Engines/CompilerEngine.php(36): Illuminate\\View\\Engines\\CompilerEngine->get()\n#5 /var/www/i58d/vendor/laravel/framework/src/Illuminate/View/View.php(143): Facade\\Ignition\\Views\\Engines\\CompilerEngine->get()\n#6 /var/www/i58d/ven in /var/www/i58d/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php on line 133

在google 查詢了 1天都說:執行以下命令

php artisan cache:clear
php artisan config:cache
sudo chmod -R 777 storage
sudo chmod -R 777 storage

但是報錯依然無解
因此!想向各位大大們請教一下,到底需要怎解?

PS:另外!在 /storage/logs/laravel.log 出現的報錯如下:

production.ERROR: Command "dump-autoload" is not defined. {"exception":"[object] (Symfony\\Component\\Console\\Exception\\CommandNotFoundException(code: 0): Command \"dump-autoload\" is not defined. at /var/www/i58d/vendor/symfony/console/Application.php:676)
看更多先前的討論...收起先前的討論...
wolfwang iT邦研究生 4 級 ‧ 2022-02-08 09:10:24 檢舉
沒有權限是 : file_put_contents(/var/www/i58d/storage/framework/views/...) 是這個,為了確保有正確更動權限,你要不要先執行下面的指令,看一下 owner 和 mode 都有更動了

可以執行: ls -alh (/var/www/i58d/storage/framework/views/ 看看

然後第二個錯誤,你可以在專案目錄底下執行 composer dump-autoload 試試看
先感謝!
不過我執行 ls -alh /var/www/i58d/storage/framework/views/ 結果輸出 :
total 12K
drwxrwxr-x 2 ubuntu ubuntu 4.0K Feb 8 09:39 .
drwxrwxr-x 7 ubuntu ubuntu 4.0K Feb 8 09:39 ..
-rw-rw-r-- 1 ubuntu ubuntu 14 Feb 8 09:39 .gitignore

請教一下@wolfwang 這樣正確嗎?
wolfwang iT邦研究生 4 級 ‧ 2022-02-08 10:02:21 檢舉
如你所說,已經執行 chmod -R 777 storage 的話, views 這個目錄應該是 drwxrwxrwx,但是目前是 drwxrwxr-x ,這有可能是造成權限不足的原因。

你的網頁程式執行的角色很可能是 www-data,但是目前的 owner 是 ubuntu,所以對於 www-data來說,套用的到權限是 r-x 這一段。

所以不知道你執行修改權限時是發生了什麼狀況,你可以先以下指令,看看 views 的目錄是否能改變成 rwx,有變更過去的話,再看看是不是能正常執行,錯誤的 log 是不是有不一樣。

chmod -R 777 /var/www/i58d/storage/framework/views/
執行結果如下:
drwxrwxrwx 2 ubuntu ubuntu 4.0K Feb 8 09:39 .
drwxrwxrwx 7 ubuntu ubuntu 4.0K Feb 8 09:39 ..
-rwxrwxrwx 1 ubuntu ubuntu 14 Feb 8 09:39 .gitignore
但這樣對嗎?
(我因為要測試,所以重新 git clone 後狀況已經不同了,我因為改 .env 中的APP_DEBUG=true)
所以現在網頁上是出現databases 連接的問題了,權限問題應該是OK了只是 LOG 沒更新
wolfwang iT邦研究生 4 級 ‧ 2022-02-08 12:33:41 檢舉
log 沒有新的錯誤就代表解決了權限問題,這樣權限那一關就過了。

也建議一下實務上比較好的作法,應該是把你的 i59d 的 owner 全都改成 www-data,然後再把 storage 權限改成 775,這樣子相對安全一點,production也不應該開 APP_DEBUG=true(即使是在找問題,因為這樣你的很多訊息形同裸奔,理論上你需要的錯誤訊息,在 log 上都可以看到。
了解,受教了!十分感謝
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
㊣浩瀚星空㊣
iT邦大神 1 級 ‧ 2022-02-07 23:33:11
最佳解答

先確定WEB SERVER的運行身份。
一般不外乎是 www、www-data、apache、nginx 等這些身份才對。
如果你的/var/www 是 ubuntu 或是 ec2-user 這種身份。
就會發生權限的問題。root身份其實也會這樣。

要先檢查你的設定檔在何種身份。

謝謝! 星空大大的說明,但是我已經確認過我的/var/www 以及以下目錄都屬於 www-data ,但結果一樣,而且若我將原本的目錄 i58d 刪掉,然後 composer create-project --prefer-dist laravel/laravel i58d "6.*",然後再執行1次 sudo chmod -R 777 /var/www/i58d/storage ,就一切正常,讓我真不知是何原因?星空大能否再幫忙分解一下

0
耿直小伙
iT邦新手 1 級 ‧ 2022-02-08 11:51:26

將 storage 改成 777 可以正常沒錯,但這也代表所有人都能訪問
網路上查到的看看對你有沒有幫助,是 medium 的文章,也許還有 SELinux 的影響

Centos8 使用 Nginx 架設 Laravel 錯誤 Permission denied

感謝大大!我會仔細研讀一下文章

我要發表回答

立即登入回答