Deployment Aplikasi Flask di Ubuntu 24.04: Difference between revisions

From OnnoCenterWiki
Jump to navigationJump to search
No edit summary
No edit summary
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
# Modul 4.3: Deployment Aplikasi Flask di Ubuntu 24.04
Deployment Aplikasi Flask di Ubuntu 24.04, dari awal sampai bisa diakses via browser pakai domain atau IP publik. Kita akan deploy menggunakan '''Gunicorn + Nginx''' supaya production-ready. 


## Pendahuluan
==Install Dependensi Dasar==


Mendeploy aplikasi Flask di server Ubuntu 24.04 memerlukan beberapa langkah penting untuk memastikan aplikasi berjalan dengan efisien dan aman di lingkungan produksi. Dalam modul ini, kita akan membahas langkah-langkah untuk mendeploy aplikasi Flask menggunakan **Gunicorn** sebagai WSGI server dan **Nginx** sebagai reverse proxy. Pendekatan ini akan meningkatkan performa dan keamanan aplikasi Anda.
sudo apt update && sudo apt upgrade -y
sudo apt install python3 python3-pip python3-venv nginx -y


## 1. Prasyarat
==Siapkan Direktori Project==


Sebelum memulai, pastikan Anda memiliki:
mkdir ~/flaskapp
cd ~/flaskapp
python3 -m venv venv
source venv/bin/activate


- **Server Ubuntu 24.04** yang telah dikonfigurasi dengan akses root atau pengguna dengan hak sudo.
==Install Flask dan Gunicorn==
- **Aplikasi Flask** yang telah dikembangkan dan siap untuk dideploy.
- **Domain** yang telah diarahkan ke server Anda (opsional, tetapi disarankan untuk produksi).


## 2. Memperbarui dan Menginstal Paket yang Diperlukan
pip install flask gunicorn


Langkah pertama adalah memperbarui daftar paket dan menginstal dependensi yang diperlukan:
==Buat Aplikasi Flask (`app.py`)==


```bash
# app.py
sudo apt update
sudo apt upgrade -y
from flask import Flask
sudo apt install python3 python3-pip python3-venv nginx -y
```
app = Flask(__name__)
@app.route('/')
def home():
    return "Hello, Metro TV from Flask on Ubuntu 24.04!"


==Test Jalankan Lokal==


Perintah di atas akan memastikan bahwa Python 3, pip, modul venv, dan Nginx terinstal di server Anda.
python app.py


## 3. Menyiapkan Aplikasi Flask
Tambahkan ini kalau kamu mau bisa akses langsung:


### a. Membuat Direktori Proyek
if __name__ == '__main__':
    app.run(host='0.0.0.0')


Buat direktori untuk aplikasi Flask Anda dan navigasikan ke dalamnya:
==Jalankan dengan Gunicorn==


```bash
gunicorn --bind 0.0.0.0:8000 app:app
mkdir ~/flaskapp
cd ~/flaskapp
```


### b. Membuat Virtual Environment
Cek dengan: `http://YOUR_SERVER_IP:8000`


Buat dan aktifkan virtual environment untuk mengisolasi dependensi aplikasi:
==(Opsional) Buat File Service Systemd==


```bash
sudo nano /etc/systemd/system/flaskapp.service
python3 -m venv venv
source venv/bin/activate
```


### c. Menginstal Flask dan Gunicorn
Isi dengan:


Dengan virtual environment aktif, instal Flask dan Gunicorn:
[Unit]
Description=Gunicorn instance to serve flaskapp
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/flaskapp
Environment="PATH=/home/ubuntu/flaskapp/venv/bin"
ExecStart=/home/ubuntu/flaskapp/venv/bin/gunicorn --workers 3 --bind unix:flaskapp.sock -m 007 app:app
[Install]
WantedBy=multi-user.target


```bash
> Ganti `ubuntu` sesuai user kamu, dan `WorkingDirectory` sesuai folder.
pip install Flask gunicorn
```


### d. Membuat Aplikasi Flask Sederhana
Lalu:


Buat file `app.py` dengan konten berikut:
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl start flaskapp
sudo systemctl enable flaskapp


```python
==Konfigurasi Nginx==
from flask import Flask


app = Flask(__name__)
sudo nano /etc/nginx/sites-available/flaskapp


@app.route('/')
Isi dengan:
def hello():
    return "Halo, Flask di Ubuntu 24.04!"


if __name__ == '__main__':
nginx
    app.run(host='0.0.0.0', port=8000)
server {
```
    listen 80;
    server_name your_domain.com;  # Atau IP kamu
    location / {
        include proxy_params;
        proxy_pass http://unix:/home/ubuntu/flaskapp/flaskapp.sock;
    }
}


Aktifkan config-nya:


Kode ini mendefinisikan aplikasi Flask sederhana yang akan dijalankan pada port 8000.
sudo ln -s /etc/nginx/sites-available/flaskapp /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx


## 4. Menguji Aplikasi Flask
==(Opsional) Tambah HTTPS dengan Let's Encrypt==


Sebelum melanjutkan, uji aplikasi Flask Anda dengan menjalankan:
Install Certbot:


```bash
sudo apt install certbot python3-certbot-nginx -y
python app.py
```


Dapatkan SSL gratis:


Akses aplikasi melalui browser di `http://server_ip:8000` untuk memastikan aplikasi berjalan dengan benar.
sudo certbot --nginx -d your_domain.com


## 5. Mengonfigurasi Gunicorn
==Final Cek==


Gunicorn akan digunakan sebagai WSGI server untuk menjalankan aplikasi Flask. Jalankan perintah berikut untuk menguji aplikasi dengan Gunicorn:
* Akses aplikasi: `http://your_domain.com` atau `http://your_server_ip`
* Gunicorn berjalan sebagai service
* Nginx mengarahkan trafik ke Flask


