การติดตั้ง PHP5.6 ใน โดยใช้ Docker PHP 5.6 FPM รันในเครื่อง CentOS 9 พร้อมตั้งให้รันอัตโนมัติหลัง reboot


ตัวอย่าง

นี่คือขั้นตอนตั้งค่า PHP 5.6 ให้รันบน subdomain old.chaiyakul.com โดยใช้ Docker PHP 5.6 FPM รันในเครื่อง CentOS 9 พร้อมตั้งให้รันอัตโนมัติหลัง reboot และเก็บไฟล์เว็บที่

/var/www/html/old-chaiyakul.com/

ขั้นตอนตั้งค่า

1.สร้างโฟลเดอร์เว็บและวางไฟล์ PHP

mkdir -p /var/www/html/old-chaiyakul.com
# วางไฟล์ PHP ของคุณไว้ที่นี่ เช่น index.php ที่มี <?php phpinfo(); ?>

2.รัน Docker container PHP 5.6 FPM

docker run -d \
  --name php56-fpm \
  -p 9006:9000 \
  -v /var/www/html/old-chaiyakul.com:/var/www/html/old-chaiyakul.com \
  -v /opt/php56/php.ini:/usr/local/etc/php/php.ini \
  --restart unless-stopped \
  php:5.6-fpm

ตัวเลือก --restart unless-stopped ทำให้ container รันอัตโนมัติหลัง reboot

3.ติดตั้ง Apache และโมดูลที่จำเป็น

sudo dnf install -y httpd mod_proxy mod_proxy_fcgi
sudo systemctl enable httpd
sudo systemctl start httpd

4. สร้างไฟล์ VirtualHost สำหรับ subdomain

สร้างไฟล์ /etc/httpd/conf.d/old-chaiyakul.com.conf:

<VirtualHost *:80>
    ServerName old.chaiyakul.com
    DocumentRoot /var/www/html/old-chaiyakul.com

    <Directory "/var/www/html/old-chaiyakul.com">
        AllowOverride All
        Require all granted
    </Directory>

    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9006/var/www/html/old-chaiyakul.com/$1

    ErrorLog /var/log/httpd/old-chaiyakul-error.log
    CustomLog /var/log/httpd/old-chaiyakul-access.log combined
</VirtualHost>

5.รีสตาร์ท Apache

sudo systemctl restart httpd

6.ตั้งค่า DNS

ตั้งค่า DNS ให้ subdomain old.chaiyakul.com ชี้ไปที่ IP เซิร์ฟเวอร์นี้

7.ทดสอบ

เปิดเบราว์เซอร์เข้า http://old.chaiyakul.com
ถ้ามีไฟล์ index.php ที่มี <?php phpinfo(); ?> จะเห็นเวอร์ชัน PHP 5.6 แสดงขึ้นมา

สรุป

  • PHP 5.6 รันใน Docker container พร้อม --restart unless-stopped ให้รันอัตโนมัติหลัง reboot
  • Apache ตั้ง VirtualHost ให้ subdomain ใช้ DocumentRoot ที่ /var/www/html/old-chaiyakul.com
  • Apache สั่งให้ใช้ PHP-FPM 5.6 ผ่านพอร์ต 9006 ที่เชื่อมกับ Docker container

ในกรณีที่ขึ้น File not found

เป็น ปัญหา classic ที่เกิดจาก Apache ส่ง path ไปยัง PHP-FPM (Docker) แต่ PHP-FPM หาไฟล์ไม่เจอ เพราะมอง path ไม่เหมือนกัน

ทำให้ Apache ใช้ path ตรงกับใน container

1.แก้ config ของ Apache:

<FilesMatch \.php$>
    SetHandler "proxy:fcgi://127.0.0.1:9006"
    ProxyFCGIBackendType GENERIC
    ProxyFCGISetEnvIf "true" SCRIPT_FILENAME "/var/www/html%{REQUEST_URI}"
</FilesMatch>

เปลี่ยน /var/www/html/old-chaiyakul.com%{REQUEST_URI}
เป็น: /var/www/html%{REQUEST_URI}

2.Restart Apache:

sudo systemctl restart httpd

การตั้งค่า VirtualHost แบบ HTTPS สำหรับ Apache

การตั้งค่า VirtualHost แบบ HTTPS สำหรับ Apache (เช่นใน CentOS 9) ต้องมี:

  1. Domain/subdomain ที่ชี้มาถูกต้อง (เช่น old.chaiyakul.com)
  2. มีใบรับรอง SSL (เช่นจาก Let’s Encrypt หรือ self-signed)
  3. ตั้งค่า Apache ให้รับ HTTPS ผ่านพอร์ต 443

ตัวอย่างไฟล์ VirtualHost แบบ HTTPS

<VirtualHost *:443>
    ServerName old.chaiyakul.com

    DocumentRoot /var/www/html/old-chaiyakul.com

    <Directory "/var/www/html/old-chaiyakul.com">
        AllowOverride All
        Require all granted
    </Directory>

    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/ip-default.crt
    SSLCertificateKeyFile /etc/pki/tls/private/ip-default.key

    ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9006/var/www/html/old-chaiyakul.com/$1

    ErrorLog /var/log/httpd/old-chaiyakul-ssl-error.log
    CustomLog /var/log/httpd/old-chaiyakul-ssl-access.log combined
</VirtualHost>
,