กลับไปหน้าบทความ
#rsync#deploy#backup#Linux#SSH

rsync: เครื่องมือ Deploy และ Sync ไฟล์ที่เร็ว เบา และไว้ใจได้

rsync ไม่ใช่แค่คำสั่งคัดลอกไฟล์ แต่เป็นเครื่องมือสำคัญสำหรับงาน deploy, backup และ sync ไฟล์ที่ช่วยส่งเฉพาะส่วนที่เปลี่ยน ทำให้เร็ว ประหยัดแบนด์วิดท์ และลดความผิดพลาดได้มากขึ้น โดยเฉพาะเมื่อใช้งานร่วมกับ SSH และตัวเลือกอ

27 มีนาคม 2569อ่านประมาณ 2 นาที

แชร์บทความ

rsync: เครื่องมือ Deploy และ Sync ไฟล์ที่เร็ว เบา และไว้ใจได้

rsync: เครื่องมือ Deploy และ Sync ไฟล์ที่เร็ว เบา และไว้ใจได้

หลายคนอาจคุ้นเคยกับการคัดลอกไฟล์ด้วย cp, ส่งไฟล์ด้วย scp หรือบีบอัดเป็น zip แล้วค่อยย้ายขึ้นเซิร์ฟเวอร์ทุกครั้ง แต่สำหรับคนที่ทำงานด้านเว็บ ระบบ หรือดูแลเซิร์ฟเวอร์อยู่เป็นประจำ rsync คือเครื่องมือที่ให้ประสิทธิภาพมากกว่าอย่างชัดเจน

จุดแข็งสำคัญของ rsync คือมันจะส่งเฉพาะไฟล์ใหม่ หรือเฉพาะส่วนที่มีการเปลี่ยนแปลง แทนที่จะย้ายทุกอย่างใหม่ทั้งหมด จึงช่วยให้งาน sync และ deploy เร็วขึ้น ประหยัดทรัพยากร และเชื่อถือได้มากในงานจริง

ทำไม rsync ถึงต่างจากการคัดลอกไฟล์ทั่วไป

แนวคิดของ rsync เข้าใจได้ง่ายมาก: มันเหมือนการขนเฉพาะของที่เปลี่ยน ไม่ใช่ย้ายบ้านทั้งหลังทุกครั้ง

ข้อดีที่ทำให้หลายทีมเลือกใช้ ได้แก่

  • ส่งเฉพาะไฟล์ใหม่
  • อัปเดตเฉพาะไฟล์ที่ถูกแก้ไข
  • รักษาโครงสร้างโฟลเดอร์เดิม
  • สามารถลบไฟล์ฝั่งปลายทางที่ไม่มีอยู่ในต้นทางได้
  • ทำงานผ่าน SSH ได้อย่างปลอดภัย

ด้วยคุณสมบัติเหล่านี้ rsync จึงเหมาะมากกับงาน deploy โค้ด, backup รายวัน, mirror ไฟล์ หรือ sync ข้อมูลระหว่างเครื่องพัฒนาและเซิร์ฟเวอร์

ตัวอย่างคำสั่งพื้นฐานที่ใช้บ่อย

คำสั่งที่พบได้บ่อยมากคือ

rsync -av ./app/ user@server:/var/www/app/

คำสั่งนี้เหมาะสำหรับส่งโค้ดหรือไฟล์จากเครื่องปัจจุบันขึ้นไปยังเซิร์ฟเวอร์ปลายทาง

ความหมายของ option แบบสั้น ๆ คือ

  • a = archive mode ใช้เพื่อเก็บโครงสร้างไฟล์ สิทธิ์ เวลา และรายละเอียดสำคัญไว้ให้ครบ
  • v = verbose mode แสดงผลระหว่างทำงานว่ากำลังเกิดอะไรขึ้นบ้าง

เมื่อใช้งานจริง ตัวเลือกสองตัวนี้ถือเป็นพื้นฐานที่ช่วยให้ทั้งคัดลอกได้ครบและตรวจสอบได้ง่าย

