Am nevoie în mod regulat să dezvolt unele servicii bazate pe Linux, software gratuit și aplicații cu sursă închisă. Eu folosesc QEMU mașină virtuală ca mediu de dezvoltare unde editez direct fișierele de pe instanța care rulează și fac testele în același timp.
Când lucrul este gata, copiez toate fișierele de pe serverul de producție, care este realizat dintr-o instalare proaspătă a sistemului de operare, cu o configurație completă a noului mediu.Evident, atunci când sistemul este în producție, trebuie să sincronizez manual cele 2 medii pentru a le face similare. Când remediez o eroare în producție, trebuie să port remedierea în mediul de dezvoltare.
Dezvoltarea conține mai multe părți:
- Scripturi Linux și configurație software (/etc, /var/www, /home, fișiere .config, reguli firewall etc)
- Dependențe (lista de software de descărcat din depozitul de software (adică apt-get install xxx)
- Aplicația
- Baza de date
Aș dori să știu cum să fac o versiune corectă a acestui mediu complex.
Am încercat următoarele abordări.
Scriptul de backup creează un fișier TAR complet cu toate elementele necesare: script pentru a descărca toate dependențele, toate fișierele din aplicație, fișierele de configurare necesare din /etc, ultima versiune a scripturilor de backup și restaurare, descărcarea bazei de date etc. .
Scriptul de restaurare șterge toată aplicația curentă și o înlocuiește cu versiunea prezentă în fișierul TAR. Această abordare funcționează corect, dar este puțin greoaie. Este nevoie de multă atenție pentru a vă asigura că scriptul de restaurare funcționează corect dintr-o instalare nouă.
Această abordare ar putea fi puțin ridicolă, nu am testat-o încă. Ideea ar fi să folosesc și o mașină virtuală în mediul meu de producție. Aici, aș copia doar mașina virtuală pe VPS și aș rula QEMU în interiorul VPS-ului. Când vreau să fac backup, doar salvez undeva discul mașinii virtuale. Poate că nu este foarte eficient, dar probabil că este acceptabil pentru proiectul la care lucrez.
Nici eu nu am testat această abordare, dar m-am gândit la asta. Ideea ar fi să folosiți un software de versiune de software, cum ar fi GIT, pe întregul sistem de fișiere după instalarea sistemului de operare. În acest fel, aș comite toate modificările (fișiere binare și text).Aș putea publica modificările aduse producției folosind programul SCM.
Această abordare se bazează pe un software specific. M-am uitat în această direcție și am auzit despre software-ul numit Kurbernetes, Puppet sau alte nume. Acest lucru pare foarte complicat de configurat și nu am petrecut mult timp pentru a investiga acolo.
Care sunt cele mai bune practici cu privire la versiunea mediilor bazate pe Linux?