Environment: GCP
Linux version: CentOS 7
Laradock的初衷原是為了將Laravel環境容器化,但隨著時間的演進,慢慢包含了各種常用的工具了,如php-fpm, apache, nginx, mysql, phpmyadmin, redis等等這些常用的東西,可以透過指令決定要選用哪些。
Requirement:
需先安裝docker與docker-compose安裝與設定Laradock:
若沒有git,先安裝:
$ yum install git
1. 將Laradock clone下來:
$ git clone https://github.com/Laradock/laradock.git Laradock
ls看一下,真的是包山包海呢!

2. 配置環境設定
在Laradock資料夾內找到env-example,複製一份.env出來設定:
$ cp env-example .env
接著打開.env:
$ vim .env

APP_CODE_PATH_HOST: 設定Laravel專案要放在local的哪個path
APP_CODE_PATH_CONTAINER: 設定專案要同步到container中的哪個path
DATA_PATH_HOST: 設定db, redis資料要放在哪個path
Note: .env中還有mysql, php, phpmyadmin相關配置,也設定一下:



# phpmyadmin的預設使用者帳密:
PMA_USER=default
PMA_PASSWORD=secret
啟動 Laradock:
在Laradock folder下:
$ docker-compose up -d nginx mysql phpmyadmin
這邊可以自由放想啟動的服務,根據需求調整。
不用特別指定php-fpm,Laradock 會自己啟動php-fpm與workspace。
完成後會看到類似這些訊息,幫我們把容器都建好了:


Note: .env中有個COMPOSE_PROJECT_NAME,這是container name的prefix。

建立Laravel專案:
進入workspace container:
$ docker-compose exec workspace bash

進去後在/var/www目錄,則是對應到外部我們設定的../dev_project/。
直接來建立一個test的Laravel專案:
$ composer create-project laravel/laravel --prefer-dist test
接著記得修改.env中DB config:

在docker世界裡,DB_HOST不再是127.0.0.1,要用container name。
開啟phpmyadmin:
由於在8081 port,需在GCP中開啟該port。
VPC網路 -> 防火牆 -> 建立防火牆規則


其中目標標記這個tag則要拿來VM這邊加入防火牆Rule。

完成後即可在外部透過瀏覽器打開phpmyadmin:

設定Nginx:
在Laradock/nginx/sites中,複製一份laravel.conf.example,根據喜好命名:
$ cp laravel.conf.example laravel.test.conf
接著打開laravel.test.conf設定一下server_name, root等等:

重啟 laradock套用設定:
$ docker-compose down
$ docker-compose up -d nginx mysql phpmyadmin

接著打開若出現這個error,需修改權限:

進入workspace內修改project storage下的權限:
$ chown -R laradock:laradock storage/logs
後來發現又出現storage底下的framework也沒權限:
$ chown -R laradock:laradock storage/framework


後記:
程式執行過程若出現 chmod(): Operation not permitted 這種錯誤,把project owner改成laradock即可!
$ chown -R laradock:laradock project_path
若發生js code明明已經更新,瀏覽器cache也都清過了,但就是吃不到最新的code,這時需把nginx restart:
$ docker restart xxx_nginx
單純把laradock down再up是沒用的!
Note:
Laradock/.env中設定的nginx port是指expose到host的port,映射到container中的nginx port則是在Laradock/docker-compose.yml中設定(如下紅字):

因此在Laradock/nginx/sites中設定的config,listen port要設定映射到container中的port。
Laradock設定開機自啟動:
在Laradock/docker-compose.yml中設定需要開機自啟動的service,加入restart: unless-stopped,下圖以nginx為例:

以本文章為例,docker-compose up -d nginx mysql phpmyadmin,可以看到起了: php-fpm, workspace, nginx, mysql, phpmyadmin, docker-in-docker
這些東西! 因此這些service都要設上restart: unless-stopped。

本筆記參考:
1. https://ithelp.ithome.com.tw/articles/10194127
2. https://medium.com/%E4%B8%80%E5%80%8B%E5%B0%8F%E5%B0%8F%E5%B7%A5%E7%A8%8B%E5%B8%AB%E7%9A%84%E9%9A%A8%E6%89%8B%E7%AD%86%E8%A8%98/laravel-docker-%E8%BC%95%E9%AC%86%E4%B8%8A%E6%89%8B-4cefeeb3febc
3. https://yeeinhole.github.io/2020/01/27/laradock/
4. http://laradock.io/
5. https://github.com/laradock/laradock/issues/1953
6. https://stackoverflow.com/questions/43671482/how-to-run-docker-compose-up-d-at-system-start-up
7. https://stackoverflow.com/questions/60490738/docker-compose-docker-at-the-startup