SSD Nodes Learn Hosting plans →
নির্দেশিকা Matt Connorদ্বারা Matt Connor · আপডেট করা হয়েছে 2026-09-04

VPS-এ rootless Podman-এ Ollama চালানোর নিয়ম

নির্দিষ্ট user, lingering ও Quadlet দিয়ে reboot-এর পরও Ollama চালু রাখুন। SELinux label ঠিক করুন এবং port 11434 বন্ধ রেখে SSH tunnel-এ API ব্যবহার করুন।

VPS-এ rootless Podman-এ Ollama চালান

সার্ভারে rootless Podman-এ Ollama চালাতে পাঁচটি বিষয় নিশ্চিত করতে হয়, যেগুলো ডেস্কটপভিত্তিক নির্দেশিকায় এড়িয়ে যাওয়া যায়। একটি নির্দিষ্ট unprivileged user container-এর মালিক হবে। ওই user-এর জন্য lingering সক্রিয় থাকবে, যাতে আপনি লগ আউট করার পরও container চলতে থাকে। একটি Quadlet file container-টিকে systemd-এর কাছে হস্তান্তর করবে, যাতে reboot-এর পর এটি আবার চালু হয়। যে distribution-এ SELinux সক্রিয়ভাবে প্রয়োগ করা হয়, সেখানে model directory-তে SELinux label থাকবে। API শুধু loopback-এ listen করবে, এবং আপনি SSH (secure shell) tunnel ব্যবহার করে এতে পৌঁছাবেন।

Ollama হলো large language model (LLM)-এর জন্য একটি server। এটি disk-এ model weights সংরক্ষণ করে, সেগুলো memory-তে load করে এবং port 11434-এ HTTP request-এর উত্তর দেয়। এতে login, API key বা user account নেই। তাই আপনি যে access control পাবেন, তা কেবল network-নির্ভর। Podman কোনো daemon এবং root ছাড়াই container চালায়। তাই container থেকে বেরিয়ে আসা কোনো process শুরুতে সাধারণ unprivileged user হিসেবেই চলে। আগে runtime-এর তুলনা পড়তে চাইলে VPS-এ Podman ও Docker-এর পার্থক্য পড়ুন। Container সম্পূর্ণ এড়িয়ে যেতে চাইলে VPS-এ সরাসরি Ollama install করা আরও সংক্ষিপ্ত পদ্ধতি।

SSD Nodes তাদের image-গুলোর মধ্যে Fedora সরবরাহ করে, এবং Fedora-তে Podman ও SELinux (security-enhanced Linux) উভয়ই default হিসেবে থাকে। নিচের প্রতিটি command Podman 5 বা তার পরের version থাকা যেকোনো distribution-এ চলে।

ল্যাপটপের সংস্করণে সার্ভারের জন্য পরিবর্তন প্রয়োজন

Fedora Magazine 5 August 2026 তারিখে এই stack-এর একটি স্পষ্ট নির্দেশিকা প্রকাশ করেছে: Podman-এর মাধ্যমে Fedora Linux-এ স্থানীয়ভাবে Ollama চালানো, লিখেছেন Yazan Monshed। টুলগুলো নিয়ে শুরু করার জন্য এটি প্রথম ঘণ্টার একটি ভালো নির্দেশিকা। তবে এটি একটি ল্যাপটপকে লক্ষ্য করে লেখা, এবং এর চারটি সিদ্ধান্ত public IP address-যুক্ত মেশিনে ভিন্নভাবে কাজ করে।

  • এটি সাধারণ podman run -d ব্যবহার করে container চালু করে। হাতে চালু করা container reboot-এর পরে ফিরে আসে না, কারণ সেটিকে চালু করার কোনো নির্দেশ দেওয়া হয়নি।
  • এটি পরিবর্তনশীল tag ollama/ollama ব্যবহার করে। ল্যাপটপে আচরণ পরিবর্তনের দিনটি আপনি বুঝতে পারেন। সার্ভারে প্রথম লক্ষণ দেখা যায়, কোনো script রাতারাতি কাজ করা বন্ধ করে দিয়েছে।
  • এটি -p 11434:11434 দিয়ে publish করে, যা প্রতিটি interface-এ bind করে। home router-এর পেছনে থাকলে এটি Internet থেকে অপ্রবেশযোগ্য থাকে। VPS-এ এটি password ছাড়া একটি public inference API হয়ে যায়।
  • এটি আপনার নিজের login user হিসেবে চলে। সার্ভারে container-এর মালিক account-এর অন্য কোনো resource-এর মালিক হওয়া উচিত নয়, যাতে কোনো break-out ঘটলেও তা খালি home directory-তে পৌঁছায়।

