ป้ายกำกับ: Php-fpm

คู่มือการสร้าง WordPress Local Development Stack ด้วย Docker (Nginx + PHP-FPM + MariaDB)คู่มือการสร้าง WordPress Local Development Stack ด้วย Docker (Nginx + PHP-FPM + MariaDB)

BASH / Shell

/wp-dev-stack-pg/\n├── .env                      # ไฟล์ตัวแปรสภาพแวดล้อม (DB_HOST, DB_NAME, etc.)\n└── app_wordpress_pg_dev/\n    ├── docker-compose.yml    # นิยามเซอร์วิส: nginx, php-fpm, postgres\n    ├── init.sql              # SQL Template สำหรับสร้าง Schema และ User\n    ├── nginx/\n    │   └── default.conf      # คอนฟิก Nginx สำหรับ FastCGI Proxy\n    └── src/                  # โค้ด WordPress (Bind Mount)

การกำหนดค่า PostgreSQL และการเชื่อมต่อ

หัวใจสำคัญของการเชื่อมต่อคือไฟล์ docker-compose.yml และ init.sql ในส่วนของ init.sql เราจะใช้ไวยากรณ์ของ PostgreSQL เพื่อสร้างฐานข้อมูลและผู้ใช้ที่ WordPress จะใช้เชื่อมต่อ:

SQL

-- 1. สร้าง User สำหรับ WordPress\nCREATE USER wp_user WITH PASSWORD 'secure_password';\n\n-- 2. สร้าง Database ที่มีเจ้าของเป็น wp_user\nCREATE DATABASE wordpress_db OWNER wp_user ENCODING 'UTF8';\n\n-- 3. กำหนดสิทธิ์ให้ผู้ใช้กับฐานข้อมูล\nGRANT ALL PRIVILEGES ON DATABASE wordpress_db TO wp_user;

เมื่อกำหนดค่าเหล่านี้แล้ว ไฟล์ wp-config.php ใน WordPress จะถูกตั้งค่าให้รับค่าจากตัวแปรสภาพแวดล้อม (.env) แทนการ Hardcode ทำให้การเปลี่ยนสภาพแวดล้อมทำได้ง่ายดาย

ขั้นตอนการทำงาน (Execution Flow)

เมื่อรันคำสั่ง docker compose up -d ระบบจะดำเนินการดังนี้:

  1. PostgreSQL Container: เริ่มทำงานและรันสคริปต์ init.sql เพื่อเตรียมโครงสร้างฐานข้อมูล
  2. PHP-FPM Container: เชื่อมต่อกับ PostgreSQL และรันโค้ด WordPress
  3. Nginx Container: ทำหน้าที่เป็น Gatekeeper รับ Request และส่งต่อคำขอไปยัง PHP-FPM ผ่าน FastCGI Protocol

ด้วยการแยกส่วนนี้ ทำให้เราสามารถอัปเกรดเวอร์ชัน PHP หรือ PostgreSQL ได้อย่างอิสระ โดยไม่กระทบต่อส่วนอื่น ๆ ของ Stack

บทสรุป

การใช้ Docker ร่วมกับ PostgreSQL ทำให้การสร้าง Local Development Environment สำหรับ WordPress มีความเสถียรสูง ปลอดภัย และสามารถทำซ้ำได้ในทุกเครื่องคอมพิวเตอร์ การเรียนรู้สถาปัตยกรรมแบบ Containerization นี้ไม่เพียงแต่ช่วยให้การพัฒนาเร็วขึ้น แต่ยังยกระดับทักษะด้าน System Architecture ของนักพัฒนาให้เป็นระดับ Senior Architect อย่างแท้จริง

ในโลกของการพัฒนาเว็บไซต์สมัยใหม่ การมีสภาพแวดล้อมจำลอง (Local Development Stack) ที่เสถียรและสามารถทำซ้ำได้ (Reproducible) ถือเป็นสิ่งสำคัญอย่างยิ่ง การใช้ Docker เข้ามาช่วยในการสร้าง Stack สำหรับ WordPress โดยเฉพาะการแยกส่วน (Decoupled Architecture) ระหว่าง Nginx, PHP-FPM และฐานข้อมูล PostgreSQL ทำให้การพัฒนาเป็นไปอย่างมีประสิทธิภาพสูง บทความนี้คือคู่มือฉบับสมบูรณ์ในการสร้างระบบนี้ด้วย PostgreSQL ซึ่งเป็นฐานข้อมูลที่ทรงพลังและเชื่อถือได้

