Light mode Dark mode

Jir4yu.me

ความรู้สึก.. ที่ตอนไหนๆก็(ไม่)เหมือนกัน

ติดตั้ง NGINX + MariaDB + PHP-FPM + phpMyAdmin บน macOSX

ลงผ่าน Homebrew โดยไม่ต้องใช้ XAMPP, MAMP ฯลฯ

บทความนี้สำหรับผู้ที่ใช้ macOSX ทำงานเกี่ยวกับพัฒนาเว็บไซต์ และต้องจำลองเครื่องตัวเองเป็นเซิฟเวอร์เพื่อพัฒนา และทดสอบก่อนนำขึ้นใช้งานจริง ยิ่งเป็น WordPress, Joomla! หรือ CMS ทั้งหลายแล้ว ก็น่าจะใช้ XAMPP ติดตั้งทีเดียวจบไปเลยง่ายๆ ใช่ไหมครับ จะเปิดปิดเรียกใช้งานอะไรทีก็ทำได้ง่ายผ่าน manager แค่กดปุ่ม start/stop ก็ใช้งานได้แล้ว ซึ่งมันก็เป็นวิธีที่ง่าย และดีเลยทีเดียว

แต่เมื่อช่วงอาทิตย์ที่ผ่านมา ผมเองกลับเจอปัญหาเล็กน้อยเกี่ยวกับ mariaDB เวอร์ชั่น 10.1 ที่ยังไม่รองรับแอตทริบิวต์แบบ JSON (รองรับตั้งแต่เวอร์ชั่น 10.2 ขึ้นไป) โดยปรกติถ้า XAMPP ยังใช้ MySQL อยู่ก็คงไม่เกิดปัญหานี้ เลยไปไล่หาเวอร์ชั่นที่ใช้ MySQL ก็ไม่เจอ หรือถ้าเจอก็คงเป็นเวอร์ชั่นเก่ามากๆ ซึ่งทำไว้เมื่อหลายปีก่อน หรือจะให้อัพเดทเวอร์ชั่นของ MariaDB ด้วยตัวเองก็ไม่ทำได้ง่ายๆ เลย (ซึ่งวิธีหลังถ้าเลือกโหลดจากเว็บไซต์หลักของ MariaDB เองจะพบว่าไม่มี source ของ macOSX) ซึ่งวิธีติดตั้งเองก็ต้องทำผ่าน homebrew

หลังจากใช้เวลานั่งงมทำนั่นทำนี่จนสามารถเปลี่ยนจากใช้ XAMPP มาติดตั้งเองได้สำเร็จ ก็เลยอยากจะเขียนขั้นตอนเก็บไว้ เผื่อตัวเองเปลี่ยนเครื่องใหม่ในอนาคต แล้วต้องมานั่งติดตั้งอะไรแบบนี้จะได้ไม่ต้องเสียเวลาหาอีก ปรกติแล้วผมใช้ PostgreSQL คู่กับ ROR เป็นหลัก ซึ่งมันก็ไม่ได้ลงแล้ว setup ขั้นตอนเยอะแบบนี้.. หรือจริงๆ แล้วมันอาจจะไม่ได้เยอะ แต่ผมเองต่างหากที่ยังไม่ชินกันแน่

ติดตั้ง Homebrew

homebrew

ขั้นตอนแรกถ้าใครที่ยังไม่มี Homebrew อยู่ในเครื่องก็เข้าไปติดตั้งให้เรียบร้อยก่อนครับ วิธีติตตั้งก็ง่ายแสนง่าย เข้าหน้าเว็บไซต์แล้วก็อบคำสั่งไปวางใน terminal แล้ว enter ก็น่าจะติดตั้งได้โดยที่ไม่ต้องเสียเวลาอะไรมากสำหรับขั้นตอนนี้ เมื่อติดตั้งแล้วคุณก็จะสามารถลง lib เสริมอื่นๆ ผ่าน brew install … ได้เลย ยกตัวอย่างเช่น brew install imagemagick เป็นต้น

ติดตั้ง PHP, PHP-FPM

