وقت پڑھائی : 14 minutes

دو پرو کے اشتراکات، ایک مشین، ایک بینک کارڈ، اور نٹ ورک کا صفر تصادم۔ ڈاکر نے مجھے اجازت دی، بغير ایک دوسرا پی سی خریدے، میری کلاؤڈ انفرنس کی صلاحیت دگنا کرنے کی۔

مقدمه

میں پچھلے چند ماہ سے Ollama Pro استعمال کر رہا ہوں apni OpenCode sessions کو cloud models کے ذریعے چلانے کے لیے۔ بات یہ ہے کہ Pro subscription کے بعد بھی، parallel میں کئی ایجنٹس چلاتے وقت جلد سے rate limiting کی حد سے مٹ کھاتے ہیں۔واضح حل: دوسرا subscription۔

لیکن یہاں، یہ مصیبت ہے۔

Ollama har machine ko ek unique SSH key ke zariye identify karti hai — uski mashhoor Device Key. Aik sae OS par do instances apni ekhi identidad share karti hain, aur do Pro accounts ko aik hi device se link karna mumkin nahi. Aur jaise aap kheyal karte hain, main isliye dusra laptop kharidne wala nahi tha.

حل: دھوکا۔ Ollama ko yakeen dilana ke woh do alag machines par chal raha hai, lekin woh aik saath CPU, RAM aur network connection share karte hain۔ Docker humein mukammal isolation ki aik burbulah provide karega۔

@startuml
!theme plain
skinparam BoxPadding 10
skinparam DefaultFontSize 12

left to right direction

node "فیزیکل مشین" {
  frame "Ollama Instance A (Native)" as Native {
    database "شناخت\n/usr/share/ollama/.ollama/id_ed25519" as KeyA
    portin "API\n:11434" as PortA
  }

  frame "Ollama Instance B (Docker)" as Docker {
    database "شناخت\n~/ollama-b-data/id_ed25519" as KeyB
    portin "API\n:11435" as PortB
  }
}

cloud "Ollama Cloud" {
  actor "پرو اکاؤنٹ A\n(ای میل 1)" as AccountA
  actor "پرو اکاؤنٹ B\n(ای میل 2)" as AccountB
}

KeyA --> AccountA : "SSH کی A"
KeyB --> AccountB : "SSH کی B"
PortA --> AccountA : "درخواستیں A"
PortB --> AccountB : "درخواستیں B"

note bottom of Docker
آئسولیٹڈ کنٹینر: علیحدہ SSH شناخت،
علیحدہ نیٹ ورک پورٹ، مستقل والیوم
end note
@enduml

کیا دو بار ایک ہی چیز؟

میں ذہنی بیماری سمجھنے سے پہلے، مجھے اجازت دیں کہ استعمال کے کیس کا وضاحت کروں۔

ایک Pro subscription کے ساتھ، میں ایک مڈل لاچ کر سکتا ہوں جیسے`deepseek-v4-pro:cloud`ایک OpenCode سیشن میں۔ مُشکل تو آتی ہے جب میں دو ایک ساتھ سیشن چاہتا ہوں۔ ريٹ ليمٹنگ کے حصص کی وجہ سے دوسری سیشن سست ہو جاتی ہے یا بالکل رد کر دی جاتی ہے۔

دو مستقل Pro اشتراکات کے ساتھ :

  • سیشن OpenCode 1 → حساب پرو A (localhost:11434)

  • سیشن OpenCode 2 → اکاؤنٹ Pro B (localhost:11435)

ہر سیشن کا اپنا کوٹا، اپنا سیاق و سباق ہوتا ہے، اور دوسری پر اثر نہیں ڈالتا۔ یہ انسانی ملٹی‑پروسسنگ ہے۔

دو Pro subscrpitions = دو مختلف ایمیل۔ یوں ہی بینک کارڈ کام کرتی ہے — Ollama ادائیگی کا نظام multiples subscrpitions کو بلوک نہیں کرتا ہے۔میں نے جانچ کی۔

