Deployment Flask WSGI: Panduan Produksi Gunicorn & Nginx

Deployment aplikasi Flask ke lingkungan produksi membutuhkan server WSGI (Web Server Gateway Interface) seperti Gunicorn yang dikombinasikan dengan reverse proxy seperti Nginx. Server bawaan Flask (app.run()) hanya dirancang untuk tahap pengembangan lokal dan tidak aman serta tidak efisien untuk menangani beban trafik tinggi secara bersamaan.

Proses konfigurasi standar industri melibatkan pembuatan lingkungan virtual Python, pemasangan dependensi aplikasi, konfigurasi service systemd untuk mengelola proses Gunicorn secara otomatis, serta pengaturan blok server Nginx sebagai gerbang utama lalu lintas HTTP/HTTPS.

Tabel Perbandingan Server Flask

Komponen Fungsi Utama Lingkungan Penggunaan
Flask Built-in Server Debugging & Development ringan Development Lokal (Lokal)
Gunicorn WSGI HTTP Server berbasis pre-fork worker Production (Aplikasi Python)
Nginx Reverse proxy, SSL termination, static files Production (Frontend Server)

Langkah-Langkah Teknis Deployment

1. Persiapan Lingkungan dan Instalasi Paket

Masuk ke server Linux (Ubuntu/Debian) lalu perbarui sistem serta instal pustaka yang diperlukan untuk Python dan pip:

sudo apt update
sudo apt install python3-pip python3-dev python3-venv nginx curl -y

2. Konfigurasi Virtual Environment dan Aplikasi Flask

Buat direktori proyek, aktifkan virtual environment, dan pasang Flask serta Gunicorn:

mkdir ~/myproject
cd ~/myproject
python3 -m venv venv
source venv/bin/activate
pip install flask gunicorn

Buat file aplikasi sederhana bernama wsgi.py sebagai titik masuk (entry point):

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "Hello, Flask Production Deployment!"

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

3. Mengonfigurasi Gunicorn sebagai Systemd Service

Agar Gunicorn berjalan otomatis saat sistem menyala dan berjalan di latar belakang, buat file service systemd baru:

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

Masukkan konfigurasi berikut (sesuaikan path direktori dan username):

[Unit]
Description=Gunicorn instance to serve myproject
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/myproject
ExecStart=/home/ubuntu/myproject/venv/bin/gunicorn --workers 3 --bind unix:myproject.sock -m 007 wsgi:app

[Install]
WantedBy=multi-user.target

Aktifkan dan jalankan service tersebut:

sudo systemctl start myproject
sudo systemctl enable myproject

4. Mengonfigurasi Nginx sebagai Reverse Proxy

Buat file konfigurasi Nginx baru untuk domain atau IP server Anda:

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

Isi dengan konfigurasi blok server berikut:

server {
    listen 80;
    server_name server_domain_or_IP;

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/ubuntu/myproject/myproject.sock;
    }
}

Aktifkan konfigurasi dengan membuat symlink ke sites-enabled dan uji sintaks Nginx:

sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

Troubleshooting Lapangan

Jika terjadi kesalahan 502 Bad Gateway pada browser, periksa log error Nginx dan status Gunicorn untuk mendiagnosis masalah:

sudo journalctl -u myproject
sudo tail -f /var/log/nginx/error.log

Penyebab umum meliputi izin akses (permissions) pada file socket Unix atau kesalahan sintaks Python di dalam file wsgi.py.