Home | Back
การ Deploy Web Application ที่พัฒนาด้วย Bottle ใน Apache2+Gevent ใน Ubuntu 12.04
Monday, 18 February 2013
คราวที่แล้วผมได้เขียนบทความเกี่ยวการพัฒนาระบบสารสนเทศด้วย Flask กับ Gunicorn ซึ่งผมได้ทำการศึกษาเกี่ยวกับ Framework ในภาษา Python เพิ่มเติม ก็พบว่ามี Framework ตัวนึงที่น่าสนใจมาก ๆ ซึ่งมีประสิทธิภาพสูงและมีเสถียรภาพมาก ๆ นั้นก็คือ Bottle ครับและเมื่อนำมาใช้คู่กับ WSGI Server อย่าง Gevent แล้ว จะสามารถรองรับงานได้อย่างมหาศาลเลยทีเดียว โดยมีขั้นตอนดังนี้ครับ
1. ติดตั้ง Bottle และ Gevent ดังนี้ครับ
ผมสมมุติว่าได้พัฒนา Web Application เป็นโปรแกรม hello world โดยเก็บไว้ใน /home/user/webapp/hello.py ดังนี้ครับ
File : hello.py
# -*- coding: utf-8 -*-
from gevent import monkey; monkey.patch_all()
from bottle import route, run
@route('/')
def hi():
return "hello world !!!"
run(host='127.0.0.1',port=8800,debug=True,server='gevent')
ในบรรทัดสุดท้ายจะเป็นการรันระบบโดยกำหนดให้รอรับฟังการเรียกจาก IP 127.0.0.1 ที่พอร์ต 8800 และใช้ WSGI Server เป็น Gevent ครับ
2. แก้ไข /etc/rc.local
ให้ทำการรันโปรแกรมของเราโดยอัตโนมัติเมื่อเปิดเครื่องดังนี้ครับ
File : rc.local
#!/bin/sh -e
cd /home/user/webapp
python hello.py &
exit 0
3. ติดตั้ง Apache2
เพื่อเป็น Front-end web Server โดยปกติไม่มีความจำเป็นต้องติดตั้ง PHP5 แต่เนื่องจากผมลงเผื่อไว้ สำหรับการจัดการบางอย่างเช่น ต้องการใช้ phpmyadmin ด้วยเป็นต้น จึงทำการติดตั้ง Apache2 พร้อมทั้ง PHP5 แล้วทำการเปิดโมดูล ProxyPass ให้กับ Apache2 ดังนี้ครับ
ตอนนี้ Apache2 ของเราก็พร้อมจะเป็น Front-end Web Server แล้วครับ จากนั้นขั้นตอนต่อไปคือ แก้ไขไฟล์ /etc/apache2/sites-available/default หรือสร้างไฟล์สำหรับไซต์ใหม่ก็ได้นะครับ โดยภายในไฟล์จะมีการปรับแต่งที่สำคัญดังนี้ครับ
File : default
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
# Alias /static /home/user/webapp/static
<proxy balancer://geventserv>
BalancerMember http://127.0.0.1:8800
</proxy>
# ProxyPass /static !
ProxyPass / balancer://geventserv/
ProxyPassReverse / balancer://geventserv/
ProxyPreserveHost on
<proxy *>
Order deny,allow
Allow from all
</proxy>
</VirtualHost>
เพียงเท่านี้ Web Application ของเราก็พร้อมทำงานแล้ว :)