為什麼有這篇

laradock clone 完不是 just works,至少有三件事要先處理才跑得起來(處理完照 §4 的組合啟動容器)。下次再 clone 一份新環境時照這張單子改,省得重新踩。

1. .env 必改三處

.env.example 複製出 .env 後,依本機環境調整以下三項:

設定example 預設我的值為什麼改
PHP_VERSION8.47.4既有專案還在 PHP 7.4,相容性需要
PMA_DB_ENGINEmysqlmariadb配合本機 DB 改用 mariadb
PMA_PORT80818088避免跟本機其他服務 8081 衝突

前兩項是長期值(跟著手上專案綁),第三項看本機其他服務佔用情況再決定。

注意:PHP_VERSION 這類 build-time 設定改完必須重新建構才生效,重啟容器沒用:

docker-compose build php-fpm workspace
docker-compose up -d php-fpm workspace

build 完要 up -d 重建容器才會用到新 image——restart 是同一個容器 stop/start,跑的仍是舊 image。

2. nginx/sites/ 加自訂 vhost

laradock 預設 nginx/sites/ 底下只有 default.conf 跟一堆 *.conf.example,要跑自己的專案必須新增一份 <專案>.conf

做法:複製對應的 .conf.example 改名成 <專案>.conf,按專案實際需求改 server_namerootfastcgi_pass 等欄位。

nginx/sites/.gitignore*.conf + !default.conf:新增的 <專案>.conf 因符合 *.conf 被忽略、不會 commit;.conf.example 因副檔名不是 .conf、本就不被 *.conf 命中(非 gitignore 特地例外)。每台機器各自管理 vhost。

3. Laravel 專案 .env 只要改 5 處連線設定

關鍵觀察:專案已經有 .env.develop / .env.formal / .env.master 當部署模板,第三方 key、命名空間(CACHE_PREFIX / REDIS_PREFIX / REDIS_QUEUE)、業務 flag、APP_BRANCHGMAIL_MAIL_*FTP_*JWT_SECRET全部已經在裡面——本機不必重填。

做法:

  1. .env.develop 複製成 .env(不是從 .env.example 起步)
  2. 只改 5 處連線設定,把本機 laradock 容器接上:
部署值laradock 本機值
DB_HOST127.0.0.1mariadb
DB_USERNAME環境帳號root
DB_PASSWORD環境密碼root
REDIS_HOST127.0.0.1redis
REDIS_PASSWORDnullsecret_redis

理由:Laravel container 走 Docker 內部網路,hostname 是 service 名;root/rootsecret_redis 都是 laradock 容器的預設帳密。

4. Laravel 專案的容器啟動組合

docker-compose up -d workspace nginx mariadb phpmyadmin redis

與 CI3 版(Laradock-CI3-本機啟動模板 §1)的差異:

  • redis:Laravel 的 cache / queue 用,對應上面 §3 的 REDIS_HOST=redis;CI3 專案用不到
  • 省略 php-fpm:laradock 的 docker-compose.yml 裡 nginx depends_on: php-fpm(php-fpm 又依賴 workspace),列了 nginx 就會自動帶起,明列只是可讀性差異、結果相同

相關

  • Laradock-多專案架構 — 為什麼一份 laradock 能服務多專案、加專案動什麼不動什麼、PHP 版本共用限制