ติดตั้ง Ghost Blog บน VPS Ubuntu
Ghost คือ modern CMS เน้นการเขียนและ newsletter ที่เร็วกว่า WordPress อย่างเห็นได้ชัด built-in SEO, email newsletter, membership และ paywall ทุกอย่างในตัว ใช้ Node.js รัน server-side rendering ให้ page load เร็วมาก เหมาะสำหรับ bloggers นักข่าว และ creator ที่ต้องการ platform สะอาดไม่มี plugin ยุ่งเหยิง
เตรียม Server (Node.js + MySQL + Nginx)
sudo apt update
sudo apt install -y nginx mysql-server curl
# ติดตั้ง Node.js 20 LTS
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
# ตรวจ
node --version # ต้องเป็น 20.x
npm --version
ตั้ง MySQL สำหรับ Ghost
sudo mysql -u root
CREATE DATABASE ghost_blog CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'ghost'@'localhost' IDENTIFIED BY 'ghostDbPass123';
GRANT ALL PRIVILEGES ON ghost_blog.* TO 'ghost'@'localhost';
FLUSH PRIVILEGES;
EXIT;
ติดตั้ง Ghost CLI และ Ghost
# ติดตั้ง ghost-cli
sudo npm install ghost-cli@latest -g
# สร้าง user สำหรับ Ghost (ห้ามรันเป็น root)
sudo adduser --disabled-password --gecos "" ghost-user
sudo mkdir -p /var/www/ghost
sudo chown ghost-user:ghost-user /var/www/ghost
sudo chmod 775 /var/www/ghost
# ติดตั้ง Ghost
sudo -u ghost-user bash -c "cd /var/www/ghost && ghost install"
# ตอบคำถาม:
# Blog URL: https://blog.yourdomain.com
# MySQL hostname: localhost
# MySQL username: ghost
# MySQL password: ghostDbPass123
# Ghost database name: ghost_blog
# Set up Nginx? Yes
# Set up SSL? Yes (ต้องมี DNS ชี้ก่อน)
# Set up systemd? Yes
จัดการ Ghost ด้วย CLI
cd /var/www/ghost
# ดู status
ghost status
# Restart
ghost restart
# Stop/Start
ghost stop
ghost start
# Update Ghost
ghost update
# ดู logs
ghost log
ตั้ง Email (Newsletter)
ghost config set mail.transport SMTP
ghost config set mail.options.host smtp.yourdomain.com
ghost config set mail.options.port 587
ghost config set mail.options.auth.user [email protected]
ghost config set mail.options.auth.pass yoursmtppass
ghost restart
https://blog.yourdomain.com/ghost ตั้ง Staff > Invite ให้ผู้เขียนคนอื่นได้ผ่าน email โดยกำหนด role เป็น Author หรือ Editor
สำรองข้อมูลและอัปเดต Ghost
Ghost เก็บเนื้อหาใน MySQL และไฟล์รูป/ธีมใน content/ ต้อง backup ทั้งสองส่วน และอัปเดตเวอร์ชันสม่ำเสมอเพื่อปิดช่องโหว่:
# สำรอง database + content
mysqldump -u ghost_user -p ghost_prod > ghost-db-$(date +%F).sql
tar czf ghost-content-$(date +%F).tar.gz /var/www/ghost/content/
# อัปเดต Ghost เป็นเวอร์ชันล่าสุด (รันใน dir ของ Ghost)
cd /var/www/ghost
ghost backup # snapshot อัตโนมัติก่อนอัปเดต
ghost update
ghost update --rollback # ย้อนกลับถ้ามีปัญหา
mysqldump + rsync content ไป VPS/Object Storage อีกที่ทุกคืน — เนื้อหาบล็อกคือทรัพย์สินที่กู้คืนยากที่สุดถ้าไม่มี backup นอกเครื่องตรวจสอบว่า Ghost ทำงานถูกต้อง
# ดู status
cd /var/www/ghost && ghost status
# ตรวจ systemd service
sudo systemctl status ghost_blog.yourdomain.com
# ตรวจ port (Ghost รัน port 2368 โดย default)
ss -tlnp | grep 2368
# ทดสอบ
curl -I https://blog.yourdomain.com
/sitemap.xml และ JSON Feed ที่ /feed/ ทำให้ SEO ทำงานอัตโนมัติโดยไม่ต้องติดตั้ง plugin เพิ่ม
แก้ปัญหาที่พบบ่อย
Error: "Ghost is not running" หลัง install
ตรวจ logs หา error จริง มักเกิดจาก MySQL password ผิดหรือ port 2368 ถูก process อื่นใช้:
ghost log
ss -tlnp | grep 2368
ghost config get database.connection
SSL ไม่ตั้งอัตโนมัติระหว่าง install
DNS ต้องชี้มาที่ VPS ก่อน install ถ้าพลาดไปแล้ว ตั้ง SSL ทีหลัง:
cd /var/www/ghost
ghost setup ssl
# หรือ
sudo certbot --nginx -d blog.yourdomain.com
Ghost Update ล้มเหลว (version conflict)
Ghost version lock อยู่ ต้อง update ทีละ major version:
ghost update --v5 # update เป็น v5 ก่อน
ghost update # แล้วค่อย update ปัจจุบัน
Image Upload ไม่ได้ (413 error)
Nginx มี client_max_body_size เพิ่มใน nginx config ของ Ghost:
sudo nano /etc/nginx/sites-available/blog.yourdomain.com
# เพิ่มใน server block:
client_max_body_size 100m;
sudo nginx -t && sudo systemctl reload nginx
คำถามที่พบบ่อย
Ghost กับ WordPress ต่างกันอย่างไร?
Ghost ออกแบบมาสำหรับ content publishing โดยเฉพาะ เร็วกว่า WordPress มาก built-in newsletter และ membership แต่ ecosystem plugin น้อยกว่า WordPress เหมาะถ้าต้องการ minimal, fast blog มากกว่า feature-heavy CMS
Ghost รองรับ membership/subscription ไหม?
ได้ Ghost มี Members feature ในตัว ตั้ง free/paid tier รับ payment ผ่าน Stripe ส่ง newsletter เฉพาะ paid members ได้ เป็น all-in-one สำหรับ creator economy
Backup Ghost ทำอย่างไร?
Export ผ่าน Ghost Admin > Labs > Export Content (JSON) และ backup รูปภาพจาก /var/www/ghost/content/images/ พร้อม MySQL dump: mysqldump ghost_blog > backup.sql