หลังจากลบ XAMPP ออกจากเครื่องเราเรียบร้อยแล้ว ทีนี้เราก็มาเริ่มติดตั้ง php เวอร์ชั่นล่าสุดกันก่อน โดยวิธีติดตั้งนั้นก็ยังไม่มีอะไรซับซ้อน สามารถติดตั้งโดยใช้คำสั่ง brew install --without-apache --with-fpm php72 โดยที่เราใส่ flag ไปว่าติดตั้งโดยไม่ต้องลง Apache มานะ แต่ให้ลงพร้อมกับ php-fpm มาแทน (ในบทความนี้เราจะใช้ NGINX เป็นเว็บเซิฟเวอร์แทน Apache)

เมื่อติดตั้ง php เวอร์ชั่น 7.2 (ซึ่งเป็นเวอร์ชั่นล่าสุดตอนที่เขียนบทความนี้) พร้อมกับ php-fpm มาเรียบร้อยแล้ว เราสามารถเรียกใช้ php ขึ้นมาพร้อมกับแมคได้ผ่าน brew services start php ซึ่งวิธีทดสอบว่าตัว php-fpm นั้นทำงานอยู่หรือเปล่า ให้ลองพิมพ์คำสั่ง sudo lsof -i tcp:9000 ดูครับ ถ้าขึ้นแบบรูปภาพด้านล่างแสดงว่า php-fpm นั้นติดตั้ง และพร้อมใช้งานเป็นที่เรียบร้อย

php and php-fpm

สำหรับคนที่พบปัญหาไม่ขึ้นดังภาพด้านบน ให้ลองพิมพ์ php -v; php-fpm -v ก่อนครับ แล้วดูว่าหน้าต่าง terminal แสดงข้อความเวอร์ชั่นของ php และ php-fpm ที่ติดตั้งขึ้นมาไหม ถ้ายังไม่ขึ้น หรือขึ้นว่า command not found อาจจะต้อง export PATH ให้เรียบร้อยก่อน จึงจะใช้งานได้

ติดตั้ง MariaDB

สำหรับคนที่ยังยืนยันว่าไม่ค่อยอยากใช้งาน MySQL ก็สามารถติดตั้ง MariaDB เป็นทางเลือกได้ครับ โดยเราจะติดตั้งเวอร์ชั่นล่าสุด ซึ่งตอบโจทย์กับที่ผมต้องการใช้งานในตอนแรก(ต้องการเวอร์ชั่นสูงกว่า 10.1) ผ่านคำสั่ง brew install mariadb เมื่อติดตั้งเรียบร้อยแล้ว เราสามารถสั่งเปิด-ปิดการใช้งานได้ผ่านคำสั่ง mysql.server start หรือ mysql.server stop ผ่าน terminal ได้เลย หรือหากต้องการให้รันขึ้นมาพร้อมกับการเปิดเครื่องให้พิมพ์ brew services start mariadb

ตั้งค่ารหัสผ่านของผู้ใช้

วิธีนี้ทำได้เหมือนกันทั้ง MySQL และ MariaDB หลังจากติดตั้งแล้วให้เราพิมพ์คำสั่ง mysql -u root เพื่อเข้าสู่ console ของฐานข้อมูล จากนั้นให้ตั้งรหัสผ่านสำหรับผู้ใช้ root โดยใช้คำสั่งนี้

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('your_password');

โดยเปลี่ยนค่า your_password เป็นรหัสผ่านที่คุณต้องการใช้แล้วเคาะ enter หนึ่งครั้ง จากนั้น ให้พิมพ์ \q หรือ exit เพื่อออกจาก console กลับมาที่หน้า console ของผู้ใช้เราเหมือนเดิม

** เมื่อตั้งค่ารหัสผ่านแล้ว เราสามารถทดสอบการใช้งานได้ผ่านคำสั่ง mysql -u root -p เคาะ enter จากนั้นหน้าต่างจะถามรหัสผ่านที่เราเพิ่งสร้างขึ้นไปเมื่อสักครู่ ถ้ากรอกรหัสผ่านถูกจะสามารถเข้า console ของฐานข้อมูลได้ครับ **

ติดตั้ง NGINX

