Friday, November 18, 2011

Belajar Google AppEngine: Instalasi dan Konfigurasi

Saya memutuskan untuk memakai Google App Engine (GAE) untuk menjalankan aplikasi saya. Alasan utamanya karena jasa ini memberikan kuota gratis yang lumayan besar dan jika nantinya diperlukan bisa dengan mudah diekspansi.

Permasalah utama jika ingin memakai Python untuk membuat aplikasi berbasis GAE adalah harus mempergunakan veri Python 2.5 karena GAE belum stabil untuk Python versi 2.7. Ini tidak begitu masalah jika kita memakai aplikasi virtual environment (virtualenv) untuk menyekat lingkungan-lingkungan pengembangan kita. (Lihat disini untuk langkah-langkah instalasi dan konfigurasi virtualenv di Ubuntu)

Karena sekarang saya memakai Python versi 2.7 maka saya harus terlebih dahulu mengunduh dan instalasi Python versi 2.5. Langkahnya cukup sederhana tinggal membuka terminal dan menjalankan perintah:

sudo apt-get install python2.5 python2.5-doc

Perhatikan, saya  juga menginstalasi dokumentasi untuk Python 2.5 (python2.5-doc).

Langkah berikutnya adalah mengunduh berkas GAE itu sendiri dari sini. Pilih SDK untuk Python dan jangan lupa untuk juga mengunduh dokumentasi-nya. Setelah selesai diunduh, GAE saya unzip dan tempatkan di root dari home directory saya (path-nya menjadi ~/google_appengine).

Kebiasaan saya adalah untuk segala program/kode ngoprek saya tempatkan di directory yang bernama ngoprek (path-nya ~/ngoprek) oleh karenanya untuk memulai belajar memakai GAE ini saya membuat subdirectory baru didalamnya bernama belajar-gae (path-nya menjadi ~/ngoprek/belajar-gae). 

Saya masuk kedalam subdirectory ini

cd ~/ngoprek/belajar-gae

dan membuat lingkungan yang aman untuk saya ngoprek, tanpa mengganggu konfigurasi saya yang lain. Untuk itu saya memakai virtualenv dengan pilihan:

  • Memakai Python versi 2.5 (opsi --python=python2.5);
  • Tanpa memakai modul-modul lain yang sudah saya instalasi sebelumnya (opsi --no-site-packages);
  • Dan menyimpan berkas konfigurasinya di-subdirectory .env (pathnya menjadi ~/ngoprek/belajar-gae/.env) . Update: Perhatikan nama subdirectory sengaja diawali dengan titik agar tersembunyi dan tidak ikut dikirim ke situs Google saat kita mau upload aplikasi ini nantinya.
Perintah akhirnya menjadi:

virtualenv --python=python2.5 --no-site-packages .env

Terus saya aktifkan lingkungan ini dengan perintah (perhatikan terdapat spasi antara titik dan kata .env);

. .env/bin/activate

Agar nantinya mudah mengakses SDK-nya GAE dari lingkungan ini, saya juga buatkan soft link di dalam subdirectory pengembangan saya ke directory GAE (ingat GAE saya taruh di directory ~/google_appengine)  dengan perintah:

ln -s ~/google_appengine .gae

Karena namanya kelewat panjang saya singkat menjadi .gaeUpdate: Perhatikan nama subdirectory sengaja diawali dengan titik agar tersembunyi dan tidak ikut dikirim ke situs Google saat kita mau upload aplikasi ini nantinya.

Rupanya agar webserver-nya GAE dalam menangani gambar akan memakai modul PIL (Python Image Library) yang tidak termasuk dalam instalasi standar Python versi 2.5 sehingga perlu kita unduh dan instalasi secara manual. Hal ini juga cukup mudah kita lakukan dengan menjalankan perintah berikut (perhatikan perintah ini harus dijalankan setelah kita mengaktifkan lingkungan untuk ngoprek):

pip install PIL

Disini pip merupakan aplikasi untuk mengunduh dan instalasi modul-modul Python, install adalah perintah untuk mengunduh dan untuk instalasi, sedangkan PIL (semua huruf besar) adalah nama modul yang hendak kita instalasi. 

Sekarang lingkungan ngoprek kita sudah siap dan mari kita buat aplikasi perdana untuk mengujinya!

Minimal kita membutuhkan dua berkas. Berkas pertama berisikan program yang harus dijalankan oleh GAE. Sebagai contoh saya buatkan sebuah berkas bernama apakabar.py (path-nya ~ngoprek/belajar-gae/apakabar.py) dengan kode-kode berikut:

print 'Content-Type: text/plain'
print ''
print 'Apakabar!'

Program ini hanya mencetak tiga baris: 
  • Baris pertama merupakan Content-Type (=mime-type) yang menginformasikan ke browser bahwa dokumen yang akan dikirimkan adalah bertipe text/plain
  • Baris kedua hanya berupa baris kosong yang merupakan keharusan dari HTTP untuk memisahkan perintah HTTP dengan isi dokumen;
  • Dan baris ketiga isi dokumennya itu sendiri.
Untuk berkas kedua, isinya sekedar informasi dasar yang dibutuhkan oleh GAE. Nama berkas ini harus app.yaml. Isi berkas ini adalah sbb:

application: apakabar
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
  script: apakabar.py

Initinya, berkas ini hanya mengatakan bahwa jika ada permintaan untuk alamat (=URL) / jalankan kode apakabar.py.

Sekarang mari kita jalankan aplikasi ini dengan pertama sekali menjalankan servernya GAE yaitu dev_appserver.py. Ingat sebelumnya kita telah membuat softlink bernama gae ke directory tempat kita menaruh GAE sehingga kita tinggal memanggilnya dengan cara ini:

.gae/dev_appserver.py ~/ngoprek/belajar-gae

Dalam menjalankan perintah ini kita perlu menginformasikan directory dimana aplikasi kita berada, dalam hal ini ~/ngoprek/belajar-gae. Karena saya mejalankan perintah ini langsung dari dalam directory itu maka perintah ini bisa kita sederhanakan menjadi:

.gae/dev_appserver.py .

Perhatikan titik diakhir perintah ini yang berarti directory dimana kita saat itu berada.

Untuk menguji aplikasi ini, buka browser dan ketikkan alamat berikut:

http://localhost:8080

Akan muncul halaman kosong dengan tulisan Apakabar!

Perhatikan bahwa dalam contoh program di atas, kita bertanggung jawab atas segala perintah HTTP yang diperlukan (makanya ada perintah untuk mencetak Content-Type). Tentunya ini sangat merepotkan, oleh karenanya GAE menyarankan untuk memakai framework seperti Django, Web2Py, atau Flask untuk mempermudah pembuatan aplikasi.

PERHATIAN!

Rupanya ada bug yang sangat mengganggu jika memakai Google AppEngine dengan VirtualEnv yaitu Bug #4439. Tetapi akhirnya saya menemukan solusinya yang saya tuliskan disini. Mohon mengikuti petunjuknya agar terhindari dari berbagai permasalahan yang menimpa saya! :p

2 comments:

  1. wih, thank you om rahmad, :D
    saya juga lagi belajar bikin aplikasi ke GAE nih,
    btw, GAE mendukung aplikasi berbasis data kan om?, misal pake SQL.

    ReplyDelete
  2. Jelas dong mendukung aplikasi berbasis data. Anda bisa memakai Cloud-SQL yang merupakan database relational https://developers.google.com/cloud-sql/ atau Datastore yang punyanya Google sendiri sejenis database NoSQL https://developers.google.com/appengine/docs/python/datastore/

    ReplyDelete