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 ของเราก็พร้อมทำงานแล้ว :)



Home | Back