Deployment Flask ke Production dengan Nginx dan Gunicorn

Arsitektur Deployment Flask

Untuk menjalankan aplikasi Flask di lingkungan production, Anda tidak boleh menggunakan server bawaan Flask (app.run()) karena tidak dirancang untuk menangani konkurensi tinggi dan keamanan. Standar industri menggunakan kombinasi Gunicorn sebagai WSGI HTTP Server dan Nginx sebagai Reverse Proxy.

Langkah 1: Instalasi Dependensi

Pastikan server Ubuntu/Debian Anda telah diperbarui. Instal Python, pip, venv, dan Nginx.

sudo apt update
sudo apt install python3-pip python3-venv nginx
python3 -m venv venv
source venv/bin/activate
pip install flask gunicorn

Langkah 2: Konfigurasi Gunicorn

Buat file wsgi.py sebagai entry point aplikasi Anda:

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

Uji Gunicorn dengan perintah: gunicorn --bind 0.0.0.0:8000 wsgi:app. Jika berhasil, buat Systemd service agar aplikasi berjalan di latar belakang.

Langkah 3: Konfigurasi Nginx sebagai Reverse Proxy

Buat file konfigurasi di /etc/nginx/sites-available/flask_app:

server {
    listen 80;
    server_name domain_anda.com;

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/user/app/app.sock;
    }
}
KomponenFungsi UtamaPeran di Production
FlaskFramework AplikasiLogika Bisnis
GunicornWSGI ServerMenangani request Python
NginxReverse ProxyBuffer, SSL, Static Files
SystemdProcess ManagerAuto-restart & Monitoring

Troubleshooting Umum

  • Permission Denied: Pastikan user Nginx memiliki akses ke direktori proyek.
  • 502 Bad Gateway: Biasanya terjadi karena Gunicorn tidak berjalan atau socket file tidak ditemukan. Cek status dengan systemctl status flask_app.
  • Static Files: Gunakan Nginx untuk melayani file statis (CSS/JS) secara langsung agar performa lebih optimal.