คู่มือติดตั้ง Debian Droplet เริ่มต้นใช้งาน 2026
A step-by-step guide to setting up a Debian Droplet on DigitalOcean, covering SSH keys, sudo, ufw firewall, and apt updates with Debian-specific gotchas.
คู่มือนี้พาไล่ทีละขั้นตอนตั้งแต่สร้าง Debian Droplet บน DigitalOcean ไปจนถึงตั้งค่าความปลอดภัยพื้นฐาน โดยเน้นจุดที่ Debian ต่างจาก Ubuntu ตรง ๆ เช่น sudo และ ufw ไม่ได้ติดตั้งมาให้ตั้งแต่แรก และไม่มี snap ให้ใช้ เหมาะกับผู้ที่ต้องการเซิร์ฟเวอร์ที่เสถียรและควบคุมแพ็กเกจได้ละเอียดกว่า
สารบัญ
ทำไมเลือก Debian แทน Ubuntu
Debian เป็นดิสโทร Linux ต้นทางที่ Ubuntu นำไปพัฒนาต่อ จุดต่างสำคัญที่ควรรู้ก่อนตัดสินใจคือรอบการออกรุ่นและปรัชญาการดูแลแพ็กเกจ Debian ออกรุ่น stable ใหม่ทุกประมาณ 2 ปี (ปัจจุบันคือ Debian 12 รหัส Bookworm) และแพ็กเกจใน stable branch จะถูกทดสอบมาอย่างละเอียดก่อนปล่อยแล้วแทบไม่เปลี่ยนเวอร์ชันไปตลอดอายุรุ่น ต่างจาก Ubuntu ที่มีรอบ LTS ทุก 2 ปีเช่นกันแต่มักดันแพ็กเกจใหม่กว่าเข้ามาเรื่อย ๆ ผ่าน backports และ PPA อย่างเป็นทางการ ผลคือ Debian เหมาะกับงานที่ต้องการความนิ่งของเวอร์ชันซอฟต์แวร์สูงสุด เช่นเซิร์ฟเวอร์ฐานข้อมูลหรือระบบที่รันมานานหลายปีโดยไม่อยากเจอ breaking change บ่อย ๆ ส่วน Ubuntu จะได้เปรียบเรื่องแพ็กเกจใหม่กว่าและมี ecosystem อย่าง snap ที่ผู้พัฒนาซอฟต์แวร์บางตัวเลือกแจกจ่ายผ่านช่องทางนี้เป็นหลัก อีกจุดที่ต่างชัดเจนคือ Debian Droplet บน DigitalOcean จะไม่มี snapd ติดตั้งมาให้เลย และไม่มีแพ็กเกจ sudo ติดตั้งไว้ล่วงหน้าเหมือน Ubuntu ซึ่งเป็นรายละเอียดที่มือใหม่มักไม่รู้แล้วงงว่าทำไมพิมพ์ sudo apt update ครั้งแรกแล้วเจอ command not found นอกจากนี้ Debian ยังขึ้นชื่อเรื่องไม่มีข้อผูกมัดทางการค้าใด ๆ โครงการดูแลโดยชุมชนอาสาสมัครล้วน ไม่มีการเสนอ subscription หรือ telemetry ใด ๆ แนบมากับระบบปฏิบัติการเหมือนบางส่วนของ Ubuntu Pro สำหรับคนที่คุ้นเคยกับ Debian อยู่แล้วในสภาพแวดล้อมอื่น เช่น Raspberry Pi OS หรือเซิร์ฟเวอร์ office เดิมที่ใช้ Debian การเลือก Debian บน Droplet ช่วยให้ workflow และสคริปต์ automation ที่มีอยู่ใช้ต่อได้ทันทีโดยไม่ต้องปรับ ทั้งหมดนี้ไม่ได้แปลว่า Debian ดีกว่าหรือแย่กว่า Ubuntu ในเชิงเทคนิค แต่เป็นเรื่องของ trade-off ระหว่างความใหม่ของแพ็กเกจกับความนิ่งของเวอร์ชัน ซึ่งบทความนี้จะเน้นเฉพาะจุดที่ขั้นตอนตั้งค่าเริ่มต้นของ Debian ต่างจาก Ubuntu จริง ๆ ไม่ใช่แค่เปลี่ยนชื่อคำสั่งไปมา
Debian is the upstream Linux distribution that Ubuntu builds upon. The key differences worth knowing before deciding are release cycles and package maintenance philosophy. Debian releases a new stable version roughly every 2 years (currently Debian 12, codenamed Bookworm), and packages in the stable branch are thoroughly tested before release and kept at the same version throughout the branch's lifetime. Ubuntu, by contrast, has LTS releases every 2 years as well, but tends to push newer packages into backports and PPAs on an ongoing basis. As a result, Debian suits workloads requiring maximum version stability — like long-running database servers that cannot tolerate frequent breaking changes — while Ubuntu excels at providing fresher packages and an ecosystem like snap that many software vendors favor as a distribution channel. A stark difference on DigitalOcean Droplets is that Debian comes without snapd pre-installed and lacks the sudo package by default, much like Ubuntu, but this is a detail beginners often miss: when they type sudo apt update right after boot, they hit "command not found" on the very first line. Debian is also notable for carrying no commercial obligations; the project is maintained by volunteer community members with no subscription requirements or telemetry bundled into the OS like some Ubuntu Pro features. For users already familiar with Debian in other environments — such as Raspberry Pi OS or legacy office servers — choosing Debian on Droplets lets existing workflows and automation scripts apply immediately without translation. None of this means Debian is technically superior or inferior to Ubuntu, but rather represents a trade-off between package freshness and version stability — a distinction this guide focuses on: which initial setup steps genuinely differ between Debian and Ubuntu, not just command renames.
- Debian stable ออกรุ่นใหม่ทุก ~2 ปี และคงเวอร์ชันแพ็กเกจนิ่งตลอดอายุรุ่น
- Debian Droplet ไม่มี snapd และไม่มี sudo/ufw ติดตั้งมาให้ล่วงหน้า ต่างจาก Ubuntu
- ไม่มีข้อผูกมัดเชิงพาณิชย์หรือ telemetry แนบมากับระบบ
- เหมาะกับงานที่ต้องการความนิ่งของเวอร์ชันซอฟต์แวร์ เช่น database server ระยะยาว
สร้าง Droplet Debian
สิ่งที่น่าสนใจคือ เริ่มจากล็อกอินเข้า DigitalOcean Control Panel แล้วกด Create > Droplets เลือกแท็บ Debian ในส่วน Choose an image จะเห็นเวอร์ชัน stable ล่าสุดที่ DigitalOcean ให้เลือก (ปัจจุบันคือ Debian 12) ถัดมาเลือก Region ให้ใกล้ผู้ใช้งานจริงที่สุด สำหรับผู้ใช้ในไทย sgp1 (Singapore) เป็น region ที่อยู่ใกล้ที่สุด รองลงมาคือ blr1 (Bangalore) ส่วนขนาด Droplet ให้เลือกตามงาน ถ้าแค่ทดสอบหรือรันเว็บเล็ก ๆ แผน Basic Shared CPU เริ่มต้นที่ $6/เดือน (1 GiB RAM, 1 vCPU, 25 GB SSD, 1,000 GiB transfer) เพียงพอ ถ้าต้องรัน service ที่มี traffic จริงหรือรันหลาย process พร้อมกัน แผน $12/เดือน (2 GiB RAM, 1 vCPU, 50 GB SSD, 2,000 GiB transfer) หรือ $24/เดือน (4 GiB RAM, 2 vCPU, 80 GB SSD, 4,000 GiB transfer) จะสบายกว่า (ข้อมูลราคา ณ กรกฎาคม 2026 — ตรวจสอบราคาล่าสุดที่เว็บผู้ให้บริการ) ในส่วน Authentication ให้เลือก SSH Key แทน Password เสมอ (รายละเอียดหัวข้อถัดไป) ถ้ายังไม่มี key ให้เพิ่มทีหลังได้ ส่วนตัวเลือกเสริมที่แนะนำให้เปิดตั้งแต่ตอนสร้างคือ Monitoring (ฟรี ไม่มีค่าใช้จ่ายเพิ่ม) เพื่อเก็บ metric CPU/RAM/Disk/Bandwidth ไว้ดูย้อนหลังได้ทันทีโดยไม่ต้องมาติดตั้งเพิ่มทีหลัง ตั้งชื่อ hostname ให้สื่อความหมาย เช่น debian-web-01 แล้วกด Create Droplet ระบบใช้เวลา provisioning ประมาณ 1 นาที บิลของ Droplet คิดแบบ per-second โดยมีขั้นต่ำ 60 วินาทีหรือ $0.01 ต่อครั้งแล้วแต่ค่าไหนสูงกว่า เมื่อ Droplet ขึ้นสถานะ Active แล้วจะได้ IPv4 address มาใช้ SSH เข้าได้ทันที ผู้ที่ยังไม่มีบัญชี DigitalOcean สามารถสมัครใหม่ผ่านลิงก์ รับ $200 Free Credit ใช้ได้ภายใน 60 วันหลังสมัคร (ต้องผูกบัตรเครดิตหรือ PayPal) ช่วยให้ทดลองทำตามคู่มือนี้ได้โดยไม่มีค่าใช้จ่ายในช่วงแรก
- เลือก Region sgp1 (Singapore) ใกล้ผู้ใช้ไทยที่สุด รองลงมาคือ blr1 (Bangalore)
- แผนเริ่มต้น $6/เดือน (1 GiB RAM/1 vCPU/25 GB SSD) พอสำหรับทดสอบ, $12-24/เดือนสำหรับงานจริง
- เปิด Monitoring ฟรีตั้งแต่ตอนสร้าง Droplet เพื่อเก็บ metric ย้อนหลัง
- บิลคิดแบบ per-second ขั้นต่ำ 60 วินาทีหรือ $0.01
ตั้งค่า SSH Key และปิด Password Login
การตั้งค่า SSH Key เป็นขั้นตอนที่ควรทำตั้งแต่ก่อนหรือทันทีหลังสร้าง Droplet เพราะ password authentication เป็นช่องทางที่ถูก brute-force บ่อยที่สุด เริ่มจากสร้าง key pair บนเครื่อง local ด้วย ssh-keygen -t ed25519 -C "[email protected]" ระบบจะถามที่เก็บไฟล์ (ปล่อยค่า default ได้) และ passphrase ซึ่งแนะนำให้ตั้งเพิ่มอีกชั้นความปลอดภัย ถ้าตอนสร้าง Droplet ยังไม่ได้แนบ public key ไว้ ให้ copy ด้วย ssh-copy-id root@YOUR_DROPLET_IP หรือคัดลอกเนื้อหาไฟล์ ~/.ssh/id_ed25519.pub ไปวางใน DigitalOcean Control Panel ที่เมนู Settings > Security > SSH Keys ก็ได้เช่นกัน จากนั้น SSH เข้า Droplet ครั้งแรกด้วย ssh root@YOUR_DROPLET_IP เพื่อยืนยันว่า key ใช้งานได้จริงก่อนปิด password authentication เมื่อยืนยันแล้วให้แก้ไฟล์ /etc/ssh/sshd_config ตั้งค่า PasswordAuthentication no และถ้าสร้าง non-root user ที่มีสิทธิ์ sudo ไว้แล้ว (หัวข้อถัดไป) ให้ตั้ง PermitRootLogin no ด้วยเพื่อปิดการ login ด้วย root โดยตรงทั้งหมด จุดที่ Debian ต่างจากดิสโทรสาย RHEL/CentOS อย่างชัดเจนคือชื่อ service ของ SSH daemon บน Debian คือ ssh ไม่ใช่ sshd ดังนั้นคำสั่ง restart หลังแก้ config ต้องเป็น systemctl restart ssh ถ้าพิมพ์ systemctl restart sshd ตามความเคยชินจากระบบอื่นจะเจอ error "Unit sshd.service not found" ทันที ก่อน restart ทุกครั้งควรรัน sshd -t เพื่อเช็ค syntax ของไฟล์ config ก่อนเสมอ ป้องกันกรณีพิมพ์ผิดแล้ว service ไม่ยอม start ขึ้นมาใหม่ทำให้เข้า SSH ไม่ได้เลย สุดท้ายให้เปิด session ใหม่อีกหน้าต่างทดสอบ login ด้วย key ก่อนปิดหน้าต่างเดิมที่ยัง login ค้างอยู่เสมอ เผื่อกรณีตั้งค่าผิดพลาดจะได้ยังมีทางเข้าแก้ไขได้
- สร้าง key ด้วย
ssh-keygen -t ed25519แล้วแนบ public key ตอนสร้าง Droplet หรือผ่าน Security > SSH Keys - ปิด password login ด้วย
PasswordAuthentication noใน /etc/ssh/sshd_config - Debian ใช้ชื่อ service
sshไม่ใช่sshdเวลา restart - เช็ค syntax ด้วย
sshd -tก่อน restart ทุกครั้ง กันเข้าระบบไม่ได้
สร้าง Non-root User + sudo
นี่คือจุดที่ Debian ต่างจาก Ubuntu ชัดที่สุดในขั้นตอน initial setup Ubuntu Droplet มาพร้อมแพ็กเกจ sudo ติดตั้งไว้ล่วงหน้า แต่ Debian base image ไม่มี sudo ติดตั้งมาให้เลย ถ้า login ด้วย root แล้วพิมพ์ sudo apt update ทันทีจะเจอ -bash: sudo: command not found ต้องติดตั้งเองก่อนด้วย apt update && apt install sudo -y ขณะ login เป็น root เท่านั้น เมื่อติดตั้งเสร็จแล้วค่อยสร้าง user ใหม่ด้วยคำสั่ง adduser deploy (เปลี่ยน deploy เป็นชื่อที่ต้องการ) คำสั่งนี้ต่างจาก useradd ตรงที่เป็น interactive wizard ของ Debian ที่จะถามรหัสผ่านและข้อมูลเพิ่มเติม (Full Name, Room Number ฯลฯ ซึ่งเว้นว่างได้) พร้อมสร้าง home directory และ config เริ่มต้นให้อัตโนมัติ ต่างจากการใช้ useradd -m ที่ต้องตั้งค่าเองเกือบทั้งหมด จากนั้นเพิ่ม user เข้ากลุ่ม sudo ด้วย usermod -aG sudo deploy เพื่อให้สามารถใช้คำสั่งที่ต้องการสิทธิ์ผู้ดูแลระบบได้ ขั้นตอนต่อไปที่มักถูกลืมคือการคัดลอก SSH key จาก root ไปยัง user ใหม่ เพราะ authorized_keys ผูกกับ home directory ของแต่ละ user แยกกัน ทำได้ด้วย rsync --archive --chown=deploy:deploy /root/.ssh /home/deploy หรือสร้างโฟลเดอร์เองแล้ว copy ไฟล์ authorized_keys พร้อมตั้งสิทธิ์ chmod 700 ~/.ssh และ chmod 600 ~/.ssh/authorized_keys ให้ถูกต้อง เพราะ SSH ปฏิเสธ key ที่สิทธิ์ไฟล์กว้างเกินไปโดยอัตโนมัติ ทดสอบด้วยการเปิด SSH session ใหม่ล็อกอินด้วย ssh deploy@YOUR_DROPLET_IP แล้วลองรัน sudo whoami ควรได้ผลลัพธ์ root กลับมาโดยระบบจะถามรหัสผ่านของ user deploy เอง (ไม่ใช่รหัส root) ถ้าต้องการให้ sudo ไม่ถามรหัสผ่านทุกครั้งสามารถเพิ่มไฟล์ใน /etc/sudoers.d/ ได้ แต่ไม่แนะนำสำหรับ production เพราะลดความปลอดภัยลง หลังยืนยันว่า user ใหม่ใช้งานได้ครบทั้ง sudo และ SSH key แล้วจึงค่อยกลับไปปิด PermitRootLogin ตามหัวข้อก่อนหน้า
apt install sudo -y ด้วย root ก่อนเสมอ- Debian ไม่มี sudo ติดตั้งมาให้ ต้องรัน
apt install sudo -yด้วย root ก่อนเสมอ - ใช้
adduserแบบ interactive แทนuseraddเพื่อสร้าง home directory อัตโนมัติ - เพิ่มเข้ากลุ่มด้วย
usermod -aG sudo username - คัดลอก authorized_keys จาก /root/.ssh ไปยัง home ของ user ใหม่ พร้อมตั้ง chmod 700/600
ตั้งค่า Firewall ด้วย ufw
เช่นเดียวกับ sudo, ufw (Uncomplicated Firewall) ไม่ได้ติดตั้งมาให้ล่วงหน้าใน Debian base image ต้องติดตั้งเองก่อนด้วย sudo apt install ufw -y ข้อควรระวังที่สำคัญที่สุดคือต้องเปิดพอร์ต SSH ให้อนุญาตผ่านก่อนสั่ง enable firewall เสมอ ไม่เช่นนั้นจะถูกล็อกออกจาก Droplet ทันทีเพราะ SSH session ปัจจุบันจะถูกตัดเมื่อ firewall เริ่มทำงานถ้าไม่มีกฎอนุญาตพอร์ต 22 ไว้ ลำดับที่ปลอดภัยคือ sudo ufw allow OpenSSH (ใช้ได้เมื่อมี openssh-server ลงทะเบียน profile ไว้แล้ว ซึ่ง Debian Droplet มีติดตั้งมาให้เป็นค่าเริ่มต้นอยู่แล้ว) หรือถ้าเปลี่ยนพอร์ต SSH เป็นเลขอื่นให้ใช้ sudo ufw allow 2222/tcp แทนตามพอร์ตที่ตั้งไว้จริง ถ้า Droplet รันเว็บเซิร์ฟเวอร์ให้เพิ่ม sudo ufw allow 80/tcp และ sudo ufw allow 443/tcp หรือใช้ sudo ufw allow "Nginx Full" ถ้าติดตั้ง Nginx ไว้แล้วซึ่งจะลงทะเบียน profile ให้อัตโนมัติ เมื่อกำหนดกฎครบแล้วจึงเปิดใช้งานด้วย sudo ufw enable ระบบจะถามยืนยันเพราะอาจตัดการเชื่อมต่อปัจจุบัน ตอบ y ได้ถ้าเปิดพอร์ต SSH ไว้แล้ว ตรวจสอบสถานะและกฎทั้งหมดด้วย sudo ufw status verbose ซึ่งควรเห็นบรรทัด SSH/80/443 เป็น ALLOW ครบ นอกจาก ufw ที่ทำงานระดับ OS แล้ว DigitalOcean ยังมี Cloud Firewall ให้ใช้ฟรีโดยไม่มีค่าใช้จ่ายเพิ่ม ทำงานที่ระดับ network ก่อนที่ traffic จะถึงตัว Droplet เลย ข้อดีคือถึงแม้ตั้งค่า ufw บนเครื่องผิดพลาด Cloud Firewall ก็ยังกันไว้อีกชั้นได้ แนะนำให้สร้างกฎที่ Cloud Firewall คู่ขนานไปกับ ufw เพื่อ defense-in-depth ไม่ใช่เลือกใช้อย่างใดอย่างหนึ่งเพียงอย่างเดียว โดยเฉพาะ Droplet ที่เปิดให้บริการสาธารณะควรมีทั้งสองชั้นเสมอ
- ufw ไม่ได้ติดตั้งมาให้ ต้อง
apt install ufw -yก่อนใช้งาน - ต้อง allow พอร์ต SSH ก่อน enable firewall เสมอ ไม่งั้นถูกล็อกออกทันที
- เพิ่ม
sudo ufw allow 80/tcpและ 443/tcp สำหรับเว็บเซิร์ฟเวอร์
อัปเดตระบบด้วย apt
การอัปเดตระบบครั้งแรกควรทำทันทีหลังตั้งค่าความปลอดภัยพื้นฐานเสร็จ เริ่มด้วย sudo apt update เพื่อดึง index รายการแพ็กเกจล่าสุดจาก repository (ไม่ใช่การอัปเดตตัวซอฟต์แวร์จริง แค่รีเฟรชรายการ) จากนั้นใช้ sudo apt full-upgrade -y แทนคำสั่ง apt upgrade ธรรมดา ความต่างคือ full-upgrade จะจัดการ dependency ที่ต้องเปลี่ยนแปลงได้ครบกว่า รวมถึงยอมลบแพ็กเกจเก่าที่ขัดแย้งออกเพื่อให้ทั้งระบบอัปเดตสำเร็จ ในขณะที่ apt upgrade ธรรมดาจะข้ามแพ็กเกจที่ต้องแก้ dependency ซับซ้อนไปเฉย ๆ ทำให้ระบบอาจไม่ได้ patch ความปลอดภัยครบ ถ้า kernel ถูกอัปเดตในรอบนี้ให้ตรวจสอบไฟล์ /var/run/reboot-required หรือติดตั้ง needrestart เพิ่ม ซึ่งจะบอกว่า service ไหนต้อง restart หรือทั้งระบบต้อง reboot หรือไม่ ควร reboot ด้วย sudo reboot ทันทีที่สะดวกเพื่อให้ kernel ใหม่ทำงานจริง ข้อแตกต่างที่ควรรู้จาก Ubuntu คือ Debian Droplet ไม่มี snapd ติดตั้งมาให้และไม่แนะนำให้ติดตั้งเพิ่มโดยไม่จำเป็น เพราะ snap ผูกกับ Ubuntu ecosystem เป็นหลักและกิน resource เพิ่มโดยไม่จำเป็นบน server ขนาดเล็ก ถ้าต้องการแพ็กเกจที่ apt repository มาตรฐานไม่มี ทางเลือกที่ตรงกับ Debian มากกว่าคือ flatpak หรือคอมไพล์เอง หรือใช้ backports repository (เปิดใช้แยกต่างหากจาก sources.list) เพื่อดึงแพ็กเกจเวอร์ชันใหม่กว่าที่ผ่านการ backport มาให้ทดสอบกับ stable branch แล้ว สำหรับความปลอดภัยระยะยาว แนะนำติดตั้ง sudo apt install unattended-upgrades -y แล้วตั้งค่าด้วย sudo dpkg-reconfigure --priority=low unattended-upgrades เพื่อให้ patch ด้านความปลอดภัยติดตั้งอัตโนมัติโดยไม่ต้อง SSH เข้ามารันเองทุกสัปดาห์ สุดท้ายอย่าลืมตรวจสอบ timezone ด้วย timedatectl เพราะ Droplet ใหม่ตั้งเป็น UTC เป็นค่าเริ่มต้นเสมอ ถ้าต้องการเปลี่ยนใช้ sudo timedatectl set-timezone Asia/Bangkok ได้ตามความเหมาะสมของ log และ cron job ที่จะตั้งภายหลัง
- ใช้
apt full-upgradeแทนapt upgradeเพื่อจัดการ dependency ครบกว่า - เช็คว่าต้อง reboot หลังอัปเดต kernel ด้วยไฟล์ /var/run/reboot-required หรือ needrestart
- Debian ไม่มี snapd มาให้ ทางเลือกคือ backports repository หรือ flatpak
- ติดตั้ง unattended-upgrades ให้ patch ความปลอดภัยรันอัตโนมัติ
ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข
จุดที่ผู้ใช้มักถามมาคือ ข้อผิดพลาดอันดับหนึ่งที่ผู้ใช้ Debian มือใหม่เจอคือลืมว่า sudo ไม่ได้ติดตั้งมาให้ ทำให้พิมพ์คำสั่งที่คุ้นเคยจาก Ubuntu แล้วเจอ command not found ตั้งแต่บรรทัดแรก วิธีแก้คือต้อง login เป็น root ก่อนเสมอในการตั้งค่ารอบแรกแล้วติดตั้ง sudo เองด้วยมือ ข้อผิดพลาดอันดับสองที่ร้ายแรงกว่าคือสั่ง ufw enable ก่อน allow พอร์ต SSH ทำให้ session ที่ใช้อยู่ถูกตัดทันทีและเข้า Droplet ผ่าน SSH ไม่ได้อีก ถ้าเจอปัญหานี้ทางแก้คือเข้าผ่าน DigitalOcean Console (เข้าถึงได้จาก Control Panel โดยไม่ต้องผ่าน SSH) แล้วรัน ufw allow OpenSSH หรือ ufw disable ชั่วคราวเพื่อกู้คืนการเข้าถึง ข้อผิดพลาดที่พบบ่อยรองลงมาคือพิมพ์ systemctl restart sshd ตามความเคยชินจากระบบตระกูล RHEL แล้วเจอ error ว่าไม่พบ unit เพราะ Debian ใช้ชื่อ ssh ไม่ใช่ sshd ทำให้บางคนเข้าใจผิดว่า config ที่แก้ไปไม่มีผลทั้งที่จริงแค่ restart ผิดชื่อ service เท่านั้น อีกจุดที่พลาดกันบ่อยคือแก้ /etc/ssh/sshd_config ปิด PasswordAuthentication และ PermitRootLogin ไปพร้อมกันในรอบเดียวก่อนที่จะทดสอบ SSH key login ของ user ใหม่ให้แน่ใจก่อน ผลคือถ้า key ใช้ไม่ได้จริงจะเข้าระบบไม่ได้เลยทั้งทาง root และ user ใหม่ วิธีป้องกันคือทดสอบทีละขั้น เปิด session ใหม่ยืนยันก่อนทุกครั้งที่แก้ config สำคัญ ปัญหาที่พบได้บ่อยอีกอย่างคือรัน apt install โดยไม่ apt update ก่อน ทำให้เจอ error ว่าหาแพ็กเกจไม่พบทั้งที่จริงมีอยู่ใน repository เพียงแค่ index ในเครื่องเก่าเกินไป และสุดท้ายคือลืมว่า Droplet ตั้ง timezone เป็น UTC โดยเริ่มต้นเสมอ ทำให้เวลาที่เห็นใน log หรือ cron job คลาดเคลื่อนจากเวลาไทยไป 7 ชั่วโมงโดยไม่รู้ตัว ควรตรวจสอบและตั้งค่าตั้งแต่ขั้นตอน initial setup ไปเลยเพื่อไม่ต้องมาไล่ debug เวลาทีหลัง
- sudo: command not found → ต้อง login root แล้วติดตั้งเองก่อนด้วย apt install sudo -y
- ufw enable ก่อน allow SSH → ล็อกตัวเองออก แก้ด้วย DigitalOcean Console แล้ว allow ใหม่
- systemctl restart sshd ผิด → Debian ใช้ชื่อ service ssh ไม่ใช่ sshd
- ปิด PasswordAuthentication+PermitRootLogin พร้อมกันโดยยังไม่ทดสอบ key ใหม่ → เข้าระบบไม่ได้เลย
- ลืม apt update ก่อน install → error หาแพ็กเกจไม่เจอทั้งที่มีจริง
แนวทางปฏิบัติที่ดีที่สุด (Best Practices)
หลังผ่านขั้นตอน initial setup ครบแล้ว มีแนวทางเพิ่มเติมที่ช่วยให้ Debian Droplet ปลอดภัยและดูแลง่ายขึ้นในระยะยาว ข้อแรกคือยึดหลัก SSH key เท่านั้น ปิดทั้ง password authentication และ root login โดยตรงให้ครบ แล้วใช้ user ที่มีสิทธิ์ sudo เป็นบัญชีหลักในการทำงานประจำวัน จำกัดการใช้ root จริง ๆ เฉพาะตอนจำเป็นผ่าน sudo เท่านั้น ข้อสองคือใช้ ufw และ DigitalOcean Cloud Firewall คู่กันเสมอสำหรับ Droplet ที่เปิดให้บริการสาธารณะ เพราะ Cloud Firewall ทำงานที่ระดับ network ก่อนถึงตัวเครื่องทำให้กันได้อีกชั้นแม้ ufw จะตั้งค่าผิดพลาด ข้อสามคือเปิด Monitoring ฟรีของ DigitalOcean ตั้งแต่แรกและตั้ง Alert Policy สำหรับ CPU/RAM/Disk สูงผิดปกติ เพื่อรู้ปัญหาก่อนที่ผู้ใช้จะร้องเรียน ข้อสี่คือหลังตั้งค่าพื้นฐานเสร็จสมบูรณ์และทดสอบ SSH/sudo ใช้งานได้จริงแล้ว ให้สร้าง Droplet Snapshot ไว้เป็น baseline หนึ่งชุด เพื่อให้กู้คืนหรือ clone ไป Droplet ใหม่ได้เร็วโดยไม่ต้องไล่ตั้งค่าทั้งหมดซ้ำ ข้อห้าคือเปิด unattended-upgrades ให้ patch ความปลอดภัยติดตั้งอัตโนมัติ แต่สำหรับการอัปเกรดข้าม major version ของ Debian (เช่นจาก 12 ไปรุ่นถัดไปในอนาคต) ควรทดสอบบน Droplet แยกต่างหากหรือ Staging ก่อนเสมอ ไม่ควรปล่อยให้ unattended-upgrades ทำ major upgrade อัตโนมัติเพราะมีความเสี่ยงต่อ service ที่รันอยู่ ข้อหกคือตั้ง Tags ใน DigitalOcean ให้ Droplet แต่ละตัวตั้งแต่แรก เช่น env:production หรือ role:web เพื่อให้จัดการ Cloud Firewall และ billing แยกตามกลุ่มได้ง่ายขึ้นเมื่อจำนวน Droplet เพิ่มขึ้น และสุดท้ายควรจดบันทึกขั้นตอน initial setup ที่ทำเป็น script หรือ cloud-init ไว้ใช้ซ้ำ เพื่อให้ Droplet ใหม่ทุกตัวได้มาตรฐานความปลอดภัยเดียวกันโดยไม่ต้องไล่ทำมือทีละขั้นทุกครั้ง
- ใช้ SSH key เท่านั้น ปิด password auth + root login โดยตรง
- เปิด ufw คู่กับ DigitalOcean Cloud Firewall เสมอสำหรับ Droplet สาธารณะ
- เปิด Monitoring ฟรี + ตั้ง Alert Policy ตั้งแต่แรก
- สร้าง Snapshot baseline หลังตั้งค่าเสร็จ ก่อน deploy แอปจริง