ติดตั้ง WordPress บน DigitalOcean ด้วย Nginx + MySQL + PHP + SSL (Ubuntu) ทีละขั้น
คู่มือติดตั้ง WordPress บน Droplet Ubuntu แบบ LEMP (Nginx, MySQL, PHP-FPM) พร้อม SSL ฟรี Let's Encrypt, ตั้งค่าความเร็ว, แคช, สำรองข้อมูล และเลือกขนาดเครื่องที่เหมาะสม
ภาพรวมก่อนเริ่ม
WordPress เป็น CMS ที่ใช้มากที่สุดในโลก และ DigitalOcean เป็นตัวเลือกยอดนิยมสำหรับโฮสต์ WordPress ที่ต้องการควบคุมเองเต็มที่ ราคาถูก และเร็ว บทความนี้สอนติดตั้งแบบ LEMP: Linux + Nginx (อ่านว่า engine-x) + MySQL + PHP-FPM บน Ubuntu LTS
ถ้ายังไม่เคยสร้าง Droplet ให้ทำตาม สอนสร้าง Droplet แรก ก่อน (สร้างเครื่อง ตั้งผู้ใช้ ไฟร์วอลล์) แล้วกลับมาที่นี่
ทางเลือกอื่น
- 1-Click App (Marketplace): DigitalOcean มี image WordPress ที่ติดตั้งสำเร็จรูป สร้างเครื่องแล้วใช้ได้เลย สะดวก แต่คุณควรเข้าใจโครงสร้างที่ติดตั้งมาเพื่อดูแลต่อได้ ดูรายละเอียดและเวอร์ชันล่าสุดในหน้า Marketplace
- Panel จัดการโฮสติ้ง: ติดตั้ง HestiaCP, CloudPanel, CyberPanel, Plesk (เสียเงิน) เพื่อมีหน้าเว็บจัดการหลายเว็บ แต่ใช้ RAM เพิ่ม
- แบบ manual (บทความนี้): ควบคุมได้ละเอียดที่สุด เบาที่สุด และเรียนรู้ได้มากที่สุด
เลือกขนาด Droplet
| การใช้งาน | ขนาดแนะนำ | ราคา/เดือน |
|---|---|---|
| บล็อกใหม่ ทราฟฟิกน้อย | 1 GiB (ใส่ swap) | $6 |
| เว็บบริษัท/บล็อก ทราฟฟิกปานกลาง | 2 GiB | $12 |
| WooCommerce หรือหลายเว็บ | 4 GiB | $24 |
| ทราฟฟิกสูง/ปลั๊กอินหนัก | 8 GiB ขึ้นไป | $48 |
ราคา ณ 3 พ.ย. 2569 ดูตารางเต็มที่ ราคา DigitalOcean ทุกบริการ เริ่มต้นเล็กไปก่อนแล้วอัปเกรดได้เมื่อจำเป็น
ขั้นที่ 1: ติดตั้ง Nginx, MySQL, PHP
sudo apt update
sudo apt install nginx mysql-server php-fpm php-mysql php-curl php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip php-imagick unzip curl -y
ตรวจเวอร์ชัน PHP ที่ติดตั้ง (เพื่อใช้ชื่อ socket ในขั้นต่อไป)
php -v
ls /run/php/
จะเห็นไฟล์ เช่น php8.3-fpm.sock (ตัวเลขเวอร์ชันขึ้นกับ Ubuntu ที่ใช้)
เปิดไฟร์วอลล์สำหรับเว็บ
sudo ufw allow 'Nginx Full'
ขั้นที่ 2: สร้างฐานข้อมูลและผู้ใช้
sudo mysql_secure_installation
sudo mysql
ใน MySQL prompt (เปลี่ยนรหัสผ่านให้ยาวและสุ่ม)
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'ใส่รหัสผ่านที่แข็งแรง';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
ใช้ utf8mb4 เพื่อรองรับภาษาไทยและอีโมจิได้ถูกต้อง
ขั้นที่ 3: ดาวน์โหลดและวาง WordPress
cd /tmp
curl -LO https://wordpress.org/latest.tar.gz
tar xzf latest.tar.gz
sudo mkdir -p /var/www/example.com
sudo cp -a wordpress/. /var/www/example.com/
sudo chown -R www-data:www-data /var/www/example.com
เปลี่ยน example.com เป็นโดเมนของคุณ แล้วสร้างไฟล์ตั้งค่า
cd /var/www/example.com
sudo cp wp-config-sample.php wp-config.php
sudo nano wp-config.php
แก้ DB_NAME เป็น wordpress, DB_USER เป็น wpuser, DB_PASSWORD เป็นรหัสผ่านที่ตั้งไว้ และแทนค่า Authentication Unique Keys and Salts ด้วยค่าใหม่จาก https://api.wordpress.org/secret-key/1.1/salt/
ขั้นที่ 4: ตั้งค่า Nginx server block
sudo nano /etc/nginx/sites-available/example.com
ใส่เนื้อหา (แก้ชื่อโดเมน และชื่อ socket ให้ตรงกับเวอร์ชัน PHP)
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.php index.html;
client_max_body_size 64M;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js|webp|svg|woff2)$ {
expires 30d;
access_log off;
}
location ~ /\.ht { deny all; }
}
เปิดใช้งานและทดสอบ
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
แก้ upload_max_filesize และ post_max_size ใน /etc/php/8.3/fpm/php.ini ให้สอดคล้องกับ client_max_body_size (เช่น 64M) แล้ว sudo systemctl restart php8.3-fpm
ขั้นที่ 5: ติดตั้ง SSL ฟรีด้วย Let's Encrypt
ตรวจสอบก่อนว่า DNS ของโดเมนชี้มาที่ IP ของ Droplet แล้ว (dig +short example.com)
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com
ตอบคำถามอีเมลและเงื่อนไข แล้วเลือกให้ redirect HTTP ไป HTTPS ใบรับรองต่ออายุอัตโนมัติ ทดสอบได้ด้วย
sudo certbot renew --dry-run
ขั้นที่ 6: ตั้งค่า WordPress ผ่านเบราว์เซอร์
เปิด https://example.com ทำตามตัวช่วยติดตั้ง ตั้งชื่อเว็บ ผู้ดูแล (อย่าใช้ชื่อ admin) และรหัสผ่านแข็งแรง จากนั้นเข้า Settings → General ตรวจว่า URL เป็น https://
ขั้นที่ 7: ทำให้เร็วขึ้น
1. เปิด OPcache
PHP 8 มี OPcache ติดมา ตรวจว่าเปิดอยู่ใน /etc/php/8.3/fpm/conf.d/10-opcache.ini (opcache.enable=1)
2. ใช้แคชหน้าเว็บ
เลือกอย่างใดอย่างหนึ่ง
- ปลั๊กอินแคช เช่น WP Super Cache, W3 Total Cache, LiteSpeed Cache (ถ้าใช้ LiteSpeed), WP Rocket (เสียเงิน)
- Nginx FastCGI Cache ประสิทธิภาพสูงสุด ตั้งค่าเองได้ แต่ซับซ้อนกว่า
- ใช้ Redis Object Cache ถ้ามีการเรียกฐานข้อมูลมาก
3. ใช้ CDN
Cloudflare แพ็กเกจฟรีช่วยลดภาระเครื่องและเร็วขึ้นสำหรับผู้เยี่ยมชมจากทั่วโลก หรือใช้ Spaces CDN สำหรับรูปและไฟล์มีเดีย
4. ปรับรูปภาพ
บีบอัดและแปลงเป็น WebP ด้วยปลั๊กอินเช่น ShortPixel, Imagify, EWWW หรือ Converter for Media
5. เลือกธีมและปลั๊กอินที่เบา
ปลั๊กอินที่ไม่จำเป็นคือสาเหตุอันดับต้น ๆ ของเว็บช้าและช่องโหว่ ลบทิ้งถ้าไม่ได้ใช้
ขั้นที่ 8: ความปลอดภัยของ WordPress
- อัปเดต core ธีม ปลั๊กอิน สม่ำเสมอ (เปิด auto-update ให้ minor/security release)
- ใช้ 2FA สำหรับผู้ดูแล
- จำกัดการล็อกอินผิดซ้ำ (ปลั๊กอิน Limit Login Attempts หรือ fail2ban)
- ปิดการแก้ไขไฟล์จากหน้า admin: ใส่
define('DISALLOW_FILE_EDIT', true);ในwp-config.php - ตั้งสิทธิ์ไฟล์ให้ถูกต้อง (ไฟล์ 644, โฟลเดอร์ 755 และ
wp-config.php640 หรือ 600) - ปิด XML-RPC ถ้าไม่ได้ใช้
- ทำตามเช็กลิสต์ใน คู่มือความปลอดภัยเซิร์ฟเวอร์
ขั้นที่ 9: สำรองข้อมูล
วิธีที่แนะนำคือผสมกัน
- Backup ระดับ Droplet ของ DigitalOcean (รายสัปดาห์ +20% หรือรายวัน +30%)
- dump ฐานข้อมูล + ไฟล์
wp-contentทุกวัน เก็บภายนอกเครื่อง เช่นส่งขึ้น Spaces ด้วยs3cmd/rcloneหรือใช้ปลั๊กอิน UpdraftPlus ส่งไป Cloud storage - Snapshot ก่อนอัปเกรดใหญ่ เช่น เปลี่ยนเวอร์ชัน PHP
ตัวอย่างสคริปต์ cron
#!/bin/bash
D=$(date +%F)
mysqldump --single-transaction wordpress | gzip > /var/backups/wp-db-$D.sql.gz
tar czf /var/backups/wp-files-$D.tar.gz -C /var/www/example.com wp-content
find /var/backups -type f -mtime +14 -delete
ขั้นที่ 10: ย้ายเว็บ WordPress จากโฮสต์เดิม
- ทำตามขั้นตอนข้างต้นจนมี WordPress ใหม่บน Droplet (หรือเตรียมโฟลเดอร์ว่าง)
- ที่โฮสต์เดิม ส่งออกฐานข้อมูล (phpMyAdmin → Export หรือ
mysqldump) และบีบอัดโฟลเดอร์wp-content - นำเข้าฐานข้อมูลบน Droplet:
mysql -u wpuser -p wordpress < dump.sql - คัดลอก
wp-contentไปวาง แล้วตั้ง owner เป็นwww-data - แก้
wp-config.phpให้ตรงกับฐานข้อมูลใหม่ - ทดสอบก่อนเปลี่ยน DNS โดยแก้ไฟล์
hostsในเครื่องคุณให้โดเมนชี้ IP ใหม่ชั่วคราว - ลดค่า TTL ของ DNS ล่วงหน้า 1 วัน จากนั้นเปลี่ยน A record ไป IP ใหม่
- เก็บโฮสต์เดิมไว้ 1-2 สัปดาห์ เผื่อต้องย้อนกลับ
หากเว็บเดิมใช้ปลั๊กอินย้ายเว็บอย่าง All-in-One WP Migration หรือ Duplicator ก็ใช้ได้สะดวกสำหรับเว็บขนาดเล็ก
ปัญหาที่พบบ่อย
502 Bad Gateway
มักเกิดจาก PHP-FPM ไม่ทำงานหรือชื่อ socket ใน Nginx ไม่ตรงกับเวอร์ชันจริง ตรวจ systemctl status php8.3-fpm และ sudo tail /var/log/nginx/error.log
อัปโหลดไฟล์ไม่ได้ / 413 Request Entity Too Large
เพิ่ม client_max_body_size ใน Nginx และ upload_max_filesize/post_max_size ใน php.ini
เว็บช้าหรือ MySQL ล้ม (RAM ไม่พอ)
เครื่อง 1 GiB อาจโดน OOM killer ฆ่า MySQL ให้เพิ่ม swap ลดจำนวน PHP-FPM children (pm.max_children) หรืออัปเกรดเป็น 2 GiB
WordPress ขอ FTP credentials ตอนติดตั้งปลั๊กอิน
สิทธิ์ไฟล์ไม่ถูกต้อง ตรวจว่า owner ของโฟลเดอร์ WordPress เป็น www-data ตามขั้นตอนที่ 3
ต้นทุนรวมโดยประมาณ
| รายการ | ราคา/เดือน |
|---|---|
| Droplet 2 GiB | $12 |
| Backup รายสัปดาห์ (+20%) | ~$2.40 |
| โดเมน .com | ประมาณ $10-15 ต่อปี (แยกจาก DigitalOcean) |
| SSL | ฟรี (Let's Encrypt) |
| รวม | ~$14.40/เดือน + โดเมน |
เริ่มทดลองฟรีด้วยเครดิตผู้ใช้ใหม่ได้ที่ วิธีรับเครดิตฟรี $200 DigitalOcean และอ่านวิธีลดต้นทุนต่อที่ 15 วิธีลดค่าใช้จ่าย DigitalOcean
คำถามที่พบบ่อยเรื่อง WordPress บน DigitalOcean
ใช้ 1-Click WordPress กับติดตั้งเองต่างกันอย่างไร
1-Click ติดตั้งสแตกให้เสร็จ ประหยัดเวลา ส่วนติดตั้งเองคุณรู้ว่าอะไรอยู่ตรงไหน ปรับแต่งง่ายและเข้าใจปัญหาได้ลึกกว่า ทั้งสองแบบต้องดูแลอัปเดตและความปลอดภัยเอง
โฮสต์หลายเว็บในเครื่องเดียวได้ไหม
ได้ สร้าง server block และฐานข้อมูลแยกต่อเว็บ แต่ต้องเผื่อ RAM เพิ่ม และระวังว่าเว็บหนึ่งโดนแฮกอาจกระทบเว็บอื่นในเครื่องเดียวกัน ควรแยกผู้ใช้/PHP-FPM pool ต่อเว็บ
DigitalOcean ดีกว่าโฮสติ้งไทยสำหรับ WordPress ไหม
ขึ้นอยู่กับทักษะและต้นทุน DigitalOcean ให้ความยืดหยุ่นและราคาต่อสเปกที่ดี แต่คุณต้องดูแลเอง ส่วนโฮสติ้งไทยมีซัพพอร์ตภาษาไทยและแผงควบคุมพร้อมใช้ ดูเปรียบเทียบที่ DigitalOcean เทียบคู่แข่ง