যে মেশিনের জন্য এটি লেখা হয়েছিল, তার ক্ষেত্রে এগুলোর কোনোটিই ভুল নয়। প্রতিটি বিষয়ই কেবল তখন পুনর্বিবেচনা করতে হয়, যখন মেশিনটি যেকোনো স্থান থেকে reachable থাকে এবং তার সামনে কেউ বসে থাকে না।

অসুবিধাহীন user তৈরি করুন এবং subuid পরীক্ষা করুন

Rootless Podman container-এর অভ্যন্তরীণ user ID (UID) host-এর অব্যবহৃত ID-গুলোর একটি block-এ map করে। এই block /etc/subuid এবং /etc/subgid-এ নির্ধারিত থাকে। এটি না থাকলে rootless container একেবারেই চালু হতে পারে না।

sudo dnf install -y podman        # or: sudo apt install -y podman
sudo useradd --create-home --shell /bin/bash --comment "Ollama container owner" ollama
sudo passwd --lock ollama
grep ollama /etc/subuid /etc/subgid

grep থেকে দুইটি line দেখানোর কথা—প্রতিটি file থেকে একটি করে। প্রতিটি line-এ 65536টি ID-এর একটি range উল্লেখ থাকবে:

/etc/subuid:ollama:100000:65536
/etc/subgid:ollama:100000:65536

আপনার শুরুর number আলাদা হবে, এবং এতে সমস্যা নেই। যদি grep কোনো output না দেখায়, তাহলে useradd কোনো range allocate করেনি। সে ক্ষেত্রে ওই user হিসেবে প্রথম podman command চালালে এভাবে ব্যর্থ হবে:

Error: cannot find UID/GID for user ollama: no subuid ranges found for user "ollama" in /etc/subuid

অন্য কোনো user-এর দখলে নেই এমন একটি range assign করুন। এরপর Podman-কে জানান যে তার পুরোনো mapping আর সঠিক নয়:

sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 ollama
sudo -iu ollama podman system migrate

Password lock করলে কেউ সরাসরি ollama হিসেবে login করতে পারে না। আপনার admin user থেকে sudo -iu ollama ব্যবহার করে এই account-এ প্রবেশ করবেন।

লগআউটের পরেও service চালু রাখতে lingering সক্রিয় করুন

কোনো user-এর systemd instance সাধারণত login-এর সময় শুরু হয় এবং logout-এর সময় বন্ধ হয়ে যায়। এর সঙ্গে /run/user/<uid>-ও সরিয়ে ফেলা হয়। ওই user-এর মালিকানাধীন প্রতিটি rootless container একই সময়ে বন্ধ হয়ে যায়। Lingering চালু রাখলে কোনো session সংযুক্ত না থাকলেও user instance চলতে থাকে।

sudo loginctl enable-linger ollama
loginctl show-user ollama --property=Linger

এতে Linger=yes প্রদর্শিত হওয়া উচিত। Unit তৈরি করার আগে এটি সক্রিয় করুন, কারণ unit-এর প্রয়োজনীয় directory, /run/user/<uid>, lingering চালু থাকলেই তৈরি হয়।

আরও একটি ধাপ আছে, যা সাধারণত প্রত্যাশিত নয়। sudo -iu ollama আপনাকে shell দেয়, কিন্তু session bus দেয় না। তাই systemctl --user সঙ্গে সঙ্গে ব্যর্থ হয়:

Failed to connect to bus: $DBUS_SESSION_BUS_ADDRESS and $XDG_RUNTIME_DIR not defined

systemd $XDG_RUNTIME_DIR/bus-এ user bus খোঁজে, কিন্তু sudo -i ওই variable সেট করে না। এই service পরিচালনা করার জন্য ব্যবহৃত প্রতিটি admin shell-এ এটি হাতে সেট করুন:

sudo -iu ollama
export XDG_RUNTIME_DIR=/run/user/$(id -u)
systemctl --user status

মডেল blob কোথায় থাকে এবং কতটা disk space পরিকল্পনা করবেন

Ollama container-এর ভিতরে /root/.ollama/models-এ weight লেখে। ব্যবহারকারীর home directory থেকে ওই path-এ একটি directory bind করুন। তাহলে ফাইলগুলো এমন একটি স্থানে থাকবে, যার আকার মাপা যায়: /home/ollama/ollama-data/models। Blob-গুলো content-addressed file হিসেবে models/blobs-এ থাকে, আর সেগুলোর নাম নির্ধারণকারী ছোট index models/manifests-এ থাকে। এর বদলে named volume ব্যবহার করলে, Fedora Magazine-এর পোস্টে যেমন করা হয়েছে, একই tree /home/ollama/.local/share/containers/storage/volumes/<volume>/_data-এর নিচে থাকবে। উভয় ক্ষেত্রেই ollama pull এবং ollama run একই tree-তে weight লেখে। দুটি command-এর মধ্যে পার্থক্য শুধু download শেষ হলে একটি chat session খোলে কি না।

কিছু download করার আগে disk-এর আকার নির্ধারণ করুন। প্রকাশিত download size আপনাকে ন্যূনতম প্রয়োজনীয় পরিমাণ জানায়।

ChartPublished download size per Ollama model tag, ollama.com/library, checked 13 August 2026
The data behind this chart
[
  {
    "label": "gemma3:4b",
    "download_gb": 3.3
  },
  {
    "label": "mistral:7b",
    "download_gb": 4.4
  },
  {
    "label": "qwen3:8b",
    "download_gb": 5.2
  },
  {
    "label": "gemma3:12b",
    "download_gb": 8.1
  },
  {
    "label": "qwen3:14b",
    "download_gb": 9.3
  },
  {
    "label": "gemma3:27b",
    "download_gb": 17
  },
  {
    "label": "qwen3:30b",
    "download_gb": 19
  }
]

এখানে থাকা 7টি row হল ollama.com/library-এ প্রকাশিত পরিসংখ্যান; disk-এ মাপা size নয়। এই তালিকার সবচেয়ে ছোট tag gemma3:4b download করতে 3.3 GB লাগে। সবচেয়ে বড় qwen3:30b download করতে 19 GB লাগে। এর সঙ্গে Podman-এর নিজস্ব storage-এ container image-এর জন্যও disk space লাগে। তাই podman system df এবং df -h /home ব্যবহার করে দুটি সংখ্যা একসঙ্গে পরীক্ষা করুন। কোনো model loaded থাকা অবস্থায় সাধারণত তার file size-এর কাছাকাছি RAM প্রয়োজন হয়। Context window-এর জন্যও অতিরিক্ত জায়গা লাগে। তাই 16 GB VPS-এ 19 GB model চলবে না।

image tag নির্দিষ্ট করুন এবং পূর্ণ registry name ব্যবহার করুন

sudo -iu ollama
export XDG_RUNTIME_DIR=/run/user/$(id -u)
mkdir -p ~/ollama-data ~/.config/containers/systemd
podman pull docker.io/ollama/ollama:0.32.9

August 2026 অনুযায়ী released version tag 0.32.9 ব্যবহার করুন, latest নয়। নির্দিষ্ট tag ব্যবহার করলে 04:00-এ restart-এর পর একই binary চালু হয়, যেটি আপনি পরীক্ষা করেছিলেন। তাই আচরণের যেকোনো পরিবর্তন আপনার করা পরিবর্তনের ফল। একই version-এর জন্য Docker Hub -rc এবং -rocm tag-ও প্রকাশ করে। AMD GPU না থাকলে সাধারণ tag-টি ব্যবহার করুন।

registry host-ও লিখুন। Fedora-তে systemd unit-এর short name-এর জন্য prompt দেখানোর কোনো terminal থাকে না। তাই unit এই error-সহ ব্যর্থ হয়:

Error: short-name "ollama/ollama" did not resolve to an alias and no unqualified-search registries are defined

