Cara Deploy Django Menggunakan Mod_wsgi dan Apache2

Deployment Django adalah salah satu hal yang perlu diketahui oleh pengembang aplikasi berbasis Django. Untuk memasang Django di tingkat publik atau produksi, kita tidak dapat mengandalkan built-in webserver saja. Salah satu cara yang dapat kita implementasikan adalah dengan kombinasi Apache2 dan Mod_wsgi. Seperti yang kita tahu Apache2 adalah salah satu varian web server dari Apache Foundation untuk aplikasi berbasis wsgi dan cgi. Beberapa bahasa pemrograman yang didukung oleh Apache2 antara lain Python, Ruby, Perl, C dan lainnya. Sedangkan Mod_wsgi adalah salah satu modul untuk Apache2 agar dapat membaca aplikasi yang akan di-run menggunakan script WSGI.

Sebagai langkah pertama, mari kita install Mod_wsgi di ubuntu (atau varian unix lainnya):

$ sudo apt-get install libapache2-mod-wsgi
$ sudo a2enmod wsgi
$ sudo service apache2 restart

Pastikan Anda sudah me-restart Apache2 setelah mengaktifkan Mod_wsgi. Anggaplah ada sebuah folder aplikasi Django dengan nama myapp sekarang kita harus membuat folder static terlebih dahulu di dalam folder myapp. Kemudian tunjuk folder static dengan menambahkan kode konfigurasi di file myapp/myapp/settings.py:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static")

Sekarang jalankan perintah berikut untuk mengumpulkan file – file static:

$ cd myapp
$ python manage.py collectstatic

Setelah selesai mengumpulkan file dan folder static, sekarang kita tambahkan server name baru dengan nama myappdjango.vhost. Mari kita edit /etc/hosts:

127.0.0.1 localhost
127.0.0.1 myappdjango.vhost

Lalu buat file baru dengan nama myappdjango.conf di /etc/apache2/sites-available kemudian copy kode konfigurasi berikut:

<VirtualHost *:80>
    ServerName www.myappdjango.vhost
    ServerAlias myappdjango.vhost

    Alias /static /home/user/path-to-project/myapp/static
    <Directory /home/user/path-to-project/myapp/static>
        Require all granted
    </Directory>

    <Directory /home/user/path-to-project/myapp/myapp>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    WSGIDaemonProcess myappdjango python-path=/home/user/path-to-project/myapp:/usr/local/lib/python2.7/dist-packages
    WSGIProcessGroup myappdjango
    WSGIScriptAlias / /home/user/path-to-project/myapp/myapp/wsgi.py

    ErrorLog ${APACHE_LOG_DIR}/myapp-error.log
    CustomLog ${APACHE_LOG_DIR}/myapp-access.log combined

</VirtualHost>

Ingat, maksud dari /home/user/path-to-project/ adalah direktori dimana folder aplikasi django myapp berada. Sesuaikan dengan folder Django Anda sendiri.

Mari kita aktifkan virtual host myappdjango.vhost dengan perintah dibawah ini:

$ sudo a2ensite myappdjango.vhost
$ sudo service apache2 restart

Sekarang mari kita lihat hasilnya di web browser. Anda dapat melihat ada logo beberapa stack yang terdeteksi oleh web browser dengan bantuan plugin Wappalyzer:

Halaman index Django

Halaman index Django

 

Halaman Django Admin

Halaman Django Admin

 

Halaman login Django Admin

Halaman login Django Admin

Sedangkan berikut adalah hasil Apache Benchmark terhadap setting ini dengan request sebanyak 1000 dan konkurensi sebanyak 100 terhadap URL http://myappdjango.vhost/admin:

$ ab -n 1000 -c 100 http://myappdjango.vhost/admin
This is ApacheBench, Version 2.3 <$Revision: 1528965 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking myappdjango.vhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        Apache/2.4.7
Server Hostname:        myappdjango.vhost
Server Port:            80

Document Path:          /admin
Document Length:        0 bytes

Concurrency Level:      100
Time taken for tests:   0.911 seconds
Complete requests:      1000
Failed requests:        0
Non-2xx responses:      1000
Total transferred:      228000 bytes
HTML transferred:       0 bytes
Requests per second:    1097.94 [#/sec] (mean)
Time per request:       91.079 [ms] (mean)
Time per request:       0.911 [ms] (mean, across all concurrent requests)
Transfer rate:          244.46 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   2.2      0       9
Processing:     6   86  14.5     88     107
Waiting:        6   86  14.5     88     107
Total:         12   87  12.8     88     107

Percentage of the requests served within a certain time (ms)
  50%     88
  66%     90
  75%     92
  80%     93
  90%     97
  95%    100
  98%    102
  99%    103
 100%    107 (longest request)

Itulah cara pengaturan singkat Django dengan menggunakan Apache2 dan Mod_wsgi. Semoga berhasil mengikuti tutorial ini :D.

Referensi:

  • https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-apache-and-mod_wsgi-on-ubuntu-14-04
  • http://blog.mattwoodward.com/2015/11/python-27-django-apache-and-gunicorn-on.html
  • https://docs.djangoproject.com/ja/1.9/howto/deployment/wsgi/modwsgi/

Leave a Reply