Deploy Aplikasi Flask Menggunakan uWSGI Dan Nginx Di Centos 7

بِسْمِ اللهِ الرَّحْمٰنِ الرَّحِيْمِ

Ceritanya mau deploy aplikasi Python FLASK micro-framework di CentOS 7. Pada tulisan ini kita akan menjelaskan bagaimana cara set up uWSGI untuk menjalankan aplikasi Python dan Nginx sebagai reverse proxy.

Install Paket Yang dibutukan dari Repo CentOS dan EPEL

Tahap pertama kita perlu menginstall paket yang dibutuhkan untuk proses deploy aplikasi Python kita. Kita butuh repositori epel untuk menginstall paket yang kita butuhkan kemudian update, installnya gini:

sudo yum install epel-release -y
sudo yum update

Setelah repo epel terinstall kita bisa menginstall paket-paket yang kita butuhkan. Kita perlu install pip, python paket manejer untuk mengelola library Python. Kita juga butuh install compiler dan Python Development untuk bisa menginstall uWSGI, dan nginx tentunya sebagai reverse proxy.

Kita bisa menginstallnya dengan perintah berikut:

sudo yum install python-pip python-devel gcc nginx -y

Install Flask, uWSGI, dan Dependensi

Kita install Flask dan uWSGI menggunakan pip

pip install uwsgi flask

Nah misal kita sudah punya aplikasi yang dibuat developer, kita clone project-nya dan install dependesi dari aplikasi tersebut. Seorang developer yang baik biasanya sudah menyiapkan daftar library atau dependensi dari aplikasinya dalam bentuk file requirements.txt. Kita hanya perlu menjalankan perintah berikut untuk menginstall dependensinya:

pip install -r requirements.txt

Buat Entry Point WSGI

Fungsinya untuk jalur komunisaki antara server uWSGI dengan aplikasi Python kita. Kita buat nama filenya wsgi.py yang letaknya didalam direktori aplikasi ya.

vim /path/ke/direktori/aplikasi/wsgi.py

Isinya simple banget kayak gini.

from namaProject import app

if __name__ == '__main__':
    app.run()

Dimana namaProject adalah entry point dari aplikasi yang sudah dibuat dan app adalah function utama dari aplikasi(kayaknya gitu deh artinya, wkwkwk). Mudah bukan 😊, sejauh ini kita sudah berhasil menyiapkan environment dari aplikasi Python kita.

Konfigurasi uWSGI

Aplikasi sudah siap, sekarang saatnya konfig uWSGI agar bisa menjalankan aplikasi.

Buat file konfigurasi uWSGI

File ini berisi konfigurasi server uWSGI untuk aplikasi kita dan berada didalam direktori project, namanya myproject.ini aja ya:

vim myproject.ini

Isinya seperti ini:

[uwsgi]
req-logger = file:/var/log/batutah.id/batutah-request.log
logger = file:/var/log/batutah.id/batutah-error.log

module = wsgi:app
enable-threads = true
single-interpreter = true

master = true
processes = 5
thunder-lock = true
socket = batutahAPI.sock
chmod-socket = 660
vacuum = true
pcre-jit = true
die-on-term = true

Pada bagian module kita isikan wsgi:app yaitu entry point yang sudah kita buat sebelumnya. Baris master untuk setting aplikasi kita berjalan multi tread dengan child proses 5. Baris socket bisa kita sebut jalur komunikasi antara Nginx dan uWSGI server, kenapa tidak menggunakan port karena secara default uWSGI server berkomunikasi menggunakan protokol uwsgi, sebuah binary protokol yang di desain untuk berkomunikasi dengan server lain seperti Nginx, lebih cepat dan aman juga daripada menggunakan port. vacuum fungsinya menghapus socket ketika proses berhenti. die-on-term mirip-mirip laah dengan vacuum bedanya ini dipakai uWSGI server untuk kill semua prosesnya. huft… kelar juga setting uWSGI server untuk menjalankan aplikasi kita, sekarang lanjut step berikutnya.

Buat File Service di Systemd

Tahap terakhir kita buat file service di systemd. Fungsi supaya kita bisa menjalankan dan mematikan uWSGI server dengan mudah, dan membuat aplikasi python kita berjalan otomatis pada server ketika dihidupkan. Kita buat file dengan ekstensi .service didalam direktori /etc/systemd/system.

sudo vim /etc/systemd/system/batutah-api.service

Isinya seperti ini

[Unit]
Description=API yang maha Uwaaawww uye uyee ulalalalaa
After=network.target

[Service]
User=batutah
Group=nginx
WorkingDirectory=/home/batuah/public_html/api
Environment="PATH=/home/batutah/.virtualenvs/batutahAPI/bin"
ExecStart=/home/batutah/.virtualenvs/batutahAPI/bin/uwsgi --ini myproject.ini

[Install]
WantedBy=multi-user.target

Yang perlu diperhatikan pada bagian User diisi dengan user yang aplikasi kita berada didalamnya. Bagian Group kita isi dengan nginx agar webserver nginx bisa membaca file di dalam direktori project, WorkingDirectory isikan dengan path direktori project aplikasi kita, Environment untuk menunjukkan path direktori dependensi dari aplikasi kita, contoh diatas diisi jika aplikasi berjalan didalam virtual environmet Python. ExecStart isikan dengan fullpath binary uwsgi dengan flag --ini disambung nama file konfigurasi yang sudah kita buat tadi. Yeay membuat service Systemd sudah selesai, jangan lupa simpan ya.

Selanjutnya reload dulu systemd supaya update dengan service yang baru saja kita buat.

sudo systemctl daemon-reload

Baru deh bisa kita jalankan service aplikasi kita dan buat berjalan otomatis ketika server booting.

sudo systemctl start batutah-api
sudo systemctl enable batutah-api

Konfigurasi Nginx

Agar bisa menerima request kita perlu konfigurasi nginx sebagai reverse proxy dari aplikasi kita. jadi gini nginx menerima request web kemudian diteruskan ke aplikasi menggunakan protokol uwsgi.

sudo vim /etc/nginx/sites-available/api.batutah.id

isinya seperti ini

server {
    listen 80;
    server_name api.batutah.id;

location / {
    include uwsgi_params;
    uwsgi_pass unix:/home/batutah/public_html/api/batutahAPI.sock;
  }

}

Selanjutnya link konfigurasi nginx.

sudo ln -s /etc/nginx/sites-available/api.batutah.id /etc/nginx/sites-enabled/api.batutah.id.conf
sudo systemctl restart nginx

Oke done. Kita sudah berhasil deploy aplikasi python kita. Easy bukan? kita hanya perlu:

  1. Menginstall uWSGI untuk menjalankan aplikasi
  2. Membuat konfig file uWSGI server
  3. Membuat service systemd
  4. Konfig nginx sebagai reverse proxy

Ngahahahahaha….

Sumber : dari sini!


21 Maret 2019
01:07 WIB
Banguntapan, Bantul
Yogyakarta

comments powered by Disqus