EKSYAM.COM – Tutorial Cara Deploy Flask Python dengan uWSGI dan Nginx di CentOS 7 ini saya tulis untuk merangkum dan mengingat kembali cara setting Flask Python, uWSGI dan Nginx di CentOS 7 yang saya lakukan beberapa waktu yang lalu.
Dalam tutorial ini, kita akan menyiapkan aplikasi Python sederhana menggunakan framework Flask di CentOS 7. Sebagian besar artikel ini adalah tentang cara seting uWSGI untuk melaunching aplikasi dan Nginx untuk bertindak sebagai reverse proxy.
Saya tidak akan menjelaskan apa itu Flask, uWSGI, atau Nginx. Saya asumsikan kalian sudah mengetahuinya, dan mungkin dilain kesempatan akan dibahas terpisah. Jadi kita fokus pada cara setting Flask Python dengan uWSGI dan Nginx di CentOS 7 saja.

Install Komponen dari CentOS and Repository EPEL
Langkah pertama yaitu menginstal semua bagian yang dibutuhkan dari repositori. Kita perlu menambahkan repositori EPEL, yang berisi beberapa paket tambahan, untuk menginstal beberapa komponen yang kita butuhkan.
Kalian dapat mengaktifkan repo EPEL dengan mengetik:
sudo yum install epel-release
Selanjutnya instal paket yang dibutuhkan seperti pip , package manager python untuk menginstal dan mengelola komponen python. Instal juga compiler yang dibutuhkan untuk membuat uWSGI, serta Nginx dengan menjalankan perintah berikut:
sudo yum install python-pip python-devel gcc nginx
Buat Python Virtual Environment
Selanjutnya, kita akan menyiapkan virtual environment untuk mengisolasi aplikasi Flask dari file Python lain pada sistem dengan menginstal virtualenv menggunakan pip :
sudo pip install virtualenv
Sekarang, kita buat folder untuk aplikasi Flask, sebagai contoh saya buat folder appflask . Masuk ke folder setelah membuatnya dengan perintah:
mkdir ~/appflask cd ~/appflask
Kita dapat membuat virtual environment untuk menyimpan requirement Python yang menggunakan Flask dengan mengetik:
virtualenv env
Ini akan menginstal salinan Python di local dan pip ke direktori yang disebut env dalam folder project appflask.
Sebelum kita menginstal aplikasi dalam virtual environment, kita perlu mengaktifkannya. dengan mengetik:
source env/bin/activate
Sekarang virtual environment sudah jalan, akan terlihat seperti ini(env)user@host:~/appflask$
Saat ini kita ada di virtual environment, selanjutnya menginstal Flask dan uWSGI dan mulai membuat aplikasi.
Instal Flask dan uWSGI
Kita dapat menggunakan pip untuk menginstal Flask dan uWSGI. Ketik perintah berikut untuk menginstal dua komponen tersebut:
pip install uwsgi flask
Buat Aplikasi Menggunakan Flask
Kita sudah menginstal Flask, kita dapat membuat aplikasi sederhana. Meskipun aplikasi yang akan kalian deploy mungkin lebih kompleks, di contoh ini kita akan membuat aplikasi Flask dalam satu file, yang akan kita sebut appflask.py :
nano ~/appflask/appflask.py
Silahkan copy + paste kan script berikut.
from flask import Flask
application = Flask(__name__)
@application.route("/")
def hello():
return "<h2 style='color:blue; text-align: center;'>Hello App Flask!</h2>"
if __name__ == "__main__":
application.run(host='0.0.0.0', port=5000)Kita dapat menguji aplikasi Flask diatas dengan mengetik:
python appflask.py
Kunjungi nama domain atau alamat IP server dengan diikuti nomor port yang ditentukan dalam output terminal (default flask biasanya :5000 ) di browser web Anda. Selanjutnya buka di browser, harus kalian melihat seperti ini:
Hello App Flask!
Tekan CTRL-C di terminal beberapa kali untuk menghentikan running server Flask.
Buat WSGI Entry Point
Selanjutnya, kita akan membuat file yang akan berfungsi sebagai entry point untuk aplikasi yang dibuat. Ini akan memberi tahu server uWSGI berinteraksi dengan aplikasi. Buat file wsgi.py :
nano ~/appflask/wsgi.py
File ini sangat sederhana, kita cukup mengimpor Flask instance dari appflask.py dan kemudian menjalankannya:
from appflask import application
if __name__ == "__main__":
application.run()Simpan dan tutup file.
Aplikasi sudah dibuat dan titik entry point sudah dibuat. Kita sekarang dapat beralih ke konfirgurasi uWSGI.
Testing uWSGI Serving
Hal pertama yang akan kita lakukan adalah tes untuk memastikan bahwa uWSGI dapat melayani aplikasi kita.
Kita dapat melakukan ini hanya dengan memberikannya nama entry point. Kita juga akan menentukan socket sehingga akan dimulai pada interface dan protokol yang tersedia untuk umum sehingga akan menggunakan HTTP alih-alih menggunakan uwsgi protokol biner. Jalankan perintah berikut diterminal:
uwsgi --socket 0.0.0.0:8000 --protocol=http -w wsgi
Jika kita mengunjungi nama domain atau alamat IP server dengan menambahkan port :8000 di browser, kita akan melihat halaman yang terlihat seperti ini:
Hello App Flask!
Ketika semuanya berfungsi dengan baik, tekan CTRL-C di jendela terminal. Sekarang kita sudah selesai dengan virtual environment, sehingga kita dapat menonaktifkan virtual environment dengan perintah:
deactivate
Operasi apa pun sekarang akan dilakukan ke environment sistem Python bukan lagi virtual environment.
Membuat File Konfigurasi uWSGI
Kita telah menguji bahwa uWSGI dapat melayani aplikasi Flask, tetapi kita menginginkan sesuatu yang lebih kuat untuk penggunaan jangka panjang. Kita dapat membuat file konfigurasi uWSGI dengan opsi yang kita inginkan.
Mari kita letakkan pengaturan itu di direktori aplikasi yang kita buat dengan membuat file konfigurasi appflask.ini :
nano ~/appflask/appflask.ini
Simpan dengan mengisi settingan berikut:
[uwsgi] module = wsgi master = true processes = 5 socket = appflask.sock chmod-socket = 660 vacuum = true die-on-term = true
Setelah selesai, simpan dan tutup file.
Buat Systemd Unit File
Bagian selanjutnya yang perlu kita tangani adalah Systemd service unit file. Membuat Systemd unit file akan memungkinkan sistem CentOS secara otomatis memulai uWSGI dan menjalankan aplikasi Flask setiap kali server melakukan booting.
Buat unit file yang diakhiri .service difolder /etc/systemd/system seperti perintah berikut:
sudo nano /etc/systemd/system/appflask.service
Simpan dengan mengisi settingan berikut:
[Unit] Description=uWSGI instance to serve appflask After=network.target [Service] User=username Group=nginx WorkingDirectory=/home/username/appflask Environment="PATH=/home/username/appflask/env/bin" ExecStart=/home/username/appflask/env/bin/uwsgi --ini appflask.ini [Install] WantedBy=multi-user.target
Pada settingan di atas ganti username dengan username system kalian masing-masing. Simpan dan tutup sekarang.
Kita sekarang dapat memulai uWSGI service yang kita buat dan mengaktifkannya sehingga akan mulai saat booting:
sudo systemctl start appflask sudo systemctl enable appflask
Konfigurasi Nginx ke Proxy Requests
Server aplikasi uWSGI sekarang sudah aktif dan berjalan, menunggu permintaan pada file socket di folder aplikasi flaskapp. Kita perlu mengkonfigurasi Nginx untuk mengirimkan permintaan web ke socket itu menggunakan uwsgi protokol.
Buka file konfigurasi default Nginx:
sudo nano /etc/nginx/nginx.conf
Tambahkan pengaturan berikut di atas settingan server{} yang sudah ada.
server {
listen 80;
server_name server_domain;
location / {
try_files $uri @appflask;
}
location @appflask {
include uwsgi_params;
uwsgi_pass unix:/home/username/appflask/appflask.sock;
uwsgi_read_timeout 300;
}
}Ganti server_domain dengan domain atau IP kalian sendiri, dan ganti username dengan username system kalian.
Pengaturan yang kita butuhkan untuk melayani aplikasi cukup itu. Simpan dan tutup file setelah selesai.
User nginx harus memiliki akses ke folder aplikasi kita untuk mengakses file socket disana. Secara default, CentOS mengunci direktori home masing-masing pengguna dengan sangat ketat, jadi kita akan menambahkan user nginx ke grup user kita sehingga dapat membuka izin yang diperlukan untuk memberikan akses.
Kalian dapat menambahkan user nginx ke grup user kalian dengan perintah berikut. Ganti username dengan username system kalian sendiri.
sudo usermod -a -G username nginx
Sekarang, kita dapat memberikan izin grup user kita pada folder home. Ini akan memungkinkan proses Nginx untuk masuk dan mengakses konten di dalam:
chmod 710 /home/username
Dengan permissions yang sudah diatur, kita dapat menguji file konfigurasi Nginx dari kesalahan sintaks dengan perintah berikut:
sudo nginx -t
Jika tidak ada response yang menunjukkan masalah, kita dapat memulai dan mengaktifkan proses Nginx sehingga akan mulai secara otomatis saat booting:
sudo systemctl start nginx sudo systemctl enable nginx
Cek domain atau alamat IP server kalian di browser web, dan seharusnya kalian sudah melihat website sudah berjalan.
Hello App Flask!
Muncul? Beres, ya!!! 🙂

KOMENTAR TERBARU