SSD Nodes Learn 🎉 VPS $5.50/মাস থেকে
নির্দেশিকা Matt Connorদ্বারা Matt Connor

VPS-এ rootless Podman-এ Ollama চালানোর পদ্ধতি

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

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

সার্ভারে rootless Podman-এ Ollama চালাতে হলে পাঁচটি বিষয় নিশ্চিত করতে হবে, যেগুলো desktop walkthrough-এ বাদ থাকতে পারে। একটি নির্দিষ্ট 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 weight সংরক্ষণ করে, সেগুলো memory-তে load করে এবং port 11434-এ HTTP request-এর উত্তর দেয়। এতে login, API key বা user account নেই। তাই network-ই আপনার একমাত্র access control। Podman কোনো daemon এবং root ছাড়াই container চালায়। তাই container থেকে বেরিয়ে আসা কোনো process শুরুতে সাধারণ unprivileged user-এর অধিকারেই চলে। runtime comparison আগে দেখতে চাইলে VPS-এ Podman এবং Docker-এর পার্থক্য পড়ুন। container সম্পূর্ণ এড়াতে চাইলে VPS-এ সরাসরি Ollama ইনস্টল করা আরও সংক্ষিপ্ত পদ্ধতি।

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

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

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

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

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

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

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

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 চালালে এভাবে fail করবে:

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 সক্রিয় করুন

কোনো ব্যবহারকারীর systemd instance সাধারণত লগইন করার সময় চালু হয় এবং লগআউট করার সময় বন্ধ হয়ে যায়। এর সঙ্গে /run/user/<uid>-ও সরিয়ে ফেলা হয়। ওই ব্যবহারকারীর মালিকানাধীন প্রতিটি rootless container একই সময়ে বন্ধ হয়ে যায়। Lingering চালু রাখলে কোনো session সংযুক্ত না থাকলেও ব্যবহারকারীর 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-এ weights লেখে। ব্যবহারকারীর home directory থেকে ওই path-এ একটি directory bind করুন। তাহলে file এমন একটি জায়গায় থাকবে, যার আকার মাপা যায়: /home/ollama/ollama-data/models। Blob-গুলো content-addressed file হিসেবে models/blobs-এ থাকে, আর models/manifests-এ সেগুলোর নাম নির্ধারণকারী ছোট index থাকে। এর পরিবর্তে named volume ব্যবহার করলে, Fedora Magazine-এর post-এ যেমন করা হয়েছে, একই tree /home/ollama/.local/share/containers/storage/volumes/<volume>/_data-এর অধীনে থাকবে।

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

ইমেজের 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

প্রকাশিত version tag ব্যবহার করুন, যেমন 0.32.9 August 2026 অনুযায়ী; latest ব্যবহার করবেন না। নির্দিষ্ট tag ব্যবহার করলে 04:00-এ restart-এর পর একই binary চালু হয়, যেটি আপনি পরীক্ষা করেছিলেন। তাই আচরণের যেকোনো পরিবর্তন আপনার করা পরিবর্তনের ফল। Docker Hub একই version-এর জন্য -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-এর বাইরে সম্পন্ন হয়।

Reboot-এর পরও কার্যকর থাকা Quadlet unit

Quadlet হলো Podman-এর systemd generator। আপনি একটি .container ফাইল লিখবেন, 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

ফাইলের নাম 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-এর সময় নিজেই boot-এর সময় start করার link তৈরি করে। এ কারণেই ওই command ঐচ্ছিক নয়। TimeoutStartSec=900 এমন প্রথম start-এর জন্য timeout বাড়ায়, যেখানে image এখনও pull করতে হবে। দুই-গিগাবাইট download-এর জন্য default 90 seconds যথেষ্ট নয়, তাই systemd start-টিকে failed হিসেবে বন্ধ করে দেবে। OLLAMA_KEEP_ALIVE=30m request-এর মধ্যবর্তী সময়ে একটি model memory-তে ধরে রাখে, পাঁচ minutes পরে 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 এই দুই label-এর মধ্যে পারস্পরিক access অনুমোদন করে না। তাই Ollama তার model tree তৈরি করতে পারে না এবং container বন্ধ হয়ে যায়। এই সিস্টেমগুলোতে getenforce চালালে Enforcing দেখায়, এবং denial-টি log-এ সংরক্ষিত হয়:

sudo ausearch -m avc -ts recent

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

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 ব্যবহার করে। বিপরীতে lowercase :z shared label ব্যবহার করে। দুটি container একই directory পড়লে এটিই প্রয়োজনীয়।