พิมพ์คำสั่ง brew install nginx จากนั้นตัวเว็บเซิฟเวอร์จะทำงานทันทีหลังจากติดตั้งเสร็จ ให้เราลองพิมพ์ http://127.0.0.1:8080 ในเว็บเบราเซอร์ จะขึ้นเป็นหน้า welcome ของ NGINX แต่ถ้าใครที่พิมพ์แล้วไม่ขึ้น ให้ลองพิมพ์คำสั่ง sudo nginx เพื่อเปิดให้มันเริ่มใช้งานก่อนได้ครับ

  • ใช้คำสั่ง sudo nginx -s stop เพื่อปิดการทำงาน
  • ใช้คำสั่ง sudo nginx -s reload เวลาเราทำการแก้ไข config ของ NGINX
  • ใช้คำสั่ง brew services nginx เพื่อให้ NGINX เริ่มใช้งานทันทีพร้อมกับตอนที่เปิดเครื่องแมค

จากนั้นให้เราเข้าไปแก้ไขไฟล์ตั้งค่าของ NGINX ที่อยู่ที่ /usr/local/etc/nginx/nginx.conf โดยใช้ editor ที่คุณชื่นชอบ เนื่องจากไฟล์มันรายละเอียดค่อนข้างเยอะ ขอแปะเป็น gist เอาไว้ให้อ่านได้ง่ายๆ

หมายเหตุ: ผมสร้าง log folder ขึ้นมา เพื่อให้เก็บ log ของ nginx ไว้ที่ /usr/local/etc/nginx/log/ ถ้าคุณใช้โค้ดตาม gist ด้านบนก็สามารถสร้างตามได้เลยโดยใช้คำสั่ง mkdir /usr/local/etc/nginx/log/

ต่อไปให้สร้าง folder sites-available กับ sites-enable ขึ้นมาโดยใช้คำสั่ง mkdir /usr/local/etc/nginx/sites-available และ mkdir /usr/local/etc/nginx/sites-enable ตามลำดับ หลังจากสร้างแล้วเราจะมาเริ่มสร้าง server block ของเรากันครับ

ให้สร้างไฟล์ชื่อ default ในไดเรคทอรี่ sites-available โดยใส่เนื้อหาของไฟล์ตาม gist ด้านล่างนี้

โดยให้เปลี่ยน root เป็นตำแหน่งไดเรคทอรี่ที่คุณต้องการใช้ได้เลย จากนั้นให้บันทึกไฟล์ แล้วทำ symlink เข้าไปยัง sites-enable โดยใช้คำสั่ง sudo ln -s /usr/local/etc/nginx/sites-available/default /usr/local/etc/nginx/sites-enable/default เมื่อทำเรียบร้อยก็ให้ reload nginx config โดยใช้คำสั่ง sudo nginx -s reload จากนั้นให้เราเข้าไปยังหน้า http://127.0.0.1 (สำหรับคนที่เปลี่ยน port listen เป็น 80 ตามใน gist) หรือ http://127.0.0.1:8080 ตามของเดิมที่ติดมาของ NGINX เพื่อเรียกดูไฟล์ตาม root ไดเรคทอรี่ที่เราตั้งค่าไว้

ตัวอย่างของผมคือสร้างไฟล์ index.php ไว้ที่ root แล้วใส่โค้ด ก็จะขึ้นหน้าตาแบบนี้

ติดตั้ง phpMyAdmin

หลังจากที่ติดตั้ง NGINX, MariaDB และ PHP-FPM เป็นที่เรียบร้อยแล้ว สิ่งสุดท้ายที่ช่วยอำนวยความสะดวกในการจัดการฐานข้อมูลก็คือ phpMyAdmin เนี่ยแหละครับ ก่อนเริ่มติดตั้งให้เราพิมพ์คำสั่ง brew install autoconf เพื่อติดตั้งพวก dependency ทั้งหลายสำหรับ phpMyAdmin ก่อน พอเรียบร้อยแล้วก็พิมพ์ brew install phpmyadmin ต่อเลย