مسئله کا دل : ڈیوائس کلید

جیسے آپ Ollama انسٹال کرتے ہیں، ایک جفت ed25519 SSH کلیدیں خود شناسی ڈائریکٹری میں پیدا ہو جاتی ہیں:

$ cat /usr/share/ollama/.ollama/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI...

یہ کلید Ollama کے سرورز پر اپلوڈ ہو رہی ہے۔ollama signin. وہی بتاتی ہے کہ « یہ مشین پرو اکاؤنٹ سے متعلق ہے ». اگر آپ کے دو انسٹینس ایک ہی فائل کو شیئر کرتی ہیں`id_ed25519`, وہ ایک ہی شناخت رکھتے ہیں.เกม का ختام.

حیل: ہمري دوسری انسٹنس کو اپنی خود کی identity ڈائریکٹری فراہم کریں، جو ایک ڈاکر وولیم میں الگ ہو۔

تیاری — قدم بہ قدم

پیش شرط

  • Ollama کی نٹیو انسٹالیشن کارکردہ (رسمی سکرپٹ`curl | sh`)

  • ڈاکر انسٹال شدہ اور فعال

  • Portainer یا docker-compose کے لیے ڈปลویمنت

  • دویں Ollama اکانٹس، دو الگ ایمیل کے ساتھ

میں نے ورژن استعمال کی`0.20.2`— جسےofficial script اور متناظر ڈاکر ایمیج کے ذریعے فراہم کردہ

قدم 1: حجم بنانا

ہوست پر ایک سادہ ڈائریکٹری انستانس B کی شناخت کے لیے مستقل ہونے والی والیم کے طور پر کام کرے گی :

mkdir -p ~/ollama-b-data

یہ ڈائریکٹری ڈاکر کنٹینر میں جوڑ دی جائے گی`/root/.ollama`, jahan Ollama apni shakehnati klideen, tareekh aur models muhfooz rakhta hai

مرحلہ 2 : ڈاکر کنٹینر চালائیں

# docker-compose.yml
services:
  ollama-instance-b:
    image: ollama/ollama:0.20.2
    container_name: ollama-instance-b
    ports:
      - "11435:11434"
    volumes:
      - /home/cheroliv/ollama-b-data:/root/.ollama
    environment:
      - OLLAMA_HOST=0.0.0.0
    restart: always

یہاں کیا ہو رہا ہے :

  • بندر گاہ11435ہست کا منٹاپ کیا گیا ہے پر11434کنٹینر کے اندر. اس لیے, ڈاکر انستانس پر سن رہا ہے`:11435`بے تنازع کے ساتھ بنیادی مثال جس نے قبضہ کر رکھا ہے`:11434`.

  • حجم`~/ollama-b-data`پر لگایا گیا`/root/.ollama`— یہ وہ جگہ ہے جہاں SSH کی پہچان محفوظ رکھي جائے گی۔

  • `OLLAMA_HOST=0.0.0.0`کونٹینر کو باahar سے کنکشنز قبول کرنے کی اجازت دیتا ہے۔

میں نے پورٹینر کے ذریعے اس اسٹیک ڈپلوی کردی، لیکن ایک سادہ`docker compose up -d`بہت اچھی طرح کام کرتا ہے.

مرحلہ 3: عوامی کلی حاصل کریں

کونٹینر پہلے بار چلنے پر خالی ہونے کی وجہ سے، Ollama خود بخود وليم میں نئی SSH کی جوت بناتی ہے۔ ہم عمومی کلید حاصل کرتے ہیں:

$ docker exec ollama-instance-b cat /root/.ollama/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDDQ+dvnfmuo49q5O8LOlvgZ39SKORFw47ry9k4H2jPc

میں جانچ رہا ہوں کہ یہ کلید مختلف ہے اس nativos انسٹنس کی:

# Instance native
$ cat /usr/share/ollama/.ollama/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGyF...(différente)

# Instance Docker
$ cat ~/ollama-b-data/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDDQ...(différente)