```bash
==Bonus: Struktur Folder==
gunicorn --bind 0.0.0.0:8000 app:app
```


flaskapp/
├── app.py
├── venv/
└── flaskapp.sock (auto created by gunicorn)


Pastikan aplikasi dapat diakses melalui `http://server_ip:8000`.


## 6. Menyiapkan Nginx sebagai Reverse Proxy
==Pranala Menarik==


Nginx akan berfungsi sebagai reverse proxy yang meneruskan permintaan ke Gunicorn.
* [[Web Programming]]
 
### a. Membuat Konfigurasi Nginx
 
Buat file konfigurasi Nginx untuk aplikasi Anda:
 
```bash
sudo nano /etc/nginx/sites-available/flaskapp
```
 
 
Tambahkan konfigurasi berikut:
 
```nginx
server {
    listen 80;
    server_name your_domain_or_IP;
 
    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
```
 
 
Gantilah `your_domain_or_IP` dengan domain atau alamat IP server Anda.
 
### b. Mengaktifkan Konfigurasi dan Merestart Nginx
 
Aktifkan konfigurasi dan restart Nginx:
 
```bash
sudo ln -s /etc/nginx/sites-available/flaskapp /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx
```
 
 
Pastikan tidak ada error pada konfigurasi Nginx.
 
## 7. Menjalankan Gunicorn sebagai Layanan Sistem
 
Untuk memastikan aplikasi berjalan secara otomatis setelah reboot, konfigurasikan Gunicorn sebagai layanan sistem.
 
### a. Membuat File Layanan
 
Buat file layanan systemd:
 
```bash
sudo nano /etc/systemd/system/flaskapp.service
```
 
 
Tambahkan konfigurasi berikut:
 
```ini
[Unit]
Description=Gunicorn instance to serve flaskapp
After=network.target
 
[Service]
User=your_username
Group=www-data
WorkingDirectory=/home/your_username/flaskapp
Environment="PATH=/home/your_username/flaskapp/venv/bin"
ExecStart=/home/your_username/flaskapp/venv/bin/gunicorn --workers 3 --bind unix:flaskapp.sock -m 007 app:app
 
[Install]
WantedBy=multi-user.target
```
 
 
Gantilah `your_username` dengan nama pengguna Anda.
 
### b. Mengaktifkan dan Menjalankan Layanan
 
Jalankan perintah berikut untuk mengaktifkan dan memulai layanan:
 
```bash
sudo systemctl start flaskapp
sudo systemctl enable flaskapp
```
 
 
Pastikan layanan berjalan dengan memeriksa statusnya:
 
```bash
sudo systemctl status flaskapp
```
 
## 8. Mengamankan Aplikasi dengan HTTPS (Opsional)
 
Untuk meningkatkan keamanan, disarankan untuk menggunakan HTTPS. Anda dapat menggunakan **Certbot** untuk memperoleh sertifikat SSL gratis dari Let's Encrypt.
 
 
 
  - **4.3. Deployment Aplikasi Flask di Ubuntu 24.04**
    - Langkah-langkah untuk mendeploy aplikasi Flask pada server Ubuntu 24.04 tanpa menggunakan alat dari Microsoft.
    - Contoh: Menggunakan Gunicorn dan Nginx untuk menjalankan aplikasi di lingkungan produksi.
    - Referensi: [Instalasi Flask di Ubuntu 24.04](https://support.hostinger.com/en/articles/10725412-how-to-install-flask-on-ubuntu-24-04)

Latest revision as of 01:15, 8 April 2025

Deployment Aplikasi Flask di Ubuntu 24.04, dari awal sampai bisa diakses via browser pakai domain atau IP publik. Kita akan deploy menggunakan Gunicorn + Nginx supaya production-ready.

Install Dependensi Dasar

sudo apt update && sudo apt upgrade -y
sudo apt install python3 python3-pip python3-venv nginx -y

Siapkan Direktori Project

mkdir ~/flaskapp
cd ~/flaskapp
python3 -m venv venv
source venv/bin/activate

Install Flask dan Gunicorn

pip install flask gunicorn

Buat Aplikasi Flask (`app.py`)

# app.py

from flask import Flask 

app = Flask(__name__)

@app.route('/')
def home():
    return "Hello, Metro TV from Flask on Ubuntu 24.04!" 

Test Jalankan Lokal

python app.py

Tambahkan ini kalau kamu mau bisa akses langsung:

if __name__ == '__main__':
    app.run(host='0.0.0.0')

Jalankan dengan Gunicorn

gunicorn --bind 0.0.0.0:8000 app:app

Cek dengan: `http://YOUR_SERVER_IP:8000`

(Opsional) Buat File Service Systemd

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

Isi dengan:

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

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

[Install]
WantedBy=multi-user.target

> Ganti `ubuntu` sesuai user kamu, dan `WorkingDirectory` sesuai folder.

Lalu:

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl start flaskapp
sudo systemctl enable flaskapp

Konfigurasi Nginx

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

Isi dengan:

nginx
server {
    listen 80;
    server_name your_domain.com;  # Atau IP kamu

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

Aktifkan config-nya:

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

(Opsional) Tambah HTTPS dengan Let's Encrypt

Install Certbot:

sudo apt install certbot python3-certbot-nginx -y

Dapatkan SSL gratis:

sudo certbot --nginx -d your_domain.com

Final Cek

Bonus: Struktur Folder

flaskapp/
│
├── app.py
├── venv/
└── flaskapp.sock (auto created by gunicorn)


Pranala Menarik