สถาปัตยกรรมและองค์ประกอบหลัก (Architecture Overview)

ระบบนี้ถูกออกแบบให้ทำงานแบบ Microservices โดยมีองค์ประกอบหลัก 3 ส่วนที่ทำงานร่วมกัน:

  1. Nginx (Web Server): ทำหน้าที่เป็น Reverse Proxy รับ Traffic จากภายนอก และส่งต่อคำขอ PHP ไปยัง PHP-FPM
  2. PHP-FPM (Application Layer): รับผิดชอบในการประมวลผลโค้ด PHP ของ WordPress และจัดการการเชื่อมต่อกับฐานข้อมูล
  3. PostgreSQL (Database): จัดเก็บข้อมูลทั้งหมดของ WordPress อย่างปลอดภัยและมีประสิทธิภาพ

โครงสร้างโปรเจกต์และไฟล์สำคัญ

เราจะเริ่มต้นด้วยการสร้างโครงสร้างโปรเจกต์ที่ประกอบด้วยไฟล์คอนฟิกหลักและสคริปต์การจัดการ:

BASH / Shell

/wp-dev-stack-pg/\n├── .env                      # ไฟล์ตัวแปรสภาพแวดล้อม (DB_HOST, DB_NAME, etc.)\n└── app_wordpress_pg_dev/\n    ├── docker-compose.yml    # นิยามเซอร์วิส: nginx, php-fpm, postgres\n    ├── init.sql              # SQL Template สำหรับสร้าง Schema และ User\n    ├── nginx/\n    │   └── default.conf      # คอนฟิก Nginx สำหรับ FastCGI Proxy\n    └── src/                  # โค้ด WordPress (Bind Mount)

การกำหนดค่า PostgreSQL และการเชื่อมต่อ

หัวใจสำคัญของการเชื่อมต่อคือไฟล์ docker-compose.yml และ init.sql ในส่วนของ init.sql เราจะใช้ไวยากรณ์ของ PostgreSQL เพื่อสร้างฐานข้อมูลและผู้ใช้ที่ WordPress จะใช้เชื่อมต่อ:

SQL

-- 1. สร้าง User สำหรับ WordPress\nCREATE USER wp_user WITH PASSWORD 'secure_password';\n\n-- 2. สร้าง Database ที่มีเจ้าของเป็น wp_user\nCREATE DATABASE wordpress_db OWNER wp_user ENCODING 'UTF8';\n\n-- 3. กำหนดสิทธิ์ให้ผู้ใช้กับฐานข้อมูล\nGRANT ALL PRIVILEGES ON DATABASE wordpress_db TO wp_user;

เมื่อกำหนดค่าเหล่านี้แล้ว ไฟล์ wp-config.php ใน WordPress จะถูกตั้งค่าให้รับค่าจากตัวแปรสภาพแวดล้อม (.env) แทนการ Hardcode ทำให้การเปลี่ยนสภาพแวดล้อมทำได้ง่ายดาย

ขั้นตอนการทำงาน (Execution Flow)

เมื่อรันคำสั่ง docker compose up -d ระบบจะดำเนินการดังนี้:

  1. PostgreSQL Container: เริ่มทำงานและรันสคริปต์ init.sql เพื่อเตรียมโครงสร้างฐานข้อมูล
  2. PHP-FPM Container: เชื่อมต่อกับ PostgreSQL และรันโค้ด WordPress
  3. Nginx Container: ทำหน้าที่เป็น Gatekeeper รับ Request และส่งต่อคำขอไปยัง PHP-FPM ผ่าน FastCGI Protocol

ด้วยการแยกส่วนนี้ ทำให้เราสามารถอัปเกรดเวอร์ชัน PHP หรือ PostgreSQL ได้อย่างอิสระ โดยไม่กระทบต่อส่วนอื่น ๆ ของ Stack

บทสรุป

การใช้ Docker ร่วมกับ PostgreSQL ทำให้การสร้าง Local Development Environment สำหรับ WordPress มีความเสถียรสูง ปลอดภัย และสามารถทำซ้ำได้ในทุกเครื่องคอมพิวเตอร์ การเรียนรู้สถาปัตยกรรมแบบ Containerization นี้ไม่เพียงแต่ช่วยให้การพัฒนาเร็วขึ้น แต่ยังยกระดับทักษะด้าน System Architecture ของนักพัฒนาให้เป็นระดับ Senior Architect อย่างแท้จริง