دو الگ کلیدوں، دو alg شناختوں۔ بازی مکمل ہو گئی۔

اگر آپ کا کونٹینر ریستарт ہو جاتا ہے، وہ réutilise وولم میں موجود کلیدوں کو استعمال کرتا ہے۔ شناخت دائمی ہے۔ آپ Pro اکاؤنٹ کے ساتھ ربط نہیں گواؤں گے۔

مرحلہ 4 : Ollama.com پر کلید محفوظ کریں

ہدایت https://ollama.com/settings/keys → SSH کلید شامل کریں. ہم ڈاکر انسٹنس کی عاملی کلید لاگتے ہیں اور تصدیق کرتے ہیں۔

پھر، ہم اس شناخت کو Pro B اکاؤنٹ سے جوڑتے ہیں:

$ docker exec -it ollama-instance-b ollama signin

براؤزر کھلتا ہے، ہم حساب B کے ایمیل سے لاگ‑ین کرتے ہیں، اور ٹوکن کینٹر کے SSH کلید سے منسلک ہے۔ ہم جانچتے ہیں کہ سب ٹھیک ہے :

$ docker exec -it ollama-instance-b ollama signin
User: cherolivpro

مرحلہ 5: ایک چھوٹا مفت ماڈل کے ساتھ آزمائش کریں

Pro subscription کی قیمت بلانے سے پہلے، میں یقینی ہونا چاہتا ہوں کہ پائپ کام کر رہا ہے۔ میں کنیکٹیویٹی کی تصدیق کرنے کے لیے ایک چھوٹا، مقامی اور مفت ماڈل pull کرتا ہوں۔

$ docker exec ollama-instance-b ollama pull qwen3:0.6b
pulling manifest
pulling 7f4030143c1c: 100% ▕██████████████████▏ 522 MB
success

$ curl -s http://localhost:11435/api/tags
{"models":[{"name":"qwen3:0.6b","model":"qwen3:0.6b",...}]}

بندرگاہ`11435`جواب دیتا ہے، مودل خدمت ہے۔ انسٹینس B زندہ ہے۔

بےپروا ہونے پر، میں سچے کلاؤڈ پرو ماڈل کا pull leta ہوں:

$ docker exec ollama-instance-b ollama pull deepseek-v4-pro:cloud
pulling manifest
pulling 31c3059e137e: 100% ▕██████████████████▏  344 B
success

344 باٹس ایک cloud Model کے بيان کے لیے — عادی، استدلال سرور کے جانب سے ہوتا ہے، مقامی نہیں۔ اور یہ آخری امتحان :

$ curl -s http://localhost:11435/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"deepseek-v4-pro:cloud","messages":[{"role":"user","content":"Dis bonjour en une phrase courte."}]}'

{
  "id": "chatcmpl-480",
  "model": "deepseek-v4-pro",
  "choices": [{
    "message": { "content": "Bonjour !" },
    "finish_reason": "stop"
  }],
  "usage": { "total_tokens": 181 }
}

تمہارے لیے بھی سلام، انستنس B.

API /v1/models کا پچال

میں نے ایک بھول پری بات پر 20 منٹ گوا دے۔ جب میں نے پرووایڈر کو کنفیج کیا۔`ollama-b`اوپن کوڈ میں، ماڈل سلیکٹر میں کچھ بھی نہیں دکھائی دادا۔ کچھ نہیں۔ بالکل نہیں۔

وجہ؟ API`/v1/models`بائنستنس B واپس آ رہا تھا`{"object":"list","data":null}`کی جگہ`{"object":"list","data":[]}`کوئی مڈل pull نہیں ہوا تھا۔ قیمت`null`OpenCode طرف parsing کو خراب کر رہا تھا، جو provider کو دکھا رہا نہ تھا۔

حل: OpenCode کی تنظیم میں ماڈلز واضح طور پر ظاہر کریں، ڈائنامک ڈسکوفری پر انحصار کرنے کی بجائے۔

