<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: baboon</title>
    <description>The latest articles on DEV Community by baboon (@baboon).</description>
    <link>https://dev.to/baboon</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3428927%2F4a8015c5-04d2-4f4a-9f5e-ed31fb8c9fc7.png</url>
      <title>DEV Community: baboon</title>
      <link>https://dev.to/baboon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/baboon"/>
    <language>en</language>
    <item>
      <title>Tired of hand-editing Traefik YAML? This little tool makes route management way easier</title>
      <dc:creator>baboon</dc:creator>
      <pubDate>Mon, 23 Mar 2026 07:23:02 +0000</pubDate>
      <link>https://dev.to/baboon/tired-of-hand-editing-traefik-yaml-this-little-tool-makes-route-management-way-easier-1do6</link>
      <guid>https://dev.to/baboon/tired-of-hand-editing-traefik-yaml-this-little-tool-makes-route-management-way-easier-1do6</guid>
      <description>&lt;p&gt;If you already run Traefik with the File Provider, you probably know the feeling: the config itself is not hard, but keeping it tidy over time gets old fast.&lt;/p&gt;

&lt;p&gt;One new subdomain today. A backend change tomorrow. HTTPS redirect rules the day after that. Before long, you are SSH-ing into the box, scanning YAML files, and double-checking everything before you touch a single line.&lt;/p&gt;

&lt;p&gt;That is exactly where &lt;code&gt;Traefik Route Manager&lt;/code&gt; fits in. It gives you a lightweight web UI for managing Traefik file-based routes, so you can stop babysitting YAML for every small change.&lt;/p&gt;

&lt;p&gt;Project:&lt;br&gt;
&lt;a href="https://github.com/jae-jae/traefik-route-manager" rel="noopener noreferrer"&gt;https://github.com/jae-jae/traefik-route-manager&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Sound familiar?
&lt;/h2&gt;

&lt;p&gt;This is a very homelab problem.&lt;/p&gt;

&lt;p&gt;Not because Traefik is bad. Quite the opposite. Traefik is powerful, flexible, and great once it is in place.&lt;/p&gt;

&lt;p&gt;The annoying part is the repetition:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;adding a new domain means writing yet another route file&lt;/li&gt;
&lt;li&gt;enabling HTTPS means touching entrypoints, TLS, and maybe redirect rules too&lt;/li&gt;
&lt;li&gt;route files pile up over time and become harder to track&lt;/li&gt;
&lt;li&gt;changing one backend URL turns into a small manual maintenance job&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you self-host enough services, this adds up quickly.&lt;/p&gt;
&lt;h2&gt;
  
  
  What this project actually solves
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Traefik Route Manager&lt;/code&gt; focuses on one job only: managing routes for Traefik File Provider setups, without dragging in a database or a bigger control plane.&lt;/p&gt;

&lt;p&gt;Each domain becomes its own managed config file. You fill in the domain, backend URL, HTTPS options, and redirect behavior in the UI, and the app writes standard Traefik dynamic config for you.&lt;/p&gt;

&lt;p&gt;Traefik keeps watching the same directory it already uses. Your workflow stays familiar. You just stop doing the repetitive part by hand.&lt;/p&gt;

&lt;p&gt;The easiest way to think about it: it is a small, Traefik-first route manager for people who want less friction and more control.&lt;/p&gt;
&lt;h2&gt;
  
  
  The big reasons it is worth a look
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. No database, no extra baggage
&lt;/h3&gt;

&lt;p&gt;For homelab tools, lighter is usually better.&lt;/p&gt;

&lt;p&gt;This project keeps things simple: no database, no Redis, no extra moving parts. Point it at your dynamic config directory and it is ready to work.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. One domain, one file
&lt;/h3&gt;

&lt;p&gt;Every route is stored as its own &lt;code&gt;trm-{domain}.yml&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;That makes maintenance much easier later. It is cleaner to inspect, easier to back up, easier to version, and much less likely to collide with other Traefik config you maintain yourself.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. It stays Traefik-native
&lt;/h3&gt;

&lt;p&gt;The generated output is standard Traefik dynamic configuration.&lt;/p&gt;

&lt;p&gt;That matters. You are not locked into some opaque internal format, and you do not have to wonder what the tool is doing behind the scenes.&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Common HTTPS needs are built in
&lt;/h3&gt;

&lt;p&gt;Most of the time, you just want to answer a few basic questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;which backend should this domain point to?&lt;/li&gt;
&lt;li&gt;should it use HTTPS?&lt;/li&gt;
&lt;li&gt;should HTTP redirect to HTTPS?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is exactly the kind of repetitive setup this tool removes.&lt;/p&gt;
&lt;h3&gt;
  
  
  5. It is also friendly to AI agent workflows
&lt;/h3&gt;

&lt;p&gt;This is a nice bonus.&lt;/p&gt;

&lt;p&gt;The project includes API usage guidance for AI assistants, which makes it a practical fit if you want to manage routes through agent-driven workflows later on.&lt;/p&gt;

&lt;p&gt;If you are into automation, that opens up some fun possibilities.&lt;/p&gt;
&lt;h2&gt;
  
  
  What it looks like
&lt;/h2&gt;

&lt;p&gt;The UI is not trying to be flashy. It is clean, direct, and easy to understand at a glance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmacn0qv9s4du96grsqzw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmacn0qv9s4du96grsqzw.png" alt=" " width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F91ecqem1s7tcm5h6f868.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F91ecqem1s7tcm5h6f868.png" alt=" " width="800" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You open it and immediately know what it is for.&lt;/p&gt;
&lt;h2&gt;
  
  
  Quick way to try it
&lt;/h2&gt;

&lt;p&gt;If Traefik is already watching a dynamic config directory, you are most of the way there.&lt;/p&gt;

&lt;p&gt;The easiest path is Docker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; traefik-route-manager &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-p&lt;/span&gt; 8892:8892 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; /path/to/traefik/dynamic:/data &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;AUTH_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-secret-token &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;CONFIG_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/data &lt;span class="se"&gt;\&lt;/span&gt;
  ghcr.io/jae-jae/traefik-route-manager:main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you prefer Docker Compose, that works just as well.&lt;/p&gt;

&lt;p&gt;The important part is simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;set an &lt;code&gt;AUTH_TOKEN&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;mount the same dynamic config directory Traefik watches&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is basically it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this is for
&lt;/h2&gt;

&lt;p&gt;This project makes the most sense if you are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;already using Traefik File Provider and tired of editing route YAML by hand&lt;/li&gt;
&lt;li&gt;running a homelab, NAS, mini PC, or self-hosted stack with lots of small services&lt;/li&gt;
&lt;li&gt;looking for something lighter than a full management platform&lt;/li&gt;
&lt;li&gt;trying to keep your config readable, portable, and easy to back up&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If that sounds like your setup, &lt;code&gt;Traefik Route Manager&lt;/code&gt; is probably worth a try.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thought
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Traefik Route Manager&lt;/code&gt; is not trying to be a giant platform with a hundred features. That is part of the appeal. It solves a boring, repetitive problem in a clean way, and for a lot of self-hosters, that is exactly what makes it useful.&lt;/p&gt;

</description>
      <category>traefik</category>
    </item>
    <item>
      <title>Advanced Local AI: Building Digital Employees with Ollama + OpenClaw</title>
      <dc:creator>baboon</dc:creator>
      <pubDate>Thu, 26 Feb 2026 10:37:19 +0000</pubDate>
      <link>https://dev.to/baboon/advanced-local-ai-building-digital-employees-with-ollama-openclaw-2fn2</link>
      <guid>https://dev.to/baboon/advanced-local-ai-building-digital-employees-with-ollama-openclaw-2fn2</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Chatting is not enough. Learn how to combine Ollama's powerful reasoning capabilities with OpenClaw's......&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;2025 was called the "Year of Local Large Models," and we've gotten used to running Llama 3 or DeepSeek with Ollama to chat and ask about code. But by 2026, simple"conversation" no longer satisfies the appetites of tech enthusiasts.&lt;/p&gt;

&lt;p&gt;We want &lt;strong&gt;Agents&lt;/strong&gt;—not just capable of speaking, but truly able to &lt;strong&gt;work&lt;/strong&gt; for us.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Follaman.com%2F_next%2Fimage%3Furl%3D%252F_next%252Fstatic%252Fmedia%252Fopenclaw-terminal.1db9dac8.png%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Follaman.com%2F_next%2Fimage%3Furl%3D%252F_next%252Fstatic%252Fmedia%252Fopenclaw-terminal.1db9dac8.png%26w%3D3840%26q%3D75" width="1024" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Today let's talk about the most hardcore combination in the local AI space right now: &lt;strong&gt;Ollama&lt;/strong&gt; (reasoning engine) + &lt;strong&gt;OpenClaw&lt;/strong&gt; (autonomous execution framework). Under this architecture, AI is no longer just a text generator in a chat box, but a "digital employee" that can operate browsers, read and write files, and run code.&lt;/p&gt;

&lt;p&gt;Any Agent needs a smart "brain," and in a local environment, &lt;strong&gt;Ollama&lt;/strong&gt; remains the most robust choice.&lt;/p&gt;

&lt;p&gt;If you haven't installed it yet, just go to &lt;a href="https://ollama.ai/" rel="noopener noreferrer"&gt;ollama.ai&lt;/a&gt; to download the appropriate version. Once installed, we typically open a terminal and enter commands to download models.&lt;/p&gt;

&lt;h3&gt;
  
  
  Recommended Models
&lt;/h3&gt;

&lt;p&gt;For Agent applications, choose models that support &lt;strong&gt;Tool Calling&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# General reasoning model
ollama pull llama3.3

# Code-specialized model
ollama pull qwen2.5-coder:32b

# Strong reasoning model
ollama pull deepseek-r1:32b

# Lightweight option
ollama pull gpt-oss:20b

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But this actually brings a small annoyance: &lt;strong&gt;terminal downloading is a "black box."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you want to try different models (like comparing Qwen 2.5 and Llama 3 effects), or when model files are very large (tens of GB), looking at the monotonous progress bar in the terminal makes it difficult to intuitively manage these behemoths. Moreover, once you have many models installed, deciding which to delete and how much video memory each occupies becomes a headache.&lt;/p&gt;

&lt;h3&gt;
  
  
  Add a Visual Panel to Ollama: OllaMan
&lt;/h3&gt;

