LLM: Ubuntu 24.04 desktop - Ollama n8n open-webui orange GPU 4060

From OnnoWiki
Jump to navigation Jump to search

Bisa. Ini jalur yang paling gampang untuk Ubuntu 24.04 Desktop + RTX 4060 8GB, akses lokal saja, memakai Docker Compose untuk Ollama + Open WebUI + n8n, lalu Orange Data Mining dipasang terpisah di host dalam *virtual environment*. Saya sengaja pilih desain ini karena paling mudah dirawat: GPU dipakai oleh Ollama di container, Open WebUI hanya jadi UI yang mengarah ke Ollama, dan n8n tetap ringan. Untuk lokal-only, port saya bind ke `127.0.0.1` agar tidak terbuka ke LAN. Docker mendukung GPU di Compose lewat reservasi device GPU, Open WebUI mendokumentasikan pemakaian image `:cuda` untuk GPU, dan Ollama resmi mendukung Docker + NVIDIA dengan `nvidia-container-toolkit`. ([Docker Documentation][1])

Arsitektur yang disarankan

  • Host Ubuntu 24.04: driver NVIDIA + Docker Engine + NVIDIA Container Toolkit
  • Container 1: `ollama` memakai GPU RTX 4060
  • Container 2: `open-webui` terhubung ke `ollama`
  • Container 3: `n8n` lokal-only
  • Orange Data Mining: install normal di host, bukan di Docker, agar GUI desktop lebih aman dan simpel

Untuk Orange, bagian pentingnya begini: Orange bisa diinstal via `pip` dengan PyQt6, dan Word Cloud / banyak widget Orange tidak otomatis memakai GPU. GPU baru berguna kalau workflow Orange memanggil library Python yang memang CUDA-enabled, misalnya lewat Python Script widget. Jadi saya akan siapkan GPU dengan aman, tapi saya tidak akan klaim semua widget Orange otomatis ngebut pakai RTX 4060. ([Orange Data Mining][2])


1) Pasang driver NVIDIA di host

Ubuntu menyediakan jalur resmi untuk memasang driver NVIDIA dengan `ubuntu-drivers`. Itu langkah paling aman untuk desktop Ubuntu modern. Setelah reboot, `nvidia-smi` harus menampilkan RTX 4060. ([Ubuntu][3])

sudo apt update
sudo apt install -y ubuntu-drivers-common
sudo ubuntu-drivers install
sudo reboot

Sesudah reboot:

nvidia-smi

Kalau ini belum jalan, jangan lanjut ke Docker dulu.


2) Pasang Docker Engine + Compose plugin

Docker mendukung Ubuntu 24.04 secara resmi, dan Docker sendiri menyarankan memakai repo resmi mereka, bukan paket Ubuntu lama yang bisa bentrok seperti `docker.io` atau `docker-compose`. Compose plugin juga resmi dipasang lewat paket `docker-compose-plugin`. ([Docker Documentation][4])

sudo apt remove -y docker.io docker-compose docker-compose-v2 podman-docker containerd runc || true

sudo apt update
sudo apt install -y ca-certificates curl gnupg

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo usermod -aG docker $USER
newgrp docker

Cek:

docker --version
docker compose version
docker run hello-world


3) Pasang NVIDIA Container Toolkit

Ollama di Docker butuh NVIDIA Container Toolkit, dan NVIDIA menuliskan langkah resmi: tambah repo, pasang toolkit, jalankan `nvidia-ctk runtime configure --runtime=docker`, lalu restart Docker. Toolkit ini memang mendukung Ubuntu 24.04. ([NVIDIA Docs][5])

sudo apt-get update && sudo apt-get install -y --no-install-recommends \
  ca-certificates curl gnupg2

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
  sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
  sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

Tes akses GPU dari Docker:

docker run --rm --gpus all nvidia/cuda:12.0.0-base-ubuntu22.04 nvidia-smi

Kalau ini menampilkan RTX 4060, berarti GPU sudah siap dipakai container. Docker juga mencontohkan `docker run --gpus all ... nvidia-smi` sebagai uji GPU access. ([Docker Documentation][6])

4) Buat folder project Compose

mkdir -p ~/ai-local-stack
cd ~/ai-local-stack
mkdir -p n8n_data

