整理了自己在佈署Laravel專案到Server時(Linux)所遇到的一些問題處理方式。
環境若沒特別說明就代表使用的OS為Ubuntu
Q1. 如何設定Laravel .env檔的APP_KEY?
Ans:在專案跟目錄執行 php artisan key:generate
Q2. 如何從Github上Clone私人專案到網站目錄
Ans:
1 | git clone https://[email protected]/username/repo |
其中username
為Github帳號名稱,repo
為專案名稱。
Q3. 在瀏覽器開啟網頁時出現以下錯誤訊息
Error in exception handler: The stream or file "/var/www/laravel/app/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denie
Ans:( Apache )
目錄權限不足,在專案目錄執行 sudo chmod -R 777 storage
(注意,此方法較不安全)
安全的做法是把不同的權限分開,使用ACL(Access Control List)設定
1 | // nginx = web server user |
如果沒有ACL的設定方法
1 | sudo chgrp -R www-data storage bootstrap/cache |
Ans:( Nginx )
1 | sudo chown USERNAME:USERNAME /var/www/html/SITE_FOLDER |
Q4. 如何切換不同的PHP版本 ( Apache )
Ans: 安裝好需要的版本後執行以下指令 (範例為 7.0 => 7.2)
停用先前的PHP版本(重要)
1 | sudo a2dismod php7.0 |
啟動所需的PHP版本
1 | sudo a2enmod php7.2 |
重啟Apache2服務
1 | sudo service apache2 restart |
( Nginx )
設定預設PHP版本
1 | update-alternatives --set php /usr/bin/php7.0 |
Q5. 首頁能夠正常顯示,但切換不同的 Get 路徑顯示 404 Not Found (Ex: www.domainname.com/login)
Ans:( Apache )
啟動Rewrite模組
1 | sudo a2enmod rewrite |
重啟Apache2服務
1 | sudo service apache2 restart |
重啟後還是顯示404錯誤,使用文字編輯器開啟 000-default.conf
設定檔 (個人習慣使用vim)
1 | sudo vim /etc/apache2/sites-available/000-default.conf |
在 DocumentRoot /var/www/html
下方新增以下設定
1 | <Directory /var/www/html> |
儲存設定後,重啟Apache2服務,這時就能正常顯示 GET 路徑了
1 | sudo service apache2 restart |
Ans:( Nginx )
以文字編輯器下列設定檔 /etc/nginx/sites-enabled/default
新增下列設定
1 | server { |
重整Nginx服務
1 | sudo systemctl reload nginx |
Q6. Bitnami LAMP Stack 更換DocumentRoot目錄?
Ans:
更改以下檔案的DocumentRoot,80與443(有SSL的話)。
YOUR_INSTALLATION_DIRECTORY/apache2/conf/bitnami/bitnami.conf
重啓Apache
1 | sudo /opt/bitnami/ctlscript.sh restart apache |
Q7. 上傳檔案移動到只訂資料夾時出現權限不足
單純使用chmod無效(由於改變的權限爲user非操作移動的www-data),需要使用以下方法給予權限。
1 | sudo chown -R www-data:www-data /path/to/folder |
Q8. 利用 Laravel Installer 新增 Laravel 專案 [MacOS]
MacOS 環境變數設定:
1 | export PATH=~/.composer/vendor/bin:$PATH |
Q9. Laravel 7 使用 React 的方法
Laravel 之前使用 React 的指令為:
1 | php artisan preset react |
7 之後由於移除 preset
指令,要使用以下方法:
1 | composer require laravel/ui |
Q10. Laravel 6 以後更改 AppName 的方式
由於原本的 php artisan app:name NewAppName
方式已經在版本 6 被移除
可以安裝 andrey-helldar/laravel-app 套件達到一樣的功能:
1 | composer require andrey-helldar/laravel-app |
完成後使用同樣方式更改即可:
1 | php artisan app:name NewAppName |
Q11. MacOS 安裝 Laravel 權限問題
執行 composer global require laravel/installer
若時出現以下錯誤
1 | ./composer.json is not writable. |
先執行以下指令
1 | ls -lh ~/.composer/composer.json |
如果權限是 root
則用以下指令修改(username
替換為自己的用戶名)
1 | sudo chown -R username:staff ~/.composer/composer.json |
接著執行安裝可能會遇到如下的 cache
資料夾權限問題
1 | [ErrorException] |
更改權限後即可正常安裝
1 | sudo chown -R $USER ~/.composer/ |
參考資料
Laravel framework file permission - Security
Laravel 5.4 problem - Wrong Route (Not Found) on Ubuntu 16.04
How To Deploy a Laravel Application with Nginx on Ubuntu 16.04
How to install PHP (7 or 7.2) on Ubuntu
Changes to Apache httpd.conf not applying on WAMP stack
Unable to write in directory Laravel
Laravel 5.4 can’t run “php artisan preset react” comand
How can I change the application name(space) in Laravel 6
日後遇到其他問題會再持續更新(建立日期:2018/07/10,最後更新日期:2020/10/1)
評論