Laravel Linux 佈署問題筆記

整理了自己在佈署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
2
3
4
// nginx = web server user
// systemuser = your local user which you use to login via ssh
sudo setfacl -Rdm u:nginx:rwx,u:systemuser:rwx storage
sudo setfacl -Rm u:nginx:rwx,u:systemuser:rwx storage

如果沒有ACL的設定方法

1
2
sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx 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
2
3
<Directory /var/www/html>
AllowOverride All
</Directory>

儲存設定後,重啟Apache2服務,這時就能正常顯示 GET 路徑了

1
sudo service apache2 restart

Ans:( Nginx )

以文字編輯器下列設定檔 /etc/nginx/sites-enabled/default 新增下列設定

1
2
3
4
5
6
7
8
9
server {
...

location / {
try_files $uri $uri/ /index.php?$query_string;
}

...
}

重整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
2
composer require laravel/ui
php artisan ui react

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
2
[ErrorException]
file_put_contents(/Users/username/.composer/vendor/composer/installed.json): failed to open stream: Permission denied

更改權限後即可正常安裝

1
sudo chown -R $USER ~/.composer/

參考資料

Cloning a private Github repo

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

Mac $PATH 環境變量設置及查詢

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)

Brainwavz B2 BeatsX W1晶片無線改裝 Laravel 產生簡易XML筆記

評論

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×