LAMP stack web server setup

ติดตั้ง LAMP Stack บน VPS Ubuntu อย่างถูกต้อง

มิถุนายน 2026 · อ่าน 7 นาที

LAMP Stack คือชุดซอฟต์แวร์โอเพนซอร์สที่นิยมใช้สำหรับโฮสต์เว็บแอปพลิเคชัน ประกอบด้วย Linux, Apache, MySQL และ PHP ซึ่งทำงานร่วมกันได้อย่างลงตัว บทความนี้จะพาคุณติดตั้งครบทุกส่วนบน VPS Ubuntu 22.04 LTS ตั้งแต่ต้นจนเปิดเว็บได้จริง พร้อม Virtual Host และ SSL Let's Encrypt

สิ่งที่ต้องเตรียมก่อนเริ่ม

หากใช้ user อื่นที่ไม่ใช่ root ให้เติม sudo นำหน้าคำสั่งทุกบรรทัดที่ต้องการสิทธิ์ระดับระบบ

ขั้นตอนที่ 1 — อัปเดตระบบให้เป็นปัจจุบัน

ก่อนติดตั้งซอฟต์แวร์ใหม่ควรอัปเดต package list และอัปเกรดแพ็กเกจที่มีอยู่เสมอ

apt update && apt upgrade -y

รอจนกระบวนการเสร็จสมบูรณ์ หากระบบแจ้งให้ reboot ให้รันคำสั่งด้านล่างแล้วเชื่อมต่อใหม่

reboot

ขั้นตอนที่ 2 — ติดตั้ง Apache

Apache คือ Web Server ที่รับ HTTP request และส่งไฟล์ไปยังผู้เข้าชม

apt install apache2 -y

เปิดใช้งานและตั้งค่าให้ Apache เริ่มต้นอัตโนมัติเมื่อบูตเครื่อง

systemctl enable apache2
systemctl start apache2

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

systemctl status apache2

จากนั้นเปิดไฟร์วอลล์ให้ HTTP และ HTTPS ผ่านได้

ufw allow "Apache Full"
ufw enable
ufw status
ลองเปิดเบราว์เซอร์แล้วพิมพ์ IP ของ VPS — ถ้าเห็นหน้า "Apache2 Ubuntu Default Page" แสดงว่า Apache ทำงานถูกต้องแล้ว

ขั้นตอนที่ 3 — ติดตั้ง MySQL

MySQL คือระบบจัดการฐานข้อมูลที่รองรับเว็บแอปพลิเคชันส่วนใหญ่ เช่น WordPress, Laravel และอื่น ๆ

apt install mysql-server -y

เริ่มต้นและเปิดใช้งาน MySQL

systemctl enable mysql
systemctl start mysql

รัน script เสริมความปลอดภัย (แนะนำอย่างยิ่ง)

mysql_secure_installation

Script จะถามหลายคำถาม ให้ตอบดังนี้เพื่อความปลอดภัยสูงสุด

  1. VALIDATE PASSWORD component — พิมพ์ Y แล้วเลือกระดับ 2 (STRONG)
  2. Change root password — พิมพ์ Y แล้วตั้งรหัสผ่านที่ซับซ้อน
  3. Remove anonymous users — Y
  4. Disallow root login remotely — Y
  5. Remove test database — Y
  6. Reload privilege tables — Y

สร้างฐานข้อมูลและ user สำหรับเว็บไซต์ของคุณ (แทน mydb, myuser และ StrongPass!1 ด้วยค่าจริงของคุณ)

mysql -u root -p

CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'StrongPass!1';
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

ขั้นตอนที่ 4 — ติดตั้ง PHP

PHP 8.2 เป็น version ที่แนะนำสำหรับเว็บแอปยุคใหม่ พร้อม extension ที่จำเป็น

apt install php8.2 php8.2-cli php8.2-fpm php8.2-mysql php8.2-xml \
  php8.2-curl php8.2-mbstring php8.2-zip php8.2-gd php8.2-intl -y

ตรวจสอบ version PHP

php -v

เปิดใช้งาน PHP-FPM module ใน Apache และ module ที่จำเป็น

a2enmod proxy_fcgi setenvif
a2enconf php8.2-fpm
systemctl restart apache2

ทดสอบว่า PHP ทำงานได้กับ Apache โดยสร้างไฟล์ทดสอบ