ใช้งานผ่าน SSH เพื่อความปลอดภัย

หากต้องการให้การส่งไฟล์ปลอดภัยมากขึ้น สามารถระบุให้ rsync ใช้งานผ่าน SSH ได้โดยตรง

rsync -av -e ssh ./app/ user@server:/var/www/app/

รูปแบบนี้เหมาะมากกับการทำงานบนเซิร์ฟเวอร์จริง เพราะข้อมูลจะถูกส่งผ่านช่องทางที่เข้ารหัส ช่วยเพิ่มความปลอดภัยในการ deploy หรือ sync ไฟล์ระหว่างเครื่อง

ทำให้ปลายทางเหมือนต้นทางด้วย --delete

หากต้องการให้โฟลเดอร์ปลายทางตรงกับต้นทางแบบ 100% สามารถใช้ option --delete ได้

rsync -av --delete ./app/ user@server:/var/www/app/

ตัวเลือกนี้จะลบไฟล์ที่มีอยู่ฝั่งปลายทาง แต่ไม่มีอยู่ในต้นทางแล้ว จึงเหมาะมากกับงาน deploy ที่ต้องการให้โครงสร้างไฟล์สะอาดและตรงกันทุกครั้ง

อย่างไรก็ตาม จุดนี้ต้องใช้อย่างระมัดระวังมาก เพราะหากระบุ path ผิดเพียงเล็กน้อย อาจทำให้ลบไฟล์เกินกว่าที่ตั้งใจได้

ลดความเสี่ยงด้วย --dry-run

ก่อนรันคำสั่งจริง โดยเฉพาะคำสั่งที่มี --delete ควรทดลองจำลองผลลัพธ์ก่อนเสมอ

rsync -av --delete --dry-run ./app/ user@server:/var/www/app/

--dry-run จะยังไม่ลงมือทำจริง แต่จะแสดงให้เห็นว่าหากรันคำสั่งนี้แล้ว จะมีไฟล์ไหนถูกคัดลอก อัปเดต หรือลบออกบ้าง

เทคนิคเล็ก ๆ นี้ช่วยลดความผิดพลาดได้มาก โดยเฉพาะในช่วง deploy ตอนดึก ตอนรีบ หรือในสถานการณ์ที่ต้องการความมั่นใจสูง

งานที่ rsync ทำได้มากกว่า deploy

แม้หลายคนจะรู้จัก rsync จากงาน deploy เป็นหลัก แต่จริง ๆ แล้วมันยังเหมาะมากกับงาน backup แบบ incremental ด้วย

เพราะ rsync ไม่จำเป็นต้องคัดลอกทุกไฟล์ใหม่ทั้งหมดในทุกครั้ง จึงช่วยประหยัดเวลาและแบนด์วิดท์ได้ดีมาก

ตัวอย่างการใช้งานที่พบได้บ่อย เช่น

  • sync ไฟล์ระหว่างเครื่องพัฒนากับเซิร์ฟเวอร์
  • mirror static files ไปยังสภาพแวดล้อม staging หรือปลายทางอื่น
  • copy log files ตามรอบเวลา
  • backup รายวันหรือรายสัปดาห์

ความยืดหยุ่นนี้ทำให้ rsync ยังเป็นเครื่องมือที่มีที่ยืนเสมอ แม้ในยุคที่หลายทีมมี CI/CD เต็มรูปแบบแล้วก็ตาม

การ exclude ไฟล์ที่ไม่ต้องการส่ง

ในหลายโปรเจกต์ เราไม่ต้องการส่งบางโฟลเดอร์หรือไฟล์ขึ้นไปด้วย เช่น node_modules หรือ .git สามารถใช้ --exclude ได้ดังนี้

rsync -av --exclude node_modules --exclude .git ./app/ user@server:/var/www/app/

