Deployment ke Produksi (Linux)

Serial Bagian 8: Mengamankan koneksi SSL, menjalankan backend sebagai daemon (Systemd), dan menghubungkan ke Nginx.

27. requirements.txt

Agar server Linux bisa menginstall library yang sama dengan komputer Anda, kita wajib membuat file daftar dependensi ini.

File: /www/wwwroot/app-collection/ao/requirements.txt
fastapi==0.104.1
uvicorn[standard]==0.24.0
sqlalchemy==2.0.23
pydantic==2.5.0
python-multipart==0.0.6

Install di server via SSH:

pip install -r requirements.txt

28. Systemd Service (Auto-Start)

Jika kita menjalankan Python dengan perintah python main.py, maka server akan mati begitu kita menutput Terminal SSH. Kita harus membuat "Service" agar server berjalan di latar belakang.

Buat File Systemd: /etc/systemd/system/ao-app.service

Perlu akses root (sudo) untuk membuat file ini.

[Unit]
Description=Gunicorn instance to serve FastAPI application "AO"
After=network.target

[Service]
# Ganti 'root' dengan user web server jika perlu (misal: www-data)
User=root
Group=root
# Working directory: Lokasi folder project
WorkingDirectory=/www/wwwroot/app-collection/ao
# Command start: Menjalankan Uvicorn
ExecStart=/usr/local/bin/uvicorn main:app --host 0.0.0.0 --port 8000
# Restart otomatis jika crash
Restart=always

[Install]
WantedBy=multi-user.target

Jalankan perintah berikut di terminal SSH:

# 1. Reload daemon
sudo systemctl daemon-reload

# 2. Start service
sudo systemctl start ao-app

# 3. Enable agar jalan otomatis saat reboot server
sudo systemctl enable ao-app

# 4. Cek status (pastikan status: Active)
sudo systemctl status ao-app

Sekarang aplikasi Python berjalan di internal server port **8000**.

29. Nginx Reverse Proxy

Kita tidak membuka port 8000 ke publik demi keamanan. Kita biarkan Nginx (port 80/443) menghadap publik, lalu Nginx meneruskan request ke port 8000.

Update Config Nginx Domain: /etc/nginx/sites-available/ao.baktimakmur.com

(Atau di panel hosting jika tidak punya akses root edit file ini)

server {
    listen 80;
    server_name ao.baktimakmur.com;

    # Redirect ke HTTPS (Opsional, tapi disarankan)
    # return 301 https://$host$request_uri;

    # Location untuk static files
    location /static {
        alias /www/wwwroot/ao.baktimakmur.com/static;
        expires 30d;
    }

    # Admin Panel
    location /admin.html {
        root /www/wwwroot/ao.baktimakmur.com;
    }

    # Proxy ke Python Backend
    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;
    }

    # Halaman Root (index.html)
    location = / {
        root /www/wwwroot/ao.baktimakmur.com;
        try_files $uri $uri/ /index.html;
    }
}

Restart Nginx agar konfigurasi berlaku:

sudo systemctl restart nginx

Verifikasi Akhir

Selamat! Aplikasi AI SaaS Anda sekarang berjalan di produksi.

  1. Buka https://ao.baktimakmur.com di browser.
  2. Frontend akan muncul dan mencoba menghubungi API di belakang layar (via proxy).
  3. Cek https://ao.baktimakmur.com/docs untuk melihat dokumentasi API otomatis FastAPI.