echo "<?php phpinfo(); ?>" > /var/www/html/info.php
อย่าลืมลบไฟล์ info.php ทันทีหลังทดสอบเสร็จ เพราะไฟล์นี้เปิดเผยข้อมูลสำคัญของระบบให้คนภายนอกเห็น: rm /var/www/html/info.php

ขั้นตอนที่ 5 — ตั้งค่า Virtual Host

Virtual Host ช่วยให้ Apache โฮสต์หลายโดเมนบน VPS เดียวกันได้ โดยแยก directory และ config ของแต่ละเว็บออกจากกัน

สร้าง directory สำหรับโดเมนของคุณ (แทน example.com ด้วยโดเมนจริง)

mkdir -p /var/www/example.com/public_html
chown -R www-data:www-data /var/www/example.com
chmod -R 755 /var/www/example.com

สร้างไฟล์ index.php ทดสอบ

cat <<EOF > /var/www/example.com/public_html/index.php
<?php echo "<h1>ยินดีต้อนรับสู่ example.com</h1>";
EOF

สร้างไฟล์ Virtual Host config

nano /etc/apache2/sites-available/example.com.conf

วางเนื้อหาต่อไปนี้ลงในไฟล์

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html

    <Directory /var/www/example.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>

เปิดใช้งาน Virtual Host และ mod_rewrite จากนั้น restart Apache

a2ensite example.com.conf
a2enmod rewrite
a2dissite 000-default.conf
systemctl reload apache2

ขั้นตอนที่ 6 — ติดตั้ง SSL ด้วย Let's Encrypt (Certbot)

SSL ทำให้เว็บไซต์ของคุณใช้ HTTPS ซึ่งจำเป็นทั้งด้านความปลอดภัยและ SEO

apt install certbot python3-certbot-apache -y

ขอ certificate สำหรับโดเมน (Certbot จะแก้ไข Virtual Host ให้อัตโนมัติ)

certbot --apache -d example.com -d www.example.com

ทำตามขั้นตอนที่ Certbot แสดง ใส่อีเมล ยอมรับข้อตกลง แล้วเลือก redirect HTTP ไป HTTPS อัตโนมัติ

ตรวจสอบว่า Auto-Renewal ทำงานอยู่

systemctl status certbot.timer
certbot renew --dry-run
Certbot จะต่ออายุ SSL Certificate อัตโนมัติก่อนหมดอายุ 30 วัน ไม่ต้องทำเองทุก 90 วัน

ขั้นตอนที่ 7 — ปรับแต่ง PHP สำหรับ Production

แก้ไขค่า PHP สำคัญใน php.ini เพื่อประสิทธิภาพและความปลอดภัย

nano /etc/php/8.2/fpm/php.ini

ค้นหาและแก้ไขค่าเหล่านี้

upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 120
memory_limit = 256M
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log

Restart PHP-FPM เพื่อให้ค่าใหม่มีผล

systemctl restart php8.2-fpm
systemctl reload apache2

ขั้นตอนที่ 8 — ปรับแต่ง MySQL เบื้องต้น

สำหรับ VPS RAM 2 GB ให้แก้ไขค่า MySQL ใน /etc/mysql/mysql.conf.d/mysqld.cnf

nano /etc/mysql/mysql.conf.d/mysqld.cnf

เพิ่มหรือแก้ไขส่วน [mysqld]

[mysqld]
innodb_buffer_pool_size = 512M
innodb_log_file_size = 128M
max_connections = 100
query_cache_type = 0
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
systemctl restart mysql

สรุปและ Checklist

หากทำครบทุกขั้นตอน LAMP Stack บน VPS Ubuntu 22.04 ของคุณควรพร้อมใช้งานแล้ว ตรวจสอบด้วย Checklist ด้านล่าง

ขั้นตอนถัดไปที่แนะนำ

LAMP Stack เป็นพื้นฐานสำคัญสำหรับเว็บโฮสติ้งด้วยตัวเอง หากต้องการประสิทธิภาพสูงขึ้น สามารถเปลี่ยนจาก Apache เป็น Nginx (เรียกว่า LEMP Stack) หรือใช้ร่วมกับ Nginx เป็น Reverse Proxy ได้ในภายหลัง

ตรวจสอบว่า LAMP Stack ทำงานถูกต้อง

# ตรวจสอบ service ทั้งหมด
systemctl status apache2
systemctl status mysql
systemctl status php8.2-fpm

