Tanpa ansambel



Kami pernah memutuskan untuk melakukan otomatisasi saat-saat kerja rutin kami. Buat ansambel Anda sendiri (mungkin) atau sesuatu seperti itu. Saya naik ke situs web ensemble, melihat cara kerjanya ... terhubung ke server jarak jauh melalui ssh dan menjalankan beberapa jenis skrip di sana ... Berhenti, saya pikir, apakah ini benar-benar memerlukan sebuah ensemble? Tanpa ansambel, saya sendiri ... sendirian ... bisa melakukannya! Dan agar tidak hanya saya bisa, saya memutuskan untuk menulis aplikasi web. Aplikasi itu disebut Update Server , disingkat sebagai UpS .

Bangun! Di bawah potongan banyak gambar dan beberapa gif.

Saya memutuskan untuk membuat aplikasi menggunakan python dan dzhanga. Ada cukup banyak spesialis dan "spesialis" dalam hal ini dan yang lainnya. Karena itu, saya tidak akan mengukur jumlah baris kode sekarang. Mereka yang tertarik dapat melihat di sini tidak ada rahasia, dan sebagian besar tim dikodekan secara khusus untuk proyek kami. Saya hanya akan memberi tahu (dan menunjukkan) tentang fungsi apa yang ternyata diterapkan dalam aplikasi. Jadi disini. Saya mengambil python saya, omong-omong, python saya tidak terlalu besar, normal, rata-rata 2,7. Saya mendapatkan dia baru (pada waktu itu) dzhang 1.10 dan mulai menghubungkan mereka. Dan begitu dan begitu terhubung. Saya masuk dari atas dan bawah, dengan segala cara saya mencoba. Dan ternyata pada akhirnya.


Tetapi hal pertama yang pertama, semuanya dimulai dengan halaman yang begitu sederhana dengan deskripsi.


Mengklik pada jumbotron Proyek kita sampai ke halaman pemilihan proyek.


Setelah memilih proyek, kita sampai ke halaman utama dengan daftar server, skrip, dll.


Mari kita beralih ke detailnya. Aplikasi mengidentifikasi beberapa entitas: server (server), skrip (skrip), paket layanan (pembaruan), tugas di mahkota (tugas cron), acara dalam riwayat (acara), proyek (proyek) dan tidak cukup esensi dari dump (dump).

Sedikit penyimpangan
Kami bermain dengan anak saya dalam pencarian Titan, atau lebih tepatnya saya bermain, dan dia melihat) Di sana, beberapa artefak, yang disebut entitas dalam versi Rusia, keluar dari monster. Suatu hari, beberapa jenis esensi Achilles jatuh ke saya di sana. Gambarnya adalah sesuatu yang lain, tetapi dari opera yang sama)
Sang putra melihat dan berteriak:
- Ayah, lihat Kredibilitas Achilles!)

Esensi utama adalah proyek. Server, skrip, pembaruan melekat pada proyek. Pekerjaan dan pembuangan Crown dibuat. Objek tersebar di tab yang sesuai. Di sebelah kiri adalah menu dengan daftar perintah. Mari kita membaca penanda. Skrip bookmark pertama.


Di sini kita melihat skrip dan server yang tersedia (server tersedia di semua tab, karena hampir selalu diperlukan). Script dapat diambil dari file atau dibuat di antarmuka dengan tombol Add . Didukung oleh skrip SH, PY, YML dan SQL. Di panel skrip ada deskripsi ( deskripsi ), sepotong kode ( pratinjau ), penulis dan tanggal. Untuk skrip SH dan PY, dimungkinkan untuk menambahkan opsi (bidang opsi ). Script (dan objek lainnya) dipilih dengan mengklik bagian mana pun dari panel (kecuali untuk tombol "cepat"). Klik pada skrip (kedua, ketiga, dll.), Klik pada server (kedua, ketiga, dll.) Dan klik pada skrip Run . Skrip atau skrip yang dipilih akan dieksekusi di server atau server yang dipilih. Jika Anda perlu menjalankan satu skrip "cepat", Anda dapat menggunakan tombol "cepat" pada panel skrip, klik pada server (kedua, ketiga, dll.) Dan klik Jalankan skrip yang diinginkan. Saat menulis artikel, perubahan muncul. Script SQL terpisah dari yang lain, menambahkan perintah dan permichon yang terpisah untuk mengeksekusi esquels. Ini memungkinkan, misalnya, untuk memberikan hanya hak untuk mengeksekusi esquels, karena SH dan PY jauh lebih kuat, mereka memberikan kemungkinan yang hampir tak terbatas. Tetapi saya tidak mengulangi tangkapan layar) Saya bisa membatasi diri pada skrip, hampir semuanya bisa dilakukan dengan mereka, tetapi itu sudah sulit untuk dihentikan).
Silakan, paket layanan.