&lt;p&gt;To solve this problem and also make subsequent model scheduling more relaxed, I recommend using it in conjunction with &lt;a href="https://ollaman.com" rel="noopener noreferrer"&gt;OllaMan&lt;/a&gt; for this step.&lt;/p&gt;

&lt;p&gt;It can directly read your local Ollama service and provide an App Store-like graphical interface. You can visually browse the online model library on it, click on images to download, and see clear download rates and progress in real time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Follaman.com%2F_next%2Fimage%3Furl%3D%252F_next%252Fstatic%252Fmedia%252Follaman-dashboard.db60ff84.png%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Follaman.com%2F_next%2Fimage%3Furl%3D%252F_next%252Fstatic%252Fmedia%252Follaman-dashboard.db60ff84.png%26w%3D3840%26q%3D75" width="2692" height="1852"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More importantly, before handing the model to the Agent, you can first test the model's reasoning ability in OllaMan's conversation interface. After all, if a model can't even handle basic conversation logically, there's no need to waste time configuring it into the Agent.&lt;/p&gt;

&lt;p&gt;Once the model environment is ready, the foundation is solid. Now for the main event.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenClaw&lt;/strong&gt; is currently one of the best local Agent frameworks in terms of experience. Its core capability lies in &lt;strong&gt;execution&lt;/strong&gt;—it has system-level permissions, can execute Shell commands, read and write files, and even control browsers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;p&gt;Before installing OpenClaw, make sure your system meets the following requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Node.js 22 or higher&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can check your Node version with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node --version

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  One-Click Installation (Recommended)
&lt;/h3&gt;

&lt;p&gt;OpenClaw officially provides the most convenient &lt;strong&gt;one-click installer script&lt;/strong&gt;, which automatically handles Node.js detection, CLI installation, and the onboarding wizard:&lt;/p&gt;

&lt;h4&gt;
  
  
  macOS / Linux / WSL2
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -fsSL https://openclaw.ai/install.sh | bash

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Windows (PowerShell)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;iwr -useb https://openclaw.ai/install.ps1 | iex

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;💡 The installer script automatically detects and installs Node.js 22+ (if missing), then launches the onboarding wizard.&lt;/p&gt;

&lt;p&gt;If you only want to install the CLI without running the onboarding wizard:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# macOS / Linux / WSL2
curl -fsSL https://openclaw.ai/install.sh | bash -s -- --no-onboard

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Other Installation Methods
&lt;/h3&gt;

&lt;p&gt;If you already have Node.js 22+ installed, you can also install manually:&lt;/p&gt;

&lt;h4&gt;
  
  
  npm Installation
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g openclaw@latest
openclaw onboard --install-daemon

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  pnpm Installation
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pnpm add -g openclaw@latest
pnpm approve-builds -g
openclaw onboard --install-daemon

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  macOS Application
&lt;/h4&gt;

&lt;p&gt;If you're on macOS, you can also download the &lt;strong&gt;OpenClaw.app&lt;/strong&gt; desktop application:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Download the latest &lt;code&gt;.dmg&lt;/code&gt; file from &lt;a href="https://github.com/openclaw/openclaw/releases" rel="noopener noreferrer"&gt;OpenClaw Releases&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; Install and launch the app&lt;/li&gt;
&lt;li&gt; Complete system permissions setup (TCC prompts)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Configuring Ollama Integration
&lt;/h3&gt;

&lt;p&gt;After installation, you need to connect OpenClaw with your Ollama service.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Enable Ollama API Key
&lt;/h4&gt;

