Pada artikel Cara Install Flask di Ubuntu 16.04, Flask dijalankan dengan menggunakan developement server. Tutorial kali ini akan membahas tentang cara menjalankan Flask dengan menggunakan Gunicorn dikombinasikan dengan Nginx di distro Linux Ubuntu 16.04. Ini juga merupakan salah satu cara dalam deployment Flask di server online / VPS.
Gunicorn (Green Unicorn) adalah sebuah WSGI (Web Server Gateway Interface) HTTP Server untuk bahasa pemrograman Python. Gunicorn mengimplementasikan PEP3333 sebuah standar spesifikasi WSGI server sehingga dapat menjalankan aplikasi web Python yang juga mengimplementasikan standar tersebut. Misalnya framework Django, Flask, atau Bottle.
Komunikasi Nginx, Gunicorn, dan Flask (sumber: codingnetworker.com)
Penghubung pertama antara request dari browser pengunjung dengan aplikasi web dilayani oleh Nginx karena berjalan pada port 80, port default dari HTTP. Jika file yang direquest adalah file static seperti gambar, html, css, dan js atau disebut juga frontend maka tetap Nginx yang bekerja. Namun jika yang direquest adalah Flask atau backend maka Nginx menghubungi Gunicorn melalui reverse proxy atau unix-socket. Respon dari Flask dikirim ke Gunicorn lalu ke Nginx dan terakhir ditampilkan pada browser.
-Install pip dan Nginx-
Install pip dan Nginx jika menggunakan Python 2
[INPUT]1 sudo apt-get install python-pip python-dev nginx
Install pip dan Nginx jika menggunakan Python 3
[INPUT]1 sudo apt-get install python3-pip python3-dev nginx
-Membuat Virtual Environment-
Selanjutnya membuat virtual environment untuk mengisolasi aplikasi Flask dari Python sistem operasi utama.
Install virtualenv Python 2
[INPUT]1 sudo pip install virtualenv
Install virtualenv Python 3
[INPUT]1 sudo pip3 install virtualenv
Membuat folder project Flask
[INPUT]1 2 mkdir ~/belajar-flask cd ~/belajar-flask
Membuat virtualenv Jika ingin menggunakan Python 2 pada virtualenv
[INPUT]1 virtualenv -p python2 env
Jika ingin menggunakan Python 3 pada virtualenv
[INPUT]1 virtualenv -p python3 env
Mengaktifkan virtualenv
[INPUT]1 source env/bin/activate
Menginstall Flask dan Gunicorn
[INPUT]1 pip install flask gunicorn
Membuat aplikasi Flask sederhana, menampilkan tulisan
[INPUT]1 nano aplikasi.py
Isinya
[INPUT]1 2 3 4 5 6 7 8 9 from flask import Flask appku = Flask(__name__) @appku.route(“/”) def hello(): return “
Belajar Flask
” if __name__ == “__main__”: appku.run(host=’0.0.0.0′)
Menjalankan aplikasi FLask dengan development server
[INPUT]1 python aplikasi.py
Browsing http://localhost:5000. Jika berhasil menampilkan tulisan Belajar Flask lanjut ke tahap berikutnya.
Membuat file WSGI
[INPUT]1 nano wsgi.py
Isinya
[INPUT]1 2 3 4 from aplikasi import appku if __name__ == “__main__”: appku.run()
Menguji menjalankan aplikasi dengan Gunicorn
[INPUT]1 gunicorn –bind 0.0.0.0:5000 wsgi:appku
Nonaktifkan virtual environment
[INPUT]1 deactivate
-Membuat service untuk aplikasi Flask-
Service ini dibuat agar Gunicorn secara otomatis sejak boot menjalankan aplikasi Flask.
[INPUT]1 sudo nano /etc/systemd/system/belajarflask.service
Isinya
[INPUT]1 2 3 4 5 6 7 8 9 10 11 12 13 [Unit] Description=Gunicorn untuk menjalankan aplikasi BelajarFlask After=network.target [Service] User=musa Group=www-data WorkingDirectory=/home/musa/belajar-flask Environment=”PATH=/home/musa/belajar-flask/env/bin” ExecStart=/home/musa/belajar-flask/env/bin/gunicorn –workers 3 –bind unix:belajar-flask.sock -m 007 wsgi:appku [Install] WantedBy=multi-user.target
Jalankan service dan enable agar aktif sejak boot
[INPUT]1 2 sudo systemctl start belajarflask sudo systemctl enable belajarflask
-Konfigurasi Nginx-
Tahap berikutnya mengkonfigurasi Nginx agar berkomunikasi dengan Gunicorn melalui proxy.
[INPUT]1 sudo nano /etc/nginx/sites-available/belajarflask
Isinya
[INPUT]1 2 3 4 5 6 7 8 9 server { listen 80; server_name NOMOR_IP_ATAU_DOMAIN; location / { include proxy_params; proxy_pass http://unix:/home/musa/belajar-flask/belajar-flask.sock; } }
Mengaktifkan virtual host/blok konfigurasi Nginx yang baru saja dibuat dengan membuat link ke sites-enabled.
[INPUT]1 sudo ln -s /etc/nginx/sites-available/belajarflask /etc/nginx/sites-enabled
Menguji apakah ada konfigurasi Nginx yang salah.
[INPUT]1 sudo nginx -t
Jika tidak ada kesalahan, restart service nginx
[INPUT]1 sudo systemctl restart nginx
Terakhir browsing http://IP_SERVER_ATAU_DOMAIN
selamat mencoba:)