بِسْمِ اللهِ الرَّحْمٰنِ الرَّحِيْمِ
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:
- Menginstall
uWSGI
untuk menjalankan aplikasi - Membuat konfig file uWSGI server
- Membuat service systemd
- Konfig nginx sebagai reverse proxy
Ngahahahahaha….
Sumber : dari sini!
21 Maret 2019
01:07 WIB
Banguntapan, Bantul
Yogyakarta