ติดตั้ง LEMP Stack บน Ubuntu VPS — Nginx, MySQL, PHP-FPM

LEMP Stack คือชุดซอฟต์แวร์ที่นักพัฒนาเว็บและผู้ดูแลระบบใช้รันเว็บไซต์บน VPS Linux มาอย่างยาวนาน ย่อมาจาก Linux, Enginx (ออกเสียงว่า "engine-x"), MySQL และ PHP รวมกันเป็นแพลตฟอร์มที่แข็งแกร่ง รองรับเว็บตั้งแต่ Blog ส่วนตัวไปจนถึง E-Commerce ที่รับ Traffic หนักได้

บทความนี้จะพาคุณติดตั้ง LEMP Stack บน Ubuntu 22.04 LTS บน VPS ทีละขั้นตอน ไม่ว่าจะเป็น VPS ของ AsiaGB หรือผู้ให้บริการอื่น สามารถใช้คู่มือนี้ได้เลย

1. LEMP Stack คืออะไร และทำไมต้องใช้ Nginx?

LEMP Stack เป็นทางเลือกยอดนิยมแทน LAMP Stack (Linux + Apache + MySQL + PHP) โดยจุดแตกต่างหลักอยู่ที่ Web Server ที่ใช้ Nginx แทน Apache:

หัวข้อ Nginx (LEMP) Apache (LAMP)
การจัดการ Connection Event-driven, Non-blocking Process/Thread per Request
การใช้ RAM น้อยกว่า เมื่อ Traffic สูง มากกว่า ตาม Connection ที่เพิ่ม
Static File เร็วมาก ปานกลาง
PHP Handler ผ่าน PHP-FPM (แยก Process) mod_php (ในตัว Apache)
เหมาะกับ VPS สเปกต่ำ-กลาง, Traffic สูง เซิร์ฟเวอร์ที่ใช้ .htaccess มาก

สรุปคือ Nginx เหมาะกับ VPS ที่ต้องการประสิทธิภาพสูงด้วยทรัพยากรที่จำกัด ซึ่งเป็นสถานการณ์ปกติของผู้ใช้ VPS ทั่วไป

2. สิ่งที่ต้องเตรียมก่อนติดตั้ง

ก่อนเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมีสิ่งต่อไปนี้พร้อม:

หมายเหตุ: VPS Linux ของ AsiaGB รองรับ Ubuntu 22.04 LTS ทุกแพ็กเกจ เริ่มต้น 500 บาท/เดือน มี Full Root Access พร้อมใช้ ติดตั้ง LEMP Stack ได้ทันทีหลังได้รับ Credential

3. อัพเดตระบบและติดตั้ง Package

ขั้นแรก SSH เข้า VPS และอัพเดต Package List ให้เป็นปัจจุบัน:

sudo apt update && sudo apt upgrade -y

รอให้การอัพเดตเสร็จสมบูรณ์ อาจใช้เวลา 2-5 นาทีขึ้นอยู่กับจำนวน Package ที่ต้องอัพเดต หากได้รับ Prompt ถามเกี่ยวกับ Kernel หรือ Service ให้เลือก "Keep the local version currently installed" หรือกด Enter เพื่อใช้ค่าเริ่มต้น

4. ติดตั้งและตั้งค่า Nginx

ติดตั้ง Nginx ด้วย apt Package Manager:

sudo apt install nginx -y

หลังติดตั้งเสร็จ เปิดใช้งานและสั่ง Start Nginx:

sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx

ถ้า Status แสดง active (running) แสดงว่า Nginx ทำงานแล้ว เปิด Browser แล้วพิมพ์ IP ของ VPS จะเห็นหน้า "Welcome to nginx!"

ตั้งค่า Firewall (UFW)

เปิด Port ที่จำเป็นด้วย UFW:

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status

⚠️ สำคัญ: ต้อง allow OpenSSH ก่อนเปิด UFW เสมอ มิฉะนั้นคุณจะถูก Lock ออกจาก VPS ทันที ถ้าเกิดปัญหาให้เข้าผ่าน Console ของผู้ให้บริการ VPS

5. ติดตั้ง MySQL และ Secure Installation

ติดตั้ง MySQL Server:

sudo apt install mysql-server -y

หลังติดตั้ง รัน Secure Installation Script เพื่อเพิ่มความปลอดภัย:

sudo mysql_secure_installation

Script จะถามคำถามต่อไปนี้:

สร้าง Database User สำหรับเว็บ

