Automated Django Deployment dengan Fabric

django

Sepanjang pengalaman saya dengan Django, hal termudah untuk deploy Django ke live server adalah dengan hosting di WebFaction atau cloud hosting nya Heroku.

Kedua layanan hosting tersebut sudah menyediakan tool khusus untuk mempermudah kita mengupload dan mengkonfigurasi Django dan bisa live hanya dalam beberapa menit (Heroku) dengan Git interface nya.

Sedangkan WebFaction yang memiliki kontrol panel yang bisa saya bilang genius, Install Django menjadi super mudah hanya dengan beberapa klik di control panel nya.

Untuk yang menggunakan VPS/Dedicated server sendiri pasti ceritanya berbeda, semua kemudahan tersebut diatas pastilah tidak ada, semua harus dikonfigurasi sendiri, dan apabila perlu update, harus login via SSH ke server dan kadang harus restart project secara manual juga.

Rutinitas login via SSH, update file, restart project itu sangat lah tidak efisien dan ada kemungkinan errornya karena selalu kita lakukkan secara manual dan di suatu waktu kesalahan bisa saja terjadi, project anda jadi taruhannya.

Dan datang lah si penyelamat, namanya Fabric. Fabric adalah sebuah tool python dimana kita bisa membuat script otomasi yang bisa berlangsung di server atau local development kita.

Namun disini saya tidak akan menjelaskan secara detail tentang Fabric ini , saya akan langsung mendemonstrasikan kegunaanya. Silahkan langsung ke dokumentasinya untuk lebih jelas disini. Tujuan artikel ini bukan sebuah How-to, tetapi sebagai informasi kalau Fabric itu ada jika suatu saat anda memerlukannya :D.

Skenario

Saya ada sebuah situs berbasis Django, development di local menggunakan Virtualenv dan untuk deployment di server juga mengunakan virtualenv (My favorite). Code di lokal menggunakan version control berupa GIT. Setiap update di local saya push ke remote repositori code saya di Github.

Nah untuk mengupdate website yang sudah online dengan perubahan yang baru saya lakukkan, stepnya seperti ini:

  1. Login ke server via SSH
  2. Masuk ke directory project saya “cd my-virtualenv”
  3. Saya aktifkan virtualenv dengan perintah “. bin/activate”
  4. Saya masuk ke direktori project ada di “my-virtualenv/mysite”
  5. Melakukkan update code dengan menarik perubahan terbaru dari Github, dengan command “git pull origin master”
  6. Menjalankan command “python manage.py collectstatic”, ini berfungsi untuk mengupdate static files saya apabila terdapat perubahan
  7. dan terakhir, restart project dengan perintah “touch django.wsgi”, karena saya menggunakan Apache+mod_wsgi.
  8. lalu logout.

Nah, lihat kan step-step secara manual nya cukup panjang, dan perlu waktu dan sekaligus ketelitian untuk melakukkannya supaya tidak terjadi kesalahan.

Sekarang kita akan buat script otomasi nya.

Solusi dengan Fabric

Pada dasar nya yang perlu kita lakukkan adalah, menterjemahkan step-step manual diatas menjadi sebuah code yang dimengerti oleh Fabric, dan fabric yang akan meng-handle sisanya. Berikut scriptnya:

#file: fabfile.py
#lokasi: di dalam direktori project

from __future__ import with_statement
from fabric.api import run, cd, prefix

REMOTE_DIR = '~/my-virtualenv'

def deploy():
    with cd(REMOTE_DIR):
        with prefix('. bin/activate'):
            with prefix('cd mysite'):
                run('git pull origin master')
                run('./manage.py collectstatic')
                run('touch django.wsgi')
                run('deactivate')

Anda lihat, 7 step diatas saya terjemahkan dalam sebuah fungsi deploy, yang isinya step-step proses update dan restart project, termasuk aktivasi virtualenv. Sekali lagi saya tidak akan bahas mendetail arti baris-baris script diatas, scripting Fabric sangatlah mudah, sekali baca dokumentasi dijamin anda bisa langsung mempraktekkannya.

Cara pengunaannya

Sangatlah mudah :D, pertama karena kita memberi nama file nya dengan nama fabfile.py, maka secara otomatis Fabric akan mengenali semua fungsi didalamnya terutama fungsi otomasi kita, disini saya berinama “deploy“, untuk menjalankannya cukup dengan menjalankan perintah “fab deploy“, maka akan muncul kira-kira seperti ini:

$ fab deploy
No hosts found. Please specify (single) host string for connection: ekaputra@123.231.23.34 #--Isi sesuai server dan username--#
[my_server] run: git pull origin master
...
...
[my_server] run: touch django.wsgi

Tada… kalau semua lancar maka website saya sudah terupdate. Yup segitu saja proses nya, besok-besok kalau perlu update lagi tinggal pakai script ini, hidup jadi lebih mudah dan menyenangkan :D.

Saya sangat sarankan bagi developer untuk mencobanya, dijamin update dan deployment lebih mudah. Hidup cuma sekali fella.. kalau bisa dipermudah, kenapa harus dipersusah.. 🙂

3 thoughts on “Automated Django Deployment dengan Fabric

  1. @Taufiq, ayo sama-sama belajar. Untuk komunitas khusus developer Django di Indonesia belum ada kayak nya.. Ayo dibikinin mas 😀

Leave a Reply

Your email address will not be published. Required fields are marked *