簡介
Laravel 是一個 Web 應用程式框架,它配備了 一組內建的工具和資源 來開發現代化的 PHP 應用程式。它以其可靠性、效能、效率、模組化和安全性而聞名。由於其各種內建功能,Laravel 的受歡迎程度經歷了驚人的增長。許多開發人員正在採用 Laravel 來簡化 Web 開發流程。
這份 指南將示範如何在 Ubuntu 20.04 上安裝和設定新的 Laravel 應用程式.
Ubuntu 上的 Laravel
我們將使用 Composer,一個 PHP 依賴管理器,用於下載和管理 Laravel。若要 安裝 Composer,請按照本教學的說明進行。 The Nginx 伺服器 將用於託管該應用程式。它將建立一個 Laravel 範例應用程式,並使用 MySQL 資料庫。
本指南需要一些前提條件。我們假設您已經有一個配置妥當且正在運行的 Ubuntu 20.04 伺服器。作為參考,這裡有一份關於 設定 Ubuntu 伺服器 的快速指南。另外還需要安裝並設定 LEMP (Linux、Nginx、MySQL 和 PHP) 軟體堆疊。我們有一份詳細的指南關於 安裝與設定 LEMP 堆疊.
因為我們將安裝各種套件,所以需要 root 權限。在 Ubuntu 中,預設是停用 root 使用者的。因此,我們需要存取具有 sudo 權限的非 root 使用者。以下是 如何授予其他使用者 sudo 權限.
步驟 1 – 安裝 PHP 模組
在安裝 Laravel 之前,我們需要一些適用於該框架的重要 PHP 模組。這些模組可以直接從 Ubuntu 預設套件庫中取得。這些模組支援字元編碼、XML 和高精度數學等功能。
首先,更新 APT 快取並安裝套件:
|
1 2 |
$ sudo apt update $ sudo apt install php-mbstring php-xml php-bcmath |
步驟 2 – 為應用程式建立資料庫
為了展示 Laravel 的功能,我們將製作一個旅遊清單應用程式,顯示使用者想要造訪的地點清單,以及已經 已造訪 的地點。我們可以將這些資料儲存在 place 資料表中,欄位為 name(位置名稱)與 visited(標記為 已造訪 或 未造訪)。另一個欄位將為每個條目提供唯一的識別身分。為了將資料與我們的 Laravel 應用程式連結,我們將建立一個專用的 MySQL 使用者,並授予該使用者對資料庫的完整權限 travellist.
原生 MySQL PHP 函式庫 mysqlnd 不再支援 caching_sha2_authentication。因此,我們需要將資料庫的驗證方法設定為 mysql_native_password。存取 MySQL shell,身分為 root:
|
1 |
$ sudo mysql |
接下來,建立一個名為 travellist:
|
1 |
> CREATE DATABASE travellist; |
之後,建立一個專用使用者 travellist_user 搭配合適的密碼:
|
1 |
> CREATE USER 'travellist_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password123'; |
賦予使用者 travellist_user 對資料庫 travellist 的完整權限。這也將防止該使用者在伺服器上建立和修改任何其他資料庫:
|
1 |
> GRANT ALL ON travellist.* TO 'travellist_user'@'%'; |
退出 MySQL shell:
|
1 |
> exit |
讓我們來測試一下新使用者。以下指令將以該使用者身份登入 MySQL shell,使用者為 travellist_user。旗標 -p 將會提示輸入使用者密碼:
|
1 |
$ mysql -u travellist_user -p |
列出所有可用的資料庫。如先前所設定,它應該只顯示 travellist 以及 information_schema:
|
1 |
> SHOW DATABASES; |
接下來,我們需要建立資料表 places。執行以下 MySQL 語句:
|
1 2 3 4 5 6 |
> CREATE TABLE travellist.places ( id INT AUTO_INCREMENT, name VARCHAR(255), visited BOOLEAN, PRIMARY KEY(id) ); |
讓我們在表格中填入一些範例資料:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
> INSERT INTO travellist.places (name, visited) VALUES ("Tokyo", false), ("Delhi", true), ("Shanghai", false), ("Moscow", true), ("Lisbon", true), ("Denver", false), ("Berlin", false), ("Istanbul", false), ("Rio", true), ("Beijing", false), ("Helsinki", false); |
讓我們看看資料是否已成功儲存到資料庫中:
|
1 |
> SELECT * FROM travellist.places; |
如我們所見,測試資料表已填入有效資料。我們現在可以退出 MySQL shell:
|
1 |
> exit |
步驟 3 – 建立新的 Laravel 應用程式
我們現在準備好使用 Composer 建立新的 Laravel 應用程式。我們將使用 travellist 作為示範應用程式。此應用程式將顯示來自 MySQL 資料庫的地點列表,以展示 Laravel 的基本設定。前往使用者的家目錄:
|
1 |
$ cd ~ |
下一步是使用 Composer 建立一個新的 Laravel 應用程式。它將會建立一個專屬的目錄 travellist ,其中包含具有預設設定的基本 Laravel 應用程式。請執行以下命令:
|
1 |
$ composer create-project --prefer-dist laravel/laravel travellist |
應用程式建立完成後,我們可以驗證所有元件是否已成功安裝:
|
1 2 |
$ cd travellist $ php artisan |
輸出結果驗證了所有應用程式檔案皆已就位。它也確保了所有 Laravel 命令列工具都能正常運作。然而,它仍然需要進行應用程式設定以建立資料庫和進行一些額外的微調。
步驟 4 – Laravel 設定
所有 Laravel 設定檔都儲存在名為 config 位於根應用程式目錄中。此外,使用 Composer 安裝 Laravel 時,它還會建立一個環境檔案。它包含特定於目前環境的各種設定。其中宣告的值將優先於常規設定檔中設定的值,這些設定檔位於 config.
每個獨立的安裝都需要有自己的環境檔案,用來定義資料庫連線設定、應用程式 URL、偵錯選項等數值。請注意,環境檔案包含敏感資訊,例如資料庫憑證、安全性金鑰等。因此,強烈建議切勿公開分享此檔案。
使用文字編輯器開啟環境檔案:
|
1 |
$ nano .env |
以下是環境程式碼範例:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
APP_NAME=TravelList APP_ENV=開發 APP_KEY=<唯一應用程式金鑰> APP_DEBUG=true APP_URL=http://<網域或IP> LOG_CHANNEL=stack DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=travellist DB_USERNAME=travellist_user DB_PASSWORD=password123 |
讓我們來分解這些值:
APP_NAME: 此欄位描述應用程式的名稱。此名稱將用於通知和訊息。APP_ENV: 應用程式目前的環境。APP_KEY: 此金鑰是在透過 Composer 安裝 Laravel 時自動產生的。它用於產生鹽值與雜湊值。無需變更。APP_DEBUG: 偵錯模式切換。開啟時,它將在用戶端顯示偵錯資訊。APP_URL: 應用程式基礎 URL。它也用於產生應用程式連結。DB_DATABASE: 資料庫的名稱。在此情況下,它將是我們建立的專用資料庫。DB_USERNAME: 用於連接資料庫的使用者名稱。DB_PASSWORD: 用於連接資料庫的密碼。
修改完成後,儲存檔案並關閉編輯器。
步驟 5 – 設定 Nginx
我們已成功將 Laravel 安裝在使用者家目錄的本機資料夾中。此設定適用於本機開發環境。然而,不建議將其應用於對網際網路開放的網頁伺服器。
我們的下一步是將應用程式移至 /var/www ,因為這是運行於 Nginx 的網頁應用程式的常用位置。請使用 mv 指令來將 travellist 移動至 /var/www/travellist:
|
1 |
$ sudo mv ~/travellist /var/www/travellist |
接下來,為使用者分配寫入權限至 storage 和 cache 資料夾。這些是 Laravel 應用程式產生的檔案位置:
|
1 2 |
$ sudo chown -R www-data.www-data /var/www/travellist/storage $ sudo chown -R www-data.www-data /var/www/travellist/bootstrap/cache |
應用程式檔案現在已就位。然而,我們需要告訴 Nginx 來提供內容。建立一個新的虛擬主機設定檔:
|
1 |
$ sudo nano /etc/nginx/sites-available/travellist |
以下是運行於 Nginx 的 Laravel 應用程式推薦設定範例:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
伺服器 { 監聽 80; 伺服器名稱 <網域或IP>; 根目錄 /var/www/travellist/public; 新增標頭 X-框架-選項 "SAMEORIGIN"; 新增標頭 X-XSS-防護 "1; mode=block"; 新增標頭 X-內容-類型-選項 "nosniff"; 索引 索引.html 索引.htm 索引.php; 字元集 utf-8; 位置 / { 嘗試檔案 $uri $uri/ /索引.php?$查詢字串; } 位置 = /網站圖標.ico { 存取記錄 關閉; 未找到記錄 關閉; } 位置 = /機器人.txt { 存取記錄 關閉; 未找到記錄 關閉; } 錯誤頁面 404 /索引.php; 位置 ~ \.php$ { FastCGI 傳遞 unix:/var/run/php/php7.4-fpm.sock; FastCGI 索引 索引.php; FastCGI 參數 SCRIPT_FILENAME $realpath_root$fastcgi_script_name; 包含 fastcgi_params; } 位置 ~ /\.(?!well-known).* { 拒絕 全部; } } |
是時候啟用新的虛擬主機設定檔了。建立一個符號連結到 sites-enabled 目錄:
|
1 |
$ sudo ln -s /etc/nginx/sites-available/travellist /etc/nginx/sites-enabled/ |
以下 Nginx 指令將測試設定檔的語法錯誤:
|
1 |
$ sudo nginx -t |
然後,重新載入 Nginx:
|
1 |
$ sudo systemctl reload nginx |
現在應該可以使用網域名稱或 IP 位址(由 server_name 指令所定義):
步驟 6 – 自訂主頁面
設定好 Laravel 應用程式後,我們現在可以開始開發。為了進行演示,是時候建立一個範例頁面,用來展示來自資料庫資料表 places 的範例資料。首先,在文字編輯器中開啟主路由檔案:
|
1 |
$ nano routes/web.php |
該檔案預設會包含一些內容。在這裡,路由是使用靜態方法 (Route::get) 定義的。它接收一個 路徑 與一個 回呼 函式 作為參數。
將程式碼替換為以下內容:
|
1 2 3 4 5 6 7 |
<?php use Illuminate\Support\Facades\DB; Route::get('/', function () { $visited = DB::select('select * from places where visited = ?', [1]); $togo = DB::select('select * from places where visited = ?', [0]); return view('travellist', ['visited' => $visited, 'togo' => $togo ] ); }); |
儲存檔案並關閉編輯器。接下來,我們將建立版面配置,以向使用者呈現資料庫查詢結果。在以下路徑中建立一個新檔案:resource/views:
|
1 |
$ nano resources/views/travellist.blade.php |
在以下程式碼中,我們建立了兩個地點清單,取決於 visited 和 togo:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<html> <head> <title>旅遊清單</title> </head> <body> <h1>我的旅遊願望清單</h1> <h2>想去的地方</h2> <ul> @foreach ($togo as $newplace) <li>{{ $newplace->name }}</li> @endforeach </ul> <h2>已造訪的地方</h2> <ul> @foreach ($visited as $place) <li>{{ $place->name }}</li> @endforeach </ul> </body> </html> |
儲存檔案並關閉編輯器。現在,再次存取網頁應用程式頁面:
瞧!我們現在有了一個使用 MySQL 資料庫來儲存內容且功能完整的 Laravel 應用程式。
結語
在本教學中,我們示範了如何在運行於 Ubuntu 20.04 伺服器上的 LEMP 堆疊上設定 Laravel 應用程式。我們還展示了如何自訂預設路由以查詢資料庫內容並在自訂視圖中顯示結果。如需更多關於 Laravel 的資訊,請參閱官方文件中的 視圖, 路由,以及 資料庫支援.
本教學的安裝是在獨立的虛擬機器上進行的。然而,您也可以 在 Docker 上的 LEMP 堆疊上部署 Laravel.
祝您運算愉快!









留言
目前尚無留言。成為第一個留言的人吧。