# ทดสอบ Apache + PHP ทำงานร่วมกัน
echo "" > /var/www/html/test.php
curl -s http://localhost/test.php | grep "PHP Version"
rm /var/www/html/test.php

# ตรวจสอบ SSL certificate
certbot certificates

# ทดสอบ Virtual Host
curl -H "Host: example.com" http://localhost/
อย่าลืมลบ test.php: ไฟล์ phpinfo() เปิดเผยข้อมูลระบบทั้งหมดให้ผู้ไม่หวังดีเห็น ลบทันทีหลังทดสอบเสร็จ: rm /var/www/html/test.php

แก้ปัญหาที่พบบ่อย

Error: "403 Forbidden" เมื่อเข้าถึงเว็บ

มักเกิดจาก DocumentRoot ไม่มี index file หรือ permission ของ directory ไม่ถูกต้อง:

# ตรวจสอบว่ามีไฟล์ index ในโฟลเดอร์
ls /var/www/example.com/public_html/

# ตรวจสอบ ownership
ls -la /var/www/example.com/
# ควรเป็น www-data:www-data

# แก้ไข permission
chown -R www-data:www-data /var/www/example.com
chmod -R 755 /var/www/example.com

Error: PHP ไม่ทำงาน แสดงโค้ด PHP ดิบแทน

Apache ยังไม่ได้ connect กับ PHP-FPM หรือ mod ไม่ได้ enable ให้:

# ตรวจสอบ mod ที่ enable
apache2ctl -M | grep -E "php|proxy_fcgi"

# เปิด mod ที่จำเป็น
a2enmod proxy_fcgi setenvif
a2enconf php8.2-fpm
systemctl restart apache2

Error: "AH00558: apache2: Could not reliably determine the server's fully qualified domain name"

เป็น warning ไม่ใช่ error ที่ทำให้เว็บล้ม แต่ fix ได้ง่ายด้วย:

echo "ServerName localhost" >> /etc/apache2/apache2.conf
systemctl restart apache2

Error: Certbot ล้มเหลว "Error: Challenge failed for domain"

A Record ของโดเมนต้องชี้ไปที่ IP ของ VPS แล้ว และ port 80 ต้องเข้าถึงได้จากภายนอก:

# ตรวจสอบ DNS
dig +short example.com
# ต้องแสดง IP ของ VPS

# ตรวจสอบ port 80 จากภายนอก
curl -s http://example.com/ | head -5

Error: MySQL "ERROR 1045 (28000): Access denied for user 'root'"

Ubuntu 20.04+ ใช้ unix_socket authentication สำหรับ root ต้องใช้ sudo:

# วิธีที่ถูกต้อง
sudo mysql

# หรือสร้าง user ใหม่สำหรับใช้งาน
sudo mysql -e "CREATE USER 'admin'@'localhost' IDENTIFIED BY 'password';"
sudo mysql -e "GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';"

คำถามที่พบบ่อย

ต้องการโฮสต์หลายเว็บบน VPS เดียวกัน ทำได้ไหม?

ได้เลย Apache Virtual Host ออกแบบมาสำหรับสิ่งนี้ สร้างไฟล์ .conf แยกสำหรับแต่ละโดเมนใน /etc/apache2/sites-available/ แล้ว a2ensite เปิดใช้งาน ทุกโดเมนสามารถมี DocumentRoot, SSL certificate และ PHP pool แยกกันได้

LAMP กับ LEMP ต่างกันอย่างไร? เลือกตัวไหนดีกว่า?

LAMP ใช้ Apache เป็น web server ส่วน LEMP ใช้ Nginx Nginx เร็วกว่าสำหรับ static files และ concurrent connections มาก ส่วน Apache flexible กว่าตรง .htaccess support ถ้าเริ่มต้นใหม่แนะนำ LEMP (Nginx) แต่ถ้า app ต้องการ .htaccess สำหรับ WordPress หรือ CodeIgniter เลือก LAMP ได้

SSL Let's Encrypt หมดอายุทุก 90 วัน จะต้อง renew เองไหม?

Certbot ตั้ง systemd timer หรือ cron auto-renewal ให้อัตโนมัติตอนติดตั้ง ตรวจสอบด้วย systemctl status certbot.timer และทดสอบ renewal ด้วย certbot renew --dry-run ถ้า timer ทำงาน ไม่ต้อง renew เองเลย