Pada tab ini, Anda dapat menambahkan pembaruan baru, menyalinnya ke server, melakukan pembaruan. Bahkan, bisa berupa file apa saja, seperti dalam contoh ini file txt biasa digunakan sebagai pembaruan tes. Anda mengunggah file ke server (paling sering itu adalah zip) dan entah bagaimana menggunakannya menggunakan skrip. Pembaruan juga memiliki deskripsi, penulis, tanggal, dan ukuran yang ditampilkan.
Selanjutnya datang kesedihan.


Ini menampilkan daftar file yang diterima oleh perintah Dapatkan dump atau diunduh di sini dari komputer. Dumps tidak memiliki deskripsi, hanya ada nama, ukuran dan waktu pembuatan. Mungkin tidak hanya semua setidaknya sekali (dua, tiga) menggebrak basis makanan? Saya mengambil kesempatan ini ke level baru) Kirim dump perintah ini menyebarkan basis server dari dump yang dipilih. Rasakan peluangnya? (Anda mendengar suara kentut) Ya, di tangan yang tidak mampu, perintah ini dapat membunuh SEMUA pangkalan di SEMUA server hanya dengan beberapa klik! Itulah sebabnya tombol perintah ini (dan sejenisnya) dicat merah, harus ditekan dengan sangat hati-hati. Untuk kesedihan volume, tentu saja bermasalah untuk digunakan, tetapi untuk basis uji kecil itu adalah hal yang sangat nyaman. Cron.


Semua aib ini dapat dijalankan melalui mahkota. Tab ini menampilkan tugas aktif. Setiap tugas memiliki pengidentifikasi unik ( id crontab ), perlu untuk manipulasi selanjutnya dengannya. Deskripsi menunjukkan apa tugas yang akan dilakukan. Dalam contoh, jalankan skrip test2.sh di server dengan alamat jboss @ localhost. Waktu mulai tugas ditunjukkan dalam bidang Tanggal mulai dalam format YYYY-MM-DD HH: MM Waktu penulis dan pembuatan ditunjukkan. Anda dapat membatalkan tugas, mengubah waktu, menjadikan tugas tersebut permanen (akan dieksekusi setiap hari pada waktu yang ditentukan), atau sebaliknya, satu kali.
Log perintah yang sedang berjalan muncul di sini.


Anda tidak dapat melakukan apa pun dengan log, semuanya sudah dilakukan, duduk dan lihat apa yang terjadi) Mengklik pada plat log akan membukanya di jendela terpisah. Jika beberapa proses sedang berjalan, tombol Semua log muncul, buka semua log dalam satu jendela (Saya lupa mengambil tangkapan layar ini).