Login เข้า MySQL และสร้าง User แยกสำหรับแต่ละเว็บ (ไม่ใช้ root):

sudo mysql

-- สร้าง Database
CREATE DATABASE mywebsite CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- สร้าง User
CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'รหัสผ่านแข็งแกร่ง';

-- ให้สิทธิ์
GRANT ALL PRIVILEGES ON mywebsite.* TO 'webuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

6. ติดตั้ง PHP และ PHP-FPM

Ubuntu 22.04 มี PHP 8.1 ใน Repository เริ่มต้น ติดตั้งพร้อม Extensions ที่จำเป็น:

sudo apt install php8.1-fpm php8.1-mysql php8.1-curl php8.1-gd \
  php8.1-mbstring php8.1-xml php8.1-zip php8.1-bcmath \
  php8.1-imagick php8.1-intl -y

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

sudo systemctl status php8.1-fpm

ต้องแสดง active (running) ถ้าไม่ทำงานให้รัน sudo systemctl start php8.1-fpm

ปรับค่า PHP Configuration (php.ini)

แก้ไขค่าพื้นฐานใน php.ini สำหรับ FPM:

sudo nano /etc/php/8.1/fpm/php.ini

ค้นหาและแก้ไขค่าต่อไปนี้:

upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
memory_limit = 256M
max_input_vars = 3000

บันทึกและ Restart PHP-FPM:

sudo systemctl restart php8.1-fpm

7. เชื่อม Nginx กับ PHP-FPM

แก้ไข Default Server Block ของ Nginx หรือสร้างใหม่ ไฟล์อยู่ที่ /etc/nginx/sites-available/default:

sudo nano /etc/nginx/sites-available/default

เพิ่มส่วน PHP location block:

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

ทดสอบ Config และ Reload Nginx:

sudo nginx -t
sudo systemctl reload nginx

8. ตั้งค่า Server Block (Virtual Host) สำหรับ Domain

ถ้ามีหลาย Domain บน VPS เดียวกัน สร้าง Server Block แยกสำหรับแต่ละ Domain:

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

สร้าง Config ใหม่:

sudo nano /etc/nginx/sites-available/example.com

ใส่เนื้อหา:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    root /var/www/example.com/public_html;
    index index.php index.html;

    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }

    location ~* \.(jpg|jpeg|png|gif|ico|css|js|webp|svg|woff2)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }
}

เปิดใช้งาน Site และ Reload:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

9. ทดสอบ PHP ทำงานบน Nginx

สร้างไฟล์ทดสอบ phpinfo():

echo "" | sudo tee /var/www/html/phpinfo.php

เปิด Browser และพิมพ์ http://IP_ของ_VPS/phpinfo.php ถ้าเห็นหน้า PHP Information แสดงว่า LEMP Stack ทำงานสมบูรณ์

⚠️ ลบไฟล์ phpinfo.php ทันทีหลังทดสอบ: ไฟล์นี้เปิดเผยข้อมูล Server Configuration ที่ละเอียดอ่อน ห้ามทิ้งไว้บน Production Server เด็ดขาด

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

10. ติดตั้ง SSL ด้วย Let's Encrypt (Certbot)

Let's Encrypt ให้ SSL Certificate ฟรี ติดตั้ง Certbot:

sudo apt install certbot python3-certbot-nginx -y

ขอ Certificate และตั้งค่า Nginx อัตโนมัติ:

sudo certbot --nginx -d example.com -d www.example.com

Certbot จะถามอีเมล, ยอมรับ Terms of Service และเลือกว่าจะ Redirect HTTP → HTTPS อัตโนมัติหรือไม่ (แนะนำให้ Redirect)

ทดสอบการต่ออายุอัตโนมัติ

sudo certbot renew --dry-run

ถ้าผ่านโดยไม่มี Error แสดงว่า Auto-Renew ตั้งค่าถูกต้อง Certificate จะต่ออายุอัตโนมัติก่อนหมดอายุ 30 วัน

💡 เทคนิคเพิ่มเติม: AsiaGB มีบริการ SSL Certificate แบบ Paid (OV/EV/Wildcard) สำหรับธุรกิจที่ต้องการ Green Padlock พร้อมชื่อองค์กร หรือ Wildcard ที่ครอบคลุมทุก Subdomain ราคาเริ่มต้น 1,000 บาท/ปี

11. เทคนิค Optimize Performance LEMP Stack

หลังติดตั้งครบแล้ว ปรับค่าเหล่านี้เพื่อประสิทธิภาพที่ดีขึ้น:

เปิด Nginx Gzip Compression

แก้ไข /etc/nginx/nginx.conf ใน Block http {}:

gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml;

ปรับค่า PHP-FPM Pool

แก้ไข /etc/php/8.1/fpm/pool.d/www.conf:

pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
pm.max_requests = 500

ค่าเหล่านี้เหมาะกับ VPS RAM 2 GB ปรับตามทรัพยากรที่มีจริง

ตั้งค่า MySQL Buffer Pool

แก้ไข /etc/mysql/mysql.conf.d/mysqld.cnf:

[mysqld]
innodb_buffer_pool_size = 256M
innodb_log_file_size = 64M
query_cache_size = 0
query_cache_type = 0

12. แก้ปัญหาที่พบบ่อยใน LEMP Stack

ปัญหา วิธีแก้
502 Bad Gateway PHP-FPM ไม่ทำงาน: sudo systemctl restart php8.1-fpm
403 Forbidden Permission ไม่ถูก: sudo chown -R www-data:www-data /var/www/html
PHP ดาวน์โหลดแทนรัน ขาด location block ~ \.php$ หรือ Socket Path ผิด
MySQL เชื่อมต่อไม่ได้ ตรวจ credentials: mysql -u webuser -p
Nginx ไม่ Start หลัง Config แก้ sudo nginx -t เพื่อดู Error ใน Config

13. คำถามที่พบบ่อยเกี่ยวกับ LEMP Stack

LEMP Stack คืออะไร แตกต่างจาก LAMP Stack อย่างไร?

LEMP Stack ใช้ Nginx (E) แทน Apache (A) ใน LAMP Stack ข้อดีของ Nginx คือจัดการ Concurrent Connection ได้มากกว่า กิน RAM น้อยกว่าในสถานการณ์ที่มี Traffic หนาแน่น เหมาะกับ VPS ที่ทรัพยากรมีจำกัด ส่วน LAMP เหมาะถ้าต้องการใช้ .htaccess อย่างเต็มรูปแบบ

VPS สเปกเท่าไหร่ถึงจะรัน LEMP Stack ได้?

ขั้นต่ำ RAM 1 GB สำหรับเว็บเดียว แนะนำ 2 GB ขึ้นไปสำหรับ WordPress หรือเว็บที่มี Traffic ปานกลาง VPS ของ AsiaGB เริ่มต้น 500 บาท/เดือน RAM 1 GB เพียงพอสำหรับ LEMP Stack เว็บขนาดเล็ก-กลาง

PHP-FPM คืออะไร ทำไมต้องใช้กับ Nginx?

PHP-FPM (FastCGI Process Manager) เป็น PHP Handler ที่ทำงานเป็น Daemon แยกจาก Nginx ต่างจาก Apache ที่รัน PHP ได้ในตัวเอง Nginx ต้องส่ง Request ผ่าน FastCGI Socket มาที่ PHP-FPM ทำให้แยก Process อิสระ ปรับแต่ง Resource ได้ละเอียดกว่า

ติดตั้ง LEMP Stack แล้วรัน WordPress ได้เลยไหม?

ได้ทันที สร้าง Database ใน MySQL, ดาวน์โหลด WordPress, แตกไฟล์ใน Web Root ของ Domain แล้วตั้งค่า Nginx Server Block ให้ถูกต้อง ควรติดตั้ง Plugin Cache (เช่น LiteSpeed Cache หรือ WP Rocket) เพิ่มเพื่อ Performance สูงสุด

ต้องตั้งค่า Firewall (UFW) ด้วยไหม?

ควรตั้งเสมอเพื่อความปลอดภัย เปิดเฉพาะ Port ที่จำเป็น: SSH (22), HTTP (80) และ HTTPS (443) ด้วยคำสั่ง sudo ufw allow OpenSSH && sudo ufw allow 'Nginx Full' && sudo ufw enable

MySQL Secure Installation จำเป็นต้องรันไหม?

จำเป็นมากสำหรับ Production Server ช่วยลบ Anonymous User, ปิด Remote Root Login และลบ Test Database ที่เป็นช่องโหว่ด้านความปลอดภัย ถ้าไม่รัน MySQL ของคุณมีความเสี่ยงสูงที่จะถูกโจมตี

เริ่มต้นใช้งาน VPS สำหรับ LEMP Stack วันนี้

VPS Linux เริ่มต้น 500 บาท/เดือน Full Root Access, SSD, Uptime 99% ทำเลไทยและสิงคโปร์

ดูแพ็กเกจ VPS