Deploy FastAPI & Django
di VPS Linux Production

Aplikasi Python langsung siap production — dari kode ke server dalam satu panduan.

± 30 menit baca SufaNet
Deploy FastAPI Django di VPS Linux

Pendahuluan

Python adalah bahasa paling populer untuk AI/ML, data science, dan API backend modern. FastAPI mendominasi untuk REST API berkecepatan tinggi, sementara Django tetap pilihan utama untuk aplikasi web kompleks dengan admin panel.

Artikel ini mencakup kedua framework sekaligus dengan stack yang sama: Nginx + Gunicorn/Uvicorn + systemd + SSL.

FastAPI vs Django: Pilih yang Mana?

Aspek FastAPI Django
Kecepatan⚡ Sangat cepat (async)🟡 Cukup cepat
Admin Panel❌ Tidak ada✅ Built-in
Auto API Docs✅ Swagger/ReDoc❌ Manual
ORMSQLAlchemy/Tortoise✅ Django ORM built-in
Cocok untukAPI, microservice, AI backendWeb app lengkap, CMS

Persiapan VPS dan Python

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

# Cek versi
python3 --version
pip3 --version

Buat user khusus untuk app:

sudo adduser --system --group --no-create-home appuser

Deploy Aplikasi FastAPI

cd /var/www
sudo git clone https://github.com/username/fastapi-app.git
sudo chown -R appuser:appuser fastapi-app
cd fastapi-app

# Buat virtual environment
python3 -m venv venv
source venv/bin/activate

# Install dependencies
pip install -r requirements.txt
pip install uvicorn[standard] gunicorn

Test jalankan secara manual:

uvicorn main:app --host 0.0.0.0 --port 8000

Jika berjalan, Ctrl+C lalu lanjut ke setup systemd.

Deploy Aplikasi Django

cd /var/www
sudo git clone https://github.com/username/django-app.git
cd django-app

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
pip install gunicorn

# Konfigurasi .env atau settings.py
# Set DEBUG=False, ALLOWED_HOSTS=['domain-kamu.com']

# Collect static files
python manage.py collectstatic --no-input
python manage.py migrate

Test Gunicorn:

gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application

Konfigurasi Nginx Reverse Proxy

sudo nano /etc/nginx/sites-available/myapp
server {
    listen 80;
    server_name api.domain-kamu.com;

    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;
    }

    # Untuk Django static files
    location /static/ {
        root /var/www/django-app;
    }
}
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Setup Systemd Service

Untuk FastAPI (Uvicorn):

sudo nano /etc/systemd/system/fastapi.service
[Unit]
Description=FastAPI Application
After=network.target

[Service]
User=appuser
WorkingDirectory=/var/www/fastapi-app
ExecStart=/var/www/fastapi-app/venv/bin/uvicorn main:app --host 127.0.0.1 --port 8000 --workers 2
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

Untuk Django (Gunicorn):

[Unit]
Description=Django Application (Gunicorn)
After=network.target

[Service]
User=appuser
WorkingDirectory=/var/www/django-app
ExecStart=/var/www/django-app/venv/bin/gunicorn myproject.wsgi:application \
  --bind 127.0.0.1:8000 --workers 3
Restart=on-failure

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable fastapi   # atau django
sudo systemctl start fastapi
sudo systemctl status fastapi

Install SSL dengan Certbot

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d api.domain-kamu.com

Kenapa VPS SufaNet Cocok untuk Python App?

  • Python bisa diinstall bebas tanpa batasan
  • RAM cukup untuk model ML kecil atau async workers
  • SSD cepat untuk database query
  • Tidak ada limitasi CPU seperti shared hosting

Python butuh VPS bukan shared hosting

Gunicorn workers butuh resource yang konsisten. Shared hosting tidak bisa menjamin itu.

🚀 Lihat VPS Singapore SufaNet

FAQ

Berapa worker Gunicorn/Uvicorn yang ideal?

Formula umum: (2 × jumlah CPU) + 1. Untuk VPS 2 vCPU → 5 workers.

FastAPI bisa connect ke PostgreSQL?

Ya, gunakan SQLAlchemy dengan asyncpg untuk async PostgreSQL, atau psycopg2 untuk sync. Django punya built-in support PostgreSQL.

Menggunakan Docker atau langsung di VPS?

Untuk simplicity, langsung di VPS lebih mudah. Untuk multi-service atau scaling, Docker Compose lebih clean.

Kesimpulan

Python production di VPS tidak harus rumit. Dengan Nginx + Gunicorn/Uvicorn + systemd, kamu punya stack yang stabil, proven, dan mudah di-maintain.

Tambahkan CI/CD GitHub Actions untuk auto deploy, dan operasional harian jadi zero-touch.