為什麼有這篇
laradock clone 完不是 just works,至少有三件事要先處理才跑得起來(處理完照 §4 的組合啟動容器)。下次再 clone 一份新環境時照這張單子改,省得重新踩。
1. .env 必改三處
從 .env.example 複製出 .env 後,依本機環境調整以下三項:
| 設定 | example 預設 | 我的值 | 為什麼改 |
|---|---|---|---|
PHP_VERSION | 8.4 | 7.4 | 既有專案還在 PHP 7.4,相容性需要 |
PMA_DB_ENGINE | mysql | mariadb | 配合本機 DB 改用 mariadb |
PMA_PORT | 8081 | 8088 | 避免跟本機其他服務 8081 衝突 |
前兩項是長期值(跟著手上專案綁),第三項看本機其他服務佔用情況再決定。
注意:PHP_VERSION 這類 build-time 設定改完必須重新建構才生效,重啟容器沒用:
docker-compose build php-fpm workspace
docker-compose up -d php-fpm workspacebuild 完要 up -d 重建容器才會用到新 image——restart 是同一個容器 stop/start,跑的仍是舊 image。
2. nginx/sites/ 加自訂 vhost
laradock 預設 nginx/sites/ 底下只有 default.conf 跟一堆 *.conf.example,要跑自己的專案必須新增一份 <專案>.conf。
做法:複製對應的 .conf.example 改名成 <專案>.conf,按專案實際需求改 server_name、root、fastcgi_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_BRANCH、GMAIL_MAIL_*、FTP_*、JWT_SECRET 等全部已經在裡面——本機不必重填。
做法:
- 從
.env.develop複製成.env(不是從.env.example起步) - 只改 5 處連線設定,把本機 laradock 容器接上:
| 鍵 | 部署值 | laradock 本機值 |
|---|---|---|
DB_HOST | 127.0.0.1 | mariadb |
DB_USERNAME | 環境帳號 | root |
DB_PASSWORD | 環境密碼 | root |
REDIS_HOST | 127.0.0.1 | redis |
REDIS_PASSWORD | null | secret_redis |
理由:Laravel container 走 Docker 內部網路,hostname 是 service 名;root/root 與 secret_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裡 nginxdepends_on: php-fpm(php-fpm 又依賴 workspace),列了 nginx 就會自動帶起,明列只是可讀性差異、結果相同
相關
- Laradock-多專案架構 — 為什麼一份 laradock 能服務多專案、加專案動什麼不動什麼、PHP 版本共用限制