Buat file `.env`:

nano .env

Isi:

env
TZ=Asia/Jakarta
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=GantiPasswordKuat123!
N8N_ENCRYPTION_KEY=GantiIniDenganStringPanjangAcakMinimal32Karakter
WEBUI_SECRET_KEY=GantiIniJugaDenganStringPanjangAcak

n8n memang memakai konfigurasi lewat environment variables di `docker-compose.yml`, dan dokumentasinya menjelaskan bahwa URL akses dan webhook bisa dikontrol lewat env vars seperti `N8N_PROTOCOL`, `N8N_HOST`, `N8N_PORT`, dan `WEBHOOK_URL`. ([n8n Docs][7])

5) Buat `docker-compose.yml`

Buat file:

nano docker-compose.yml

Isi dengan ini:

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    restart: unless-stopped
    ports:
      - "127.0.0.1:11434:11434"
    volumes:
      - ollama:/root/.ollama
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu] 

  open-webui:
    image: ghcr.io/open-webui/open-webui:main-slim
    container_name: open-webui
    restart: unless-stopped
    depends_on:
      - ollama
    ports:
      - "127.0.0.1:3000:8080"
    environment:
      - TZ=${TZ}
      - WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY}
      - OLLAMA_BASE_URL=http://ollama:11434
    volumes:
      - open-webui:/app/backend/data 

  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    depends_on:
      - ollama
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      - TZ=${TZ}
      - N8N_HOST=localhost
      - N8N_PORT=5678
      - N8N_PROTOCOL=http
      - WEBHOOK_URL=http://localhost:5678/
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER}
      - N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD}
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - N8N_SECURE_COOKIE=false
      - GENERIC_TIMEZONE=${TZ}
      - N8N_DIAGNOSTICS_ENABLED=false
    volumes:
      - ./n8n_data:/home/node/.n8n 

volumes:
  ollama:
  open-webui:

Kenapa begini:

  • `127.0.0.1:...` membuat layanan hanya bisa diakses dari mesin itu sendiri, bukan dari LAN. Ini paling pas untuk “akses lokal”.
  • `OLLAMA_BASE_URL=http://ollama:11434` mengikuti pola env Open WebUI untuk menunjuk backend Ollama. Open WebUI mendokumentasikan `OLLAMA_BASE_URL` dan default Docker-nya memang mengarah ke backend internal/container. ([Open WebUI][8])
  • Untuk GPU di Compose, Docker menjelaskan bahwa `deploy.resources.reservations.devices` dengan `driver: nvidia` dan `capabilities: [gpu]` adalah bentuk resmi, dan `capabilities` wajib ada. Open WebUI juga memberi contoh Compose GPU yang sama. ([Docker Documentation][1])
  • n8n resmi mendukung Docker/Compose sebagai metode self-hosting yang direkomendasikan. ([n8n Docs][9])

6) Jalankan stack

docker compose pull
docker compose up -d
docker compose ps

Akses lokal:

Open WebUI sendiri memang memakai port kontainer `8080`, contoh Compose resminya memetakan ke host seperti `3000:8080`. ([Open WebUI][10])

7) Tes bahwa Ollama benar-benar pakai GPU

Tarik model kecil dulu:

docker exec -it ollama ollama pull llama3.2
docker exec -it ollama ollama run llama3.2

Ollama memang mendokumentasikan `docker exec -it ollama ollama run llama3.2` sebagai contoh setelah container aktif. ([Ollama][11])

Tes log:

docker logs -f ollama

Sambil jalan, buka terminal lain:

watch -n 1 nvidia-smi

Kalau VRAM/GPU util naik saat inferensi, berarti RTX 4060 dipakai.


8) Cara termudah menghubungkan n8n ke Ollama

Di n8n, untuk request ke Ollama lokal di jaringan Compose, gunakan base URL:

http://ollama:11434

Kalau n8n perlu memanggil API chat/generate, endpoint Ollama tetap lewat service name `ollama` karena semua container ada di network Compose yang sama. Ini sejalan dengan cara Open WebUI diarahkan ke Ollama memakai URL backend internal. ([Open WebUI][8])


9) Instal Orange Data Mining yang aman