Server. Seperti yang saya katakan, daftar server tersedia di semua tab. Server menampilkan alamat (alamat ssh ), dapat ditulis dalam format user @ address, tetapi lebih baik menggunakan alias ssh (~ / .ssh / config) dan tentukan beberapa nama yang bermakna. Alamat HTTP adalah URL aplikasi yang digunakan di server. Folder yang berfungsi ( folder server ) dan port ( server bind port ), ini adalah folder tempat aplikasi berada dan port yang dibuka. Deskripsi, penulis, tanggal. Tangkapan layar menunjukkan beberapa perintah baru yang ditambahkan pada saat penulisan: Prop dan Full . Kami memiliki dua file konfigurasi utama, perintah ini memungkinkan Anda untuk mengeditnya dengan mudah. Sisa tim. Merah pertama:
Maintenance ON \ OFF - aktifkan / nonaktifkan halaman Scheduled Works untuk O_o maintenance terjadwal atau jika terjadi kesalahan (setelah mengirim dump misalnya).
Reload config - memuat ulang konfigurasi jboss (proyek kami menggunakan jboss).
Restart \ start \ stop \ kill jboss - stop, start, restart jboss, dan pembunuhan brutal jika tidak ada yang membantu)
Selanjutnya, berbagai hal bermanfaat:
Info sistem - menampilkan informasi tentang server: memori, disk, prosesor, pengguna, proses.
Periksa kesehatan - pemeriksaan cepat kesehatan aplikasi, mencari proses aplikasi, memeriksa apakah port terbuka dan mencoba mengetuk port ini dengan ikal.
Periksa conf - menunjukkan file konfigurasi aplikasi.
Periksa log - menampilkan log aplikasi.
Periksa log GC - menunjukkan pengumpul sampah log.
Dapatkan hari \ minggu \ bulan \ semua log - memungkinkan Anda untuk mengunduh log untuk waktu tertentu dalam satu arsip.
Basis cadangan \ system \ full - membuat salinan cadangan dari database, file aplikasi, melakukan keduanya.
Salin utilitas - menyalin semua jenis skrip yang berbeda ke server.
Kata sandi mengintip - memungkinkan Anda membongkar kata sandi admin.
Periksa pembaruan - menunjukkan file pembaruan mana yang diunggah ke server.
Buat tunnel - meneruskan port aplikasi dari server aplikasi ke UpS (bagaimanapun juga kita memiliki ssh). Anda dapat terhubung ke port aplikasi secara langsung. Berguna untuk memverifikasi fungsi jika tidak ada akses (http \ s) ke alamat utama.
Perintah Info sistem , Periksa kesehatan , Periksa conf , Periksa log , Kata sandi mengintip , Periksa pembaruan dan Buat terowongan memiliki analog "cepat" langsung pada panel setiap server.
Ada tautan History di panel atas, hasil dari eksekusi semua (hampir) perintah dicatat dalam history. Permisher diharuskan untuk melihat histori dan menjalankan perintah. Permichons digantung oleh panel admin standar Dzhangovsky. Satu-satunya hal yang saya tambahkan di sini, saya mengacaukan perpustakaan django-wali, yang memungkinkan Anda untuk melampirkan permichons ke objek, menurut saya sangat nyaman, tetapi djanga tidak dapat melakukannya di luar kotak.

Tentu saja, saya bukan guru wi, tetapi saya mencoba membuat manajemen mudah dan tidak dipaksa) Klik pada objek yang diperlukan, pilih tim dan oh itu saja. Klik pada tombol untuk mendapatkan hasilnya. Sesuatu seperti itu.


Beberapa kata tentang cara kerjanya. Python dan dzhanga, seperti yang saya katakan, dilihat, model, URL, formulir, ini semua ada seperti file commands.py . File yang tersedia dijelaskan dalam file ini (sejauh ini semuanya logis, bukan?). Itu terlihat seperti ini:
class CommandClass: """ """ def __init__( self, permission='run_command', # Permission needed to run this command. position=1, # Position in commands list section='', # Section command will be placed to. style='', # Class assigned to a command button title='', # Pop up help message(via title) short='', # Short name for commands in quick section menu='', # Command name in UI name='', # Command name(an internal command name) run='', # Prevent CRONing his=True, # Command log will be saved to history fst=False, # Add command to quick section dgr='false', # If true will show confirmation window job='false', # Check if some cron jobs selected srv='false', # Check if some servers selected upd='false', # Check if some updates selected scr='false', # Check if some scripts selected dmp='false', # Check if some dumps selected ): self.permission = permission self.position = position self.section = section self.style = style self.title = title self.short = short self.name = name self.menu = menu self.run = run self.his = his self.fst = fst self.srv = srv self.upd = upd self.job = job self.scr = scr self.dmp = dmp self.dgr = dgr 

Dan semua perintah yang ada dijelaskan dalam kamus commandick . Nama kamus adalah semacam permainan kata-kata perintah (command) dan kamus (kamus), penikmat bahasa Inggris mungkin akan menemukan beberapa makna tersembunyi lainnya. Kamus:
 commandick = { # Cron submenu }----------------------------------- 'cancel_job': CommandClass( permission='run_cron', position=4, section='cron', title='Cancel selected cron job(s).', name='cancel_job', menu='Remove job', job='true', run="run_or_cron('RUN');", ), 'permanent_job': CommandClass( permission='run_cron', position=3, section='cron', title='Make selected cron job(s) permanent.', name='permanent_job', menu='Run everyday', job='true', run="run_or_cron('RUN');", ), ... 'tunnel': CommandClass( permission='tunnel', position=80, section='server', title='Make ssh tunnel to the bind port of selected server(s).', short='Tunnel', name='tunnel', menu='Create tunnel', run="run_or_cron('RUN');", srv='true', his=False, fst=True, ), 'test_ssh': CommandClass( permission='tunnel', position=90, section='server', title='Test ssh connection.', short='Tunnel', name='test_ssh', menu='Test ssh', run="run_or_cron('RUN');", srv='true', his=False, ), } 

Setiap perintah adalah modul terpisah di folder modul . Perintah diluncurkan oleh proses terpisah, jika beberapa server dipilih, maka skrip starter.py dibuat untuk masing-masing, ia mengimpor dan mengeksekusi modul (perintah) yang diperlukan. Sudahkah Anda menemukan fitur baru? Tambahkan file ke folder modul dan jelaskan di kamus, oh semua. Ini adalah aplikasi. Vangyu berkomentar tentang bangunan sepeda. Untuk ketinggian Anda ... dongeng, saya ingin menjawab ini. Mengapa orang terus membuat orang baru? Lagipula, orang sudah banyak ... sampai batas tertentu. Karena saya suka prosesnya) Jadi saya suka prosesnya, yang juga saya harapkan, buat, ciptakan, coba)

