【Laravel vx Docker】利用 Laravel Sail 高效率搭建 Laravel 應用開發環境
關於 Laravel Sail
Laravel Sail 是 Laravel 框架的官方開發環境。 Sail 提供了一個輕量級的命令列介面 (CLI),可以使用 Docker 輕鬆設定和管理 Laravel 應用程式開發環境。下面,我們來說明 Laravel Sail 的主要特性和使用方法。
使用 Laravel Sail 的好處
-
建構獨立於作業系統的開發環境
- Sail 使用 Docker 來容器化 Laravel 應用程式的開發環境。這使您可以建立獨立於作業系統的開發環境。
-
輕鬆設定開發環境
- 使用 Sail,只需幾個指令即可建置 Laravel 開發環境。即使使用 MySQL、Redis、MailHog 等複雜的開發環境,也可以輕鬆建置。
-
輕鬆管理不同版本的專案
- 例如,Laravel 的版本取決於 PHP 的版本,但透過在 docker-compose.yml 檔案中設定每個專案的環境,可以輕鬆切換版本。
當您使用 Docker 和 Laravel Sail 建立專案時,結構將如上圖所示。
用法
開發環境
- Mac
- PHP v8.3
- Laravel v11
- Docker
先決條件
在建立 Laravel 專案之前,請下載並啟動 Docker Desktop。
https://www.docker.com/products/docker-desktop/
1. 建立 Laravel 項目
執行以下指令建立一個新的 Laravel 專案並設定 Laravel Sail。
curl -s "https://laravel.build/example-app" | bash cd example-app
這將建立 Laravel 專案檔。產生的 docker-compose.yml 檔案中描述了開發環境。
使用 with 查詢指定服務
如果要指定PHP版本或使用PostgreSQL而不是MySQL,可以在產生專案時在指令中用=
curl -s "https://laravel.build/example-app?php=81&with=pgsql,redis" | bash
2. 起航
移動到專案目錄並啟動 Sail。
./vendor/bin/sail up -d
此命令啟動 Docker 容器並執行 Laravel 應用程式。
※註冊別名
輸入 ./vendor/bin/sail 很麻煩,因此請將其儲存為 shell 設定檔中的別名 sail。
使用以下指令檢查您正在使用的 shell 的路徑
echo $SHELL
範例:/bin/zsh
編輯 Shell 設定檔
- 對於 zsh
Shell 設定檔是 ~/.zshrc。
若要新增別名,請執行以下命令
curl -s "https://laravel.build/example-app" | bash cd example-app
- 對於 bash
shell 設定檔是 ~/.bash_profile 或 ~/.bashrc。
若要新增別名,請執行以下命令:
curl -s "https://laravel.build/example-app?php=81&with=pgsql,redis" | bash
透過上述設置,您可以以縮寫形式執行 sail 命令。
./vendor/bin/sail up -d
3. 使用 Sail 指令
您可以使用Sail執行各種開發任務。以下是一些範例。
- 啟動應用程式:
echo $SHELL
- 停止應用程式:
echo "alias sail='sh $([ -f sail ] && echo sail || echo vendor/bin/sail)'" >> ~/.zshrc source ~/.zshrc
- 執行 Artisan 指令:
echo "alias sail='sh $([ -f sail ] && echo sail || echo vendor/bin/sail)'" >> ~/.bash_profile source ~/.bash_profile
- 執行 Composer 指令:
sail up -d
- 執行 npm 指令:
sail up -d
4. 改變服務
即使在建立專案後,您也可以透過修改 docker-compose.yml 檔案(即 Docker 設定檔)來變更服務。在這裡,我們將更改 PHP 版本和使用的資料庫。
更改 PHP 版本
先檢查目前PHP版本
sail down
接下來修改docker-compose.yml檔案中所描述的開發環境資訊。
sail artisan migrate
將建置上下文和鏡像變更為 8.1 .
sail composer install
修改 docker-compose.yml 後,停止塗抹。
sail npm install
接下來,重建 Docker 容器以反映變更。
sail php -v PHP 8.3.12 (cli) (built: Sep 27 2024 03:53:05) (NTS)
重新啟動應用程式。
services: laravel.test: build: context: "./vendor/laravel/sail/runtimes/8.3" dockerfile: Dockerfile args: WWWGROUP: "${WWWGROUP}" image: "sail-8.3/app"
檢查PHP版本是否有變化。
services: laravel.test: build: context: "./vendor/laravel/sail/runtimes/8.1" dockerfile: Dockerfile args: WWWGROUP: "${WWWGROUP}" image: "sail-8.1/app"
PHP 版本已從 PHP 8.3 變更為 PHP 8.1。
更改使用的資料庫
將使用 MySQL 建立的專案變更為 PostgreSQL。
執行 Sail 安裝指令
sail down
選 pgsql
sail build --no-cache
檢查 docker-compose.yml 檔案並確認 pgsql 條目已新增。
sail up -d
ext,開啟專案目錄下的.env文件,確認設定了DB_CONNECTION=pgsql和DB_HOST=pgsql。
如果沒有,請手動更改它們。
sail php -v PHP 8.1.30 (cli) (built: Sep 27 2024 04:07:29) (NTS)
確認 docker-compose.yml 和 .env 中的變更後,停止應用程式。
sail php artisan sail:install
接下來,重建 Docker 容器以反映變更。
┌ Which services would you like to install? ───────────────────┐ │ ◼ mysql ┃ │ │ › ◻ pgsql │ │ │ ◻ mariadb │ │ │ ◻ redis │ │ │ ◻ memcached │ │ └────────────────────────────────────────────────── 1 selected ┘ Use the space bar to select options.
重新啟動應用程式。
services: laravel.test: ... depends_on: - mysql - redis - meilisearch - mailpit - selenium - pgsql ... pgsql: image: 'postgres:17' ports: - '${FORWARD_DB_PORT:-5432}:5432' environment: PGPASSWORD: '${DB_PASSWORD:-secret}' POSTGRES_DB: '${DB_DATABASE}' POSTGRES_USER: '${DB_USERNAME}' POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}' volumes: - 'sail-pgsql:/var/lib/postgresql/data' - './vendor/laravel/sail/database/pgsql/create-testing-database.sql:/docker-entrypoint-initdb.d/10-create-testing-database.sql' networks: - sail healthcheck: test: - CMD - pg_isready - '-q' - '-d' - '${DB_DATABASE}' - '-U' - '${DB_USERNAME}' retries: 3 timeout: 5s
運行遷移檔案。
DB_CONNECTION=pgsql DB_HOST=pgsql DB_PORT=5432 DB_DATABASE=laravel DB_USERNAME=sail DB_PASSWORD=******
在 Docker 啟動 shell 並檢查 pgsql
顯示目前正在執行的 Docker 容器的清單。
curl -s "https://laravel.build/example-app" | bash cd example-app
curl -s "https://laravel.build/example-app?php=81&with=pgsql,redis" | bash
檢查應用程式的容器名稱並在 Docker 內啟動應用程式的 bash。
./vendor/bin/sail up -d
連接到 pgsql。
echo $SHELL
系統將提示您輸入密碼,因此請輸入 .env 檔案中指定的 DB_PASSWORD。
echo "alias sail='sh $([ -f sail ] && echo sail || echo vendor/bin/sail)'" >> ~/.zshrc source ~/.zshrc
檢查pgsql中的表格
echo "alias sail='sh $([ -f sail ] && echo sail || echo vendor/bin/sail)'" >> ~/.bash_profile source ~/.bash_profile
這樣,即使建立了項目,也可以從 MySQL 更改為 PostgreSQL。
結論
透過本文,您將了解如何使用 Laravel Sail 有效地設定和管理開發環境。透過根據專案的需求選擇合適的服務並自訂設置,您可以實現更靈活、更強大的開發環境。
以上是【Laravel vx Docker】利用 Laravel Sail 高效率搭建 Laravel 應用開發環境的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

在PHPOOP中,self::引用當前類,parent::引用父類,static::用於晚靜態綁定。 1.self::用於靜態方法和常量調用,但不支持晚靜態綁定。 2.parent::用於子類調用父類方法,無法訪問私有方法。 3.static::支持晚靜態綁定,適用於繼承和多態,但可能影響代碼可讀性。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

HTTP請求方法包括GET、POST、PUT和DELETE,分別用於獲取、提交、更新和刪除資源。 1.GET方法用於獲取資源,適用於讀取操作。 2.POST方法用於提交數據,常用於創建新資源。 3.PUT方法用於更新資源,適用於完整更新。 4.DELETE方法用於刪除資源,適用於刪除操作。

PHP通過$\_FILES變量處理文件上傳,確保安全性的方法包括:1.檢查上傳錯誤,2.驗證文件類型和大小,3.防止文件覆蓋,4.移動文件到永久存儲位置。

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。
