MongoDB เป็นฐานข้อมูลแบบ NoSQL ประเภท Document-oriented ที่ได้รับความนิยมสูงในการพัฒนาเว็บแอปพลิเคชันสมัยใหม่ จุดเด่นคือเก็บข้อมูลในรูปแบบ JSON-like Document (BSON) ซึ่งยืดหยุ่นกว่าตารางแบบ Relational Database ไม่ต้องกำหนด Schema ตายตัว เหมาะกับข้อมูลที่มีโครงสร้างเปลี่ยนแปลงบ่อยหรือมีลำดับชั้นซ้อนกัน
บทความนี้จะแนะนำการติดตั้ง MongoDB Community Edition บน Ubuntu ซึ่งเป็นระบบปฏิบัติการที่ใช้กันมากบน Cloud VPS ครอบคลุมตั้งแต่การเตรียมระบบ ติดตั้ง ตั้งค่าพื้นฐาน สร้าง Admin User เปิดใช้ Authentication จนถึงการตรวจสอบว่าทุกอย่างทำงานถูกต้อง
ความต้องการของระบบ
ก่อนเริ่มติดตั้ง ควรตรวจสอบว่าเซิร์ฟเวอร์มีสเปคขั้นต่ำเพียงพอ ค่าแนะนำคือ RAM อย่างน้อย 2 GB สำหรับ Development และ 4 GB ขึ้นไปสำหรับ Production พื้นที่ดิสก์ขึ้นอยู่กับปริมาณข้อมูล แต่ควรเริ่มต้นอย่างน้อย 20 GB ระบบปฏิบัติการควรเป็น Ubuntu 22.04 LTS หรือ 24.04 LTS ที่ยังได้รับ Security Updates
# ตรวจสอบเวอร์ชัน Ubuntu
lsb_release -a
# ตรวจสอบ RAM
free -h
# ตรวจสอบพื้นที่ดิสก์
df -h
# ตรวจสอบ CPU Architecture (MongoDB ต้องการ 64-bit)
uname -m
# ต้องได้ x86_64 หรือ aarch64
ติดตั้ง MongoDB บน Ubuntu
ตัวฐานข้อมูลนี้ไม่อยู่ใน Default Repository ของ Ubuntu ต้องเพิ่ม Official Repository ก่อน วิธีนี้ทำให้ได้เวอร์ชันล่าสุดและอัพเดตผ่าน apt ได้สะดวก
เพิ่ม MongoDB Repository
# 1. Import MongoDB GPG Key
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor
# 2. เพิ่ม Repository (สำหรับ Ubuntu 22.04)
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | \
sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
# สำหรับ Ubuntu 24.04 ให้เปลี่ยน jammy เป็น noble
# echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/7.0 multiverse" | \
# sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
# 3. อัพเดต Package List
sudo apt update
ติดตั้ง MongoDB
# ติดตั้ง MongoDB พร้อม Tools ทั้งหมด
sudo apt install -y mongodb-org
# ตรวจสอบเวอร์ชันที่ติดตั้ง
mongod --version
# Package ที่ติดตั้งประกอบด้วย:
# mongodb-org — Meta package
# mongodb-org-server — mongod daemon
# mongodb-org-mongos — mongos (สำหรับ Sharding)
# mongodb-org-tools — เครื่องมือ Import/Export
# mongosh — MongoDB Shell
เริ่มต้นและจัดการ Service
ฐานข้อมูลนี้ใช้ systemd จัดการ Service บน Ubuntu การเริ่มต้นและตั้งค่าให้ Start อัตโนมัติเมื่อบูตเครื่องทำได้ดังนี้
# เริ่ม MongoDB Service
sudo systemctl start mongod
# ตั้งค่าให้ Start อัตโนมัติเมื่อบูต
sudo systemctl enable mongod
# ตรวจสอบสถานะ
sudo systemctl status mongod
# คำสั่งจัดการ Service อื่น ๆ
sudo systemctl stop mongod # หยุด
sudo systemctl restart mongod # รีสตาร์ท
sudo systemctl reload mongod # โหลดค่า Config ใหม่
ถ้า Service ไม่ Start ให้ตรวจสอบ Log ด้วยคำสั่ง sudo journalctl -u mongod -e สาเหตุที่พบบ่อยคือพื้นที่ดิสก์เต็ม Port 27017 ถูกใช้งานอยู่แล้ว หรือ Permission ของ Data Directory ไม่ถูกต้อง
ทดสอบการเชื่อมต่อ
หลังเริ่ม Service แล้ว ทดสอบเชื่อมต่อด้วย mongosh ซึ่งเป็น MongoDB Shell รุ่นใหม่ที่มาแทน mongo shell เดิม
# เชื่อมต่อ MongoDB (Default: localhost:27017)
mongosh
# ใน Shell จะเห็น prompt แบบนี้
# test>
# ทดสอบคำสั่งพื้นฐาน
db.version() # ดูเวอร์ชัน
db.serverStatus() # ดูสถานะเซิร์ฟเวอร์
show dbs # แสดงฐานข้อมูลทั้งหมด
use myapp # สร้าง/เลือกฐานข้อมูล
db.test.insertOne({name: "hello", value: 1}) # ทดสอบเขียนข้อมูล
db.test.find() # อ่านข้อมูล
# ออกจาก Shell
exit
ตั้งค่า Configuration
ไฟล์ Configuration หลักอยู่ที่ /etc/mongod.conf ใช้รูปแบบ YAML ค่าสำคัญที่ควรตั้งมีดังนี้
# /etc/mongod.conf
# ที่เก็บข้อมูล
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
# wiredTiger เป็น Storage Engine Default ตั้งแต่ MongoDB 3.2
engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 1 # ปรับตาม RAM ที่มี (ค่า Default = 50% ของ RAM - 1 GB)
# Log
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# Network
net:
port: 27017
bindIp: 127.0.0.1 # ฟังเฉพาะ localhost (ปลอดภัย)
# bindIp: 0.0.0.0 # ฟังทุก Interface (ต้องเปิด Authentication ก่อน!)
# Process
processManagement:
timeZoneInfo: /usr/share/zoneinfo
# Security (เปิดหลังสร้าง Admin User)
# security:
# authorization: enabled
หลังแก้ไข Config ต้อง Restart Service ด้วย sudo systemctl restart mongod ทุกครั้ง ค่า cacheSizeGB ควรตั้งเป็น 50% ของ RAM ลบ 1 GB เช่น เซิร์ฟเวอร์ RAM 4 GB ควรตั้งเป็น 1 GB เพื่อเหลือ Memory ให้ระบบปฏิบัติการและ Application อื่น
สร้าง Admin User และเปิด Authentication
ฐานข้อมูลที่ติดตั้งใหม่จะไม่มี Authentication เป็นค่า Default ซึ่งอันตรายมากถ้าเปิดให้เข้าถึงจากภายนอก ต้องสร้าง Admin User และเปิด Authentication ก่อนเสมอ
สร้าง Admin User
# เชื่อมต่อ MongoDB
mongosh
# สลับไปฐานข้อมูล admin
use admin
# สร้าง Admin User
db.createUser({
user: "adminUser",
pwd: "StrongPassword123!",
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" },
{ role: "dbAdminAnyDatabase", db: "admin" },
{ role: "clusterAdmin", db: "admin" }
]
})
# สร้าง User สำหรับ Application (เข้าถึงเฉพาะฐานข้อมูลที่กำหนด)
use myapp
db.createUser({
user: "appUser",
pwd: "AppPassword456!",
roles: [
{ role: "readWrite", db: "myapp" }
]
})
exit
เปิด Authentication
# แก้ไข /etc/mongod.conf — เพิ่มส่วน security
sudo nano /etc/mongod.conf
# เพิ่มหรือแก้ไขส่วนนี้:
# security:
# authorization: enabled
# Restart MongoDB
sudo systemctl restart mongod
# ทดสอบเชื่อมต่อด้วย Authentication
mongosh -u adminUser -p 'StrongPassword123!' --authenticationDatabase admin
# หรือใช้ Connection String
mongosh "mongodb://adminUser:StrongPassword123!@localhost:27017/admin"
# ทดสอบเชื่อมต่อด้วย Application User
mongosh "mongodb://appUser:AppPassword456!@localhost:27017/myapp"
ตั้งค่า Firewall
ถ้าใช้ UFW เป็น Firewall บน Ubuntu ควรตั้งค่าให้เปิด Port 27017 เฉพาะ IP ที่ต้องการเข้าถึง ไม่ควรเปิดให้ทุก IP เข้าถึงได้
# อนุญาตเฉพาะ IP ที่กำหนด (แนะนำ)
sudo ufw allow from 10.0.0.5 to any port 27017
# อนุญาตจาก Subnet
sudo ufw allow from 10.0.0.0/24 to any port 27017
# ห้ามเปิดให้ทุก IP เว้นแต่จำเป็นจริง ๆ
# sudo ufw allow 27017 # ไม่แนะนำ
# ตรวจสอบ Rules
sudo ufw status numbered
ตั้งค่า Log Rotation
Log ของฐานข้อมูลจะโตขึ้นเรื่อย ๆ ถ้าไม่จัดการ สามารถตั้งค่า Log Rotation ได้ 2 วิธี วิธีแรกใช้คำสั่ง Built-in ของ MongoDB และวิธีที่สองใช้ logrotate ของ Linux
# วิธีที่ 1: ใช้คำสั่ง MongoDB (Rotate ทันที)
mongosh -u adminUser -p 'StrongPassword123!' --authenticationDatabase admin --eval "db.adminCommand({ logRotate: 1 })"
# วิธีที่ 2: ตั้งค่า logrotate
sudo nano /etc/logrotate.d/mongodb
# เนื้อหาไฟล์:
# /var/log/mongodb/mongod.log {
# daily
# rotate 14
# compress
# delaycompress
# missingok
# notifempty
# create 640 mongodb mongodb
# sharedscripts
# postrotate
# /bin/kill -SIGUSR1 $(cat /var/lib/mongodb/mongod.lock 2>/dev/null) 2>/dev/null || true
# endscript
# }
ตั้งค่า Backup อัตโนมัติ
การ Backup เป็นสิ่งจำเป็นสำหรับฐานข้อมูลทุกตัว โดย Mongo มีเครื่องมือ mongodump สำหรับ Backup และ mongorestore สำหรับ Restore ข้อมูล
# Backup ทั้งหมด
mongodump --uri="mongodb://adminUser:StrongPassword123!@localhost:27017" \
--out=/backup/mongodb/$(date +%Y%m%d)
# Backup เฉพาะฐานข้อมูล
mongodump --uri="mongodb://appUser:AppPassword456!@localhost:27017/myapp" \
--out=/backup/mongodb/$(date +%Y%m%d)
# Backup แบบบีบอัด
mongodump --uri="mongodb://adminUser:StrongPassword123!@localhost:27017" \
--gzip --archive=/backup/mongodb/full_$(date +%Y%m%d).gz
# Restore จาก Backup
mongorestore --uri="mongodb://adminUser:StrongPassword123!@localhost:27017" \
/backup/mongodb/20260407
# ตั้ง Cron Job สำหรับ Backup อัตโนมัติ (ทุกวันตี 2)
# crontab -e
# 0 2 * * * mongodump --uri="mongodb://adminUser:StrongPassword123!@localhost:27017" --gzip --archive=/backup/mongodb/full_$(date +\%Y\%m\%d).gz && find /backup/mongodb -name "*.gz" -mtime +30 -delete
Performance Tuning พื้นฐาน
การปรับแต่งระดับ OS บางอย่างช่วยให้ฐานข้อมูลทำงานได้ดีขึ้น โดยเฉพาะการตั้งค่า ulimit และ Transparent Huge Pages
# ตั้งค่า ulimit สำหรับ MongoDB
sudo nano /etc/security/limits.d/mongodb.conf
# เพิ่มบรรทัดต่อไปนี้:
# mongodb soft nofile 64000
# mongodb hard nofile 64000
# mongodb soft nproc 64000
# mongodb hard nproc 64000
# ปิด Transparent Huge Pages (THP) — MongoDB แนะนำให้ปิด
sudo sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'
sudo sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/defrag'
# ทำให้การปิด THP คงอยู่หลังรีบูต
sudo nano /etc/systemd/system/disable-thp.service
# เนื้อหา:
# [Unit]
# Description=Disable Transparent Huge Pages
# [Service]
# Type=oneshot
# ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled && echo never > /sys/kernel/mm/transparent_hugepage/defrag'
# [Install]
# WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable disable-thp
sudo systemctl start disable-thp
ตรวจสอบสถานะหลังติดตั้ง
หลังติดตั้งและตั้งค่าทุกอย่างเรียบร้อยแล้ว ควรตรวจสอบว่าฐานข้อมูลทำงานถูกต้องและปลอดภัย
# 1. ตรวจสอบ Service ทำงานอยู่
sudo systemctl is-active mongod
# active
# 2. ตรวจสอบ Port ที่ฟัง
sudo ss -tlnp | grep 27017
# LISTEN 0 128 127.0.0.1:27017 0.0.0.0:*
# 3. ทดสอบ Authentication
mongosh -u adminUser -p 'StrongPassword123!' --authenticationDatabase admin --eval "db.adminCommand('ping')"
# { ok: 1 }
# 4. ตรวจสอบ Log ว่าไม่มี Error
sudo tail -20 /var/log/mongodb/mongod.log
# 5. ตรวจสอบ WiredTiger Cache
mongosh -u adminUser -p 'StrongPassword123!' --authenticationDatabase admin --eval "db.serverStatus().wiredTiger.cache"
# 6. ตรวจสอบว่า Authentication เปิดอยู่
mongosh --eval "db.adminCommand('ping')"
# ถ้า Authentication เปิดอยู่ ต้อง Error: Unauthorized
สรุป
การติดตั้ง MongoDB บน Cloud VPS ไม่ซับซ้อนแต่ต้องใส่ใจเรื่องความปลอดภัย สิ่งสำคัญที่ต้องทำหลังติดตั้งคือสร้าง Admin User และเปิด Authentication ตั้งค่า Firewall ให้เปิดเฉพาะ IP ที่จำเป็น ตั้ง Backup อัตโนมัติ และปรับแต่ง Performance พื้นฐาน เมื่อทำตามขั้นตอนเหล่านี้แล้ว MongoDB จะพร้อมสำหรับการพัฒนาและใช้งานจริง
แนะนำบริการ DE
การรัน MongoDB ในระบบ Production ต้องการเซิร์ฟเวอร์ที่มี RAM เพียงพอสำหรับ WiredTiger Cache และ SSD สำหรับ I/O ที่เร็ว Cloud VPS ของ DE รองรับการเลือก RAM และ SSD NVMe ตามความต้องการ พร้อม Root Access เต็มที่สำหรับติดตั้งและตั้งค่า MongoDB ได้อย่างอิสระ
สำหรับโปรเจกต์ที่ใช้ Document Database ร่วมกับเว็บแอปพลิเคชันและไม่ต้องการจัดการเซิร์ฟเวอร์เอง Cloud Hosting ของ DE เป็นทางเลือกที่สะดวกพร้อม Managed Infrastructure ให้พร้อมใช้งาน

