ในโลกของการพัฒนาเว็บแอปพลิเคชันสมัยใหม่ การสร้างสภาพแวดล้อม (Development Environment) ที่แม่นยำและสามารถทำซ้ำได้ (Reproducible) เป็นสิ่งสำคัญอย่างยิ่ง บทความนี้จะนำเสนอวิธีการสร้าง Custom PHP 8.5 Development Environment บนพื้นฐานของ Alpine Linux โดยใช้ Docker และ Docker Compose ซึ่งเป็นสถาปัตยกรรมที่ทันสมัยและมีประสิทธิภาพสูง
เราจะใช้เครื่องมือยอดนิยมอย่าง install-php-extensions ของ mlocati เพื่อจัดการติดตั้ง PHP Extensions ที่จำเป็นอย่างรวดเร็วและสะอาด โดยเฉพาะอย่างยิ่งการติดตั้ง pdo_pgsql เพื่อรองรับการเชื่อมต่อกับระบบฐานข้อมูล PostgreSQL ได้อย่างสมบูรณ์แบบ
🛠️ โครงสร้างโปรเจกต์ (Project Structure)
โครงสร้างโฟลเดอร์ที่ถูกออกแบบมานี้จะช่วยแยกส่วนประกอบต่างๆ ออกจากกันอย่างชัดเจน ทำให้การดูแลและอัปเกรดระบบทำได้ง่าย:
BASH / Shell
/Users/common/Docker/\n├── .env # ไฟล์ตั้งค่าส่วนกลาง (DB Credentials, etc.)\n└── language_php_8_5_dev\n ├── build.sh # สคริปต์อัตโนมัติสำหรับ Build และรัน\n ├── docker-compose.yml # ไฟล์สำหรับรัน PHP-FPM และ PostgreSQL Service\n ├── Dockerfile # พิมพ์เขียวหลักในการสร้าง PHP Image\n ├── install-extensions.sh # สคริปต์ติดตั้ง Extension (ใช้ mlocati)\n └── xdebug.ini # ไฟล์ตั้งค่า Xdebug แยกต่างหาก
⚙️ การกำหนดค่าหลัก (Core Configuration Files)
1. Dockerfile (PHP Image)
ไฟล์นี้กำหนดฐานภาพหลักและติดตั้ง Dependencies พื้นฐาน:
Plain Text
FROM alpine:latest\nWORKDIR /var/www/html\nCOPY install-extensions.sh .\nRUN sh install-extensions.sh\n# เพิ่มขั้นตอนอื่นๆ เช่น COPY source code
2. install-extensions.sh (mlocati)
สคริปต์นี้ใช้ mlocati เพื่อติดตั้ง PHP Extensions ที่จำเป็นสำหรับเว็บแอปพลิเคชันที่ใช้ PostgreSQL:
BASH / Shell
#!/bin/sh\n# ติดตั้ง PHP Extensions ที่จำเป็น\ncomposer require mlocati/install-php-extensions\n./vendor/bin/install-php-extensions --php-version=8.5 --extensions=pdo_pgsql,mysqli,opcache
3. docker-compose.yml (Orchestration)
นี่คือหัวใจของการทำงานที่เชื่อม PHP-FPM เข้ากับ PostgreSQL Service:
YAML
version: '3.8'\nservices:\n db:\n image: postgres:16-alpine\n environment:\n POSTGRES_USER: user_dev\n POSTGRES_PASSWORD: secret_pass\n POSTGRES_DB: app_db\n ports: ["5432:5432"]\n php-fpm:\n build: ./language_php_8_5_dev\n volumes: - ./language_php_8_5_dev:/var/www/html\n depends_on: [db]
4. การทดสอบการเชื่อมต่อ (PostgreSQL Context)
หลังจากตั้งค่าทุกอย่างแล้ว เราสามารถทดสอบการเชื่อมต่อ PHP กับฐานข้อมูล PostgreSQL ได้ด้วยโค้ดที่สมบูรณ์:
SQL
-- ตัวอย่างการเชื่อมต่อและเรียกใช้ข้อมูลจาก PostgreSQL\nSELECT * FROM users WHERE id IN (1, 2, 3);\n
-- PHP Code Example (Conceptual):\n$pdo = new PDO('pgsql:host=db;port=5432;dbname=app_db', 'user_dev', 'secret_pass');\n$stmt = $pdo->prepare('SELECT name, email FROM users WHERE id = :id');\n$stmt->execute(['id' => 1]);
🚀 บทสรุป (Conclusion)
การใช้สถาปัตยกรรม Docker Compose ร่วมกับ mlocati ทำให้เราสามารถสร้าง PHP Development Environment ที่มีความยืดหยุ่นสูง รองรับ PHP เวอร์ชันใหม่ (8.5) และจัดการ Dependencies ต่างๆ เช่น pdo_pgsql ได้อย่างเป็นระบบ การแยกส่วนประกอบของฐานข้อมูล (PostgreSQL) ออกมาเป็น Service ต่างหาก ทำให้มั่นใจได้ว่าสภาพแวดล้อมการพัฒนาของเรามีความเสถียรและพร้อมสำหรับการทำงานระดับ Production อย่างแท้จริง