&lt;p&gt;OpenClaw requires an API Key to identify the Ollama service (any value works; Ollama itself doesn't need a real key):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Set environment variable
export OLLAMA_API_KEY="ollama-local"

# Or via OpenClaw config command
openclaw config set models.providers.ollama.apiKey "ollama-local"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  2. Verify Ollama Service
&lt;/h4&gt;

&lt;p&gt;Ensure Ollama is running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Check if Ollama is running
curl http://localhost:11434/api/tags

# Start Ollama service if not running
ollama serve

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. Run Configuration Wizard
&lt;/h4&gt;

&lt;p&gt;OpenClaw provides an interactive configuration wizard that automatically detects your Ollama models:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;openclaw onboard

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The wizard will automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Scan your local Ollama service (&lt;code&gt;http://127.0.0.1:11434&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;  Discover all models that support tool calling&lt;/li&gt;
&lt;li&gt;  Configure default model settings&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  4. Manual Configuration (Optional)
&lt;/h4&gt;

&lt;p&gt;If you want to manually specify models, edit the config file &lt;code&gt;~/.openclaw/openclaw.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "agents": {
    "defaults": {
      "model": {
        "primary": "ollama/llama3.3",
        "fallbacks": ["ollama/qwen2.5-coder:32b"]
      }
    }
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  5. Verify Configuration
&lt;/h4&gt;

&lt;p&gt;Check if OpenClaw has successfully recognized your Ollama models:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# List all models recognized by OpenClaw
openclaw models list

# List installed Ollama models
ollama list

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Start the Gateway
&lt;/h3&gt;

&lt;p&gt;Once configured, start the OpenClaw Gateway:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;openclaw gateway

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Gateway runs on &lt;code&gt;ws://127.0.0.1:18789&lt;/code&gt; by default. It's OpenClaw's core service, responsible for coordinating model calls and skill execution.&lt;/p&gt;

&lt;p&gt;Environment setup is just the beginning. OpenClaw's true power lies in its rich &lt;strong&gt;Skills&lt;/strong&gt; ecosystem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scenario 1: Automated Code Review
&lt;/h3&gt;

&lt;p&gt;OpenClaw can directly read your local project files. You can give it commands like:&lt;/p&gt;

&lt;p&gt;"Traverse all &lt;code&gt;.tsx&lt;/code&gt; files in &lt;code&gt;src/components&lt;/code&gt; under the current directory, check if there are any &lt;code&gt;useEffect&lt;/code&gt; missing dependencies, and summarize the risk points into &lt;code&gt;review_report.md&lt;/code&gt;."&lt;/p&gt;

&lt;p&gt;During this process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; OpenClaw calls file system skills to traverse directories.&lt;/li&gt;
&lt;li&gt; Ollama (Llama 3) reads the code and performs logical reasoning.&lt;/li&gt;
&lt;li&gt; OpenClaw organizes the reasoning results and writes them to a new file.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is far more efficient than copying code segments to ChatGPT, and the data never leaves your local machine.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scenario 2: Remote Commander (IM Integration)
&lt;/h3&gt;

&lt;p&gt;OpenClaw supports integration with chat platforms like Slack, Discord, and Telegram. This means you can turn your home computer into a server that's always on standby.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage Example:&lt;/strong&gt; After configuring the Telegram bot integration, when you're out and about, you just need to send a message on your phone: &lt;em&gt;"Hey Claw, help me check the remaining disk space on my home NAS. If it's below 10%, send me an alert."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;OpenClaw will run the Shell command &lt;code&gt;df -h&lt;/code&gt; on your home computer, analyze the results, and send the report back to your phone.&lt;/p&gt;

&lt;p&gt;By using &lt;strong&gt;Ollama&lt;/strong&gt; to provide intelligence, &lt;strong&gt;OllaMan&lt;/strong&gt; to manage model assets, and &lt;strong&gt;OpenClaw&lt;/strong&gt; to execute specific tasks, we've built a complete local AI productivity loop.&lt;/p&gt;

&lt;p&gt;The biggest charm of this combination is: &lt;strong&gt;completely private, completely free, completely under your control.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're tired of just chatting, try installing it on your computer and see how your workflow can evolve with the help of this AI assistant.&lt;/p&gt;

</description>
      <category>openclaw</category>
      <category>ollama</category>
      <category>llm</category>
    </item>
    <item>
      <title>With OllaMan, Even Beginners Can Run LLMs</title>
      <dc:creator>baboon</dc:creator>
      <pubDate>Thu, 22 Jan 2026 02:22:39 +0000</pubDate>
      <link>https://dev.to/baboon/with-ollaman-even-beginners-can-run-llms-27nk</link>
      <guid>https://dev.to/baboon/with-ollaman-even-beginners-can-run-llms-27nk</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;A beginner-friendly guide to running AI models on your own computer. Get from zero to chatting with a......&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You've probably heard of ChatGPT, Claude, and Gemini. They're powerful, but they all run in the cloud — meaning your conversations travel through someone else's servers.&lt;/p&gt;

&lt;p&gt;What if you could run AI models entirely on your own machine? &lt;strong&gt;Local LLMs&lt;/strong&gt; make this possible: complete privacy, no internet required, and zero API costs.&lt;/p&gt;

&lt;p&gt;The catch? Setting up local models usually involves command lines, environment variables, and technical know-how that scares off most people.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That's where OllaMan comes in.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Follaman.com%2F_next%2Fimage%3Furl%3D%252F_next%252Fstatic%252Fmedia%252Follaman-dashboard.db60ff84.png%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Follaman.com%2F_next%2Fimage%3Furl%3D%252F_next%252Fstatic%252Fmedia%252Follaman-dashboard.db60ff84.png%26w%3D3840%26q%3D75" width="2692" height="1852"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's clear up these two terms first:&lt;/p&gt;

&lt;h3&gt;
  
  
  Ollama: The Engine
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://ollama.ai/" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt; is the open-source project that actually runs AI models on your computer. It supports all the popular open-source models:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Llama 3&lt;/strong&gt; — Meta's flagship open model&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Mistral&lt;/strong&gt; — The lightweight European alternative&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;DeepSeek&lt;/strong&gt; — Exceptional reasoning capabilities&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Gemma&lt;/strong&gt; — Google's efficient open model&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ollama is fantastic, but it only offers a command-line interface. Great for developers, intimidating for everyone else.&lt;/p&gt;

&lt;h3&gt;
  
  
  OllaMan: The Dashboard
&lt;/h3&gt;

&lt;p&gt;Think of Ollama as the kitchen, and &lt;strong&gt;OllaMan&lt;/strong&gt; as the restaurant's beautiful front-of-house.&lt;/p&gt;

&lt;p&gt;OllaMan is a desktop app that wraps Ollama in a modern graphical interface. With it, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  👀 &lt;strong&gt;Browse&lt;/strong&gt; all your installed models at a glance&lt;/li&gt;
&lt;li&gt;  🖱️ &lt;strong&gt;Download&lt;/strong&gt; new models with a single click&lt;/li&gt;
&lt;li&gt;  💬 &lt;strong&gt;Chat&lt;/strong&gt; with models like you would with ChatGPT&lt;/li&gt;
&lt;li&gt;  🎨 &lt;strong&gt;Enjoy&lt;/strong&gt; polished dark and light themes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ollama runs the models. OllaMan makes it delightful.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Install Ollama
&lt;/h3&gt;

&lt;p&gt;First, get Ollama running on your machine:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Visit &lt;a href="https://ollama.ai/" rel="noopener noreferrer"&gt;ollama.ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; Download the installer for your OS (macOS / Windows / Linux)&lt;/li&gt;
&lt;li&gt; Run the installer — it's a standard"Next, Next, Finish" setup&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once installed, Ollama runs silently in the background.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Note&lt;/strong&gt;: Don't expect a window to pop up — Ollama runs as a background service. That's normal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Install OllaMan
&lt;/h3&gt;

&lt;p&gt;Next, grab OllaMan:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Head to &lt;a href="https://ollaman.com/" rel="noopener noreferrer"&gt;ollaman.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; Download the app for your platform&lt;/li&gt;
&lt;li&gt; Install and launch OllaMan&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;OllaMan automatically detects your local Ollama service. If everything's working, you'll land on the dashboard.&lt;/p&gt;

&lt;h3&gt;
  
  
  Download a Model
&lt;/h3&gt;

&lt;p&gt;A fresh Ollama installation has no models yet. Let's fix that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Click &lt;strong&gt;"Discover"&lt;/strong&gt; in the left sidebar&lt;/li&gt;
&lt;li&gt; Browse the model library — you'll see dozens of options&lt;/li&gt;
&lt;li&gt; Pick something like &lt;strong&gt;Llama 3&lt;/strong&gt; or &lt;strong&gt;Mistral&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt; Click into the model details page&lt;/li&gt;
&lt;li&gt; Choose a size (we recommend 7B or 8B for beginners — lower hardware requirements)&lt;/li&gt;
&lt;li&gt; Hit the &lt;strong&gt;"Pull"&lt;/strong&gt; button to start downloading&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Follaman.com%2F_next%2Fimage%3Furl%3D%252F_next%252Fstatic%252Fmedia%252Follaman-discover.5346ad5a.png%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Follaman.com%2F_next%2Fimage%3Furl%3D%252F_next%252Fstatic%252Fmedia%252Follaman-discover.5346ad5a.png%26w%3D3840%26q%3D75" width="2692" height="1852"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While downloading, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Watch real-time progress on the Downloads page&lt;/li&gt;
&lt;li&gt;  See download speed and completion percentage&lt;/li&gt;
&lt;li&gt;  Queue up multiple models simultaneously&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⏰ &lt;strong&gt;Download time&lt;/strong&gt;: Depends on your internet speed and model size. A 4GB model takes roughly 5 minutes on a 100Mbps connection.&lt;/p&gt;

&lt;h3&gt;
  
  
  Start Chatting
&lt;/h3&gt;

&lt;p&gt;Once downloaded, getting to your first conversation is straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Click &lt;strong&gt;"Chat"&lt;/strong&gt; in the sidebar&lt;/li&gt;
&lt;li&gt; Select your newly downloaded model from the top bar&lt;/li&gt;
&lt;li&gt; Type a message and hit Enter&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it. You're now chatting with a local AI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Follaman.com%2F_next%2Fimage%3Furl%3D%252F_next%252Fstatic%252Fmedia%252Follaman-chat.a8228314.png%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Follaman.com%2F_next%2Fimage%3Furl%3D%252F_next%252Fstatic%252Fmedia%252Follaman-chat.a8228314.png%26w%3D3840%26q%3D75" width="2692" height="1852"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Create an Agent for Repeated Tasks
&lt;/h3&gt;

&lt;p&gt;After using OllaMan for a while, you might notice you're typing the same instructions repeatedly:"Act as a coding assistant"or"Always respond in a friendly tone."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agents&lt;/strong&gt; solve this. An Agent is a pre-configured AI persona with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  A system prompt (the AI's role)&lt;/li&gt;
&lt;li&gt;  A default model&lt;/li&gt;
&lt;li&gt;  Custom generation parameters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To create one:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Go to the Chat page&lt;/li&gt;
&lt;li&gt; Click the current Agent card in the left sidebar&lt;/li&gt;
&lt;li&gt; Click the &lt;strong&gt;"+"&lt;/strong&gt; button&lt;/li&gt;
&lt;li&gt; Set a name, icon, and system prompt&lt;/li&gt;
&lt;li&gt; Save&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Follaman.com%2F_next%2Fimage%3Furl%3D%252F_next%252Fstatic%252Fmedia%252Fagents-create.328f270a.png%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Follaman.com%2F_next%2Fimage%3Furl%3D%252F_next%252Fstatic%252Fmedia%252Fagents-create.328f270a.png%26w%3D3840%26q%3D75" width="2692" height="1852"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here are some Agent ideas:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;&lt;tr&gt;
&lt;th&gt;Agent Name&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;System Prompt Snippet&lt;/th&gt;
&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Code Buddy&lt;/td&gt;
&lt;td&gt;Programming help&lt;/td&gt;
&lt;td&gt;"You're a patient coding mentor who explains concepts clearly..."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Writing Coach&lt;/td&gt;
&lt;td&gt;Content creation&lt;/td&gt;
&lt;td&gt;"You're a creative writing assistant who helps brainstorm and polish text..."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Study Helper&lt;/td&gt;
&lt;td&gt;Learning&lt;/td&gt;
&lt;td&gt;"You're a friendly tutor who breaks down complex topics into simple terms..."&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Once created, switching Agents instantly changes your AI's personality and defaults.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tip 1: Attach Files Instead of Pasting
&lt;/h3&gt;

&lt;p&gt;Need the AI to analyze code or a document? Skip the copy-paste.&lt;/p&gt;

&lt;p&gt;Click the 📎 attachment button in the input area and select files directly. OllaMan supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Code files&lt;/strong&gt;: .py, .js, .ts, .java, and more&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Documents&lt;/strong&gt;: .txt, .md, .json&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Images&lt;/strong&gt; (with vision models): .png, .jpg&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tip 2: Enable Thinking Mode
&lt;/h3&gt;

&lt;p&gt;Some models (like DeepSeek R1 or QwQ) support "thinking mode" — they'll show their reasoning process before giving an answer.&lt;/p&gt;

&lt;p&gt;If your model supports this, you'll see a &lt;strong&gt;"Think"&lt;/strong&gt; toggle near the input. When enabled:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Responses split into "thinking" and "answer" sections&lt;/li&gt;
&lt;li&gt;  The thinking section is collapsible&lt;/li&gt;
&lt;li&gt;  Great for complex reasoning tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tip 3: Tune Generation Parameters
&lt;/h3&gt;

&lt;p&gt;The settings panel on the right side of each chat lets you adjust:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;What It Does&lt;/th&gt;
&lt;th&gt;Recommendations&lt;/th&gt;
&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Temperature&lt;/td&gt;
&lt;td&gt;Controls creativity&lt;/td&gt;
&lt;td&gt;Code/factual: 0.1-0.3&lt;br&gt;Creative writing: 0.8-1.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Top P&lt;/td&gt;
&lt;td&gt;Sampling range&lt;/td&gt;
&lt;td&gt;Usually keep at 0.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Top K&lt;/td&gt;
&lt;td&gt;Candidate token count&lt;/td&gt;
&lt;td&gt;Usually keep at 40&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Changes apply only to the current session — your Agent's defaults stay untouched.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tip 4: Connect Multiple Servers
&lt;/h3&gt;

&lt;p&gt;Got a beefy desktop at home and a thin laptop on the go? Great setup:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Run Ollama on your powerful machine&lt;/li&gt;
&lt;li&gt; Connect to it remotely from OllaMan on any device&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Just add the remote server address in &lt;strong&gt;Settings → Servers&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: What specs do I need?
&lt;/h3&gt;

&lt;p&gt;Quick reference:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;&lt;tr&gt;
&lt;th&gt;Model Size&lt;/th&gt;
&lt;th&gt;Recommended Setup&lt;/th&gt;
&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1B-3B&lt;/td&gt;
&lt;td&gt;8GB RAM — entry level&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7B-8B&lt;/td&gt;
&lt;td&gt;16GB RAM — sweet spot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13B&lt;/td&gt;
&lt;td&gt;32GB RAM or 8GB VRAM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;70B+&lt;/td&gt;
&lt;td&gt;Dedicated GPU required&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;💡 If unsure, start with a 7B model. It's the best balance of performance and quality.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: Where are models stored?
&lt;/h3&gt;

&lt;p&gt;Ollama keeps models in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  macOS: &lt;code&gt;~/.ollama/models&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  Windows: &lt;code&gt;C:\Users\&amp;lt;username&amp;gt;\.ollama\models&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  Linux: &lt;code&gt;~/.ollama/models&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Q: Does it work offline?
&lt;/h3&gt;

&lt;p&gt;Absolutely — that's the whole point!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Needs internet&lt;/strong&gt;: Downloading models, browsing the model library&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Works offline&lt;/strong&gt;: Chatting with downloaded models&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once a model is on your machine, conversations happen entirely locally.&lt;/p&gt;

&lt;p&gt;Running AI locally isn't just for power users anymore.&lt;/p&gt;

&lt;p&gt;With Ollama + OllaMan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  No coding skills required&lt;/li&gt;
&lt;li&gt;  Your data never leaves your machine&lt;/li&gt;
&lt;li&gt;  Works without an internet connection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you've been curious about local LLMs but intimidated by the terminal, now's the time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5 minutes to install. An AI assistant that's truly yours.&lt;/strong&gt;&lt;/p&gt;




</description>
      <category>ai</category>
      <category>llm</category>
      <category>vibecoding</category>
      <category>mcp</category>
    </item>
    <item>
      <title>This Might Be the Best Ollama Chat Client: OllaMan</title>
      <dc:creator>baboon</dc:creator>
      <pubDate>Wed, 17 Dec 2025 07:02:07 +0000</pubDate>
      <link>https://dev.to/baboon/this-might-be-the-best-ollama-chat-client-ollaman-527j</link>
      <guid>https://dev.to/baboon/this-might-be-the-best-ollama-chat-client-ollaman-527j</guid>
      <description>&lt;p&gt;If you're already running local models with Ollama, you've probably hit a few friction points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CLI isn’t always ergonomic&lt;/strong&gt;: as your model list grows, switching models and remembering parameters becomes tedious.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conversations get messy&lt;/strong&gt;: different tasks end up in one thread and context becomes hard to reuse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced capabilities feel fragmented&lt;/strong&gt;: vision, file context, and reasoning (Thinking/Chain-of-Thought) often require extra setup.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;OllaMan&lt;/strong&gt; is built to remove that friction: a desktop chat client for Ollama that makes "connect a model and start chatting" feel effortless, stable, and fast.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs23m90l8ck8rmgno0sln.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs23m90l8ck8rmgno0sln.png" alt="OllaMan Chat main screen" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is OllaMan?
&lt;/h2&gt;

&lt;p&gt;OllaMan is a desktop client made specifically for Ollama users. It provides a clean GUI to manage local models, chat with them in real time, and connect to multiple Ollama servers (macOS / Windows / Linux).&lt;/p&gt;

&lt;p&gt;Chat is a first-class feature:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-agent (roles)&lt;/strong&gt;: create agents for different workflows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-session&lt;/strong&gt;: keep context organized per agent&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Attachments&lt;/strong&gt;: send files/images as context&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Thinking Mode&lt;/strong&gt;: show collapsible reasoning for supported models&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Message operations&lt;/strong&gt;: edit messages, regenerate AI responses, copy with one click&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance stats&lt;/strong&gt;: live tokens/s, duration, total tokens, and shareable cards&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1) Connect to Ollama: local or multi-server
&lt;/h2&gt;

&lt;p&gt;OllaMan can connect to multiple Ollama instances, which is useful when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You run small models locally&lt;/strong&gt; (offline-first)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You host larger models on a stronger machine&lt;/strong&gt; (LAN/remote)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want to separate environments&lt;/strong&gt; (work vs personal)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recommended flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Make sure your Ollama service is running (local or remote).&lt;/li&gt;
&lt;li&gt;Open OllaMan and go to &lt;strong&gt;Settings → Servers&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Add server details (name, URL; optionally username/password).&lt;/li&gt;
&lt;li&gt;Run a &lt;strong&gt;connection test&lt;/strong&gt; to verify latency and health.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F04incliwk4n5f0n8cs0v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F04incliwk4n5f0n8cs0v.png" alt="Servers settings" width="800" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2) Pick a model and start chatting
&lt;/h2&gt;

&lt;p&gt;On the Chat page, you can switch models from the &lt;strong&gt;top toolbar&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the model dropdown&lt;/li&gt;
&lt;li&gt;Choose from your locally installed models&lt;/li&gt;
&lt;li&gt;The selection applies immediately to subsequent messages&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;OllaMan also detects capabilities automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vision&lt;/strong&gt;: shows the image attachment button&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Thinking&lt;/strong&gt;: shows the Think toggle&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F83ykbkzgus7x8rorrg9r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F83ykbkzgus7x8rorrg9r.png" alt="Model picker and capability badges" width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3) Use Agents to turn workflows into one-click presets
&lt;/h2&gt;

&lt;p&gt;An Agent is a pre-configured assistant role. Think of it as a reusable card with its own default model, system prompt, and generation parameters.&lt;/p&gt;

&lt;p&gt;Built-in agents include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OllaMan&lt;/strong&gt;: pinned default agent (cannot be removed)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend Dev&lt;/strong&gt;: a pre-tuned agent for frontend development&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To create your own agent:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;“+”&lt;/strong&gt; in the left sidebar&lt;/li&gt;
&lt;li&gt;Set name, icon, and description&lt;/li&gt;
&lt;li&gt;Configure default model, system prompt, and parameters (Temperature / Top P / Top K)&lt;/li&gt;
&lt;li&gt;Drag to reorder&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtfsrym3d5kb0xwdw4kj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtfsrym3d5kb0xwdw4kj.png" alt="Agent list and create entry" width="800" height="519"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvajvpcfhzxvvbbtfwwoq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvajvpcfhzxvvbbtfwwoq.png" alt="Agent create" width="800" height="527"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tip: Create a small set of high-quality agents for your most common workflows, and keep names consistent so they’re easy to maintain.&lt;/p&gt;

&lt;h2&gt;
  
  
  4) Sessions: keep context clean and searchable
