Edisi Agustus 2013 Volume VII No. 2 ISSN 1979-8911 DEPLOYMENT APLIKASI UNTUK MULTI SERVER DENGAN MENGGUNAKAN CAPISTRANO Wisnu Uriawan, Adam Faroqi, Hayati Jurusan Teknik Informatika, Fakultas Sains dan Teknologi, Universitas Islam Negeri Sunan Gunung Djati Bandung Jl. A.H Nasution No. 105 Bandung 40164 [email protected], 2 [email protected], [email protected] Abstrak Sebuah aplikasi web yang berjalan di beberapa server membutuhkan mekanisme deployment yang berbeda dengan aplikasi yang hanya berjalan pada satu server. Aplikasi dituntut agar dapat disebarkan ke beberapa server dalam waktu yang bersamaan. Salah satu tools yang dapat menyelesaikan masalah dalam deployment aplikasi ke multi server yaitu capistrano. Capistrano menawarkan kemampuan melakukan deployment aplikasi ke beberapa server. Hal ini menarik untuk diteliti bagaimana algoritma yang digunakan, penanganan kegagalan deployment dan penanganan downtime. Penelitian dilakukan dengan menganalisis proses kerja, dokumentasi dan source code-nya. Hasil penelitian menunjukkan capistrano menggunakan multi-threading dalam menyebarkan aplikasi ke beberapa server. Untuk penanganan kegagalan capistrano menyediakan fungsi rollback agar kegagalan dapat dipelajari dan diperbaiki. Pada saat aplikasi membutuhkan downtime, capistrano menyediakan fungsi untuk menampilkan halaman downtime. Kata kunci : deployment, capistrano, multi-threading, rollback, downtime informasi dalam internet, sehingga trafik 1. Pendahuluan Dewasa ini internet menjadi suatu dalam internet semakin permintaan lapisan masyarakat di dunia, baik itu bagi meningkatnya kalangan pelajar, ilmuwan, dan usahawan. menyebabkan beban kerja pada server Hal semakin penyedia layanan internet tersebut juga meningkatnya permintaan akan kebutuhan meningkat seiring dengan bertambahnya menyebabkan informasi. oleh kebutuhan yang sangat penting bagi seluruh ini akan padat trafik dalam Semakin internet 47 Edisi Agustus 2013 Volume VII No. 2 ISSN 1979-8911 permintaan yang masuk, sehingga server satu penanggulangan beban yang meningkat tersebut akan kelebihan beban dalam waktu bisa dilakukan dengan melakukan upgrade yang pendek, terutama untuk server yang server, proses upgrade server merupakan menyediakan layanan yang populer. Oleh proses yang kompleks dan rentan terjadi karena dan kegagalan aplikasi (application failure) software yang mendukung layanan highly ketika proses upgrade sedang berjalan. scalable dan highly available service. Semakin tinggi kapasitas server yang di- itu, diperlukan hardware Highly scalable dan highly available service dapat dijabarkan sebagai berikut: upgrade, semakin tinggi biaya yang harus dikeluarkan. - Scalability, saat request yang diarahkan Sekelompok server yang dihubungkan ke server meningkat sehingga beban oleh jaringan yang cepat, muncul akibat kerja server bertambah, kapasitas server arsitektur untuk membangun layanan yang dapat ditingkatkan dengan cepat dan scalable dan highly available, arsitektur ini mudah untuk memenuhi kebutuhan dikenal dengan cluster of servers. Dalam - Availability, layanan secara keseluruhan harus tersedia setiap waktu. arsitektur ini beban kerja dari banyak request dibagi ke seluruh server oleh sebuah load - Manageability, walaupun seluruh sistem balancer. Sehingga jika salah satu server mungkin secara fisik besar, harus mudah tidak tersedia karena down, maintenance, untuk dikelola. dan lain-lain, maka request masih bisa - Cost-effectiveness, seluruh bagian sistem harus hemat biaya dalam pembangunan dan pemeliharaan.[1] ditangani oleh server lain. Jika suatu web aplikasi berjalan di beberapa server, maka semua aplikasi di Sebuah sistem dengan satu server semua server dituntut untuk menyediakan biasanya tidak cukup untuk menangani resources yang sama persis seperti kode, beban yang meningkat secara cepat. Salah database, file yang di-upload oleh user. 48 Edisi Agustus 2013 Volume VII No. 2 ISSN 1979-8911 Penambahan fitur pada aplikasi menuntut walaupun sebenarnya ia hanyalah bagian hanya sekali deployment ke semua server, daripadanya.[3] sehingga 2. Metoda Penelitian dibutuhkan suatu mekanisme khusus untuk melaksanakannya. Salah satu Load balancing adalah suatu metode solusi yang diteliti yaitu metodologi untuk untuk deployment sebuah web aplikasi ke semua beberapa host sehingga beban kerja menjadi server Capistrano. lebih ringan. Ini bertujuan agar waktu rata- kemampuan rata mengerjakan tugas menjadi singkat dan deployment aplikasi ke multi server dalam dapat menaikkan utilitas prosesor. Load satu waktu. balancing dapat diimplementasikan dengan menggunakan Capistrano menawakan Internet berasal Interconnection dari Networking kata yang mempunyai arti hubungan komputer dengan berbagai tipe yang membentuk sistem jaringan yang mencakup seluruh dunia (jaringan komputer global) dengan melalui jalur telekomunikasi seperti telepon, radio mendistribusikan hardware khusus, beban software kepada maupun gabungan keduanya. Konfigurasi standar yang ada memberi gambaran bahwa satu mesin ditempatkan diantara client dan server, mesin ini disebut sebagai director karena tugasnya adalah memberikan balancing pada request dari client ke server. link, satelit dan lainnya. World Wide Web Sebuah load balancer adalah perangkat adalah suatu ruang informasi di mana jaringan yang dipasang diantara client dan sumber-sumber server, bekerja sebagai saklar untuk request daya yang berguna diidentifikasi oleh pengenal global yang dari disebut Uniform Resource Indetifier (URI). mengimplementasikan World Wide Web sering dianggap sama penjadwalan yang akan menentukan ke arah dengan server mana request dari client akan internet secara keseluruhan, client. Load beberapa balancer metode diteruskan.[4] 49 Edisi Agustus 2013 Volume VII No. 2 Deployment application environment means from into moving a a home ISSN 1979-8911 your ke server tertentu yang sedang tersedia development berdasarkan algoritma tertentu. DNS dari that your customers can visit. For a web application, that process involves choosing a host, setting up a web server and database, and moving all of your files to the right places with the right permissions.[6] Aplikasi berjalan pada beberapa server yang tergabung menjadi satu virtual server, berikut adalah arsitektur aplikasi multi server meggunakan linux virtual server: suatu aplikasi web harus diarahkan ke IP dari load balancer. b. Server Cluster (kumpulan server) Kumpulan dari real server yang menjadi tempat aplikasi berjalan. Setiap server akan memiliki resources yang sama untuk setiap aplikasi. Real server ini lah yang menjadi target deployment jika terdapat penambahan/perbaikan kode aplikasi. c. Shared Storage Merupakan tempat penyimpanan untuk server-server yang digunakan, seperti file-file yang diupload pengguna dan Gambar 1. Arsitektur dasar multi server database sehingga seluruh server akan mampu menyediakan konten yang Arsitektur di atas mengadopsi 3-tier sama.[5] arsitektur yang terdiri atas: Version control (Source Code a. Load Balancer Management) adalah sebuah sistem yang Merupakan satu satunya pintu masuk ke mencatat setiap perubahan terhadap sebuah dalam sistem/aplikasi. Load balancer berkas atau kumpulan berkas sehingga pada akan mendistribusikan request dari client suatu saat dapat kembali kepada salah satu 50 Edisi Agustus 2013 Volume VII No. 2 ISSN 1979-8911 versi dari berkas tersebut. Version control membuat sebuah bahasa skripting yang dapat menyediakan akses untuk banyak memiliki kemampuan orientasi objek. Pada orang sekaligus, mirip dengan sharing folder saat itu pemrograman berorientasi objek yang biasa digunakan, akan tetapi, version sedang berkembang tetapi belum ada bahasa control memiliki kemampuan yang lebih pemrograman scripting yang mendukung dari pada sekedar sharing folder.[5] pemrograman objek.[6] Capistrano is an open source tool for running scripts on multiple servers; its main 3. Pembahasan Capistrano merupakan sebuah program use is deploying web applications. It ruby automates the process of making a new berkontribusi dan boleh memakai program version of an application available on one or ini secara bebas (free). Karena seluruh more web servers, including supporting capistrano dibangun menggunakan bahasa tasks such as changing databases.[8] pemrograman Ruby adalah bahasa pemrograman dinamis berbasis skrip yang berorientasi objek. Tujuan menggabungkan dari ruby yaitu kelebihan dari semua bahasa-bahasa pemrograman skrip yang ada di dunia. Ruby ditulis dengan bahasa pemrograman C dengan kemampuan dasar seperti Perl dan Python. open source, siapa ruby, saja maka boleh sebelum melakukan instalasi di dalam komputer, pengguna harus sudah memasang ruby dan rubygems. Rubygems merupakan sebuah package manager yang menyediakan format standar dalam program dan pendistribusian library yang sebuah dibangun menggunakan bahasa pemrograman ruby. Berikut cara instalasi capistrano melalui command prompt. Ruby pertama kali dibuat oleh seorang # gem install capistrano programmer Jepang bernama Yukihiro Matsumoto. Pada tahun 1993 Yukihiro ingin 51 Edisi Agustus 2013 Volume VII No. 2 Selain memiliki ISSN 1979-8911 ketergantungan terhadap instalasi ruby dan rubygems, dalam penggunannya capistrano juga bergantung pada library ruby lainnya, yaitu highline, net-scp, net-sftp, net-ssh dan net-sshgateway. Berbeda dengan ruby Gambar 2. Contoh penggunaan capify dan b. “cap” rubygems yang harus diinstal terlebih dahulu Perintah “cap” dijalankan pada saat sebelum instalasi capistrano, library deployment, dan diikuti oleh task, contoh tersebut akan secara otomatis terinstal pada “cap deploy”. Ada beberapa jenis saat capistrano diinstal. perintah dasar (default) cap yang Capistrano tidak memiliki GUI yang disediakan oleh capistrano, untuk dapat digunakan oleh user, user harus mengetahuinya digunakan script “cap menggunakannya melalui command prompt. T”, maka akan muncul daftar jenis Terdapat dua jenis perintah dasar yang perintah cap sebagai berikut: digunakan dalam capistrano, yaitu: a. “capify” Jika capistrano sudah terinstal, maka cap deploy # Deploys your project. ketika diketikkan “capify” pada layar, cap deploy:check akan menghasilan dua buah file. File deployment dependencies. # Test Capfile dan file config/deploy.rb. Capfile cap deploy:cleanup # Clean up old inilah yang akan dibaca oleh capistrano releases. pada saat deployment, lalu capifile akan mencari file deploy.rb yang berisi setting dari skenario deployment. Berikut ini cap deploy:cold # Deploys and starts a `cold' application. contoh penggunaan “capify” : 52 Edisi Agustus 2013 Volume VII No. 2 ISSN 1979-8911 cap deploy:create_symlink # Updates cap deploy:stop the symlink to the most recently exists as a hook into which to install... deployed... cap deploy:symlink cap deploy:migrate # Run the migrate rake task. # Deprecated API. cap deploy:update cap deploy:migrations # Deploy and run pending migrations. cap deploy:pending # Blank task # Copies your project and updates the symlink. cap deploy:update_code # Displays the # Copies your project to the remote servers. commits since your last deploy. cap deploy:upload cap deploy:pending:diff # Displays the currently deployed version. the `diff' since your last deploy. cap deploy:web:disable cap deploy:restart maintenance page to visitors. # Blank task # Copy files to # Present a exists as a hook into which to install... cap deploy:web:enable cap deploy:rollback application web-accessible again. # Rolls back to # Makes the a previous version and restarts. cap invoke cap deploy:rollback:code # Rolls back command on the remote servers. to the previously deployed version. cap shell cap deploy:setup interactive Capistrano session. # Prepares one or more servers for deployment. cap deploy:start # Blank task exists as a hook into which to install... # Invoke a single # Begin an Seperti disebutkan di atas, pada saat deployment aplikasi, capistrano membaca sebuah file konfigurasi, yaitu “Capfile” dan 53 Edisi Agustus 2013 Volume VII No. 2 ISSN 1979-8911 “deploy.rb”. Berikut ini adalah hal-hal yang set :deploy_to, "folder harus dituliskan pada file “deploy.rb”. target yang ada di a. server" Nama Aplikasi set :application, d. Server target "tutorial" role :web, "your web-server here" b. Sumber kode aplikasi role :app, "your app-server here" set :repository, role :db, "your primary db-server "repository_url" here", :primary => true set :scm, :subversion role :db, "your slave db-server here" # Atau: `accurev`, `bzr`, `cvs`, `darcs`, `git`, `mercurial`, e. Hal-hal lain yang dibutuhkan pada saat deployment `perforce`, Pada saat sebuah web aplikasi di`subversion` or `none` deploy, biasanya selain memperbaharui set :scm_username, kode aplikasi, dibutuhkan langkah- "user_name" langkah lain sesuai kebutuhan aplikasi, set :scm_password, misalnya untuk aplikasi ruby on rails, "password" dibutuhkan script untuk me-restarrt mod_rails . Dalam hal ini, pengguna c. Folder target untuk kode aplikasi hanya perlu menambahkan script pada capistrano. Script ini biasanya disebut 54 Edisi Agustus 2013 Volume VII No. 2 ISSN 1979-8911 “task script”, berikut adalah contohnya besar deployment dapat dipetakan sebagai : berikut (client merupakan komputer lokal milik pengembang aplikasi): namespace :deploy do task :start do ; end task :stop do ; end task :restart, :roles => :app, :except => { :no_release => true } do Gambar 3. Basic deployment map run "#{try_sudo} touch Pada gambar di atas, aplikasi dari “{File.join(current_path,'tmp','restart.tx komputer pengembang disalin ke server t')}" menggunakan mekanisme copy-paste yang umum seperti ftp, scp atau diunggah end menggunakan UI seperti yang disediakan end perusahaan penyedia perkembangannya, a. hosting. banyak Pada pengembang Langkah-langkah deployment yang Deployment diharapkan mampu membuat aplikasi yang telah dibangun di komputer lokal milik pengembang dapat menggunakan source code management (SCM) dalam pengelolaan kode aplikasi, sehingga deployment dipetakan lagi seperti gambar di bawah ini. berjalan di server dengan baik. Prosesnya paling sederhana yaitu memindahkan kode sumber ke server, kemudian menjalankannya di server. Sehingga garis 55 Edisi Agustus 2013 Volume VII No. 2 ISSN 1979-8911 deployment dapat digambarkan dengan flowmap berikut ini: Start N = Jumlah Server Gambar 4. Basic deployment map Deploy N=N-1 No menggunakan SCM N == 0 Yes Finish Sebuah aplikasi yang kodenya dikelola Gambar 5. Flowmap proses deployment menggunakan SCM, aplikasi tidak disalin ke untuk aplikasi multiserver. server dari komputer lokal, melainkan disimpan terlebih dahulu ke repository SCM Suatu deployment aplikasi, terkadang untuk kemudian diunduh secara langsung tidak berhasil atau menimbulkan error dan dari server. Penggunaan SCM akan sangat bugs yang lebih besar. Dalam hal ini, jika membantu jika aplikasi dibangun oleh bugs tidak dapat ditangani dengan cepat, sekelompok orang dalam tim. biasanya b. Iterasi pada deployment aplikasi ke mengembalikan terbaik aplikasi ke adalah keadaan sebelum deployment, dengan kata lain banyak server Pada deployment sebuah aplikasi web, jika terdapat sebuah server maka terdapat sekali proses deployment, jika terdapat dua rollback deployment. Proses rollback pun akan memiliki N iterasi jika terdapat lebih dari satu server aplikasi. Proses iterasi penanganan error atau server, maka akan dilakukan dua kali deployment, begitu seterusnya sehingga akan didapatkan N iterasi deployment, iterasi dalam kesalahan deployment selanjutnya dapat digambarkan dengan flowmap yang berikut ini: dimana N adalah jumlah server. Selanjutnya, langkah proses 56 Edisi Agustus 2013 Volume VII No. 2 ISSN 1979-8911 4. Kesimpulan Start N = Jumlah Server Dari hasil analisis dan pengujian Rollback N = N - 1 No tentang capistrano, maka dapat disimpulkan N == 0 Yes sebagai berikut: Finish Gambar 6. Flowmap proses rollback deployment untuk aplikasi multi server. 1. Capistrano menggunakan multi- threading pada proses koneksi ke server, sedangkan eksekusi setiap poses pada Pada dasarnya, capistrano sudah masing-masing server dilakukan secara menyediakan default deployment behaviour. berurutan satu per satu dengan selisih Jika proses deployment web aplikasi sama waktu dalam hitungan milisecond. seperti yang disediakan oleh capistrano, 2. Capistrano menyediakan fungsi maka tidak diperlukan mendefinisikan task deploy:rollback untuk mengembalikan baru. Berikut ini adalah capistrano default deployment ke versi sebelumnya dalam deployment behaviour. menangani kegagalan deployment.. 3. Capistrano menyediakan fungsi deploy:web:disable pada saat aplikasi membutuhkan downtime. 5. Saran Dengan penelitian ini, dapat diambil beberapa saran sebagai berikut: Gambar 7. Capistrano default deployment behaviour 1. Setelah menggunakan deploy:rollback perlu fungsi dilakukan peninjauan kembali terhadap penyebab kegagalan dan dibuatkan solusi yang 57 Edisi Agustus 2013 Volume VII No. 2 ISSN 1979-8911 lebih baik agar kegagalan tidak terjadi (Pte) Ltd & National University of pada deployment selanjutnya. Singapore. 2. Pada penggunaan deploy:web:disable, fungsi [5] Zhang, W. Linux Virtual Server for diperlukan Scalable Network Services. China : konfigurasi tambahan pada web server. National Laboratory for Parallel & Distributed Processing. DAFTAR PUSTAKA [6] Zygmuntowicz, Ezra dkk.2007. [1] Chendramata, Aidil & Adhityo P. 2008 Deploying Rails Application Step by . High Availibity System, Jakarta: Step.Texas:The Pragmatic Bookshelf Direktorat Sistem Informasi, Perangkat Lunak dan Konten irektorat [7] http://www.linuxvirtualserver.org (di akses tanggal 31 Juli 2012) Jendral Aplikasi Telematika, Departem en Komunikasi dan Informatika. [8] http://en.wikipedia.org/wiki/Capistran o (diakses tanggal 31 Juli 2012) [2] Dhanta, Rizky. 2009. Kamus Istilah Komputer Grafis dan. Surabaya : [9] https://github.com/capistrano/capistra Indah [3] Khoe no/wiki/_pages(diakses tanggal 31 Yao Jaringan Juli 2012) Tung.1997.Teknologi Internet.Yogyakarta : Dinastindo [10 https://github.com/capistrano/capistra ] no.git(diakses tanggal 31 Juli 2012) [4] Teo, Y.M., dan Rassul Ayani. 2001. Comparison Strategies of on Load balancing Cluster-based Web Servers. Singapore : Fujitsu Computer 58 Edisi Agustus 2013 Volume VII No. 2 ISSN 1979-8911 59