สอนสร้าง Droplet แรกบน DigitalOcean ตั้งแต่ศูนย์: SSH, ผู้ใช้ใหม่, ไฟร์วอลล์ และอัปเดตระบบ
คู่มือภาษาไทยทีละขั้นตอน สร้าง Droplet Ubuntu บน DigitalOcean สร้าง SSH key เชื่อมต่อด้วย SSH ตั้งผู้ใช้ sudo เปิดไฟร์วอลล์ UFW ตั้ง swap เขตเวลาไทย และอัปเดตความปลอดภัยอัตโนมัติ
ก่อนเริ่ม: สิ่งที่ต้องเตรียม
บทความนี้พาคุณสร้างเซิร์ฟเวอร์ Linux เครื่องแรกบน DigitalOcean ตั้งแต่ศูนย์ และตั้งค่าพื้นฐานที่ปลอดภัย สิ่งที่ต้องมี
- บัญชี DigitalOcean (สมัครผ่านลิงก์แนะนำเพื่อรับเครดิตผู้ใช้ใหม่ ดู วิธีรับเครดิตฟรี $200 DigitalOcean)
- คอมพิวเตอร์ที่มี Terminal (macOS/Linux) หรือ Windows 10/11 ที่มี PowerShell/OpenSSH
- เวลาประมาณ 20-30 นาที
เราจะใช้ Ubuntu LTS (รุ่นสนับสนุนระยะยาว) เพราะมีเอกสารและชุมชนใหญ่ที่สุด คำสั่งส่วนใหญ่ใช้ได้กับ Debian ด้วย
ขั้นที่ 1: สร้าง SSH key
SSH key ปลอดภัยกว่าการใช้รหัสผ่านมาก เพราะคนอื่นเดาไม่ได้ และบอตที่สแกนรหัสผ่านทั่วอินเทอร์เน็ตจะเข้าไม่ได้ ถ้าตั้งค่าให้ปิดการล็อกอินด้วยรหัสผ่าน
บนเครื่องของคุณ (macOS/Linux/Windows PowerShell) รัน
ssh-keygen -t ed25519 -C "[email protected]"
กด Enter เพื่อใช้ตำแหน่งเริ่มต้น และตั้ง passphrase เพื่อป้องกันกรณีไฟล์ key หลุด จากนั้นดู public key
cat ~/.ssh/id_ed25519.pub
ผลลัพธ์ที่ขึ้นต้นด้วย ssh-ed25519 ... คือ public key ที่ปลอดภัยที่จะแชร์ ส่วนไฟล์ id_ed25519 (ไม่มี .pub) คือ private key ห้ามส่งให้ใคร
บน Windows PowerShell ใช้ type $env:USERPROFILE\.ssh\id_ed25519.pub แทน cat
ขั้นที่ 2: เพิ่ม SSH key ใน DigitalOcean
- เข้าเมนู Settings → Security → SSH Keys (ชื่อเมนูอาจต่างเล็กน้อยตามเวอร์ชันหน้าเว็บ)
- กด Add SSH Key วาง public key ตั้งชื่อ เช่น "laptop-2569"
- บันทึก
ขั้นที่ 3: สร้าง Droplet
- กด Create → Droplets
- Region: แนะนำ Singapore สำหรับผู้ใช้ในไทย (ความหน่วงต่ำ) ดู DigitalOcean สำหรับคนไทย
- Image: Ubuntu (เลือกรุ่น LTS ล่าสุดที่มีให้ เช่น 24.04 LTS)
- Size: Basic → Regular → เลือก $6 (1 GiB) หรือ $12 (2 GiB) สำหรับเริ่มต้น ดูตัวเลือกใน ราคา DigitalOcean ทุกบริการ
- Authentication: เลือก SSH Key แล้วติ๊กคีย์ที่เพิ่มไว้
- ตัวเลือกเสริม: เปิด Monitoring (ฟรี) จะได้กราฟ CPU/RAM และตั้งแจ้งเตือนได้ ส่วน Backups ค่อยเปิดภายหลังถ้าต้องการ (คิดเพิ่ม)
- ตั้ง hostname ที่จำง่าย เช่น
web-01แล้วกด Create Droplet
ภายในไม่กี่สิบวินาทีคุณจะได้ที่อยู่ IPv4 ของเครื่อง เช่น 203.0.113.10 (ตัวอย่าง)
ขั้นที่ 4: เชื่อมต่อด้วย SSH
ssh [email protected]
เปลี่ยน IP เป็นของคุณ ครั้งแรกจะถามยืนยัน fingerprint ให้พิมพ์ yes ถ้าเข้าได้ แปลว่า key ทำงานถูกต้อง
ขั้นที่ 5: อัปเดตระบบ
apt update && apt upgrade -y
ถ้ามีการอัปเดตเคอร์เนล ระบบอาจแนะนำให้รีบูต (reboot) ทำทันทีตอนนี้ได้เพราะเครื่องยังว่าง
ขั้นที่ 6: สร้างผู้ใช้ใหม่ที่ไม่ใช่ root
การใช้ root ตลอดเวลาเสี่ยงเกินไป ให้สร้างผู้ใช้ปกติที่ใช้ sudo ได้
adduser deploy
usermod -aG sudo deploy
คัดลอก SSH key ของ root ให้ผู้ใช้ใหม่
rsync --archive --chown=deploy:deploy ~/.ssh /home/deploy
เปิดหน้าต่าง Terminal ใหม่ แล้วทดสอบล็อกอินด้วย
ssh [email protected]
sudo whoami
ถ้าได้คำตอบว่า root แปลว่าทุกอย่างพร้อม อย่าปิดหน้าต่างเดิมจนกว่าจะทดสอบสำเร็จ กันพลาดจนเข้าเครื่องไม่ได้
ขั้นที่ 7: เปิดไฟร์วอลล์ UFW
UFW เป็นไฟร์วอลล์ที่ง่ายที่สุดบน Ubuntu ตั้งกฎให้เปิดเฉพาะพอร์ตที่จำเป็น
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
สำคัญ: ต้อง allow OpenSSH ก่อน enable เสมอ ไม่เช่นนั้นคุณจะล็อกตัวเองออกจากเครื่อง นอกจากนี้ DigitalOcean มี Cloud Firewall (ฟรี) ที่ทำงานระดับเครือข่ายอีกชั้น ดูใน คู่มือความปลอดภัยเซิร์ฟเวอร์
ขั้นที่ 8: ปิดการล็อกอินด้วยรหัสผ่านและห้าม root login
แก้ไฟล์ตั้งค่า SSH
sudo nano /etc/ssh/sshd_config
หาและตั้งค่าบรรทัดเหล่านี้ (ถ้าไม่มีให้เพิ่ม)
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
ตรวจสอบรูปแบบก่อนรีสตาร์ท
sudo sshd -t
sudo systemctl restart ssh
บน Ubuntu บางรุ่นอาจมีไฟล์ใน /etc/ssh/sshd_config.d/ ที่ override ค่าเหล่านี้ ให้ตรวจดูว่าไม่มีบรรทัดที่ขัดแย้ง (เช่น PasswordAuthentication yes) แล้วทดสอบล็อกอินใหม่จากหน้าต่างอื่นก่อนปิดหน้าต่างเดิม
ขั้นที่ 9: ตั้งเขตเวลาไทย
sudo timedatectl set-timezone Asia/Bangkok
timedatectl
หมายเหตุ: ผู้พัฒนาบางคนชอบให้เซิร์ฟเวอร์ใช้ UTC และแปลงเวลาที่ฝั่งแอป ซึ่งก็เป็นแนวปฏิบัติที่ดี เลือกอย่างใดอย่างหนึ่งและใช้ให้สม่ำเสมอ
ขั้นที่ 10: เพิ่ม swap (สำหรับเครื่อง RAM น้อย)
เครื่อง 1 GiB ควรมี swap กันกระบวนการถูกฆ่าเมื่อ RAM เต็ม
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
free -h
swap บน SSD ช้ากว่า RAM จริงมาก ใช้เป็นตัวกันเหนียวเท่านั้น ถ้าต้องใช้ swap ตลอดเวลาแปลว่าควรอัปเกรดเครื่อง
ขั้นที่ 11: เปิดอัปเดตความปลอดภัยอัตโนมัติ
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades
เลือก Yes ระบบจะติดตั้งแพตช์ความปลอดภัยให้อัตโนมัติ ช่วยลดความเสี่ยงช่องโหว่ได้มาก
ขั้นที่ 12: ติดตั้ง fail2ban (ทางเลือก)
fail2ban ช่วยแบน IP ที่พยายามเดารหัสผ่านซ้ำ ๆ
sudo apt install fail2ban -y
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
ถ้าปิดการล็อกอินด้วยรหัสผ่านแล้ว บอตเดารหัสผ่านก็เข้าไม่ได้อยู่ดี แต่ fail2ban ช่วยลด log รกและโหลดเล็กน้อย
ขั้นที่ 13: เชื่อมโดเมนกับ Droplet
- ไปที่ผู้ให้บริการโดเมนของคุณ แล้วชี้ nameserver ไป DigitalOcean (
ns1.digitalocean.com,ns2.digitalocean.com,ns3.digitalocean.com) หรือจะใช้ DNS ของผู้ให้บริการเดิมก็ได้ - ที่เมนู Networking → Domains เพิ่มโดเมน แล้วสร้าง record
Arecord ชื่อ@ชี้ไป IPv4 ของ DropletArecord ชื่อwwwชี้ IP เดียวกัน (หรือใช้ CNAME ไปที่@)- รอ DNS กระจายตัว ปกติไม่กี่นาทีถึงไม่กี่ชั่วโมง ตรวจด้วย
dig +short yourdomain.com
ขั้นที่ 14: ติดตั้งเว็บเซิร์ฟเวอร์ตัวแรก
ทดลองติดตั้ง Nginx
sudo apt install nginx -y
curl -I http://localhost
เปิดเบราว์เซอร์ไปที่ http://IP-ของคุณ จะเห็นหน้า "Welcome to nginx!" ต่อไปคุณสามารถติดตั้ง WordPress ต่อตาม ติดตั้ง WordPress บน DigitalOcean หรือ deploy แอปด้วยวิธีอื่น
เช็กลิสต์หลังตั้งค่าเสร็จ
- [x] ล็อกอินด้วย SSH key เท่านั้น ปิด root และรหัสผ่าน
- [x] เปิด UFW อนุญาตเฉพาะ 22/80/443
- [x] อัปเดตระบบและเปิด unattended-upgrades
- [x] ตั้งเขตเวลาและ swap
- [ ] เปิด Cloud Firewall และ Monitoring ใน Control Panel
- [ ] ตั้งแผนสำรองข้อมูล (Snapshot/Backup) ดู คู่มือความปลอดภัยเซิร์ฟเวอร์
- [ ] ตั้ง Billing Alert และเปิด 2FA ในบัญชี DigitalOcean
ข้อผิดพลาดที่พบบ่อย
ล็อกอินไม่ได้: Permission denied (publickey)
สาเหตุที่พบบ่อยคือสิทธิ์ไฟล์ผิด บนเซิร์ฟเวอร์ ตรวจว่า ~/.ssh เป็น 700 และ ~/.ssh/authorized_keys เป็น 600 และเป็นของผู้ใช้นั้น หรือใช้ key คนละไฟล์กับที่เพิ่มไว้ ลอง ssh -i ~/.ssh/id_ed25519 -v deploy@IP เพื่อดู log
ล็อกตัวเองออกจากเครื่องเพราะไฟร์วอลล์
ใช้ Recovery Console ใน Control Panel (เมนูของ Droplet → Access → Launch Recovery Console) เพื่อเข้าเครื่องผ่านเบราว์เซอร์ แล้วแก้กฎ UFW ได้ (sudo ufw allow OpenSSH)
ลืมลบ Droplet ทดลอง
ตั้งนิสัยลบเครื่องที่ไม่ใช้ทันที ปิดเครื่องไม่ได้หยุดคิดเงิน ดู 15 วิธีลดค่าใช้จ่าย DigitalOcean
คำถามที่พบบ่อย
ใช้รหัสผ่านแทน SSH key ได้ไหม
ทำได้ แต่เสี่ยงกว่ามาก เพราะเซิร์ฟเวอร์บนอินเทอร์เน็ตถูกบอตสแกนเดารหัสผ่านตลอดเวลา ถ้าจำเป็นต้องใช้รหัสผ่าน ใช้รหัสที่ยาวและสุ่ม พร้อม fail2ban
ควรเลือก Ubuntu หรือ Debian
ทั้งสองเสถียรมาก Ubuntu LTS มีบทความสอนมากกว่าและ 1-Click App ส่วนใหญ่ใช้ Ubuntu เหมาะกับมือใหม่
เปิด Monitoring เสียเงินไหม
Droplet Monitoring ของ DigitalOcean ไม่คิดค่าบริการเพิ่มตามที่ผู้ให้บริการเปิดเผย (ตรวจสอบสถานะล่าสุดใน Control Panel) ช่วยตั้งแจ้งเตือนเมื่อ CPU หรือดิสก์ใกล้เต็ม