আগে হাতে pull করা ঐচ্ছিক, তবে এটি কার্যকর। এতে কয়েক gigabyte-এর download unit-এর start timeout-এর বাইরে সম্পন্ন হয়।

রিবুটের পরেও টিকে থাকা Quadlet unit

Quadlet হলো Podman-এর systemd generator। আপনি একটি .container file লিখবেন, systemd boot-এর সময় সেটিকে একটি service-এ রূপান্তর করবে, এবং podman generate systemd আর প্রয়োজন হবে না। এটি /home/ollama/.config/containers/systemd/ollama.container হিসেবে সংরক্ষণ করুন এবং ollama user-এর মালিকানাধীন রাখুন।

[Unit]
Description=Ollama API (rootless)
After=network-online.target
Wants=network-online.target

[Container]
Image=docker.io/ollama/ollama:0.32.9
ContainerName=ollama
PublishPort=127.0.0.1:11434:11434
Volume=/home/ollama/ollama-data:/root/.ollama:Z
Environment=OLLAMA_KEEP_ALIVE=30m
Environment=OLLAMA_MAX_LOADED_MODELS=1

[Service]
Restart=always
TimeoutStartSec=900

[Install]
WantedBy=default.target

File-এর নাম service-এর নাম নির্ধারণ করে। তাই ollama.container হয়ে যায় ollama.service।

systemctl --user daemon-reload
systemctl --user start ollama.service
systemctl --user status ollama.service

status-এ active (running) দেখানোর কথা। systemctl --user enable ollama.service চালাবেন না। Unit-টি disk-এ file হিসেবে থাকে না, তাই systemd প্রত্যাখ্যান করে:

Failed to enable unit: Unit file /run/user/1001/systemd/generator/ollama.service is transient or generated.

[Install] section-ই এই কাজটি ইতিমধ্যে করে। Quadlet daemon-reload চলার সময় নিজেই start-at-boot link তৈরি করে। তাই ওই command ঐচ্ছিক নয়। প্রথমবার start করার সময় image pull করতে হতে পারে। সে ক্ষেত্রে TimeoutStartSec=900 প্রয়োজন, কারণ দুই-গিগাবাইট download-এর জন্য default 90 seconds যথেষ্ট নয় এবং systemd start-টিকে failed হিসেবে বন্ধ করে দেবে। OLLAMA_KEEP_ALIVE=30m requests-এর মাঝখানে একটি model memory-তে ধরে রাখে, পাঁচ মিনিট পর সেটিকে unload করে না। এর বিনিময়গুলোর ব্যাখ্যা আছে Ollama model memory-তে loaded রাখা-এ। এখানে ব্যবহৃত systemd পরিভাষার কোনোটি নতুন হলে VPS-এ systemd service ও timer কীভাবে কাজ করে অংশে unit-গুলোর ব্যাখ্যা আছে।

SELinux-এর অধীনে model directory-তে permission denied কেন দেখা যায়

Fedora, RHEL, Rocky এবং AlmaLinux-এ ডিফল্টভাবে SELinux enforcing অবস্থায় থাকে। একটি container process container_t domain-এ চলে, আর কোনো user-এর home directory-এর directory-তে user_home_t label থাকে। Policy এই দুটিকে একে অপরের সঙ্গে কাজ করতে দেয় না। তাই Ollama তার model tree তৈরি করতে পারে না এবং container বন্ধ হয়ে যায়। এই সিস্টেমগুলোতে getenforce চালালে Enforcing দেখা যায়, এবং denial-টি রেকর্ড হয়:

sudo ausearch -m avc -ts recent

আপনি domain এবং target label-এর নামসহ একটি line দেখতে পাবেন:

avc:  denied  { write } for  pid=1842 comm="ollama" name="models" dev="vda1" ino=131077 scontext=system_u:system_r:container_t:s0:c214,c827 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=dir permlisted=0

Volume= line-এর শেষে থাকা :Z-ই সমাধান। এটি host directory-টিকে container_file_t label দেয় এবং একটি private MCS (multi-category security) category যুক্ত করে, যা শুধু এই container-ই বহন করে। এর বিপরীতে ছোট হাতের :z shared label ব্যবহার করে। দুটি container একই directory পড়লে এটিই প্রয়োজন।