วิธีนี้เหมาะมากสำหรับลดขนาดข้อมูลที่ต้องส่ง และช่วยป้องกันไม่ให้ไฟล์ภายในทีม หรือไฟล์ที่ไม่จำเป็นต่อการรันระบบจริง หลุดขึ้นไปยังเซิร์ฟเวอร์ปลายทาง

เรื่องเล็กที่สำคัญมาก: slash ท้าย path

หนึ่งในจุดที่คนใช้ rsync พลาดกันบ่อย คือการใส่หรือไม่ใส่ slash (/) ท้าย path เพราะความหมายต่างกัน

ตัวอย่างเช่น

rsync -av app user@server:/var/www/

คำสั่งนี้จะส่งทั้งโฟลเดอร์ app ไปไว้ใน /var/www/

แต่ถ้าใช้แบบนี้

rsync -av app/ user@server:/var/www/app/

จะหมายถึงการส่งเฉพาะสิ่งที่อยู่ภายใน app ไปยังโฟลเดอร์ปลายทาง

แม้จะต่างกันเพียง slash เดียว แต่ผลลัพธ์ด้านโครงสร้างไฟล์อาจเปลี่ยนไปทันที ดังนั้นก่อนกดรันควรตรวจสอบ path ให้ละเอียดทุกครั้ง

ทำไม rsync ยังสำคัญในงานเซิร์ฟเวอร์

แม้จะเป็นเครื่องมือที่มีมานาน แต่ rsync ยังได้รับความนิยมอย่างต่อเนื่อง เพราะมีคุณสมบัติที่ตอบโจทย์งานจริงอย่างครบถ้วน

  • เร็ว เพราะไม่ต้องย้ายทุกอย่างใหม่
  • เสถียร เพราะผ่านการใช้งานในงานจริงมาอย่างยาวนาน
  • ยืดหยุ่น เพราะใช้ได้ทั้ง deploy, backup, mirror และ copy
  • ปลอดภัย เพราะทำงานผ่าน SSH ได้
  • เรียบง่าย แต่ควบคุมงานได้ดี

หลายครั้งเราไม่จำเป็นต้องมีระบบซับซ้อนเสมอไป แค่มี rsync ที่ตั้งค่าดี และมีขั้นตอน deploy ที่ชัดเจน ก็ช่วยให้งานส่งไฟล์ขึ้นเซิร์ฟเวอร์มีประสิทธิภาพและมั่นใจขึ้นมากแล้ว

rsync เหมาะกับใคร

rsync เหมาะมากกับงานและทีมประเภทต่อไปนี้

  • โปรเจกต์เว็บขนาดเล็กถึงกลาง
  • เซิร์ฟเวอร์ที่เข้าถึงผ่าน SSH
  • งาน backup รายวัน
  • ทีมที่อยากลดเวลาส่งไฟล์
  • คนที่ต้องการเครื่องมือเบา แต่ใช้งานได้ทรงพลัง

ยิ่งเมื่อนำไปใช้ร่วมกับ shell script หรือ deploy script ขนาดเล็ก ก็ยิ่งเพิ่มประสิทธิภาพในการทำงานได้มากขึ้นอีก

สรุป

rsync เป็นมากกว่าคำสั่งคัดลอกไฟล์ธรรมดา เพราะมันช่วยให้การ deploy, sync และ backup มีความเร็ว ความแม่นยำ และความปลอดภัยมากขึ้น โดยเฉพาะเมื่อใช้ความสามารถอย่าง --delete, --dry-run, --exclude และการเชื่อมต่อผ่าน SSH อย่างเหมาะสม

ในโลกที่เครื่องมือใหม่เกิดขึ้นตลอดเวลา rsync ยังพิสูจน์ตัวเองได้ว่า เครื่องมือเก่าไม่ได้แปลว่าล้าสมัย ตรงกันข้าม บางครั้งสิ่งที่อยู่มานานคือสิ่งที่ผ่านสนามจริงมาแล้ว และยังคงใช้งานได้ยอดเยี่ยมจนถึงวันนี้