從 Docker Desktop 換到 Podman 1 ,開始需要處理某些相容性問題。有些問題不見得是 Podman 的錯,但既然遇到了,就順手記錄一下除雷經驗。
此文記錄一下在 Podman 執行 Laravel 9 欽定開發環境 Sail 的步驟。
前置作業:安裝 Podman
如果你是 Linux 用戶,請依照 Podman 官方文件所載步驟安裝 Podman。
如果你是 Windows 用戶,請根據〈WSL2 + Podman + K3s 組合技〉一文安裝 WSL2 + Podman。
如果你是 Mac 用戶,請先用 brew install podman
來安裝。但據說 multipass + Podman 方案更好,我會再找時間實驗。
前置作業:Podman daemon mode
Laravel 的 Sail 需要用到 Docker Compose,而且它的 docker-compose.yml 又寫得⋯⋯很需要是以 daemon mode 運作的 container engine。
所以,請根據〈Podman Tips〉一文的步驟,啟動一個 daemon mode 的 Podman。
前置作業:解決 Composer 連線問題
有些人在透過 Composer 安裝套件的過程中,會出現 repo.packagist.org 連線 timeout 的問題:
curl error 28 while downloading https://repo.packagist.org/packages.json:
Connection timed out after 10000 milliseconds
請參考這篇解法,將 repo.packagist.org 的 IPv4 位址直接寫死到 /etc/hosts
:
% dig +short repo.packagist.org
% echo "`dig +short repo.packagist.org` repo.packagist.org" >> /etc/hosts
如果你是身處 WSL2 環境,也請順便編輯一下 WSL 的設定檔 /etc/wsl.conf
以避免設定消失:
[network]
# Disable auto-gen /etc/hosts
generateHosts = false
安裝 Sail
請依照 Laravel 官方文件所載步驟,安裝一整套 PHP + Composer + Laravel + Sail + blah blah blah 本地開發環境,也順便建立一個名為 “example-app” 的新專案:
% curl -s "https://laravel.build/example-app" | bash
修改 Sail 產生的專案設定
透過 Laravel + Sail 產生的專案,預設會跑在 port 80。我建議修改到其他 unprivileged port 以減少問題。
請在專案的 .env
檔案添加這一行:
APP_PORT=3001
透過 Laravel + Sail 產生的專案,storage
目錄可能會有存取權限的問題。請參考這篇解法:
% chmod o+w ./storage/ -R
或是保守一點:
% chmod o+w ./storage/logs/ -R
% chmod o+w ./framework/cache/ -R
% chmod o+w ./framework/sessions/ -R
% chmod o+w ./framework/views/ -R
執行 Sail
請依照 Laravel 官方文件所載步驟,執行 “example-app” 專案:
% cd example-app
% ./vendor/bin/sail up
如果一切順利,可以用瀏覽器看到 http://localhost:3001/ 順利執行:
也順便看看整個 Laravel 產生的本地開發環境含有哪些東西:
僅以這篇文章示範,只要懂得排雷,Podman 足以勝任 Docker Desktop 的角色。
-
詳見〈WSL2 + Podman + K3s 組合技〉一文。 ↩︎