Django + wsgi + apache2


#1

จากที่เคยใช้แต่ gunicorn + nginx รอบนี้มีการบังคับใช้ apache2 ถึงกะไปไม่เป็นทั้งๆที่มีอยู่ใน official django docs ก็ยังงงได้ สุดท้ายจริงๆ มันง่ายมากเกินไปเพียงแค่แก้ apache2 virtual host file ก็เรียบร้อยแล้ว

สิ่งที่ต้องลงเพิ่มเติมมีเพียงอย่างเดียวจาก apache2 ปกติ

apt-get install libapache2-mod-wsgi

แล้วก็จัดการ site ของ apache2 ซะ

<VirtualHost *:80>
  ServerName whatever.cogto.com
  CustomLog /tmp/py-access.log combined
  ErrorLog /tmp/py-error.log

  # ส่วนนี้คือ ทำให้ static กับ media แยกกันได้โดยอิสระจาก code
  Alias /static/ /path/to/static/
  Alias /media/ /path/to/media/
  # สำหรับ apache2 ก็ต้องจัดการ permission ของแต่ละ directory ด้วย
  <Directory /path/to/static>
    Order allow,deny
    Options Indexes
    Allow from all
  </Directory>

  <Directory /path/to/media>
    Allow from all
  </Directory>
  
  # นี่คือส่วนที่ apche2 เรียก django ผ่าน wsgi โดยใช้ virtualenv
  WSGIDaemonProcess expert2 python-path=/path/to/.virtualenvs/env_name:/path/to/django:/path/to/.virtualenvs/env_name/lib/python2.7/site-packages
  WSGIProcessGroup expert2
  WSGIScriptAlias / /path/to/wsgi.py

</VirtualHost>

เมื่อ update django เมื่อไหร่ก็

service apache2 reload

แค่นี้ก็เรียบร้อยครับ บางทีก็คิดว่า มันง่ายกว่า nginx อีก