kerajinan lainnya
Sebagai kesimpulan, saya ingin menyebutkan beberapa kerajinan saya. Untuk buku mewarnai terkecil. Sebuah skrip yang menyederhanakan proses pewarnaan skrip lain:
 #--------------------------------------------------------------------+ #Color picker, usage: printf $BLD$CUR$RED$BBLU'Hello World!'$DEF | #-------------------------+--------------------------------+---------+ # Text color | Background color | | #-----------+-------------+--------------+-----------------+ | # Base color|Lighter shade| Base color | Lighter shade | | #-----------+-------------+--------------+-----------------+ | BLK='\e[30m'; blk='\e[90m'; BBLK='\e[40m'; bblk='\e[100m' #| Black | RED='\e[31m'; red='\e[91m'; BRED='\e[41m'; bred='\e[101m' #| Red | GRN='\e[32m'; grn='\e[92m'; BGRN='\e[42m'; bgrn='\e[102m' #| Green | YLW='\e[33m'; ylw='\e[93m'; BYLW='\e[43m'; bylw='\e[103m' #| Yellow | BLU='\e[34m'; blu='\e[94m'; BBLU='\e[44m'; bblu='\e[104m' #| Blue | MGN='\e[35m'; mgn='\e[95m'; BMGN='\e[45m'; bmgn='\e[105m' #| Magenta | CYN='\e[36m'; cyn='\e[96m'; BCYN='\e[46m'; bcyn='\e[106m' #| Cyan | WHT='\e[37m'; wht='\e[97m'; BWHT='\e[47m'; bwht='\e[107m' #| White | #----------------------------------------------------------+---------+ # Effects | #--------------------------------------------------------------------+ DEF='\e[0m' #Default color and effects | BLD='\e[1m' #Bold\brighter | DIM='\e[2m' #Dim\darker | CUR='\e[3m' #Italic font | UND='\e[4m' #Underline | INV='\e[7m' #Inverted | COF='\e[?25l' #Cursor Off | CON='\e[?25h' #Cursor On | #--------------------------------------------------------------------+ # Text positioning, usage: XY 10 10 'Hello World!' | XY () { printf "\e[$2;${1}H$3"; } # | #--------------------------------------------------------------------+ # Print line, usage: line - 10 | line -= 20 | line 'Hello World!' 20 | line () { printf -v LINE "%$2s"; printf "${LINE// /$1}"; } # | #--------------------------------------------------------------------+ 

Untuk anak-anak yang lebih besar, menghabiskan banyak waktu di konsol, dasbor yang bagus.
gambar

Bagi mereka yang sudah berada dalam kerangka localhost, ada skrip yang membuat menu (dialog) dari ~ / .ssh / config Anda . Semua orang tahu mengapa ~ / .ssh / config diperlukan?) Kelihatannya seperti ini:
gambar

Dan tentu saja PIE-PIE!
Banyak yang menyukai Piu-Piu (lebih dari 550 bintang di github), terima kasih atas kata-kata baik Anda dan atas bantuan Anda! Tidak mendengar tentang piu-piu? Baca di sini , di sini dan di sini . Saya ingin mengembangkan plot lebih jauh dan membuat game lebih besar, saya punya ide untuk optimasi tetapi tidak ada cukup waktu. Liburan Tahun Baru sangat disambut, saya harap saya bisa mengerjakan permainan. Omong-omong, piu-piu dapat diinstal apt'om:
 sudo apt install -y piu-piu 

gambar

Selamat Tahun Baru!)

Source: https://habr.com/ru/post/id428439/


All Articles