~/.config/opencode/opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "ollama": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Ollama (local)",
      "options": { "baseURL": "http://localhost:11434/v1" },
      "models": {
        "gemma4:e2b": { "name": "Gemma 4 E2B (local)" }
      }
    },
    "ollama-b": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Ollama Instance B (Docker)",
      "options": { "baseURL": "http://localhost:11435/v1" },
      "models": {
        "qwen3:0.6b": { "name": "Qwen3 0.6B (B)" },
        "deepseek-v4-pro:cloud": { "name": "DeepSeek V4 Pro (B)" }
      }
    }
  }
}

یہ صریح بیانات کے ساتھ، OpenCode فوراً پروائرڈر B اور اس کے ماڈلز کو دیکھتا ہے۔ سیشن کے ری-اسٹارت کے ساتھ، اور سلیکٹر`/models`دو انستنس کو ایک دوسرے کے ساتھ ساتھ دکھاتا ہے

اگر آپ کا کاسٹوم پرووائدر میں نہیں دیکھتے ہیں`/models`, تین گھنٹے ضائع نہ کریں اپنا ٹرمینل ریسٹرٹ کرنے میں۔ مودیلز کو داخل manually declare کریں`opencode.json`— یہ مسئلے کو فوراً حل کر دیتا ہے۔

نتیجہ : دو سیشنز، دو اکاؤنٹس، صفر تنازع

اخیراً، میں دوی سیشن OpenCode ایک ساتھ لا سکتا ہوں:

Session 1 → /models → Ollama (local) → deepseek-v4-pro:cloud → Compte A
Session 2 → /models → Ollama Instance B (Docker) → deepseek-v4-pro:cloud → Compte B

ہر سیشن کا اپنا کوٹا، اپنا ریت لائмит ہوتا ہے، اور وہ اپنے پاوں پر نہیں چلتا۔ اسی مشین، اسی نیلی کارڈ، دو مختلف ایمیل۔

اور سب سے اچھا؟ ڈاکر کنٹینر ہے`restart: always`۔ یہ سسٹم کے ریبوٹس کے بعد بھی دستی مداخلہ کے بغیر زندہ رہتا ہے۔

سیکھے گئے سیکھات

  1. ڈاکر سب کچھ کو الگ کر دیتا ہے، پہچان کو بھیایک سادہ bind mount وائلوم بس کافی ہے کہ ایک کینٹینر کو apne apni SSH کیز کا apna سٹ عطا کرے، جس سے وہ Ollama کی نظر میں ایک مختلف فیزیکی مشین سے منٹہ ہو جاتی ہے۔

  2. دو ای میل، ہی سیبی— Ollama ایک ہی ادائیگی کے طریقے سے کثیر اشتراكات کو بلاک نہیں کرتا۔ صرف ایمیل مختلف ہونا چاہیے۔

  3. پائل سے پہلے مفت ٹسٹ کریں — Un ollama pull qwen3:0.6b (modèle libre, 522 Mo) permet de valider toute la chaîne réseau sans débourser un centime. Vous validez le plomberie d’abord, vous activez le Pro ensuite.

  4. /v1/models` میں data: null توڑ دیتا ہے OpenCode— اگر آپ ایک کاسٹم پرووائڈر کو سیٹ کرتے ہیں ساتھ`"models": {}`, OpenCode API کے ذریعے مودلز تلاش کرنے کی کوشش کرتا ہے۔ اگر API جواب دے`data: null`, پروائڈر نظر نہیں آتا۔ مودیلز کو واضع طور پر ایلان کریں۔

  5. دو اکاؤنٹ، یہ انسانی ملٹی-پروسسنگ ہے— ایک اکاؤنٹ Pro = فعال OpenCode سیشن۔ دو اکاؤنٹ = دو متوازی سیشنز۔ کسی شخص کے لیے جو ایک ساتھ مختلف Gradle پروجيکٹس کے درمیان جگلا رہا ہے، یہ ایک گیم چینجر ہے۔

متعلقہ مضامین