:Z সম্পর্কে একটি সতর্কতা আছে, কারণ এটি destructive এবং কোনো বার্তা না দিয়েই কাজ করে। Relabelling recursive ভাবে হয়। এটিকে /home/ollama-এর দিকে নির্দেশ করলে ওই home directory-র প্রতিটি file-এ নতুন label প্রয়োগ হবে। এতে ওই user-এর SSH key access নষ্ট হবে। তাই :Z-কে সবসময় এমন একটি dedicated subdirectory দিন, যেখানে অন্য কোনো file নেই। Named volume-এর জন্য এটি প্রয়োজন হয় না, কারণ Podman volume তৈরি করার সময় সঠিকভাবে label প্রয়োগ করে। আরও বিস্তারিত জানতে server-এর জন্য SELinux-এর মৌলিক ধারণা দেখুন; সেখানে context এবং boolean ব্যাখ্যা করা হয়েছে। 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 খোলা রাখলে দুটি সমস্যা হয়। Ollama-তে authentication নেই। তাই port-এ পৌঁছাতে পারা যে কেউ /api/tags ব্যবহার করে আপনার model-এর তালিকা দেখতে পারে, /api/generate ব্যবহার করে আপনার CPU ও bandwidth allowance দিয়ে inference চালাতে পারে, আপনার disk-এ নতুন model pull করতে পারে এবং আপনার থাকা model মুছে দিতে পারে। দ্বিতীয়ত, remote port-এ plain HTTP ব্যবহার করলে prompt ও completion cleartext-এ পাঠানো হয়। ফলে path-এর প্রতিটি 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 চারটি line-এর, এবং 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 একটি response field-সহ JSON object ফেরত দেয়। 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-এর সময় কখনো start হয় না। lingering চালু থাকলেও, .container file-এ [Install] section না থাকলে, অথবা file edit করার পরে systemctl --user daemon-reload না চালালে এই সমস্যা হতে পারে।

Error: statfs /home/ollama/ollama-data: no such file or directory container start হওয়ার আগে 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 start হয়ে exit করে। podman logs ollama এবং sudo ausearch -m avc -ts recent একসঙ্গে দেখে বোঝা যায় সমস্যাটি SELinux label-সংক্রান্ত কি না। কোনো AVC-তে container_t এবং user_home_t-এর নাম থাকলে :Z অনুপস্থিত।

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

Generation খুব ধীর, অথবা container kill হয়ে যায়। GPU না থাকলে inference CPU-তে চলে এবং বড় model স্বাভাবিকভাবেই ধীর হয়। Logs-এ signal: killed দেখা যাওয়ার সময় কোনো container request চলাকালে বন্ধ হয়ে গেলে সেটি 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 তাদের জন্য, যারা পরিবর্তনশীল tag ব্যবহার করেন। Fixed version tag-এর পাশাপাশি এটি কোনো কার্যকর কাজ করে না, কারণ ওই tag-এর content কখনো পরিবর্তিত হয় না। /home/ollama/ollama-data/models/manifests এবং .container file-এর backup নিন, তবে blob-গুলো বাদ দিন। এগুলো বড়, এবং নতুন box-এ ollama pull এগুলো আবার fetch করে।

FAQ

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

কোনো ব্যবহারকারীর শেষ session শেষ হলে সেই ব্যবহারকারীর systemd instance এবং তার /run/user/<uid> directory সরিয়ে ফেলা হয়। এর সঙ্গে সব rootless container-ও বন্ধ হয়ে যায়। sudo loginctl enable-linger ollama চালিয়ে নিশ্চিত করুন যে loginctl show-user ollama --property=Linger-এর output Linger=yes। Quadlet unit তৈরি করার আগে lingering enable করুন, কারণ 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 denied হয় এবং Ollama বন্ধ হয়ে যায়। Volume= line-এ :Z যোগ করুন এবং এর জন্য একটি dedicated subdirectory ব্যবহার করুন। Relabelling recursive হওয়ায় :Z-এ পুরো home directory দেওয়া ওই ব্যবহারকারীর SSH key access নষ্ট করে। Podman named volume-এ সঠিক label প্রয়োগ করে, তাই অতিরিক্ত কিছু দরকার হয় না।

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

ollama.com/library-এ প্রকাশিত download size থেকে হিসাব শুরু করুন। এটি 3.3 GB, gemma3:4b-এর জন্য, থেকে 19 GB, qwen3:30b-এর জন্য, পর্যন্ত হতে পারে। এর সঙ্গে Podman image-এর size যোগ করুন। অতিরিক্ত 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 list করতে, সেগুলো delete করতে, disk-এ নতুন model pull করতে এবং আপনার CPU ও bandwidth allowance ব্যবহার করে inference চালাতে পারে। Internet-এর ওপর plain HTTP ব্যবহার করলে প্রতিটি prompt ও completion cleartext-এ পাঠানো হয়। Host side-কে PublishPort=127.0.0.1:11434:11434 দিয়ে 127.0.0.1-এ bind করুন। ss -ltnp | grep 11434 দিয়ে নিশ্চিত করুন। এরপর password প্রয়োজন এমন SSH tunnel বা reverse proxy-এর মাধ্যমে এতে সংযোগ করুন।