เมื่อติดตั้งแล้วเราก็อยากจะเรียกใช้ phpmyadmin กันง่ายๆ ผ่าน http://127.0.0.1/phpmyadmin อะไรแบบนี้กันใช่ไหมครับ ถ้าแบบนั้นให้ทำ symlink ออกมาให้เรียกใช้กันสะดวกๆ หน่อยดีกว่าผ่านคำสั่ง sudo ln -s /usr/local/share/phpmyadmin [path ที่คุณใช้เป็น root] ยกตัวอย่าง ถ้าใครที่คัดลอกตาม gist ล่าสุดมาเลยก็จะได้แบบนี้ sudo ln -s /usr/local/share/phpmyadmin /Users/admin/Desktop/phpmyadmin ครับ

ตั้งค่า phpMyAdmin

ขั้นตอนสุดท้ายในการตั้งค่าคือแก้ไขไฟล์ /usr/local/etc/phpmyadmin.config.inc.php เพื่อกรอกข้อมูลผู้ใช้ตามที่เราสร้างไปในขั้นตอนการตั้งค่ารหัสผ่าน (ถ้ายังไม่มีบรรทัด user/password ก็เขียนต่อเอา host ได้เลยครับ) ดังภาพด้านล่างเป็นตัวอย่าง

setup-phpmyadmin

จากนั้นให้บันทึกแล้วลองเรียกหน้า http://127.0.0.1/phpmyadmin ขึ้นมาทดสอบ ถ้าใครที่เข้ามาหน้าจัดการฐานข้อมูลได้เหมือนกับที่ใช้ XAMPP ก็เป็นอันเรียบร้อยแล้ว สำหรับการติดตั้ง NGINX + MariaDB + PHP-FPM + phpMyAdmin บนเครื่อง macOSX โดยไม่ต้องพึ่ง XAMPP หรือ MAMP อีกต่อไป

phpmyadmin
สังเกตุที่ด้านขวาจะขึ้นเป็น stack ที่เราเพิ่งติดตั้งใช้งาน

สำหรับคนที่เจอปัญหา

อาจจะเป็นเรื่องของ phpMyAdmin ไม่เห็น MariaDB บ้าง หรือเรียกคำสั่ง php -v, php-fpm -v ไม่เจอ ลอง restart service นั้นดูก่อนครับ บางทีตัว service เองอาจจะไม่ได้เริ่มขึ้นมาให้หลังติดตั้งเสร็จ สามารถพิมพ์ brew services list เพื่อแสดง service ที่ใช้งานอยู่ หรือใช้ brew services start/stop/restart เพื่อเริ่มทำงานของ service นั้นใหม่ได้ ยกตัวอย่างเช่น brew services restart php เป็นต้น

บางคนอาจจะเจอปัญหา run php service ไม่ขึ้น ลองเปิดไฟล์ /usr/local/etc/php/7.2/php-fpm.d/www.conf แล้วแก้บรรทัดที่ 23 และ 24 โดยตั้งค่า user = [ชื่อ username เครื่อง mac ของคุณ] group = staff ดูครับ ยกตัวอย่างชื่อ username บนเครื่อง mac ของผมชื่อ ‘jir4yu’ ก็ให้ใส่ user = jir4yu group = staff เป็นต้น ปัญหานี้ส่วนมากจะเกิดจากเวอร์ชั่นของ OSX ทุกครั้งที่แก้ไขก็อย่าลืม brew services restart php ทุกครั้ง

เพิ่มเติม เผื่อต้องการแก้ไขไฟล์ต่างๆ ที่ติดตั้งเอาไว้

  • ไฟล์ PHP-FPM ที่ติดตั้งอยู่ที่ /usr/local/etc/php/7.2/
  • ของ NGINX อยู่ที่ /usr/local/etc/nginx
  • ของ phpMyAdmin อยู่ที่ /usr/local/share/phpmyadmin
  • หรือใช้คำสั่ง brew info [ชื่อ service] เพื่อดูข้อมูล ตำแหน่งที่ติดตั้ง และอื่นๆ ตัวอย่างเช่น brew info php

 

Jirayu Limjinda

ถ้าไม่รู้จักกัน บางทีคุณอาจจะไม่เข้าใจกับสิ่งที่ผมทำ.. กลับกัน ถ้าคุณรู้จักผมดี คุณจะไม่ต้องเอ่ยปากถามเลยว่าทำไม

แสดงความคิดเห็นของคุณที่นี่

loading, please wait..

loading, please wait..