Workshop: สร้าง VM บน Google Cloud → ติดตั้ง Apache/PHP → Deploy PHP → ทดสอบผ่าน External IP

#ภาพรวมสถาปัตยกรรม

Browser
   |
   | HTTP :80 / HTTPS :443
   v
Google Cloud VPC Firewall
   |
   v
Compute Engine VM (Ubuntu 24.04 LTS)
   |
   +-- Apache Web Server
   |
   +-- PHP
   |
   +-- /var/www/html

#1. เตรียม Google Cloud Project

  1. เข้า Google Cloud Console
  2. สร้างหรือเลือก Project
  3. ตรวจสอบว่า Billing เปิดใช้งาน
  4. เปิดใช้งาน Compute Engine API

#2. สร้าง Compute Engine VM

ไปที่ Compute Engine → VM instances → Create instance

ตัวอย่างค่าที่เหมาะกับการทดลอง:

รายการ ค่าแนะนำ
Name php-web-server
Region เลือก region ใกล้ผู้ใช้
Machine type e2-micro หรือขนาดที่เหมาะกับ workload
Operating system Ubuntu
Version Ubuntu 24.04 LTS
Boot disk 10–20 GB สำหรับ workshop
Firewall Allow HTTP traffic

หากจะให้บริการ HTTPS ให้เปิด Allow HTTPS traffic ด้วย

หมายเหตุ: ค่าใช้จ่ายขึ้นกับ region, machine type, disk และทรัพยากรอื่นที่เลือก ควรตรวจสอบ Pricing ก่อนใช้งานจริง

กด Create และรอ VM อยู่ในสถานะ Running

#3. เชื่อมต่อ VM ด้วย SSH

จากหน้า VM instances กดปุ่ม SSH ของ VM ที่สร้างไว้

จากนั้นตรวจสอบระบบ:

cat /etc/os-release

#4. Update Package

sudo apt update
sudo apt upgrade -y

#5. ติดตั้ง Apache

sudo apt install apache2 -y

ตรวจสอบสถานะ:

sudo systemctl status apache2

ตั้งให้ Apache เริ่มทำงานอัตโนมัติ:

sudo systemctl enable apache2

ทดสอบจาก Browser:

http://EXTERNAL_IP

ถ้าเห็นหน้า Apache แสดงว่า Web Server และ Firewall ทำงานแล้ว

#6. ติดตั้ง PHP

ติดตั้ง PHP และ Apache PHP module:

sudo apt install php libapache2-mod-php -y

สำหรับงานที่เชื่อม MySQL/MariaDB และต้องใช้ extension ทั่วไป:

sudo apt install php-mysql php-curl php-mbstring php-xml php-zip -y

ตรวจสอบ PHP:

php -v

Restart Apache:

sudo systemctl restart apache2

#7. สร้าง PHP Application

ลบหน้าเริ่มต้นของ Apache:

sudo rm -f /var/www/html/index.html

สร้างไฟล์:

sudo nano /var/www/html/index.php

ตัวอย่าง:

<?php

$app = 'PHP on Google Compute Engine';

echo "<h1>{$app}</h1>";
echo "<p>Server time: " . date('Y-m-d H:i:s') . "</p>";
echo "<p>PHP version: " . PHP_VERSION . "</p>";

บันทึกไฟล์แล้วเปิด:

http://EXTERNAL_IP

#8. ทดสอบ PHP ด้วย phpinfo()

สำหรับการทดสอบชั่วคราว:

echo '<?php phpinfo(); ?>' | sudo tee /var/www/html/info.php

เปิด:

http://EXTERNAL_IP/info.php

เมื่อทดสอบเสร็จ ควรลบไฟล์นี้ เพราะ phpinfo() เปิดเผยรายละเอียด configuration ของระบบ:

sudo rm /var/www/html/info.php

#9. ตั้ง Permission

กรณีต้องการให้ user ปัจจุบันจัดการไฟล์เว็บ:

sudo chown -R $USER:www-data /var/www/html
sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;

สำหรับ production ควรกำหนด owner/permission ตาม deployment model และหลีกเลี่ยง chmod 777

#10. ติดตั้ง Composer

sudo apt install composer -y
composer --version

เหมาะสำหรับ Laravel, Symfony และ PHP applications ที่ใช้ Composer dependencies

#11. Deploy Project จาก Git

ติดตั้ง Git:

sudo apt install git -y

ตัวอย่าง:

cd /var/www
sudo git clone https://github.com/USERNAME/PROJECT.git app
sudo chown -R $USER:www-data /var/www/app
cd /var/www/app
composer install --no-dev --optimize-autoloader

จากนั้นสร้าง Apache VirtualHost ให้ DocumentRoot ชี้ไปยัง directory ที่ถูกต้อง เช่น /var/www/app/public สำหรับ Laravel

#12. ตัวอย่าง Apache VirtualHost

sudo nano /etc/apache2/sites-available/php-app.conf
<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/app/public

    <Directory /var/www/app/public>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/php-app-error.log
    CustomLog ${APACHE_LOG_DIR}/php-app-access.log combined
</VirtualHost>

เปิด module/config:

sudo a2enmod rewrite
sudo a2ensite php-app.conf
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
sudo systemctl reload apache2

#13. Domain และ HTTPS สำหรับ Production

ลำดับโดยทั่วไป:

Domain
  ↓ DNS A Record
Static External IP
  ↓
Compute Engine
  ↓
Apache
  ↓
PHP Application

ควร Reserve Static External IP ก่อนผูก DNS เพื่อป้องกัน IP เปลี่ยนเมื่อมีการจัดการ VM บางรูปแบบ

สำหรับ production ควรเปิด HTTPS และใช้ TLS certificate เช่น Let's Encrypt/Certbot หรือออกแบบผ่าน Google Cloud Load Balancer ตาม architecture ที่ต้องการ

#14. Security Checklist

  • เปิดเฉพาะ port ที่จำเป็น เช่น 80/443
  • จำกัด SSH access ตามนโยบายองค์กร
  • อัปเดต OS และ packages สม่ำเสมอ
  • ไม่เก็บ password/API key ไว้ใน source code
  • ใช้ Secret Manager หรือกลไก secret management ที่เหมาะสม
  • ใช้ HTTPS ใน production
  • สำรองข้อมูลและกำหนด monitoring/logging
  • ไม่เปิด phpinfo() ทิ้งไว้
  • ใช้ least privilege กับ IAM และ service accounts

#15. คำสั่งตรวจสอบปัญหา

sudo systemctl status apache2
sudo apache2ctl configtest
sudo tail -f /var/log/apache2/error.log
sudo ss -tulpn | grep ':80'
php -v

ตรวจสอบ HTTP จาก VM:

curl -I http://localhost

#สรุป

ขั้นตอนหลักคือ:

Create Google Cloud Project
        ↓
Enable Compute Engine API
        ↓
Create Ubuntu VM
        ↓
Allow HTTP/HTTPS
        ↓
SSH
        ↓
Install Apache
        ↓
Install PHP
        ↓
Deploy PHP Application
        ↓
External IP / Domain
        ↓
HTTPS + Security Hardening

#เอกสารอ้างอิง

  • Google Cloud Documentation — Create a Linux VM instance in Compute Engine
  • Google Cloud Documentation — Running a basic Apache web server
  • Google Cloud Documentation — Getting started with PHP on Compute Engine