&lt;/h2&gt;

&lt;p&gt;Each agent can have multiple independent sessions. Sessions are grouped by time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Today&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;This Week&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Earlier&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Common actions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;New session&lt;/strong&gt;: click "New Chat" or press &lt;code&gt;Cmd+N&lt;/code&gt; / &lt;code&gt;Ctrl+N&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Switch&lt;/strong&gt;: click a session in the list&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delete&lt;/strong&gt;: hover and remove&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Session titles are generated from the first message to help you quickly recognize topics.&lt;/p&gt;

&lt;h2&gt;
  
  
  5) Attachments: put files and images directly into context
&lt;/h2&gt;

&lt;p&gt;This is one of the most practical everyday features.&lt;/p&gt;

&lt;h3&gt;
  
  
  File attachments (text)
&lt;/h3&gt;

&lt;p&gt;Send code, docs, logs, or configs as context:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Supports TXT / MD / JSON / JS / TS / Python / HTML / CSS and other text formats&lt;/li&gt;
&lt;li&gt;Click the file card to preview full content with syntax highlighting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Great for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Code review&lt;/li&gt;
&lt;li&gt;Document understanding&lt;/li&gt;
&lt;li&gt;Debugging configurations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4qcouvwz7wpp6xgxw8e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4qcouvwz7wpp6xgxw8e.png" alt="File attachments" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Image attachments (vision models)
&lt;/h3&gt;

&lt;p&gt;When using vision-capable models (e.g., LLaVA, Gemma2 Vision), you can attach images:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Formats: PNG / JPG / JPEG / GIF / WebP&lt;/li&gt;
&lt;li&gt;Thumbnail preview before sending, with removal support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fon4r84yb4azokkjeehoh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fon4r84yb4azokkjeehoh.png" alt="Attachment button and previews" width="800" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6) HTML Code Preview: instant visual feedback for HTML snippets
&lt;/h2&gt;

&lt;p&gt;When the model generates HTML code, OllaMan provides instant preview capability:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For HTML code blocks, a &lt;strong&gt;Preview&lt;/strong&gt; button appears in the top-right corner of the code block&lt;/li&gt;
&lt;li&gt;Click to open a preview window that renders the HTML in real-time&lt;/li&gt;
&lt;li&gt;Great for testing UI snippets, learning HTML/CSS, or validating generated markup&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes it easy to visualize and iterate on generated HTML without leaving the chat interface.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F80cdjiswtsx04gs2ba2r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F80cdjiswtsx04gs2ba2r.png" alt="HTML code preview button and window" width="800" height="626"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7) Thinking Mode: collapsible reasoning, separated from the final answer
&lt;/h2&gt;

&lt;p&gt;For models that support reasoning/chain-of-thought (e.g., DeepSeek R1, QwQ), enable &lt;strong&gt;Think&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reasoning is separated from the final output&lt;/li&gt;
&lt;li&gt;The reasoning block is collapsible&lt;/li&gt;
&lt;li&gt;Useful for complex problem solving and structured planning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyeobfr8tay9eqqojrump.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyeobfr8tay9eqqojrump.png" alt="Thinking Mode UI" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  8) Session settings: tweak per chat, then optionally "save to agent"
&lt;/h2&gt;

&lt;p&gt;The top-right settings panel lets you adjust session-level parameters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;System Prompt&lt;/strong&gt;: session-specific system prompt&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Temperature (0-2)&lt;/strong&gt;: higher is more creative&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Top P (0-1)&lt;/strong&gt;: lower is more focused&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Top K (1-100)&lt;/strong&gt;: limits candidate tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Save to Agent&lt;/strong&gt;: persist current session settings as the agent default&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reset to Agent Defaults&lt;/strong&gt;: revert to the agent baseline&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F66wxl8sv2n9uowdtq4re.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F66wxl8sv2n9uowdtq4re.png" alt="Right-side settings panel" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  9) Performance stats and share cards
&lt;/h2&gt;

&lt;p&gt;During generation, OllaMan shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tokens/s&lt;/li&gt;
&lt;li&gt;Total Tokens&lt;/li&gt;
&lt;li&gt;Duration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click the metrics area to open a share card and save it as an image—handy for comparing models, quantization levels, or different machines.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm5b1nzz5bvj1qb5zih4s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm5b1nzz5bvj1qb5zih4s.png" alt="Performance stats and share card" width="800" height="540"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Recommended workflows (best practices)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Create agents per task&lt;/strong&gt;: writing, coding, translation, learning&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep related questions in the same session&lt;/strong&gt; for consistent context&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Raise Temperature for creative work&lt;/strong&gt; (copywriting, brainstorming)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lower Temperature for precision&lt;/strong&gt; (debugging, factual Q&amp;amp;A)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use file attachments instead of copy-paste&lt;/strong&gt; for stability&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Closing: make Ollama truly usable in your daily workflow
&lt;/h2&gt;

&lt;p&gt;Ollama makes local LLMs accessible—and OllaMan makes them practical:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster model switching with capability detection&lt;/li&gt;
&lt;li&gt;Cleaner multi-agent / multi-session organization&lt;/li&gt;
&lt;li&gt;Attachments and Thinking Mode that actually fit daily use&lt;/li&gt;
&lt;li&gt;Visible performance metrics you can measure and share&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're looking for a better Ollama chat client, OllaMan is worth a try.&lt;/p&gt;

&lt;p&gt;OllaMan: &lt;a href="https://ollaman.com/" rel="noopener noreferrer"&gt;https://ollaman.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ollama</category>
      <category>llm</category>
      <category>ai</category>
    </item>
    <item>
      <title>OllaMan: A friendlier ollama model management interface</title>
      <dc:creator>baboon</dc:creator>
      <pubDate>Mon, 24 Nov 2025 07:53:24 +0000</pubDate>
      <link>https://dev.to/baboon/ollaman-a-friendlier-ollama-model-management-interface-1215</link>
      <guid>https://dev.to/baboon/ollaman-a-friendlier-ollama-model-management-interface-1215</guid>
      <description>&lt;p&gt;OllaMan is a visual management interface for Ollama, with the following main features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manage models on multiple remote or local Ollama servers simultaneously, with support for Basic Auth security authentication.&lt;/li&gt;
