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.