Untuk Orange, saya sarankan jangan didockerkan kalau tujuannya GUI desktop biasa. Cara resmi Orange untuk platform Linux lain adalah pakai `pip`, dan bila sistem belum menyediakan PyQt, pasang PyQt6 dan PyQt6-WebEngine, lalu `pip install orange3`. ([Orange Data Mining][2])

sudo apt update
sudo apt install -y \
  python3-pip python3-venv python3-dev build-essential \
  libxcb-cursor0 libxkbcommon-x11-0 libgl1 libegl1 libopengl0

python3 -m venv ~/orangenv
source ~/orangenv/bin/activate
python -m pip install --upgrade pip setuptools wheel

pip install PyQt6 PyQt6-WebEngine
pip install orange3
pip install Orange3-Text wordcloud

Jalankan:

python -m Orange.canvas

Add-on memang bisa dipasang dari Options → Add-ons, dan Word Cloud adalah bagian dari add-on Text Mining. ([Orange Data Mining][2])

10) Siapkan akses GPU untuk Orange dengan aman

Ini bagian yang perlu jujur: Orange tidak otomatis memakai GPU untuk semua widget. Widget seperti Word Cloud didokumentasikan sebagai widget visualisasi teks biasa; dokumentasinya tidak menyebut kebutuhan GPU khusus. Jadi GPU RTX 4060 di Orange lebih realistis dipakai saat Anda menjalankan library CUDA lewat Python Script widget atau alur Python lain. ([Orange Data Mining][12])

Kalau Anda ingin Orange bisa memanggil GPU, cukup tambahkan library Python yang CUDA-enabled ke venv Orange. NVIDIA menjelaskan CUDA Toolkit untuk Linux adalah toolkit komputasi GPU resmi mereka. ([NVIDIA Docs][13])

Contoh aman dan simpel:

source ~/orangenv/bin/activate
pip install torch

Tes:

python -c "import torch; print('CUDA:', torch.cuda.is_available()); print(torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'No GPU')"

Kalau hasilnya `CUDA: True` dan muncul `RTX 4060`, berarti Orange bisa memakai Python yang melihat GPU. Setelah itu, di Orange Anda bisa pakai widget Python Script untuk menjalankan kode berbasis PyTorch/CUDA. Ini konsisten dengan model instalasi Orange yang berbasis lingkungan Python biasa. ([Orange Data Mining][2])

11) Ringkasan copy-paste tercepat

Kalau mau yang paling singkat, urutannya begini:

# 1. Driver NVIDIA
sudo apt update
sudo apt install -y ubuntu-drivers-common
sudo ubuntu-drivers install
sudo reboot
nvidia-smi

# 2. Docker resmi
sudo apt remove -y docker.io docker-compose docker-compose-v2 podman-docker containerd runc || true
sudo apt update
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker $USER
newgrp docker

# 3. NVIDIA Container Toolkit
sudo apt-get update && sudo apt-get install -y --no-install-recommends ca-certificates curl gnupg2
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
docker run --rm --gpus all nvidia/cuda:12.0.0-base-ubuntu22.04 nvidia-smi

Setelah itu baru buat `docker-compose.yml` di atas dan jalankan `docker compose up -d`. Semua langkah ini mengikuti dokumentasi resmi Docker, NVIDIA Container Toolkit, Ollama, Open WebUI, dan n8n. ([Docker Documentation][4])


12) Hal yang paling penting

  • Untuk lokal saja, bind port ke `127.0.0.1`
  • GPU utama cukup dipakai Ollama
  • Open WebUI cukup terhubung ke Ollama
  • n8n tidak perlu GPU
  • Orange aman dipasang di host, bukan Docker
  • Orange + GPU realistis untuk workflow Python tertentu, bukan otomatis semua widget

Kalau Anda mau, saya bisa lanjutkan dengan versi kedua yang lebih praktis lagi: saya tuliskan satu paket final siap copy-paste berisi `.env`, `docker-compose.yml`, perintah install, serta bagian troubleshooting untuk kasus `nvidia-smi gagal`, `ollama tidak detect GPU`, `Open WebUI blank`, `n8n permission`, dan `torch.cuda.is_available() = False`.