Python di Apache

Cara yang paling direkomendasikan adalah menggunakan modul WSGI dan dalam lingkup Python Virtual Environment agar pustaka sistem utama tidak terganggu:

$ sudo apt-get install apache2 libapache2-mod-wsgi python-virtualenv
$ sudo a2enmod wsgi

Kali ini domainnya adalah myapp.local dan ini cukup di Laptop saja dengan mendaftarkan di /etc/hosts:

127.0.0.1 localhost fujitsu myapp.local

Buatlah direktori Python Virtual Environment:

$ virtualenv ~/env

Ini artinya pustaka yang akan kita gunakan nanti berada di direktori ~/env. Oh iya, karakter tilde ( ~ ) dalam Linux artinya home directory yang dalam hal ini berarti /home/sugiana.

Selanjutnya membuat script Python sederhana bernama ~/wsgi/wsgi_handler.py. Tentu, buatlah direktorinya terlebih dahulu:

$ mkdir ~/wsgi

Kemudian buat file tadi:

def application(environ, start_response):
status = '200 OK'
output = 'Hello World!'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]

Sebenarnya nama file bebas saja, yang penting di dalam file itu ada fungsi application dengan komposisi input dan output seperti contoh di atas.

Lalu buat konfigurasinya di file /etc/apache2/sites-available/myapp.conf:


ServerName myapp.local

Order allow,deny
Allow from all
Require all granted

WSGIDaemonProcess myapp.local user=sugiana group=sugiana processes=2 threads=15 python-path=/home/sugiana/env/lib/python2.7/site-packages:/home/sugiana/wsgi
WSGIProcessGroup myapp.local
WSGIScriptAlias / /home/sugiana/wsgi/wsgi_handler.py

Selanjutnya aktifkan:


$ sudo a2ensite myapp.conf
$ sudo service apache2 restart

Uji menggunakan browser ke http://myapp.local, seharusnya tampil:

Hello World!

Bila ada kesalahan bisa pantau log-nya:

$ sudo tail -f /var/log/apache2/error.log

Pyramid
Biasanya kita tidak ingin membangun situs dari awal. Jadi mulailah menggunakan Pyramid:

$ ~/env/bin/pip install pyramid

Lalu buatlah aplikasinya:

$ cd
$ ~/env/bin/pcreate -s alchemy myapp
$ cd myapp
$ ~/env/bin/python setup.py develop

Kemudian sesuaikan ~/wsgi/wsgi_handler.py menjadi seperti ini:


import sys
from pyramid.paster import (
get_app,
setup_logging,
)

# Membuat perintah print tampil di log
sys.stdout = sys.stderr

ini_path = '/home/sugiana/myapp/production.ini'
setup_logging(ini_path)
application = get_app(ini_path, 'main')

Lalu coba refresh di browser. Kalau masih menampilkan Hello World! berarti Apache perlu di-restart:

$ sudo service apache2 restart

Coba lagi refresh browser, seharusnya kini tampak baris ini:

Pyramid is having a problem using your SQL database

Mengapa harus restart Apache ?

Modul WSGI yang digunakan Apache akan menjalankan script Python sebagai daemon. Ini artinya script akan tetap bekerja menanti request. Bisa diperiksa menggunakan perintah berikut ini:


$ ps aux | grep apache | grep sugiana

Sehingga saat wsgi_handler.py diubah maka daemon perlu dijalankan ulang agar perubahannya berdampak.

PostgreSQL
Karena kita akan menggunakan PostgreSQL sebagai database maka ~/myapp/setup.py perlu disesuaikan, yaitu pada variabel requires tambahkan 'psycopg2' sehingga menjadi:


requires = [
....
....
'psycopg2',
]

Lalu jalankan lagi setup agar pustaka psycopg2 diunduh:

$ ~/env/bin/python setup.py develop

Buatlah user database:

$ sudo su postgres -c "createuser -P sugiana --createdb"

Karena user diperkenankan membuat database maka langsung saja:

$ createdb myapp

Kemudian sesuaikan database profile di ~/myapp/production.ini:

sqlalchemy.url = postgresql://sugiana:rahasia@localhost/myapp

Jalankan perintah ini untuk pembuatan tabel:

$ ~/env/bin/initialize_myapp_db production.ini

Restart lagi Apache dan refresh browser, seharusnya kini tampil semacam "Selamat datang."

Selamat mencoba.

Referensi:

Comments

irul's picture

Nice tutorial!