Cara Menjalankan Flask dengan Gunicorn dan Nginx di Ubuntu 16.04
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.
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
1 | sudo apt-get install python-pip python-dev nginx |
Install pip dan Nginx jika menggunakan Python 3
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
1 | sudo pip install virtualenv |
Install virtualenv Python 3
1 | sudo pip3 install virtualenv |
Membuat folder project Flask
1 2 | mkdir ~/belajar-flask cd ~/belajar-flask |
Membuat virtualenv
Jika ingin menggunakan Python 2 pada virtualenv
1 | virtualenv -p python2 env |
Jika ingin menggunakan Python 3 pada virtualenv
1 | virtualenv -p python3 env |
Mengaktifkan virtualenv
1 | source env/bin/activate |
Menginstall Flask dan Gunicorn
1 | pip install flask gunicorn |
Membuat aplikasi Flask sederhana, menampilkan tulisan
1 | nano aplikasi.py |
Isinya
1 2 3 4 5 6 7 8 9 | from flask import Flask appku = Flask(__name__) @appku.route("/") def hello(): return "<h1>Belajar Flask</h1>" if __name__ == "__main__": appku.run(host='0.0.0.0') |
Menjalankan aplikasi FLask dengan development server
1 | python aplikasi.py |
Browsing http://localhost:5000.
Jika berhasil menampilkan tulisan Belajar Flask lanjut ke tahap berikutnya.
Membuat file WSGI
1 | nano wsgi.py |
Isinya
1 2 3 4 | from aplikasi import appku if __name__ == "__main__": appku.run() |
Menguji menjalankan aplikasi dengan Gunicorn
1 | gunicorn --bind 0.0.0.0:5000 wsgi:appku |
Nonaktifkan virtual environment
1 | deactivate |
Membuat service untuk aplikasi Flask
Service ini dibuat agar Gunicorn secara otomatis sejak boot menjalankan aplikasi Flask.
1 | sudo nano /etc/systemd/system/belajarflask.service |
Isinya
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
1 2 | sudo systemctl start belajarflask sudo systemctl enable belajarflask |
Konfigurasi Nginx
Tahap berikutnya mengkonfigurasi Nginx agar berkomunikasi dengan Gunicorn melalui proxy.
1 | sudo nano /etc/nginx/sites-available/belajarflask |
Isinya
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.
1 | sudo ln -s /etc/nginx/sites-available/belajarflask /etc/nginx/sites-enabled |
Menguji apakah ada konfigurasi Nginx yang salah.
1 | sudo nginx -t |
Jika tidak ada kesalahan, restart service nginx
1 | sudo systemctl restart nginx |
Terakhir browsing http://IP_SERVER_ATAU_DOMAIN
selamat mencoba:)
Apakah setelah service belajar-flask aktif, bisa langsung diakses dengan menggunakn port 5000? atau harus set nginx dulu atau harus restart dulu atau gimana?
soalnya saya sudah mengikuti tutorial dengan 1 perbedaan
-port nginx saya pakai 85, sudah ufw allow 85
tetapi app tidak bisa diakses dari port 85, termasuk 5000, takutnya saya salah persepsi terkati si service itu, terima kasih
gunicorn --bind 0.0.0.0:5000 wsgi:appku
hanya buat ngetes saja, jadi kalau mau akses via port 5000 harus tetap jalankan gunicorn.Mas. file belajar-flask.sock kapan dibuatnya?? atau tergenerate dengan sendrinya?? terimakasih mas
tergenerate dengan sendirinya ketika belajarflask.service dijalankan
wah. saya gagal menjalankan service nya mas. Ada error begini
● namaservice.service – Gunicorn untuk menjalankan aplikasi
Loaded: loaded (/etc/systemd/system/namaservice.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2022-02-28 13:54:29 UTC; 44s ago
Process: 71156 ExecStart=/direktori/flask/tujuan//env/bin/gunicorn –workers 3 –bind unix:namaservice.sock -m 007 wsgi:app (code=exited, status=3)
Main PID: 71156 (code=exited, status=3)
namaservice saya ubah untuk keperluan postingan ini
tidak lengkap pesan errornya