สร้างแอพ Laravel Framework 5.8 ง่ายๆ ด้วย Docker Compose ภายใน 1 นาที
สำหรับใครที่กำลังจะสร้างแอพพลิเคชั่นด้วย PHP Framework สุดเจ๋งอย่างเจ้า Laravel Framework และไม่อยากยุ่งยากในการ Setup Environment ต่างๆในการพัฒนา บทความนี้ตอบโจทย์แน่นอนครับ เอาล่ะ!! ไม่พูดเยอะเจ็บคอ ลุยกันเลยดีกว่า++
(สำหรับบทความนี้ ผู้อ่านควรมีความรู้เกี่ยวกับ Docker มาก่อน ซึ่งไม่ขอลงรายละเอียดในบทความรู้น่ะครับ)
สำหรับสิ่งที่ต้องเตรียมพร้อม
- Docker ถ้าใครยังไม่ได้ติดตั้งก็ให้ติดตั้ง Docker ในเครื่องก่อนน่ะครับ สามารถดูวิธีการติดตั้งตาม OS ที่ใช้งานได้ตามนี้ Installation
- Docker Compose installation
Docker คือ engine ตัวหนึ่งที่มีการทำงานในลักษณะจำลองสภาพแวดล้อมขึ้นมาบนเครื่อง server เพื่อใช้ในการ run service ที่ต้องการ มีการทำงานคล้ายคลึงกับ Virtual Machine เช่น VMWare, VirtualBox, XEN, KVM แต่ข้อแตกต่างที่ชัดเจนคือ Virtual Machine ที่รู้จักกันก่อนหน้านี้นั้น เป็นการจำลองทั้ง OS เพื่อใช้งานและหากต้องการใช้งาน service ใดๆ จึงทำการติดตั้งเพิ่มเติมบน OS นั้นๆ แต่สำหรับ docker แล้วจะใช้ container ในการจำลองสภาพแวดล้อมขึ้นมา เพื่อใช้งานสำหรับ 1 service ที่ต้องการใช้งานเท่านั้น โดยไม่ต้องมีส่วนของ OS เข้าไปเกี่ยวข้องเหมือน Virtual Machines อื่นๆ
Docker Compose คือ tool ตัวหนึ่งของ docker ที่จะมาช่วยจัดการการสร้าง container หลายๆตัว ให้เป็นเรื่องที่ง่ายขึ้น
หากทุกอย่างพร้อมแล้ว ก็เริ่มกันเลย!!
- Clone Source code บน github ลงมาในเครื่อง ซึ่งผมได้เตรียมไว้ให้แล้วครับ
$ git clone https://github.com/siriphonNott/docker-compose-laravel.git laravel-app
- เข้าไปยัง Directory ของโปรเจค
$ cd laravel-app
- รันคำสั่งสำหรับสร้าง Container
$ docker-compose up -d
- เมื่อ Container Start ขึ้นมาสมบูรณ์แล้ว จะเห็นข้อความแสดงใน Command Prompt ตามนี้
$ docker-compose up -d
Creating network "blog_laravel-network" with driver "bridge"
Creating webserver ... done
Creating php_fpm ... done
- ตั้งติด Package สำหรับใช้กับ Laravel app
$ docker-compose exec php_fpm composer install
- จากนั้นลองเข้า Browser ด้วย URL: http://localhost:8000/ จะเห็นหน้าเว็บแสดงข้อความว่า Laravel ดังรูปภาพด้านล่าง
ขึ้นตอนสุดท้าย คือ การสร้าง User สำหรับใช้ MySQL โดยมีขั้นตอนดังนี้
- Access เข้าไปยัง db container ด้วยคำสั่งด้านล่าง
$ docker exec -it db bash
- Login เข้าสู่ MySQL ด้วย User: root และ Password ที่เราได้กำหนดไว้ในไฟล์ docker-compose.yml (ค่าเริ่มต้นคือ your_mysql_root_password)
# mysql -u root -p
- เมื่อเข้ามายัง MySQL Shell แล้วให้แสดงลิสของ database ทั้งหมด ด้วยคำสั่ง
mysql> show databases;
- คุณจะเห็น ชื่อ database “laravel” ในลิสของ Output
Output
+--------------------+
| Database |
+--------------------+
| information_schema |
| laravel |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
- จากนั้นให้กำหนดสิทธิให้กับ User: laraveluser โดยให้สิทธิทั้งหมดกับตารางข้อมูลทั้งหมดของฐานข้อมูลชื่อ “laravel” ด้วยรหัสผ่าน your_laravel_db_password (สิทธิต่างๆ ได้แก่ select, insert, update, delete, index, alter, create, drop)
mysql> GRANT ALL ON laravel.* TO 'laraveluser'@'%' IDENTIFIED BY 'your_laravel_db_password';
- และรันคำสั่ง สำหรับสั่งให้ MySQL update ข้อมูลใหม่ที่เราเพิ่ง update เข้าไป
mysql> FLUSH PRIVILEGES;
- ออกจาก MySQL Shell
mysql> EXIT;
- แล้วก็ออกจาก db container
# exit
ท้ายที่สุดจริงๆแล้ว ^^ ให้ทำการสร้าง table ขึ้นมา โดยการรันคำสั่ง ด้านล่าง
docker exec app php artisan migrate
- เมื่อระบบได้ทำการสร้าง table ให้เรียบร้อยแล้ว จะปรากฏ ข้อความด้านล่าง
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table
- จบ!!! เรียบร้อยเป็นอันเสร็จพิธีครับ ซึ่งก็ใช้เวลาไป 1 นาที ⏱️ พอดีเป๊ะ!!!
เมื่อทุกอย่างเรียบร้อยแล้วก็นั่งจิบกาแฟร้อนๆ ☕ สักแก้ว แล้วค่อยไปทำงานต่อครับ :)
เพิ่มเติม
Container จะประกอบไปด้วย 3 ตัว
- php_fpm สำหรับ Execute php file
- web_server สำหรับเป็น Web Server
- db สำหรับ MySQL server
Reference:
(ข้อมูลอาจมีข้อผิดพลาด ถ้าจะเอาบทความนี้ไปอ้างอิงที่อื่นให้ตรวจสอบให้ดีก่อนนะครับ ขอบคุณครับ)
สำหรับวันนี้ ต้องขอลาไปก่อน สวัสดีครับ NottDev :)