&lt;li&gt;Built-in model marketplace for one-click online model installation, saying goodbye to command-line operations.&lt;/li&gt;
&lt;li&gt;View currently running models and unload them with a single click to free up memory.&lt;/li&gt;
&lt;li&gt;Chat functionality to test model performance.&lt;/li&gt;
&lt;li&gt;Cross-platform support: MacOS, Windows, Linux&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Interface:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flinux.do%2Fuploads%2Fdefault%2Foriginal%2F4X%2F5%2F8%2F9%2F5899b0c442a275b7b119e457d97fc3434406ff82.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flinux.do%2Fuploads%2Fdefault%2Foriginal%2F4X%2F5%2F8%2F9%2F5899b0c442a275b7b119e457d97fc3434406ff82.jpeg" alt="1Capture_2025-11-24_15.23.19" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flinux.do%2Fuploads%2Fdefault%2Foriginal%2F4X%2Ff%2F6%2F2%2Ff6288313faff3ecced80021c54d81eae9afad791.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flinux.do%2Fuploads%2Fdefault%2Foriginal%2F4X%2Ff%2F6%2F2%2Ff6288313faff3ecced80021c54d81eae9afad791.jpeg" alt="1Capture_2025-11-24_15.23.57" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flinux.do%2Fuploads%2Fdefault%2Foriginal%2F4X%2Ff%2F7%2F0%2Ff70fad3b5390f467f28ff7088254fa959ef9ec61.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flinux.do%2Fuploads%2Fdefault%2Foriginal%2F4X%2Ff%2F7%2F0%2Ff70fad3b5390f467f28ff7088254fa959ef9ec61.jpeg" alt="1Capture_2025-11-24_15.24.05" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flinux.do%2Fuploads%2Fdefault%2Foriginal%2F4X%2F0%2Ff%2Fc%2F0fca4b771be9f24e35921cefde51c685f5e502c8.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flinux.do%2Fuploads%2Fdefault%2Foriginal%2F4X%2F0%2Ff%2Fc%2F0fca4b771be9f24e35921cefde51c685f5e502c8.jpeg" alt="1Capture_2025-11-24_15.24.38" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flinux.do%2Fuploads%2Fdefault%2Foriginal%2F4X%2F1%2F2%2Fe%2F12e2d22c7ba72b4ecf0228aa66332826640e7007.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flinux.do%2Fuploads%2Fdefault%2Foriginal%2F4X%2F1%2F2%2Fe%2F12e2d22c7ba72b4ecf0228aa66332826640e7007.jpeg" alt="1Capture_2025-11-24_15.26.08" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;OllaMan Download Link: &lt;a href="https://ollaman.com/download" rel="noopener noreferrer"&gt;https://ollaman.com/download&lt;/a&gt;&lt;/p&gt;

</description>
      <category>llm</category>
      <category>chatgpt</category>
      <category>ai</category>
    </item>
    <item>
      <title>DeepSeek-OCR: The New 'Black Tech' in AI, How It's Changing Our Interaction with AI Models?</title>
      <dc:creator>baboon</dc:creator>
      <pubDate>Fri, 24 Oct 2025 03:14:02 +0000</pubDate>
      <link>https://dev.to/baboon/deepseek-ocr-the-new-black-tech-in-ai-how-its-changing-our-interaction-with-ai-models-15mh</link>
      <guid>https://dev.to/baboon/deepseek-ocr-the-new-black-tech-in-ai-how-its-changing-our-interaction-with-ai-models-15mh</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq6j1v5pt6trvmycfiv0r.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq6j1v5pt6trvmycfiv0r.jpg" alt="image" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In today's era of rapid artificial intelligence development, Large Language Models (LLMs) are reshaping our interaction with the digital world through their astonishing understanding and generation capabilities. However, a long-standing challenge has been how to efficiently and economically handle ultra-long text contexts. Traditional text tokenization methods face exponentially increasing computational costs when dealing with massive amounts of information, effectively putting "memory shackles" on LLMs.&lt;/p&gt;

&lt;p&gt;This changed on October 20, 2025, when DeepSeek AI released DeepSeek-OCR. With its unique "Contexts Optical Compression" technology, this model brings a revolutionary solution to this problem. It is not just an OCR tool, but a new paradigm for AI interaction, heralding a profound transformation in how we collaborate with AI models.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. "Seeing" is More Efficient Than "Reading": The Magic of Contexts Optical Compression
&lt;/h2&gt;

&lt;p&gt;The core philosophy of DeepSeek-OCR is to process textual information as visual content. Imagine, instead of having an LLM "read" a lengthy document word by word, you let it "see" a "photograph" of the document. Based on this intuition, DeepSeek-OCR renders long text content into images and then uses a specially designed visual encoder to compress these images into a very small number of "visual tokens."&lt;/p&gt;

&lt;p&gt;This "seeing" approach brings astonishing efficiency gains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Extreme Compression Ratio:&lt;/strong&gt; In the Fox benchmark test, DeepSeek-OCR can maintain over 96% OCR decoding accuracy at a 10x text compression ratio (i.e., 10 text tokens compressed into 1 visual token). Even at a high compression ratio of 20x, it can still maintain a usable accuracy of about 60%. This means that information that originally required thousands or even tens of thousands of text tokens can now be carried by just a few dozen visual tokens.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Breaking Through Long Context Limitations:&lt;/strong&gt; For an LLM, context length is key to its understanding and reasoning abilities. By converting long text into a compact visual representation, DeepSeek-OCR greatly expands the LLM's "field of vision" for processing information, enabling it to handle longer documents and more complex conversation histories at a lower computational cost.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh4czfdtoji4oqmkpuk7m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh4czfdtoji4oqmkpuk7m.png" alt="image" width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Exquisite Architecture: The Synergy of DeepEncoder and MoE Decoder
&lt;/h2&gt;

&lt;p&gt;The powerful capabilities of DeepSeek-OCR stem from its sophisticated architectural design, primarily composed of the DeepEncoder and the DeepSeek3B-MoE-A570M decoder.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;DeepEncoder: The "Compression Master" of Visual Information&lt;/strong&gt;
The DeepEncoder is a visual encoder with about 380M parameters. It innovatively combines window attention (based on SAM-base) and global attention (based on CLIP-large), cleverly connected by a 16x convolutional compressor. This design maintains low activation memory and very few visual tokens even with high-resolution inputs. It also supports multiple resolution modes, from Tiny (64 visual tokens) to Gundam mode (dynamic resolution), flexibly adapting to the complexity and compression needs of various documents.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;MoE Decoder: The Efficient "Text Restorer"&lt;/strong&gt;
The decoder uses the DeepSeek3B-MoE architecture, activating only 6 out of 64 routing experts and 2 shared experts during inference, with an activated parameter count of about 570M. This Mixture-of-Experts (MoE) design allows the model to possess the expressive power of a 3B model while enjoying the inference efficiency of a 500M model, achieving a perfect balance between performance and cost.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Beyond Traditional OCR: The Future of Multimodal Understanding
&lt;/h2&gt;

&lt;p&gt;The value of DeepSeek-OCR extends far beyond simple text recognition. It demonstrates powerful multimodal understanding capabilities, able to process a variety of complex documents and visual information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Document Structuring:&lt;/strong&gt; Converts documents into structured Markdown format, perfectly preserving layout, tables, and formatting.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Multilingual Support:&lt;/strong&gt; Built-in support for OCR in nearly 100 languages, particularly adept at handling mixed Chinese and English documents, breaking down language barriers.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Intelligent Parsing:&lt;/strong&gt; Capable of extracting data and structural information from charts, diagrams, chemical formulas (converted to SMILES format), and even simple geometric shapes.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;General Visual Understanding:&lt;/strong&gt; Possesses general visual understanding capabilities such as image description, object detection, and grounding, making it a more comprehensive visual AI assistant.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Large-Scale Productivity:&lt;/strong&gt; A single A100-GPU can process over 200,000 pages of documents per day. Combined with the vLLM framework, the concurrent PDF processing speed can reach about 2500 tokens/s, providing unprecedented large-scale data production capabilities for LLM/VLM pre-training.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Changing How We Interact with AI Models
&lt;/h2&gt;

&lt;p&gt;The emergence of DeepSeek-OCR is not just a technological breakthrough; it profoundly changes the way we interact with AI models:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;More Natural Input:&lt;/strong&gt; In the future, we may no longer need to convert all information into plain text for LLMs. By directly "showing" images of documents, charts, or even handwritten notes, the AI can efficiently understand their content and context.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;The Possibility of Infinite Context:&lt;/strong&gt; Through optical compression, LLMs are expected to break through the limitations of current context windows, achieving a true "infinite context" to better understand complex, long-term conversations and tasks.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Smarter Document Processing:&lt;/strong&gt; From academic research to business reports, DeepSeek-OCR can transform unstructured visual information into structured, editable text, greatly enhancing the automation and intelligence of document processing.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;A New Memory Mechanism:&lt;/strong&gt; This visual compression method even offers new ideas for LLMs to simulate the human memory's "forgetting mechanism." By gradually reducing the resolution of older images to simulate memory decay, it could achieve more efficient memory management.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Embracing the Golden Age of Local AI: Starting Now
&lt;/h2&gt;

&lt;p&gt;The open-sourcing of DeepSeek-OCR shows us an exciting future for local AI models. Cutting-edge models with complex architectures like this typically take time for the community to perfectly integrate into one-click platforms like Ollama.&lt;/p&gt;

&lt;p&gt;This makes us wonder: while we wait for these advanced models to become more "user-friendly," how can we maximize the local AI capabilities we already have? With models like Llama 3, Mistral, and Phi-3 flourishing on Ollama, the proliferation of models brings a new "sweet trouble": how to frequently pull, switch, and manage them in the command line? How to save and review conversations with different models?&lt;/p&gt;

&lt;p&gt;It is precisely this need that has led to the emergence of excellent graphical management tools in the community, dedicated to elevating the Ollama experience from the command line to a whole new level. Among them, desktop applications like &lt;a href="https://ollaman.com/" rel="noopener noreferrer"&gt;OllaMan&lt;/a&gt; provide an excellent example. With its elegant and intuitive interface, it makes downloading, managing, and conversing with models easier than ever, and provides a comprehensive chat history feature.&lt;/p&gt;

&lt;p&gt;By refining our local AI workflow with such tools, we not only significantly boost our current productivity but also best prepare ourselves for the arrival of future models like DeepSeek-OCR. When that day comes, we will be in the most composed position to embrace the next wave of AI at the earliest opportunity.&lt;/p&gt;

