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。