สร้าง Laravel Environments บน Docker ง่ายๆด้วย Laradock

Anucha Maitripirom
3 min readJun 9, 2018

--

หลายๆคนอาจจะประสบปัญหากับเรื่อง set environments ซึ่ง laravel ก็มี homestead แล้ว แต่อยากลองมาใช้ docker ดูบ้าง แต่ก็ขี้เกียจไปตั้งค่าให้วุ่นวาย ซึ่งบทความนี้ผมจะแนะนำอีกหนึ่งหนทาง สำหรับคนที่อยากได้อะไรไวๆ

เหมือนกับการต้มมาม่า

แค่ แกะซอง เทน้ำร้อน รอ และก็กินได้เลย

Laradock คืออะไร

ก็คือการรวม docker image ที่จำเป็นในการสร้างโปรเจค Laravel ไว้ด้วยกัน เพื่อแก้ปัญหาเรื่องการ set up environments ทำให้ Dev ไม่ต้องปวดหัวกับการตั้งค่าหรือติดตั้ง environments

ซึ่งความปวดหัวที่ว่าก็คือการเขียน Dockerfile เอง หรือการเขียน docker-compose.yml ก็ตาม สิ่งเหล่านี้ถ้าเรามาศึกษาเองทั้งหมด มันก็จะใช้เวลา และต้องทำความเข้าใจพอสมควร (แต่ก็แนะนำให้นำไปศึกษาต่อ เพื่อเพิ่มประสิทธิภาพในการทำงาน)

และตัว Laradock ก็มีเอกสารที่ค่อนข้างดีเลยทีเดียว ซึ่งทุกคนสามารถอ่านละทำตามได้ไม่ยาก จึงเหมาะกับมือใหม่มากๆครับ :)

Prepare installation

เตรียมความพร้อมก่อนเริ่ม

githttps://git-scm.com/downloads

dockerhttps://www.docker.com/get-docker

docker-composehttps://docs.docker.com/compose/install/#install-compose

1. สร้าง Project Directory

clone Laravel มาจาก github กรณีที่ไม่อยากลง composer บนเครื่อง

git clone https://github.com/laravel/laravel.git ./

หรือถ้ามี composer ก็สามารถสร้างโปรเจคตามปกติ

composer create-project laravel/laravel

จากนั้นก็ clone laradock มาไว้ใน directory อีกที

git clone https://github.com/Laradock/laradock.git
ทำการ clone laradock มายังโปรเจคของเรา
จะพบ directory ชื่อ laradock

เข้าไปยัง directory ที่ชื่อว่า laradock จากนั้น ทำการคัดลอก env-example แล้วเปลี่ยนชื่อเป็น .env โดยใช้คำสั่ง

cp env-example .env

2. Docker up !!

หลังจากที่เราโคลน laradock มาแล้ว เราก็จะให้ docker สร้าง container ขึ้นมาตามนี้

cd laradock # ย้ายไปยังไดเร็กทอรี่ของ laradock 
docker-compose up
-d nginx mariadb workspace # ให้ docker สร้าง container จากไฟล์ docker-compose.yml

จากนั้นรอสักพักใหญ่ๆ ให้ระบบทำการติดตั้งและตั้งค่า environments (เฉพาะแค่ครั้งแรกตอนติดตั้งเท่านั้น)

ถ้าเสร็จแล้วจะขึ้นตัวเขียวๆ แต่ที่ขึ้นสีแดงผมได้อธิบายไว้ด้านล่างแล้วครับ

ถ้าขึ้นตัวสีแดงๆแบบในภาพ หมายความว่าสร้าง container ไม่สำเร็จ อาจจะเป็นเพราะ port ที่ต้องการใช้มี service อื่นใช้งานอยู่

แต่โดยปกติแล้วถ้าไม่ได้เปิด service อะไรไว้ก็จะขึ้นเป็นตัวสีเขียวทั้งหมดครับ :)

ส่วนกรณีของผมคือผมเป็น contain อีกตัวไว้ แต่ container nginx ที่สร้างใหม่ดันไปใช้ port เดียว ผมจึงต้องไปแก้ port ในไฟล์ laradock/.env ดูข้อมูลเพิ่มเติมได้ในข้อที่ 3

หากเราต้องการเชคสถานะสามารถทำได้โดย

docker-compose ps

หรือ

docker ps
คำสั่ง dokcer-compose ps

3. อธิบายคำสั่ง และ Config เพิ่มเติม

( ข้ามไป 4ได้เลยนะ )

อธิบายคำสั่ง

dock-compose up — ทำการสร้าง docker containner จากไฟล์ docker-compose.yml

  • d — ทำงานเบื้องหลังไม่แสดงข้อความออกมา
  • nginx mariadb workspace — ชื่อ container ที่สร้างไว้ภายในไฟล์ docker-compose.yml

หากบางท่านอยากใช้ mysql ก็ให้ใช่ mysql แทน mariadb จะได้ประมาณ

docker-compose up -d nginx mysql workspace

หรืออยากใช้ apche ก็จะได้เป็น

docker-compose up -d apache mariadb workspace

Config เพิ่มเติม

Laradock สามารถ แก้ไข config environments ต่างๆได้ภายในไฟล์ laradock/.env
เช่นผมต้องการเปลี่ยนพอร์ตของ nginx ซึ่งปกติเป็น 80 ให้เป็น 8081 ก็สามารถทำได้ภายในไฟล์นี้เลย

ตั้งค่า Nginx กรณีที่เปิด service หลาย container

4. Laravel set up

หลังจากที่ปล่อยให้ docker ติดตั้ง container เสร็จแล้ว ลองเข้าไปยังหน้าเว็บจะพบข้อความประมาณนี้

จะพบกับ Internal 500 เพราะ

เพราะเรายังไม่ได้ติดตั้งแพคเกจ และตั้งค่าไฟล์ .env ของ laravel

500 Internal Error

ถ้าหากเราไม่ได้ไปเปลี่ยนค่าอะไรใน laradock/.env เราก็ใส่ค่าตามนี้ได้เลย (เป็นค่าตั้งต้นของ Laradock)

# ไฟล์ .env ของ Laravel
DB_CONNECTION=mysql
DB_HOST=mariadb #IP ของ host ถ้าเราใช้ mysql container ก็ใส่ mysql แทน
DB_PORT=3306
DB_DATABASE=defaul
DB_USERNAME=root
DB_PASSWORD=root

พิมคำสั่ง

docker-compose exec — user laradock workspace bash

ตอนนี้เราจะเหมือนเรา ssh ไปยัง docker container ที่ชื่อว่า workspace

ต่อด้วยการติดตั้งแพคเกจต่างของ Laravel ด้วยคำสั่ง

composer update

จากนั้นก็รอ (อีกแล้ว)

หลังจากที่ composer ติดตั้งเสร็จแล้วก็พิมพ์

php artisan key:generate

ลองกลับไปดูที่หน้าเว็บอีกที

ก็จะพอหน้าขาวๆแบบในภาพ

ลองสั่ง

php artisan migrate

เป็นอันเสร็จสิ้นการติดตั้ง Laradock และ Laravel ครับ

สามารถอ่านข้อมูลเพิ่มเติมได้ที่ Laradock.io

Have fun with coding :D

--

--