:Z সম্পর্কে একটি সতর্কতা মনে রাখুন, কারণ এটি ধ্বংসাত্মক এবং নীরবে কাজ করে। Relabelling recursive। এটিকে /home/ollama-এর দিকে নির্দেশ করলে ওই home directory-এর প্রতিটি file relabelled হয়। ফলে সেই user-এর SSH key access নষ্ট হয়। তাই :Z-কে সবসময় এমন একটি dedicated subdirectory দিন, যেখানে অন্য কোনো file নেই। Named volume-এর জন্য এটি প্রয়োজন হয় না, কারণ Podman volume তৈরি করার সময় সঠিকভাবে label করে। আরও বিস্তৃত ধারণার জন্য server-এর জন্য SELinux-এর মৌলিক বিষয় contexts এবং booleans ব্যাখ্যা করে। Ubuntu এবং Debian-এ এর পরিবর্তে AppArmor ব্যবহৃত হয়। সেখানে :Z কোনো কাজ করে না, এবং unit-এ এটি রেখে দিলেও সমস্যা নেই।

11434 port বন্ধ করে SSH-এর মাধ্যমে API-তে পৌঁছান

PublishPort=127.0.0.1:11434:11434 host side-কে loopback-এ bind করে। এটি নিশ্চিত করুন:

ss -ltnp | grep 11434
curl http://127.0.0.1:11434

ss-এর output-এ অবশ্যই 127.0.0.1:11434 দেখাতে হবে। 0.0.0.0:11434 বা *:11434 দেখালে port-টি Internet-এর জন্য খোলা, এবং curl-কে Ollama is running-এর উত্তর দিতে হবে।

কোন side-এ bind করছেন, সে বিষয়ে নির্ভুল থাকুন। PublishPort-এর address হলো host address। Container-এর ভেতরে Ollama-কে সব interface-এ listening অবস্থায় রাখতে হবে; এটিই image-এর default। Environment=OLLAMA_HOST=127.0.0.1 সেট করলে Ollama container-এর নিজস্ব loopback-এ bind হয়। তখন Podman published traffic-কে container-এর network address-এ forward করে। ফলে host থেকেও প্রতিটি request প্রত্যাখ্যাত হয়।

11434 port খোলা রাখলে দুটি ধরনের ঝুঁকি তৈরি হয়। Ollama-তে authentication নেই। তাই port-এ পৌঁছাতে পারা যে কেউ /api/tags ব্যবহার করে আপনার model তালিকাভুক্ত করতে পারে, /api/generate-এর মাধ্যমে আপনার CPU ও bandwidth allowance ব্যবহার করে inference চালাতে পারে, আপনার disk-এ নতুন model pull করতে পারে এবং বিদ্যমান model মুছে দিতে পারে। দ্বিতীয়ত, remote port-এ plain HTTP ব্যবহার করলে prompt ও completion cleartext-এ পাঠানো হয়। ফলে পথের প্রতিটি machine সেগুলো পড়তে পারে। Port কখনো host-এর বাইরে না গেলে উভয় সমস্যাই দূর হয়।

আপনার workstation থেকে SSH-এর মাধ্যমে port forward করুন:

ssh -N -L 11434:127.0.0.1:11434 you@vps.example.com

এখন আপনার laptop-এর http://127.0.0.1:11434 হলো SSH session-এর encryption-এর ভেতরে থাকা server-এর Ollama। আপনার laptop-এ আগে থেকেই Ollama চললে local bind bind [127.0.0.1]:11434: Address already in use-এ ব্যর্থ হবে। সে ক্ষেত্রে -L 11435:127.0.0.1:11434 ব্যবহার করে client-কে 11435-এ নির্দেশ করুন।

Browser client-এর জন্য password-সহ একটি reverse proxy সামনে রাখুন। একটি Caddy site block চার লাইনের, এবং caddy hash-password প্রয়োজনীয় bcrypt hash দেখায়:

ollama.example.com {
  basic_auth {
    you $2a$14$replace_with_the_generated_hash
  }
  reverse_proxy 127.0.0.1:11434
}

