Cloud, Python

Implementasi Flask dengan Gunicorn dan Nginx di EC2

Flask adalah kerangka kerja (Framework) web yang digunakan untuk mengembangkan aplikasi web berbasis Python

Ukuran framework Flask sangat kecil sehingga disebut microframework

Default dari development server untuk framework Flask tidak cocok untuk di lingkungan production.

Saat kita menjalankan aplikasi Flask diberikan warning untuk tidak memnggunakan built-in development server

Misal kita buat script Ptyhon sederhana untuk Flask di folder helloworld

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hai Flask!'

app.run(host='0.0.0.0', port=8080)

Kita jalankan dan output akan diberikan warning untuk menggunakan production WSGI server jika untuk production

Implementasi Flask dengan Gunicorn dan Nginx di EC2

Gunicorn adalah klien WSGI sederhana yang dapat digunakan untuk menjalankan aplikasi Flask di tahap production

Kita akan coba implementasi Gunicorn untuk aplikasi Flask di tahap production

Install gunicorn

Pertama kita siapkan EC instance Linux sebagai server yang akan menjalankan aplikasi Flask

Berikan rule untuk Custom TCP dengan port 8080 dan source Anywhere agar service dapat ditampilkan di browser

Buka instance menggunakan ssh dari terminal atau Putty jika anda pengguna Windows

Install gunicorn

sudo apt-get install gunicorn

Coba jalankan service gunicorn

gunicorn -b 0.0.0.0:8080 app:app

dan buka browser, masukkan IP Public dengan port 8000

Systemd untuk mengatur Gunicorn

Buat file .service di /etc/systemd/system

Tambahkan 3 komponen yaitu unit, service dan install

Buat file helloworld.service

sudo nano /etc/systemd/system/helloworld.service

‘dan isikan

[Unit]
Description=Gunicorn instance for a simple hello world app
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/helloworld
ExecStart=/home/ubuntu/.local/bin/gunicorn -b localhost:8080 app:app
Restart=always

[Install]
WantedBy=multi-user.target

untuk atribut ExecStart gunakan perintah which gunicorn untuk melihat lokasi gunicorn

Enable Service

sudo systemctl daemon-reload
sudo systemctl start helloworld
sudo systemctl enable helloworld

Cek di terminal apakah aplikasi sudah berjalan dengan perintah curl localhost:8000

Jika keluar ‘Hai Flask! berarti sudah sukses instalasinya

Setup Nginx Webserver

Selanjutnya kita setup Nginx untuk route request ke Gunicorn

Install Nginx

sudo apt-get install nginx

Run Nginx

sudo systemctl start nginx
sudo systemctl enable nginx

Ketik IP Public di browser untuk cek bahwa Nginx telah berjalan

Edit file default di sites-available

sudo nano /etc/nginx/sites-available/default

Tambahkan script ini dibawah #default

upstream flaskhelloworld {
    server 127.0.0.1:8080;
}

Tambahkan proxy_pass di location /

location / {
    proxy_pass http://flaskhelloworld;
}

Restart Nginx

sudo systemctl restart nginx

Dan buka IP Public EC2 di browser

Note: jika terjadi perubahan pada code app.py, restart service terlebih dulu

sudo systemctl restart helloworld.service

Sekian Tutorial deployment aplikasi Flask dengan Gunicorn semoga bermanfaat

Leave a Reply

Your email address will not be published. Required fields are marked *