ฉันต้องพัฒนาบริการบางอย่างบน Linux ซอฟต์แวร์ฟรี และแอปพลิเคชันแบบโอเพ่นซอร์สเป็นประจำ ฉันใช้ QEMU เครื่องเสมือนเป็นสภาพแวดล้อมการพัฒนา โดยที่ฉันจะแก้ไขไฟล์บนอินสแตนซ์ที่กำลังรันอยู่โดยตรงและทำการทดสอบไปพร้อมกัน
เมื่อทุกอย่างพร้อม ฉันจะคัดลอกไฟล์ทั้งหมดบนเซิร์ฟเวอร์ที่ใช้งานจริง ซึ่งสร้างจากการติดตั้งระบบปฏิบัติการใหม่ พร้อมการกำหนดค่าที่สมบูรณ์ของสภาพแวดล้อมใหม่เห็นได้ชัดว่า เมื่อระบบกำลังใช้งานจริง ฉันต้องซิงโครไนซ์สภาพแวดล้อม 2 แห่งด้วยตนเองเพื่อให้เหมือนกัน เมื่อฉันแก้ไขจุดบกพร่องในการผลิต ฉันจำเป็นต้องแบ็คพอร์ตการแก้ไขในสภาพแวดล้อมการพัฒนา
การพัฒนาประกอบด้วยหลายส่วน:
- สคริปต์ Linux และการกำหนดค่าซอฟต์แวร์ (/etc, /var/www, /home, ไฟล์ .config, กฎไฟร์วอลล์ ฯลฯ)
- การพึ่งพา (รายการซอฟต์แวร์ที่จะดาวน์โหลดจากที่เก็บซอฟต์แวร์ (เช่น apt-get install xxx)
- ใบสมัคร
- ฐานข้อมูล
ฉันต้องการทราบวิธีสร้างเวอร์ชันที่เหมาะสมของสภาพแวดล้อมที่ซับซ้อนนี้
ฉันลองวิธีต่อไปนี้
สคริปต์สำรองสร้างไฟล์ TAR ที่สมบูรณ์ขององค์ประกอบที่จำเป็นทั้งหมด: สคริปต์สำหรับดาวน์โหลดการอ้างอิงทั้งหมด ไฟล์ทั้งหมดจากแอปพลิเคชัน ไฟล์การกำหนดค่าที่จำเป็นจาก /etc เวอร์ชันล่าสุดของสคริปต์สำรองและกู้คืน ดัมพ์ของฐานข้อมูล ฯลฯ .
สคริปต์การกู้คืนจะลบแอปพลิเคชันปัจจุบันทั้งหมดและแทนที่ด้วยเวอร์ชันที่มีอยู่ในไฟล์ TAR วิธีนี้ใช้ได้ผลแต่ยุ่งยากเล็กน้อย. ต้องให้ความสนใจอย่างมากเพื่อให้แน่ใจว่าสคริปต์การคืนค่าทำงานได้อย่างถูกต้องจากการติดตั้งใหม่
แนวทางนี้อาจไร้สาระเล็กน้อย ฉันยังไม่ได้ทดสอบ แนวคิดก็คือการใช้ Virtual Machine ในสภาพแวดล้อมการผลิตของฉันด้วย ที่นี่ฉันจะคัดลอกเครื่องเสมือนไปยัง VPS และเรียกใช้ QEMU ภายใน VPS เมื่อฉันต้องการสำรองข้อมูล ฉันแค่บันทึกดิสก์ Virtual Machine ไว้ที่ใดที่หนึ่ง อาจไม่มีประสิทธิภาพมากนัก แต่ก็น่าจะพอใช้ได้สำหรับโครงการที่ฉันทำอยู่
ฉันยังไม่ได้ทดสอบวิธีนี้ แต่ฉันคิดเกี่ยวกับมัน แนวคิดคือการใช้ซอฟต์แวร์กำหนดเวอร์ชันของซอฟต์แวร์ เช่น GIT บนระบบไฟล์ทั้งหมดหลังจากติดตั้งระบบปฏิบัติการ ด้วยวิธีนี้ ฉันจะยอมรับการเปลี่ยนแปลงทั้งหมด (ไฟล์ไบนารีและไฟล์ข้อความ)ฉันสามารถเผยแพร่การเปลี่ยนแปลงการผลิตโดยใช้โปรแกรม SCM
วิธีการนี้ขึ้นอยู่กับซอฟต์แวร์เฉพาะ ฉันมองมาทางนี้และได้ยินเกี่ยวกับซอฟต์แวร์ชื่อ Kurbernetes, Puppet หรือชื่ออื่นๆ ดูเหมือนจะซับซ้อนมากในการตั้งค่า และฉันไม่ได้ใช้เวลามากในการตรวจสอบที่นั่น
แนวทางปฏิบัติที่ดีที่สุดเกี่ยวกับการกำหนดเวอร์ชันของสภาพแวดล้อมที่ใช้ Linux คืออะไร