&lt;p&gt;Related Materials:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ollaman.com/" rel="noopener noreferrer"&gt;https://ollaman.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://huggingface.co/deepseek-ai/DeepSeek-OCR" rel="noopener noreferrer"&gt;https://huggingface.co/deepseek-ai/DeepSeek-OCR&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>deepseek</category>
      <category>ai</category>
      <category>llm</category>
      <category>openai</category>
    </item>
    <item>
      <title>Securely Exposing Ollama Service to the Public Internet，Complete Deployment and Remote Management Guide</title>
      <dc:creator>baboon</dc:creator>
      <pubDate>Mon, 18 Aug 2025 08:43:28 +0000</pubDate>
      <link>https://dev.to/baboon/securely-exposing-ollama-service-to-the-public-internetcomplete-deployment-and-remote-management-59nn</link>
      <guid>https://dev.to/baboon/securely-exposing-ollama-service-to-the-public-internetcomplete-deployment-and-remote-management-59nn</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpc5vqkpk3q92ih86bj64.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpc5vqkpk3q92ih86bj64.png" alt="image" width="800" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;With the proliferation of large language models, more and more developers and teams are beginning to deploy Ollama services locally. However, when there's a need to share model resources across different devices or provide unified AI services for teams, securely exposing Ollama to the public internet becomes a practical requirement.&lt;/p&gt;

&lt;p&gt;This article will provide a detailed guide on how to use Nginx reverse proxy and Basic Auth authentication to securely expose Ollama services to the internet, and manage them through client tools that support remote authentication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why We Need to Securely Expose Ollama Services
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Use Cases
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Remote Work&lt;/strong&gt;: Accessing models on high-performance servers in the office from home&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team Collaboration&lt;/strong&gt;: Providing a unified model service entry point for team members&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-device Synchronization&lt;/strong&gt;: Sharing the same models and conversation history across different devices&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource Centralization&lt;/strong&gt;: Centralizing computing resources on high-performance servers&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Security Challenges
&lt;/h3&gt;

&lt;p&gt;Directly exposing Ollama's default port (11434) poses the following risks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unauthorized access and model abuse&lt;/li&gt;
&lt;li&gt;Malicious consumption of server resources&lt;/li&gt;
&lt;li&gt;Sensitive data leakage&lt;/li&gt;
&lt;li&gt;DDoS attack risks&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  System Architecture Design
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Internet → Nginx (SSL + Basic Auth) → Ollama Service (localhost:11434)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We will build a secure access chain through the following components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Nginx&lt;/strong&gt;: Reverse proxy and SSL termination&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Basic Auth&lt;/strong&gt;: HTTP basic authentication&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSL Certificate&lt;/strong&gt;: Encrypted transmission&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Firewall&lt;/strong&gt;: Network layer security&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Environment Preparation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Server Requirements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ubuntu 20.04+ / CentOS 8+ or other mainstream Linux distributions&lt;/li&gt;
&lt;li&gt;At least 8GB RAM (16GB+ recommended)&lt;/li&gt;
&lt;li&gt;Public IP address&lt;/li&gt;
&lt;li&gt;Domain name (recommended for easier SSL certificate application)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Software Dependencies
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Ubuntu/Debian&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;nginx apache2-utils certbot python3-certbot-nginx

&lt;span class="c"&gt;# CentOS/RHEL&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;yum &lt;span class="nb"&gt;install &lt;/span&gt;nginx httpd-tools certbot python3-certbot-nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 1: Ollama Service Configuration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 Install Ollama
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Download and install Ollama&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://ollama.com/install.sh | sh

&lt;span class="c"&gt;# Start the service&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start ollama
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;ollama
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  1.2 Configure Ollama Service
&lt;/h3&gt;

&lt;p&gt;By default, Ollama only listens on localhost. We need to ensure it's running correctly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check service status&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status ollama

&lt;span class="c"&gt;# Test local connection&lt;/span&gt;
curl http://localhost:11434/api/tags
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  1.3 Download Base Models
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Download some commonly used models&lt;/span&gt;
ollama pull llama2:7b
ollama pull mistral:7b
ollama pull codellama:7b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Nginx Reverse Proxy Configuration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Create Nginx Configuration File
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/nginx/sites-available/ollama
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Basic configuration content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;your-domain.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;# Replace with your domain&lt;/span&gt;

    &lt;span class="c1"&gt;# Redirect to HTTPS&lt;/span&gt;
    &lt;span class="kn"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;301&lt;/span&gt; &lt;span class="s"&gt;https://&lt;/span&gt;&lt;span class="nv"&gt;$server_name$request_uri&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt; &lt;span class="s"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;your-domain.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;# Replace with your domain&lt;/span&gt;

    &lt;span class="c1"&gt;# SSL certificate configuration (to be configured in subsequent steps)&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_certificate&lt;/span&gt; &lt;span class="n"&gt;/etc/letsencrypt/live/your-domain.com/fullchain.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_certificate_key&lt;/span&gt; &lt;span class="n"&gt;/etc/letsencrypt/live/your-domain.com/privkey.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;# SSL security configuration&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_protocols&lt;/span&gt; &lt;span class="s"&gt;TLSv1.2&lt;/span&gt; &lt;span class="s"&gt;TLSv1.3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_ciphers&lt;/span&gt; &lt;span class="s"&gt;ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_prefer_server_ciphers&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_session_cache&lt;/span&gt; &lt;span class="s"&gt;shared:SSL:10m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_session_timeout&lt;/span&gt; &lt;span class="mi"&gt;10m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;# Basic authentication&lt;/span&gt;
    &lt;span class="kn"&gt;auth_basic&lt;/span&gt; &lt;span class="s"&gt;"Ollama&lt;/span&gt; &lt;span class="s"&gt;Service"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;auth_basic_user_file&lt;/span&gt; &lt;span class="n"&gt;/etc/nginx/.htpasswd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;# Proxy configuration&lt;/span&gt;
    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://localhost:11434&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Host&lt;/span&gt; &lt;span class="nv"&gt;$host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Real-IP&lt;/span&gt; &lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-For&lt;/span&gt; &lt;span class="nv"&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;X-Forwarded-Proto&lt;/span&gt; &lt;span class="nv"&gt;$scheme&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="c1"&gt;# Support WebSocket and Server-Sent Events&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Upgrade&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Connection&lt;/span&gt; &lt;span class="s"&gt;"upgrade"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="c1"&gt;# Timeout settings&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_connect_timeout&lt;/span&gt; &lt;span class="s"&gt;60s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_send_timeout&lt;/span&gt; &lt;span class="s"&gt;300s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_read_timeout&lt;/span&gt; &lt;span class="s"&gt;300s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="c1"&gt;# Buffer settings (handling large model responses)&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_buffering&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;proxy_request_buffering&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;# Health check endpoint (optional)&lt;/span&gt;
    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/health&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;access_log&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;auth_basic&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt; &lt;span class="s"&gt;"healthy&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="s"&gt;n"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Content-Type&lt;/span&gt; &lt;span class="nc"&gt;text/plain&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;# Security headers&lt;/span&gt;
    &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;X-Frame-Options&lt;/span&gt; &lt;span class="s"&gt;DENY&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;X-Content-Type-Options&lt;/span&gt; &lt;span class="s"&gt;nosniff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;X-XSS-Protection&lt;/span&gt; &lt;span class="s"&gt;"1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="kn"&gt;mode=block"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Strict-Transport-Security&lt;/span&gt; &lt;span class="s"&gt;"max-age=31536000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="kn"&gt;includeSubDomains"&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2.2 Create User Authentication File
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create authentication user (replace username with actual username)&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;htpasswd &lt;span class="nt"&gt;-c&lt;/span&gt; /etc/nginx/.htpasswd username

&lt;span class="c"&gt;# Add more users (remove -c parameter)&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;htpasswd /etc/nginx/.htpasswd another_user
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2.3 Enable Configuration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create symbolic link to enable site&lt;/span&gt;
&lt;span class="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; /etc/nginx/sites-available/ollama /etc/nginx/sites-enabled/

&lt;span class="c"&gt;# Test configuration&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;nginx &lt;span class="nt"&gt;-t&lt;/span&gt;

&lt;span class="c"&gt;# Reload configuration&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl reload nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3: SSL Certificate Configuration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 Apply for Let's Encrypt Certificate
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Apply for certificate for domain&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;certbot &lt;span class="nt"&gt;--nginx&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; your-domain.com

&lt;span class="c"&gt;# Auto-renewal&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;crontab &lt;span class="nt"&gt;-e&lt;/span&gt;
&lt;span class="c"&gt;# Add the following line&lt;/span&gt;
0 12 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; /usr/bin/certbot renew &lt;span class="nt"&gt;--quiet&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.2 Verify SSL Configuration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Test SSL certificate&lt;/span&gt;
openssl s_client &lt;span class="nt"&gt;-connect&lt;/span&gt; your-domain.com:443 &lt;span class="nt"&gt;-servername&lt;/span&gt; your-domain.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Firewall Configuration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 Configure UFW (Ubuntu)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Enable firewall&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw &lt;span class="nb"&gt;enable&lt;/span&gt;

&lt;span class="c"&gt;# Allow necessary ports&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow ssh
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow 80/tcp
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow 443/tcp

&lt;span class="c"&gt;# Deny direct access to Ollama port&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw deny 11434

&lt;span class="c"&gt;# Check status&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.2 Configure fail2ban (Optional but Recommended)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install fail2ban&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;fail2ban

&lt;span class="c"&gt;# Create Nginx protection configuration&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/fail2ban/jail.local
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configuration content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="nn"&gt;[nginx-auth]&lt;/span&gt;
&lt;span class="py"&gt;enabled&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;true&lt;/span&gt;
&lt;span class="py"&gt;filter&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;nginx-auth&lt;/span&gt;
&lt;span class="py"&gt;logpath&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;/var/log/nginx/error.log&lt;/span&gt;
&lt;span class="py"&gt;maxretry&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;3&lt;/span&gt;
&lt;span class="py"&gt;bantime&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;3600&lt;/span&gt;
&lt;span class="py"&gt;findtime&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;600&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 5: Client Connection Configuration
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd8b1mpgzqbwiugf3stjm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd8b1mpgzqbwiugf3stjm.png" alt="image" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5.1 Choose Clients That Support Authentication
&lt;/h3&gt;

&lt;p&gt;Since the standard Ollama CLI client doesn't support Basic Auth, we need to use client tools that support HTTP basic authentication.&lt;/p&gt;

