Panduan Jalankan Server LLM Ollama di Google Colab dengan Ngrok Tunnel & Custom Domain

Mubarok Hasanuddin

Menjalankan model bahasa besar (Large Language Model/LLM) secara lokal seperti DeepSeek Coder, Qwen 2.5, atau DeepSeek R1 membutuhkan VRAM GPU yang terbilang besar. Solusi praktis tanpa biaya hardware adalah memanfaatkan GPU bawaan dari Google Colab.

Namun, runtime Google Colab berada di dalam jaringan privat yang tidak bisa langsung diakses dari luar. Artikel ini membahas cara mengotomatisasi penginstalan server Ollama di Colab, mengekspos port ke internet lewat **Ngrok Tunnel** dengan custom domain, serta memperluas kapasitas *context window* model hingga 8192 token.

Kode Lengkap Python Notebook

Berikut adalah seluruh isi skrip Python yang terbagi menjadi dua cell utama di Google Colab:

Cell 1: Otomasi Server & Ngrok Tunnel

# === CELL 1: PENGATURAN SMART & SERVER NGROK ===
import os
import subprocess
import time
import shutil

print("🔍 Memeriksa dependensi sistem...")

# 1. Cek & Install zstd jika belum ada
if not shutil.which("zstd"):
    print("📥 Menginstal zstd...")
    !apt-get update -qq && apt-get install -y zstd -qq
else:
    print("⚡ zstd sudah terinstal.")

# 2. Cek & Install Ollama jika belum ada
if not os.path.exists("/usr/local/bin/ollama"):
    print("📥 Menginstal Ollama...")
    !curl -fsSL https://ollama.com/install.sh | sh
else:
    print("⚡ Ollama sudah terinstal.")

# 3. Cek & Install pyngrok jika belum ada
try:
    import pyngrok
    from pyngrok import ngrok, conf
    print("⚡ pyngrok sudah terinstal.")
except ImportError:
    print("📥 Menginstal pyngrok...")
    !pip install -q pyngrok
    from pyngrok import ngrok, conf

# --- PENGATURAN NGROK ---
NGROK_TOKEN = "YOUR_NGROK_AUTHTOKEN" 
CUSTOM_DOMAIN = "CUSTOM_DOMAIN_NGROK"

try:
    ngrok.set_auth_token(NGROK_TOKEN)
except Exception:
    pass

# --- JALANKAN SERVER & TUNNEL ---
print("\n🔄 Memastikan server & tunnel aktif...")
os.system("pkill ollama")
os.system("pkill ngrok")

os.environ['OLLAMA_HOST'] = "0.0.0.0"
os.environ['OLLAMA_ORIGINS'] = "*"

# Jalankan Ollama server di background
subprocess.Popen(["/usr/local/bin/ollama", "serve"])
time.sleep(3)

# Jalankan Ngrok di background
ngrok_path = conf.get_default().ngrok_path
subprocess.Popen([
    ngrok_path, "http", 
    f"--url=https://{CUSTOM_DOMAIN}", 
    "--host-header=rewrite", 
    "11434"
])
time.sleep(3)

print(f"\n✅ SERVER NGROK AKTIF & TERKONEKSI!")
print(f"👉 API Endpoint: https://{CUSTOM_DOMAIN}/v1\n")

Cell 2: Unduh Model & Pengaturan Context Size

# === CELL 2: UNDUH & SET CONTEXT WINDOW MODEL ===
import os

def install_model(model_name, context_size=8192):
    print(f"📥 Mengunduh model '{model_name}'...")
    os.system(f"/usr/local/bin/ollama pull {model_name}")
    
    # Terapkan memori Context 8192 token
    clean_name = model_name.replace(':', '_').replace('.', '_')
    modelfile_name = f"Modelfile_{clean_name}"
    with open(modelfile_name, "w") as f:
        f.write(f"FROM {model_name}\nPARAMETER num_ctx {context_size}\n")
    
    os.system(f"/usr/local/bin/ollama create {model_name} -f {modelfile_name}")
    print(f"✅ Model '{model_name}' siap dipakai (Context: {context_size})!\n")

# --- PILIH MODEL YANG INGIN DIUNDUH/DITAMBAH ---
# install_model("qwen2.5:7b", 8192)
install_model("deepseek-coder:6.7b", 8192)
# install_model("deepseek-r1:7b", 8192)

print("📋 DAFTAR MODEL AKTIF SAAT INI:")
!/usr/local/bin/ollama list

Penjelasan Fitur Utama Kode

  • Pemeriksaan Dependensi Otomatis: Mencegah eror instalasi dengan mengecek keberadaan paket zstd, binary Ollama, dan library pyngrok sebelum melanjutkan eksekusi.
  • Konfigurasi CORS Terbuka: Pengaturan OLLAMA_ORIGINS="*" dan OLLAMA_HOST="0.0.0.0" memastikan endpoint API dapat menerima permintaan dari domain atau aplikasi apa pun tanpa hambatan keamanan CORS.
  • Tunneling Ngrok Statis: Memetakan port internal Ollama (11434) ke domain publik permanen (--url=https://...), sehingga URL API tidak berubah-ubah tiap kali Colab di-restart.
  • Kustomisasi Memori Token: Fungsi install_model() membuat file konfigurasi Modelfile secara otomatis untuk memperbesar limit batas konteks (num_ctx 8192), memungkinkan model mengingat percakapan atau dokumen yang lebih panjang.

Pengujian Endpoint API

Setelah kedua sel di atas dijalankan, endpoint dapat langsung dipanggil menggunakan library resmi OpenAI dari komputer lokal Anda:

import openai

client = openai.OpenAI(
    base_url="https://springlike-zion-facetiously.ngrok-free.dev/v1",
    api_key="ollama" # API Key dummy/bebas
)

response = client.chat.completions.create(
    model="deepseek-coder:6.7b",
    messages=[
        {"role": "user", "content": "Tuliskan fungsi Python untuk mengurutkan list dengan Bubble Sort."}
    ]
)

print(response.choices[0].message.content)
Catatan Keamanan: Selalu lindungi NGROK_TOKEN milik Anda. Hindari mempublikasikan token secara langsung jika hendak membagikan notebook secara terbuka. Amankan token menggunakan fitur UserData/Secrets bawaan Google Colab.

© Panduan Server LLM Ollama Google Colab.

Post a Comment