Menjalankan PHP di Infrastruktur Google (App Engine)

Ketika saya sedang mencari-cari solusi cloud computing untuk aplikasi yang akan saya buat, saya (kembali) menemukan google appengine cukup menjanjikan. Dulu sebenarnya sudah tahu keberadaannya, namun karena dibilang hanya bisa menjalankan java dan python saja, maka saya lewati. Terus terang saya males belajar bahasa pemrograman lain lagi. PHP sudah cukup lah untuk semua hal. Dan setelah mencari lebih jauh, akhirnya menemukan juga cara menjalankan PHP di platform google. 

Selama ini saya membuat semua hal dengan PHP. Apalagi dengan PHP-CLI bisa melakukan banyak hal di background. So far berjalan sangat memuaskan. Untuk menjalankan aplikasi, saya punya server sendiri yang ditaruh di IDC (bandwidth IIX  up to 1Gbps loh). Sangat cukup untuk target pasar Indonesia. Untuk target luar negeri, saya pesan VPS di Jerman. Ngirit, maklum masih startup service. Hehehe.

Problemnya adalah salah satu aplikasi yang akan diluncurkan berpotensi diakses banyak orang sekaligus. Sementara belum siap dengan pengadaan infrastruktur yang scalable. I meant, gak mau keluar duit besar kalau belum jelas duit masuknya. hehehe.

Saya pertama tertarik dengan skema yang ditawarkan Amazon AWS atau Cloud Server dari Rackspace dan sejenisnya. Tapi setelah saya dalami lebih jauh, ternyata kok mirip kayak VPS ya. Lha wong Processor dan RAM dibatasi.  Kemudian saya membadingkan dengan GAE (Google App Engine). Di situ disebut “Dynamic scaling” dan “Infinitely scalable” untuk versi berbayar $9/app/month. Tapi memang ada beberapa limitasi di bandwidth, datastore, dll.

Akhirnya saya mencoba untuk memulai sebuah aplikasi sederhana untuk survey di GAE. Tujuan saya untuk mencoba seberapa hebat GAE dan mencari tahu korelasi antara kinerja dan biaya yang akan ditagih Google.

Untuk menjalankan PHP di paltform GAE, kita bisa menggunakan Quercus yang satu paket dengan Resin dari Caucho. Ya, itu adalah program java yang bisa menjalankan PHP.  Sepintas lalu saya coba waktu yg dibutuhkan Resin+Quercus untuk memproses sesuatu 10 kali lebih lambat dari pada Apache+PHP. Aneh,  tapi mungkin  kalau yang akses banyak performa Resin (Java) lebih stabil. Kita lihat aja nanti.

Silahkan cari referensi untuk menjalankan PHP di GAE dengan Quercus+Resin. Jika masih bingung, silahkan coba langkah-langkah berikut:

  1. Ikuti petunjuk dari Google untuk menjalankan java di GAE. Saya sarankan menggunakan eclipse plugin untuk memudahkan. Saya menggunakan eclipse versi galileo. Saya coba versi yang lebih baru entah kenapa selalu gagal install GAE plugin.
  2. Buat Google Web Application melalui Eclipse
    Optional: Jangan pilih GWT pada “New Web Application project” wizzard.
  3. Copy resin.jar dari Resin 4.0 ke WEB-INF/lib
  4. Tambahkan resin.jar pada java build path: Right-click di nama project, pilih ‘properties’ lalu ‘Java build path’ dan tambahkan resin.jar dalam ‘Libraries’
  5. Edit war/WEB-INF/web.xml agar mirip sebagai berikut:<welcome-file-list>
    <welcome-file>index.php</welcome-file>
    </welcome-file-list>
    <servlet>
    <servlet-name>quercus</servlet-name>
    <servlet-class>com.caucho.quercus.servlet.GoogleQuercusServlet<servlet-class>
    </servlet>
    <servlet-mapping>
    <url-pattern>*.php</url-pattern>
    <servlet-name>quercus</servlet-name>
    </servlet-mapping>
  6. Tambahkan code dibawah ini pada war/WEB-INF/appengine-web.xml<static-files>
    <exclude path=”/**.php” />
    </static-files>
    <resource-files>
    <include path=”/**.php” />
    </resource-files>
  7. Buat file war/index.php dan isi dengan:<?php
    phpinfo();
    ?>
  8. Jalankan server melalui eclipse dengan klik Run->Run As->Web Application
  9. Buka browser dan masuk ke http://localhost:8888 dan lihatlah php info yang ada di dalamnya.
Selamat mencoba. Untuk berikutnya adalah membuat URL Rewriter dan membuat menyimpan data di google datastore. Silahkan googling untuk mendapatkan caranya lebih lanjut. 🙂

1 thought on “Menjalankan PHP di Infrastruktur Google (App Engine)”

Leave a Reply

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