&lt;p&gt;Currently in the market, &lt;a href="https://ollaman.com/" rel="noopener noreferrer"&gt;OllaMan&lt;/a&gt; is one of the few graphical management tools that supports Basic Auth remote connections and provides complete multi-server management functionality.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 Client Connection Steps
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi0uf9rcpgc0udsucraji.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi0uf9rcpgc0udsucraji.png" alt="image" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using OllaMan as an example, the connection steps are as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Download and Install Client&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Visit [ollaman.com](https://ollaman.com/) to download the installation package for your platform
- Supports macOS, Windows, and Linux
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Add Remote Server&lt;/strong&gt; &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8o7vrh3eees7q51ycj1x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8o7vrh3eees7q51ycj1x.png" alt="image" width="800" height="509"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server Name: My Remote Server
Server URL: https://your-domain.com
Username: your_username
Password: your_password
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Test Connection&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- The application will automatically test server connectivity
- Display response latency and connection status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Manage Remote Models&lt;/strong&gt; &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feeag6ifjoa7qxdo8bs14.png" alt="image" width="800" height="509"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- View models installed on the server
- Download new models remotely
- Monitor server resource usage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  5.3 Test Connection Using curl
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Test basic connection&lt;/span&gt;
curl &lt;span class="nt"&gt;-u&lt;/span&gt; username:password https://your-domain.com/api/tags

&lt;span class="c"&gt;# Test model conversation&lt;/span&gt;
curl &lt;span class="nt"&gt;-u&lt;/span&gt; username:password &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://your-domain.com/api/generate &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "llama2:7b",
    "prompt": "Hello, how are you?",
    "stream": false
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Security Best Practices
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6.1 Strengthen Authentication
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Use strong passwords&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;htpasswd &lt;span class="nt"&gt;-B&lt;/span&gt; /etc/nginx/.htpasswd username

&lt;span class="c"&gt;# Regularly change passwords&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;htpasswd &lt;span class="nt"&gt;-D&lt;/span&gt; /etc/nginx/.htpasswd old_user
&lt;span class="nb"&gt;sudo &lt;/span&gt;htpasswd /etc/nginx/.htpasswd new_user
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.2 Monitoring and Logging
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Monitor access logs&lt;/span&gt;
&lt;span class="nb"&gt;sudo tail&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /var/log/nginx/access.log

&lt;span class="c"&gt;# Monitor error logs&lt;/span&gt;
&lt;span class="nb"&gt;sudo tail&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /var/log/nginx/error.log

&lt;span class="c"&gt;# View Ollama logs&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; ollama &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.3 Resource Limiting
&lt;/h3&gt;

&lt;p&gt;Add rate limiting in Nginx configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Add in http block&lt;/span&gt;
&lt;span class="k"&gt;limit_req_zone&lt;/span&gt; &lt;span class="nv"&gt;$binary_remote_addr&lt;/span&gt; &lt;span class="s"&gt;zone=ollama:10m&lt;/span&gt; &lt;span class="s"&gt;rate=10r/m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;# Add in server block&lt;/span&gt;
&lt;span class="k"&gt;limit_req&lt;/span&gt; &lt;span class="s"&gt;zone=ollama&lt;/span&gt; &lt;span class="s"&gt;burst=20&lt;/span&gt; &lt;span class="s"&gt;nodelay&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.4 IP Whitelist (Optional)
&lt;/h3&gt;

&lt;p&gt;If you only need specific IPs to access:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;allow&lt;/span&gt; &lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="s"&gt;.1.0/24&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;# Allow internal network&lt;/span&gt;
    &lt;span class="kn"&gt;allow&lt;/span&gt; &lt;span class="mf"&gt;203.0&lt;/span&gt;&lt;span class="s"&gt;.113.0/24&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;# Allow office network&lt;/span&gt;
    &lt;span class="kn"&gt;deny&lt;/span&gt; &lt;span class="s"&gt;all&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;              &lt;span class="c1"&gt;# Deny all other IPs&lt;/span&gt;

    &lt;span class="c1"&gt;# ... other configurations&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Performance Optimization
&lt;/h2&gt;

&lt;h3&gt;
  
  
  7.1 Nginx Optimization
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Add in http block&lt;/span&gt;
&lt;span class="k"&gt;client_max_body_size&lt;/span&gt; &lt;span class="mi"&gt;100M&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;client_body_buffer_size&lt;/span&gt; &lt;span class="mi"&gt;1M&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;client_body_timeout&lt;/span&gt; &lt;span class="s"&gt;60s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;# Enable gzip compression&lt;/span&gt;
&lt;span class="k"&gt;gzip&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;gzip_types&lt;/span&gt; &lt;span class="nc"&gt;text/plain&lt;/span&gt; &lt;span class="nc"&gt;application/json&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;gzip_min_length&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7.2 System Optimization
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Increase file descriptor limits&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"* soft nofile 65536"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/security/limits.conf
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"* hard nofile 65536"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/security/limits.conf

&lt;span class="c"&gt;# Optimize network parameters&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"net.core.somaxconn = 65536"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/sysctl.conf
&lt;span class="nb"&gt;sudo &lt;/span&gt;sysctl &lt;span class="nt"&gt;-p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  8.1 Common Issues
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Issue 1&lt;/strong&gt;: 502 Bad Gateway&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check Ollama service status&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status ollama

&lt;span class="c"&gt;# Check port listening&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;netstat &lt;span class="nt"&gt;-tlnp&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;11434
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Issue 2&lt;/strong&gt;: Authentication Failure&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Verify user password file&lt;/span&gt;
&lt;span class="nb"&gt;sudo cat&lt;/span&gt; /etc/nginx/.htpasswd

&lt;span class="c"&gt;# Regenerate password&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;htpasswd &lt;span class="nt"&gt;-D&lt;/span&gt; /etc/nginx/.htpasswd username
&lt;span class="nb"&gt;sudo &lt;/span&gt;htpasswd /etc/nginx/.htpasswd username
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Issue 3&lt;/strong&gt;: SSL Certificate Issues&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check certificate expiration&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;certbot certificates

&lt;span class="c"&gt;# Manual renewal&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;certbot renew
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  8.2 Debugging Tips
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Enable Nginx debug logging&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/nginx/nginx.conf
&lt;span class="c"&gt;# Add in http block: error_log /var/log/nginx/debug.log debug;&lt;/span&gt;

&lt;span class="c"&gt;# View detailed error information&lt;/span&gt;
&lt;span class="nb"&gt;sudo tail&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /var/log/nginx/debug.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Maintenance and Upgrades
&lt;/h2&gt;

&lt;h3&gt;
  
  
  9.1 Regular Maintenance Tasks
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="c"&gt;# Create maintenance script /opt/ollama-maintenance.sh&lt;/span&gt;

&lt;span class="c"&gt;# Update system&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;

&lt;span class="c"&gt;# Check service status&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status nginx ollama

&lt;span class="c"&gt;# Clean logs&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;find /var/log/nginx &lt;span class="nt"&gt;-name&lt;/span&gt; &lt;span class="s2"&gt;"*.log"&lt;/span&gt; &lt;span class="nt"&gt;-mtime&lt;/span&gt; +30 &lt;span class="nt"&gt;-delete&lt;/span&gt;

&lt;span class="c"&gt;# Check disk space&lt;/span&gt;
&lt;span class="nb"&gt;df&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt;

&lt;span class="c"&gt;# Backup configuration&lt;/span&gt;
&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-czf&lt;/span&gt; /backup/nginx-config-&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%Y%m%d&lt;span class="si"&gt;)&lt;/span&gt;.tar.gz /etc/nginx/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  9.2 Automated Monitoring
&lt;/h3&gt;

&lt;p&gt;Create periodic checks using systemd timer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create service file&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/systemd/system/ollama-health-check.service

&lt;span class="o"&gt;[&lt;/span&gt;Unit]
&lt;span class="nv"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Ollama Health Check
&lt;span class="nv"&gt;After&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;network.target

&lt;span class="o"&gt;[&lt;/span&gt;Service]
&lt;span class="nv"&gt;Type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;oneshot
&lt;span class="nv"&gt;ExecStart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/opt/ollama-health-check.sh

&lt;span class="c"&gt;# Create timer&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/systemd/system/ollama-health-check.timer

&lt;span class="o"&gt;[&lt;/span&gt;Unit]
&lt;span class="nv"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Run Ollama Health Check every 5 minutes
&lt;span class="nv"&gt;Requires&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ollama-health-check.service

&lt;span class="o"&gt;[&lt;/span&gt;Timer]
&lt;span class="nv"&gt;OnCalendar&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;:0/5
&lt;span class="nv"&gt;Persistent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;Install]
&lt;span class="nv"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;timers.target
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Through this guide, you have successfully built a secure and reliable Ollama remote access environment. This solution not only ensures service security but also provides good scalability and maintainability.&lt;/p&gt;

&lt;p&gt;Key takeaways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use HTTPS to encrypt all communications&lt;/li&gt;
&lt;li&gt;Implement access control through Basic Auth&lt;/li&gt;
&lt;li&gt;Properly configure firewalls and access restrictions&lt;/li&gt;
&lt;li&gt;Choose client tools that support authentication for management&lt;/li&gt;
&lt;li&gt;Establish comprehensive monitoring and maintenance mechanisms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With the rapid development of AI technology, having a secure and reliable model service deployment solution will bring great convenience to your work and learning. Whether for personal use or team collaboration, this solution can meet your needs.&lt;/p&gt;

</description>
      <category>openai</category>
      <category>llm</category>
      <category>ollama</category>
      <category>ai</category>
    </item>
    <item>
      <title>Ollama Docker Deployment Guide,Seamless Remote Management with OllaMan</title>
      <dc:creator>baboon</dc:creator>
      <pubDate>Tue, 12 Aug 2025 07:18:22 +0000</pubDate>
      <link>https://dev.to/baboon/ollama-docker-deployment-guideseamless-remote-management-with-ollaman-5b0n</link>
      <guid>https://dev.to/baboon/ollama-docker-deployment-guideseamless-remote-management-with-ollaman-5b0n</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;With the rapid development of Large Language Models (LLMs), more and more developers and researchers are looking to run these models in local environments to protect data privacy, reduce costs, and gain more flexible control. Ollama provides a minimalist framework that makes running LLMs locally accessible. However, for users who need to manage models across devices or prefer a graphical interface, the command-line interface might not be intuitive enough.&lt;/p&gt;

&lt;p&gt;This article will detail how to deploy Ollama services using Docker, enabling rapid environment setup and isolation. Building on this, we will explore how to combine the OllaMan desktop application to achieve seamless management of remote Dockerized Ollama instances, thereby creating an efficient and convenient AI model workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Docker Deployment of Ollama
&lt;/h2&gt;

