Saya menduga pertanyaan ini akan tampak sangat sepele bagi beberapa pembaca, tetapi sebagai seseorang yang merupakan pengembang tetapi dengan sedikit pengalaman dalam menyebarkan aplikasi dalam hal lain selain manual, klik dan semacam harapan, saya harap Anda akan mengerti bahwa itu adalah cukup menakutkan untuk melihat berbagai pendekatan dan alat yang ada, sehingga saya bisa melakukan sedikit saran untuk membuat saya mulai ke arah yang benar.
Saya seorang pengembang, sekarang hanya di waktu luang saya, yang terbatas. Hingga saat ini saya telah bekerja dengan Java, membangun webapps, dan cukup senang menyebarkan file perang ke lingkungan Tomcat yang membuat semuanya terbungkus dengan baik.
Saya sekarang bekerja di Python dan Django, tetapi ketika saya semakin dekat ke titik di mana saya perlu menggunakan, saya ingin mengatur alur kerja devops yang solid untuk mengotomatisasi sebanyak yang saya bisa dan memastikan saya dapat menggunakan dengan andal, tetapi mengingat bahwa saya use case relatif sederhana, saya ingin menghindari mempelajari toolset besar yang terlalu banyak direkayasa untuk kebutuhan saya dan yang membutuhkan investasi waktu yang besar saya lebih suka menggunakan pengkodean aplikasi saya.
Jadi saya mencari jalan tengah yang memungkinkan saya untuk menyebarkan dan mengelola aplikasi secara andal tanpa menginvestasikan banyak waktu untuk menyiapkan dan mempelajari ekosistem devops besar.
Lebih detail ...
Konteks
- Saya mengembangkan di Mac, menggunakan PyCharm untuk membangun Django 2, Python 3.
- Saya menggunakan git (tetapi tidak pada github) untuk mengelola versi perangkat lunak.
- Saya merasa nyaman dengan bahasa lain dan bahasa scripting dan telah menulis beberapa skrip bash (mungkin cukup amatir), meskipun saya tidak menikmati bash. Saya juga mencoba-coba Perl, yang saya sadari bukan bahasa untuk berkecimpung (yaitu Anda harus menghabiskan waktu mempelajarinya dengan benar)
- Saya bermaksud untuk menggunakan lingkungan VPS, mungkin DigitalOcean.
- Aplikasi saya tidak memiliki misi kritis tetapi penting bahwa saya tahu jika situs turun, dan perlu memiliki cara memulihkan andal jika itu, apakah ini me-restart aplikasi, me-restart server, atau pindah ke server lain ( atau yang lain).
Persyaratan Khusus
Kemampuan untuk mengatur lingkungan baru untuk menerima aplikasi.
Sampai sekarang ketika saya sedang belajar, ini sudah manual, dan setiap kali saya melakukannya saya sudah mulai dari awal dengan Droplet baru. Saya ingin ini lebih sederhana (otomatis) sehingga jika saya harus mengatur lingkungan baru dalam keadaan darurat saya dapat melakukannya dengan andal.
Kemampuan untuk menyebarkan aplikasi ke lingkungan pementasan yang identik dengan live mungkin, idealnya sebagai proses otomatis yang dipicu oleh dorongan git menggunakan pendekatan integrasi berkelanjutan (yang belum pernah saya lakukan sebelumnya).
Kemampuan untuk "menekan tombol" ketika saya senang dengan aplikasi di lingkungan pementasan untuk mendorong ke lingkungan hidup idealnya secara otomatis.
Cara untuk memantau situs (hanya polling ke halaman akan dilakukan)
Cara untuk mengganti situs langsung ke server lain jika saya perlu memulihkan dari kegagalan aplikasi atau server di situs langsung. Saya pikir mungkin pendekatan Biru-Hijau akan bekerja untuk saya?
Apa yang sudah saya coba atau pertimbangkan?
Pengaturan manual lingkungan langsung dengan aplikasi Django, lalu secara manual menyalin basis kode baru ketika ada perubahan. Ini terasa rentan terhadap kesalahan manusia dan saya takut membuat kesalahan dalam penyebaran yang menyebabkan kegagalan yang tidak dapat dipulihkan.
Buruh pelabuhan. Saya akui ketika saya mengetahui tentang Docker, rasanya seperti mimpi yang menjadi kenyataan, tetapi setelah sedikit bereksperimen dan meneliti, saya merasa takut dengan seberapa banyak yang perlu saya pelajari dan ketahui untuk bangkit dan menjalankannya serta mengelolanya. Mungkin ini layak dilakukan karena begitu berhasil, risikonya sangat rendah tetapi saat ini rasanya seperti investasi waktu saya yang lebih besar daripada yang saya harapkan.
Skrip Bash. Gunakan mereka untuk mengatur lingkungan asli dan untuk tugas-tugas tertentu seperti memperbarui aplikasi. Kekhawatiran saya tentang ini adalah bahwa skrip akan menjadi kode yang perlu pengujian dan saya khawatir akan membutuhkan banyak waktu untuk membangun toolset yang andal dengan cara ini.
Saya telah melihat opsi Digital Ocean untuk alamat IP mengambang dan kemampuan untuk memiliki dua server untuk pendekatan "biru hijau" yang tampaknya cukup masuk akal. Jika saya menempuh rute ini, saya masih harus dapat mengotomatiskan penyebaran.
Jadi ... Saya mencari saran tentang pendekatan devops yang menemukan keseimbangan yang tepat antara meminimalkan risiko (misalnya risiko melanggar aplikasi langsung dengan pembaruan, atau risiko tidak dapat pulih dari kegagalan) dan meminimalkan waktu investasi yang perlu saya lakukan untuk mengatur lingkungan dan alur kerja.