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
Mon, 21/04/2014 - 14:28
Permalink
ganteng
Nice tutorial!