Caddy নিজেই TLS (transport layer security)-এর মাধ্যমে certificate সংগ্রহ করে। তাই traffic encrypted থাকে। প্রথমে আপনার client পরীক্ষা করুন। Ollama-এর সঙ্গে যোগাযোগকারী অনেক tool-এ Authorization header দেওয়ার কোনো field নেই। ফলে bare 401 Unauthorized-সহ basic auth ব্যবহার করলে সেগুলো ব্যর্থ হবে। SSH tunnel-এ এই সমস্যা নেই। তাই এখানে এটিই default recommendation।

একটি model pull করুন এবং সম্পূর্ণ path পরীক্ষা করুন

podman exec -it ollama ollama pull gemma3:4b
curl -s http://127.0.0.1:11434/api/tags
curl -s http://127.0.0.1:11434/api/generate -d '{"model":"gemma3:4b","prompt":"Reply with the single word: ready","stream":false}'
du -sh ~/ollama-data/models

/api/tags gemma3:4b-এর তালিকা JSON আকারে ফেরত দেয়। Disk থেকে weights load হওয়ার সময় কিছুক্ষণ বিরতির পর /api/generate একটি JSON object ফেরত দেয়, যাতে response field থাকে। du-এর রিপোর্ট করা সংখ্যাটি প্রকাশিত download size-এর কাছাকাছি হওয়া উচিত। এরপর এই সম্পূর্ণ guide-এর মূল বিষয়টি প্রমাণ করুন:

sudo reboot
# reconnect, then:
sudo -iu ollama
export XDG_RUNTIME_DIR=/run/user/$(id -u)
systemctl --user is-active ollama.service

active-এর অর্থ lingering। অর্থাৎ [Install] section এবং daemon-reload উভয়ই সঠিকভাবে কাজ করেছে। inactive-এর অর্থ তিনটির মধ্যে একটি অনুপস্থিত।

ব্যর্থতার ধরন এবং যে স্ট্রিংগুলো আপনি দেখবেন

Reboot-এর পরে container নেই। প্রথমে loginctl show-user ollama --property=Linger পরীক্ষা করুন, কারণ Linger=yes ছাড়া ব্যবহারকারীর systemd instance boot-এর সময় কখনো শুরু হয় না। lingering চালু থাকলে, .container file-এ [Install] section অনুপস্থিত থাকলে, অথবা আপনি file সম্পাদনা করে systemctl --user daemon-reload না চালালে এই সমস্যা হয়।

Error: statfs /home/ollama/ollama-data: no such file or directory। Container শুরু হওয়ার আগে bind mount source অবশ্যই থাকতে হবে। Podman আপনার জন্য host directory তৈরি করে না। ollama user হিসেবে mkdir -p ~/ollama-data চালান।

90 seconds পরে start ব্যর্থ হয়। Image pull তখনও চলছিল বলে journalctl --user -u ollama.service-এ Start operation timed out. Terminating. দেখা যায়। হাতে pull করুন, অথবা TimeoutStartSec=900 রেখে দিন।

Container শুরু হয়ে exit করে। এটি SELinux label-সংক্রান্ত সমস্যা কি না, তা podman logs ollama এবং sudo ausearch -m avc -ts recent একসঙ্গে দেখলে বোঝা যায়। container_t এবং user_home_t-এর নাম উল্লেখ করা কোনো AVC বার্তার অর্থ হলো :Z অনুপস্থিত।

Host থেকে request প্রত্যাখ্যাত হয়। Service active-এর সঙ্গে curl: (7) Failed to connect to 127.0.0.1 port 11434: Connection refused সাধারণত বোঝায় যে container-এর ভিতরে OLLAMA_HOST-এ loopback address সেট করা হয়েছে। ওই line সরিয়ে দিন।

Generation খুব ধীর, অথবা container বন্ধ হয়ে যায়। GPU না থাকলে inference CPU-তে চলে, তাই বড় model স্বভাবতই ধীর। Request চলাকালীন container বন্ধ হয়ে গেলে এবং log-এ signal: killed থাকলে, সেটি kernel-এর out-of-memory killer-এর কাজ। তাই উপরের chart থেকে ছোট tag বেছে নিন।

পিন করা image আপডেট করা

Pinning ব্যবহার করলে update স্বয়ংক্রিয়ভাবে ঘটে না; আপনাকেই তা করতে হয়। ollama.container-এর মধ্যে Image= সম্পাদনা করুন। তারপর reload এবং restart করুন:

systemctl --user daemon-reload
systemctl --user restart ollama.service
podman exec ollama ollama --version

Model-গুলো bind mount-এ থাকে। তাই image পরিবর্তন হলেও সেগুলো অপরিবর্তিত থাকে। [Container] section-এর AutoUpdate=registry তাদের জন্য, যারা moving tag ব্যবহার করেন। fixed version tag-এর পাশে এটি কোনো কার্যকর কাজ করে না, কারণ ওই tag-এর content কখনো পরিবর্তিত হয় না। /home/ollama/ollama-data/models/manifests এবং .container file-এর backup রাখুন। blobs বাদ দিন। এগুলো বড়, এবং নতুন box-এ ollama pull সেগুলো আবার fetch করে।

FAQ

আমার rootless Podman container লগ আউট করলে বন্ধ হয়ে যায় কেন?

কোনো user-এর শেষ session শেষ হলে তার systemd instance এবং /run/user/<uid> directory সরিয়ে ফেলা হয়। এর সঙ্গে সব rootless container-ও বন্ধ হয়ে যায়। sudo loginctl enable-linger ollama চালিয়ে নিশ্চিত করুন যে loginctl show-user ollama --property=Linger, Linger=yes দেখাচ্ছে। Quadlet unit তৈরি করার আগে lingering সক্রিয় করুন, কারণ unit-এর প্রয়োজনীয় runtime directory lingering সক্রিয় হওয়ার পরেই থাকে।

Ollama model directory-তে কি SELinux label প্রয়োজন?

Fedora, RHEL, Rocky এবং AlmaLinux-এ host directory bind mount করলে প্রয়োজন। Container-টি container_t domain-এ চলে, আর home folder-এর directory-তে user_home_t label থাকে। তাই write operation প্রত্যাখ্যাত হয় এবং Ollama বন্ধ হয়ে যায়। Volume= line-এ :Z যোগ করুন এবং এর জন্য একটি আলাদা subdirectory ব্যবহার করুন। Relabelling recursive হওয়ায় :Z-কে পুরো home directory-র দিকে নির্দেশ করলে ওই user-এর SSH key access নষ্ট হয়। Podman named volume-এ সঠিক label প্রয়োগ করে, তাই অতিরিক্ত কিছু করতে হয় না।

একটি Ollama model-এর কত disk space প্রয়োজন?

ollama.com/library-তে প্রকাশিত download size থেকে হিসাব শুরু করুন। এই আকার gemma3:4b-এর জন্য 3.3 GB থেকে qwen3:30b-এর জন্য 19 GB পর্যন্ত হতে পারে। এর সঙ্গে Podman image-এর আকার যোগ করুন। অতিরিক্ত disk space রাখুন, কারণ দ্বিতীয় model disk-এ প্রথমটিকে প্রতিস্থাপন করে না। Pull করার আগে df -h /home এবং পরে du -sh ~/ollama-data/models পরীক্ষা করুন। RAM-এর পরিকল্পনাও একইভাবে করুন। Loaded অবস্থায় একটি model-এর প্রায় তার file size সমপরিমাণ memory লাগে, এর সঙ্গে context window-এর memory-ও যোগ হয়।

VPS-এ port 11434 উন্মুক্ত করা কি নিরাপদ?

না। Ollama-তে কোনো ধরনের authentication নেই। তাই port-এ পৌঁছাতে পারা যেকেউ আপনার model-এর তালিকা দেখতে, সেগুলো মুছতে, disk-এ নতুন model pull করতে এবং আপনার CPU ও bandwidth ব্যবহার করে inference চালাতে পারে। Internet-এর ওপর সাধারণ HTTP ব্যবহার করলে প্রতিটি prompt ও completion cleartext হিসেবে পাঠানো হয়। Host side-কে PublishPort=127.0.0.1:11434:11434 সহ 127.0.0.1-এ bind করুন। ss -ltnp | grep 11434 দিয়ে তা নিশ্চিত করুন। এরপর SSH tunnel-এর মাধ্যমে অথবা password প্রয়োজন এমন reverse proxy দিয়ে এতে access করুন।