2020-11-25|閱讀時間 ‧ 約 8 分鐘

使用Laradock安裝Laravel環境

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。

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.