&lt;p&gt;Docker is a containerization technology that packages applications and all their dependencies into independent, portable containers. Deploying Ollama with Docker offers significant advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Environment Isolation:&lt;/strong&gt; Avoids conflicts with the host system environment, ensuring stable operation of Ollama and its dependencies.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Rapid Deployment:&lt;/strong&gt; Pull and run the Ollama image with simple commands, eliminating tedious environment configurations.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;High Portability:&lt;/strong&gt; Docker containers can run on any Docker-supported operating system, enabling cross-platform deployment.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Easy Management:&lt;/strong&gt; Facilitates starting, stopping, restarting, and deleting containers, simplifying lifecycle management.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1.1 Pre-deployment Preparation
&lt;/h3&gt;

&lt;p&gt;Before starting the deployment, please ensure that Docker is installed on your system. If not yet installed, please visit the official Docker website for installation guides based on your operating system (Windows, macOS, Linux).&lt;/p&gt;

&lt;h3&gt;
  
  
  1.2 Ollama Docker Image
&lt;/h3&gt;

&lt;p&gt;Ollama officially provides a Docker image, which you can find on Docker Hub: &lt;code&gt;ollama/ollama&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdku1tfkyiwg08fqxyyuz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdku1tfkyiwg08fqxyyuz.png" alt="image" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1.3 Running the Ollama Container
&lt;/h3&gt;

&lt;p&gt;Choose the appropriate Docker run command based on your hardware configuration.&lt;/p&gt;

&lt;h4&gt;
  
  
  1.3.1 CPU-only Mode
&lt;/h4&gt;

&lt;p&gt;If you don't have a dedicated GPU or prefer to run Ollama on the CPU, use the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; ollama:/root/.ollama &lt;span class="nt"&gt;-p&lt;/span&gt; 11434:11434 &lt;span class="nt"&gt;--name&lt;/span&gt; ollama ollama/ollama
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;-d&lt;/code&gt;: Run the container in detached mode (in the background).&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;-v ollama:/root/.ollama&lt;/code&gt;: Mount the host's &lt;code&gt;ollama&lt;/code&gt; named volume to the &lt;code&gt;/root/.ollama&lt;/code&gt; directory inside the container. This is used to persist Ollama's downloaded model data, ensuring data is not lost even if the container is removed.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;-p 11434:11434&lt;/code&gt;: Map the container's internal 11434 port to the host's 11434 port. Ollama defaults to serving on port 11434.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;--name ollama&lt;/code&gt;: Assign an easy-to-identify name to the container.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;ollama/ollama&lt;/code&gt;: Specify the Docker image to use.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  1.3.2 Nvidia GPU Acceleration Mode
&lt;/h4&gt;

&lt;p&gt;If you have an Nvidia GPU and have installed the &lt;a href="https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html" rel="noopener noreferrer"&gt;NVIDIA Container Toolkit&lt;/a&gt;, you can enable GPU acceleration with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--gpus&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;all &lt;span class="nt"&gt;-v&lt;/span&gt; ollama:/root/.ollama &lt;span class="nt"&gt;-p&lt;/span&gt; 11434:11434 &lt;span class="nt"&gt;--name&lt;/span&gt; ollama ollama/ollama
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;--gpus=all&lt;/code&gt;: Allows the container to access all Nvidia GPUs on the host.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  1.3.3 AMD GPU Acceleration Mode
&lt;/h4&gt;

&lt;p&gt;For AMD GPU users, you need to use the &lt;code&gt;rocm&lt;/code&gt; tagged Ollama image and map the corresponding devices:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--device&lt;/span&gt; /dev/kfd &lt;span class="nt"&gt;--device&lt;/span&gt; /dev/dri &lt;span class="nt"&gt;-v&lt;/span&gt; ollama:/root/.ollama &lt;span class="nt"&gt;-p&lt;/span&gt; 11434:11434 &lt;span class="nt"&gt;--name&lt;/span&gt; ollama ollama/ollama:rocm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;--device /dev/kfd --device /dev/dri&lt;/code&gt;: Map the necessary device files for AMD GPUs.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;ollama/ollama:rocm&lt;/code&gt;: Use the Ollama image that supports ROCm.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1.4 Verifying the Ollama Service
&lt;/h3&gt;

&lt;p&gt;After the container starts, you can check if the Ollama service is running correctly with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker logs ollama
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you see logs indicating Ollama has started successfully, the service is deployed. You can also try accessing &lt;code&gt;http://localhost:11434&lt;/code&gt; from your host machine; if you see "Ollama is running," the deployment is successful.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Basic Ollama Model Operations
&lt;/h2&gt;

&lt;p&gt;Ollama provides a concise command-line interface for managing and running models.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.1 Pulling Models
&lt;/h3&gt;

&lt;p&gt;Pulling models from the official Ollama model library is straightforward, for example, pulling the &lt;code&gt;llama3&lt;/code&gt; model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; ollama ollama pull llama3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2.2 Running Models
&lt;/h3&gt;

&lt;p&gt;After pulling a model, you can directly run it within the container for interaction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; ollama ollama run llama3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2.3 Custom Models and Modelfile
&lt;/h3&gt;

&lt;p&gt;Ollama allows users to customize models via a &lt;code&gt;Modelfile&lt;/code&gt;, for instance, importing GGUF format models or setting custom prompts and parameters. This offers great flexibility for model personalization and fine-tuning.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Ollama Remote Access Configuration
&lt;/h2&gt;

&lt;p&gt;For OllaMan to remotely manage a Docker-deployed Ollama, the Ollama service needs to be accessible from the external network. By default, Docker container port mapping (&lt;code&gt;-p 11434:11434&lt;/code&gt;) already exposes Ollama's 11434 port to the host.&lt;/p&gt;

&lt;p&gt;If your Ollama is deployed on a remote server and you want OllaMan to connect to it from your local machine, you might need to configure the server's firewall to allow inbound connections on port 11434.&lt;/p&gt;

&lt;p&gt;Additionally, Ollama allows specifying its listening IP address by setting the &lt;code&gt;OLLAMA_HOST&lt;/code&gt; environment variable. In a Docker container, Ollama defaults to listening on &lt;code&gt;0.0.0.0&lt;/code&gt;, meaning it listens on all available network interfaces, so no extra configuration is usually needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. OllaMan: A Powerful Tool for Remote Ollama Management
&lt;/h2&gt;

&lt;p&gt;OllaMan is a desktop GUI application specifically designed for Ollama, providing an intuitive and elegant interface that greatly simplifies Ollama model management and interaction. Its "Server Management" feature is central to enabling remote management.&lt;br&gt;
You can download OllaMan by visiting &lt;a href="https://ollaman.com/download" rel="noopener noreferrer"&gt;https://ollaman.com/download&lt;/a&gt;. It supports macOS, Windows, and Linux systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.1 Key Advantages of OllaMan
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Intuitive User Interface:&lt;/strong&gt; Say goodbye to the command line; manage models easily through a graphical interface.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Model Discovery and Installation:&lt;/strong&gt; Browse the Ollama model library and install desired models with one click.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Session Management:&lt;/strong&gt; Conveniently save and manage chat histories, supporting multiple sessions.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Server Management:&lt;/strong&gt; This is crucial for remote management, allowing users to add, configure, and switch between different Ollama server instances.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd8b1mpgzqbwiugf3stjm.png" alt="image" width="800" height="480"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.2 Seamless Remote Management with OllaMan
&lt;/h3&gt;

&lt;p&gt;OllaMan's design philosophy is to simplify Ollama usage, including remote management. Once your Ollama service is deployed via Docker on a remote server and its 11434 port is exposed, OllaMan can easily connect to and manage it.&lt;/p&gt;

&lt;p&gt;Here are the typical steps for OllaMan to connect to a remote Ollama instance (specific interface may vary by OllaMan version):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Launch the OllaMan Application:&lt;/strong&gt; Start the OllaMan app on your local desktop.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Navigate to Server Management:&lt;/strong&gt; In the bottom-left corner of the OllaMan application, click the "Settings" button, then select the "Servers" option on the settings page.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Add New Server:&lt;/strong&gt; In the "Server Management" interface, you will see a list of configured servers. Click the "Add Server" button to add a new remote Ollama instance.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Configure Remote Ollama Information:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Server Name:&lt;/strong&gt; Assign an easy-to-identify name for your remote Ollama instance (e.g., "My Remote Ollama Server").&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Server URL:&lt;/strong&gt; Enter the public IP address or domain name of your remote server, ensuring it includes Ollama's port (e.g., &lt;code&gt;http://your_server_ip:11434&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Basic Authentication (Optional):&lt;/strong&gt; If your Ollama service is configured with basic authentication, you can enter the username and password here.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Test Connection:&lt;/strong&gt; OllaMan usually provides a "Test Connection" button; click it to verify if the connection to the remote Ollama service is successful.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Save and Connect:&lt;/strong&gt; After filling in the information and successfully testing the connection, click the "Add Server" button to save the configuration. OllaMan will automatically attempt to connect to the specified remote Ollama instance.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi0uf9rcpgc0udsucraji.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi0uf9rcpgc0udsucraji.png" alt="image" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Upon successful connection, OllaMan will display the list of models installed on your remote Ollama instance and allow you to perform the following operations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Model Discovery and Installation:&lt;/strong&gt; Browse the official Ollama model library directly within the OllaMan interface and remotely install models onto your Dockerized Ollama instance.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Model Management:&lt;/strong&gt; View and delete models on the remote Ollama.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Intuitive Chat:&lt;/strong&gt; Interact with models on the remote Ollama through OllaMan's chat interface, enjoying a smooth conversational experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feeag6ifjoa7qxdo8bs14.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feeag6ifjoa7qxdo8bs14.png" alt="image" width="800" height="509"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this way, OllaMan abstracts complex remote command-line operations into simple graphical interface clicks, greatly enhancing user experience and work efficiency.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Combining Ollama with Docker provides powerful flexibility and portability for local large language model deployment. The introduction of the OllaMan desktop application further transforms this technical capability into an intuitive and easy-to-use remote management experience. Whether you are an individual developer or a small team, the "Ollama Docker Deployment + OllaMan Remote Management" combination allows you to easily set up and maintain your AI model workflow, focusing on innovation and application without getting bogged down in tedious underlying configurations.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>openai</category>
      <category>chatgpt</category>
    </item>
  </channel>
</rss>
