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.
sumber
Jawaban yang diposting sangat membantu dalam memungkinkan saya untuk memikirkan kembali masalah saya dan berbagai pendekatan. Saya belum mengimplementasikan solusi tetapi saya telah memutuskan pendekatan jadi saya mendokumentasikannya dan memilihnya sebagai jawabannya. Singkatnya begini:
Pendekatan Pilihan Saya
Pertimbangan Yang Mengerjakan Pendekatan Ini
Docker: Saya telah memutuskan untuk tidak melakukannya. Meskipun saya menanggapi dengan serius tanggapan (terima kasih @Levi dan @Dan) yang mengatakan saya harus mengunjungi kembali dan seharusnya tidak seburuk itu, saya telah memiliki terlalu banyak pengalaman di masa lalu dalam memulai sesuatu yang baru dan menyadari bahwa saya telah jatuh menyusuri lubang kelinci yang memakan waktu dan membutuhkan waktu untuk bisa berjalan. Saya pikir itu akan berbeda jika saya bahkan bekerja dengan satu orang lain tetapi sebagai seseorang yang bekerja sepenuhnya sendirian setiap menit sangat berharga.
Mesin Virtual: Saya belum mempertimbangkan hal ini sampai saya mulai bekerja dengan beberapa tutorial Docker yang menggunakan VM untuk mendemonstrasikan fungsi Swarm. Gagasan untuk dapat menciptakan lingkungan baru yang saya kendalikan sepenuhnya sangat menarik.
Scripting: Prompted by @ AnoE's reply bermanfaat Saya telah melakukan penggalian sedikit lebih dan sepertinya Python diakui sebagai opsi yang layak untuk scripting dan karena itulah yang saya tulis aplikasi saya di dalamnya sepertinya harus ada sinergi (Jika saya perlu untuk mempelajari sesuatu yang baru untuk skrip saya, itu akan menjadi pengetahuan yang dapat saya gunakan dalam menulis aplikasi saya)
Saya akan memperbarui setelah saya membuat beberapa kemajuan dengan ini dan jika itu salah besar saya akan mengakui saya mungkin membuat pilihan yang salah!).
Pembaruan pada 20 Oktober 2018.
Saya mulai menulis skrip Python tetapi ini sering melibatkan memohon perintah bash dari Python dan kemudian mendapatkan respons kembali dan saya menemukan ini ditambahkan ke waktu pengembangan cukup banyak. Setelah beberapa minggu mengalami kemajuan yang lambat, saya mencari di tempat lain. Saya akui saya mungkin salah mendekati, tetapi saya membutuhkan sesuatu yang akan lebih cepat.
Saya akhirnya memilih Vagrant / Ansible / VirtualBox dan setelah berbulan-bulan lebih daripada saya ingin mengakui mendapat sesuatu yang bekerja dengan baik, tetapi setelah banyak pekerjaan belajar beberapa keterampilan baru (Vagrant dan Ansible benar-benar baru bagi saya). Saya kemudian menerapkan skrip Ansible untuk menyediakan DigitalOcean Droplet dan menemukan ini berfungsi dengan sangat baik. Saya telah menjadi penggemar Ansible tetapi meskipun saya setuju (dengan pengulas) bahwa itu relatif mudah digunakan, itu masih merupakan paradigma baru dan kurva pembelajaran yang cukup curam.
Pada saat penulisan, saya telah menyediakan dua Tetesan terpisah pada DigitalOcean dalam konfigurasi biru-hijau, menggunakan DO Floating IP address untuk beralih di antara keduanya, dan pada setiap aplikasi ada dalam copy git yang berfungsi jadi saya hanya perlu menyegarkan kembali Master untuk memperbarui lingkungan.
Saya mengalami masalah dalam membuat IP Terapung berfungsi seperti yang saya harapkan, tetapi saya berharap untuk menyelesaikannya segera dan kemudian saya akan memiliki lingkungan DevOps yang berfungsi.
Keuntungan besar dari pendekatan ini adalah bahwa cara Ansible bekerja, setelah Anda memiliki sesuatu yang bekerja itu relatif mudah untuk membuatnya bekerja di lingkungan yang berbeda dan ini mungkin tidak begitu mudah dicapai dengan skrip python (atau setidaknya Anda harus membangun ini adalah pekerjaan tambahan).
Saya pikir pelajaran besarnya adalah bahwa hal-hal memakan waktu lebih lama daripada yang saya harapkan dan mempelajari teknologi baru selalu membawa hal-hal yang tidak diketahui. Ini seharusnya tidak menjadi kejutan bagi saya - tetapi selalu dan bekerja sebagai pengembang tunggal, ini sering terjadi pada saya.
sumber