Ollamaを外部PCから使うには?OLLAMA_HOSTとOLLAMA_ORIGINSの違い・起動方法・使い方

Ollamaが外部からつながらない原因

Ollamaを入れると、自分のPC上では普通に使えます。

ollama run llama3.2

でも、別のPCやスマホ、別ポートで動かしているWebアプリから使おうとすると、急に接続できないことがあります。

原因になりやすいのが、次の2つです。

OLLAMA_HOST
  OllamaサーバーがどのIPアドレスで待ち受けるか

OLLAMA_ORIGINS
  ブラウザからのアクセスをどのOriginまで許可するか

この2つは似ているようで、役割が違います。

結論から言うと、LAN内の別PCからOllamaへ接続したいなら、まず大事なのはOLLAMA_HOSTです。
ブラウザアプリからOllama APIを叩くなら、追加でOLLAMA_ORIGINSも関係します。

まず結論:外部接続用の起動コマンド

PowerShellで一時的に外部接続を許可して起動するなら、次のようにします。

$env:OLLAMA_HOST="0.0.0.0:11434"
ollama serve

0.0.0.0は、PCの全ネットワークインターフェースで待ち受けるという意味です。
これを設定しない場合、Ollamaは基本的に127.0.0.1:11434、つまり自分自身からの接続だけを受け付ける状態になります。

ユーザーがよく試すこの形でも、環境によっては動きます。

$env:OLLAMA_HOST="0.0.0.0"
ollama serve

ただし、ポートまで明示した方がわかりやすいので、この記事では次をおすすめします。

$env:OLLAMA_HOST="0.0.0.0:11434"
ollama serve

OLLAMA_ORIGINSも必要な場合

ブラウザで作ったWebアプリからOllamaを呼び出す場合は、CORSの関係でOLLAMA_ORIGINSが必要になることがあります。

たとえば、HTMLやJavaScriptで作った画面から、

http://192.168.1.10:11434/api/generate

のようにOllama APIを叩く場合です。

全部許可するなら、PowerShellではこう書けます。

$env:OLLAMA_ORIGINS="*"
ollama serve

ただし、これだけでは外部接続できない場合があります。
なぜなら、OLLAMA_ORIGINSはブラウザからのアクセス許可であって、Ollamaサーバーの待ち受け先を変える設定ではないからです。

外部PCからも使えて、ブラウザアプリからも叩けるようにしたいなら、両方を指定します。

$env:OLLAMA_HOST="0.0.0.0:11434"
$env:OLLAMA_ORIGINS="*"
ollama serve

1行で書くならこうです。

$env:OLLAMA_HOST="0.0.0.0:11434"; $env:OLLAMA_ORIGINS="*"; ollama serve

OLLAMA_HOSTとOLLAMA_ORIGINSの違い

かなり大事なので、もう少し整理します。

OLLAMA_HOST
  どこからOllamaサーバーに接続できるかを決める
  LAN内PCから接続したいならこれが重要

OLLAMA_ORIGINS
  ブラウザのCORSで許可するOriginを決める
  Webアプリからfetchするならこれが重要

つまり、別PCから接続したいだけなら、まず見るべきはOLLAMA_HOSTです。

逆に、同じPC内でもブラウザアプリからfetch()でOllamaを叩く場合は、OLLAMA_ORIGINSが問題になることがあります。

注意:Ollamaがすでに起動している場合

Windows版のOllamaは、アプリとしてすでに裏で起動していることがあります。

その状態で、

ollama serve

を実行すると、ポートがすでに使われていて起動できない場合があります。

その場合は、タスクバーのOllamaを終了してから起動します。

1. タスクバーのOllamaを終了する
2. PowerShellで環境変数を設定する
3. ollama serve を実行する

一時的に試すだけなら、PowerShellで次のように起動すればOKです。

$env:OLLAMA_HOST="0.0.0.0:11434"
$env:OLLAMA_ORIGINS="*"
ollama serve

Windowsで毎回設定したい場合

PowerShellの$env:で設定した環境変数は、そのPowerShellを閉じると消えます。

毎回設定したい場合は、Windowsの環境変数として登録します。

Windowsの設定
  -> 環境変数
  -> ユーザー環境変数
  -> OLLAMA_HOST を追加
  -> 値を 0.0.0.0:11434 にする

OLLAMA_ORIGINSも固定したいなら、同じように追加します。

変数名: OLLAMA_ORIGINS
値: *

ただし、*はかなり広く許可する設定です。
自分のLAN内だけで実験するなら便利ですが、公開環境や不特定多数が触れる環境ではおすすめしません。

WebアプリのOriginが決まっているなら、できれば限定した方が安全です。

http://localhost:8000,http://127.0.0.1:8000,http://192.168.1.10:8000

ファイアウォールも確認する

OLLAMA_HOSTを設定しても、Windows Defender ファイアウォールで止められることがあります。

別PCからつながらないときは、次を確認します。

Ollamaを起動しているPCのIPアドレス
Ollamaが 11434 番ポートで待ち受けているか
Windowsファイアウォールが 11434 番を許可しているか
同じLAN内にいるか
VPNやゲストWi-Fiで分離されていないか

同じPCで確認するなら、

Invoke-RestMethod http://localhost:11434/api/tags

別PCから確認するなら、Ollamaを動かしているPCのIPアドレスを使います。

Invoke-RestMethod http://192.168.1.10:11434/api/tags

ここでモデル一覧が返ってくれば、外部接続はできています。

Ollamaの基本的な使い方

ここからは、Ollama自体の使い方です。

まずモデルを取得します。

ollama pull llama3.2

モデルを実行します。

ollama run llama3.2

日本語で質問しても使えます。

>>> Minecraftサーバーの立て方を簡単に説明して

入っているモデル一覧を見るには、次のコマンドを使います。

ollama list

今メモリに読み込まれているモデルを見るには、

ollama ps

モデルを止めるには、

ollama stop llama3.2

不要なモデルを消すには、

ollama rm llama3.2

APIとして使う

OllamaはCLIだけでなく、HTTP APIとしても使えます。

標準では、APIは次のURLで動きます。

http://localhost:11434/api

PowerShellからgenerate APIを叩く例です。

$body = @{
  model = "llama3.2"
  prompt = "Ollamaの使い方を短く説明して"
} | ConvertTo-Json

Invoke-RestMethod `
  -Uri "http://localhost:11434/api/generate" `
  -Method Post `
  -Body $body `
  -ContentType "application/json"

会話形式で使うなら/api/chatを使います。

$body = @{
  model = "llama3.2"
  messages = @(
    @{
      role = "user"
      content = "WindowsでOllamaをLAN公開する方法を教えて"
    }
  )
} | ConvertTo-Json -Depth 5

Invoke-RestMethod `
  -Uri "http://localhost:11434/api/chat" `
  -Method Post `
  -Body $body `
  -ContentType "application/json"

別PCから叩くなら、localhostではなくOllamaを動かしているPCのIPアドレスに変えます。

Invoke-RestMethod `
  -Uri "http://192.168.1.10:11434/api/tags"

JavaScriptから呼び出す例

ブラウザのJavaScriptから呼び出すなら、だいたい次のような形になります。

const response = await fetch("http://192.168.1.10:11434/api/generate", {
  method: "POST",
  headers: {
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    model: "llama3.2",
    prompt: "こんにちは。短く自己紹介して。"
  })
});

const data = await response.json();
console.log(data);

このとき、ブラウザ側でCORSエラーが出るなら、OLLAMA_ORIGINSを見直します。

$env:OLLAMA_HOST="0.0.0.0:11434"
$env:OLLAMA_ORIGINS="http://localhost:8000,http://192.168.1.20:8000"
ollama serve

面倒なら実験用に*でも動きます。

$env:OLLAMA_HOST="0.0.0.0:11434"; $env:OLLAMA_ORIGINS="*"; ollama serve

ただし、公開環境で*を使うのは避けた方がいいです。

よくある詰まりどころ

Ollamaを外部から使うときに詰まりやすいポイントをまとめます。

localhostでアクセスしている

別PCからlocalhostを指定しても、それはOllamaを動かしているPCではなく、アクセスしている側のPC自身を指します。

別PCから使うときは、Ollamaを起動しているPCのIPアドレスを使います。

NG: http://localhost:11434
OK: http://192.168.1.10:11434

OLLAMA_ORIGINSだけ設定している

OLLAMA_ORIGINS="*"だけでは、Ollamaの待ち受け先は変わりません。

LAN内の別PCから接続したいなら、OLLAMA_HOSTも必要です。

$env:OLLAMA_HOST="0.0.0.0:11434"
$env:OLLAMA_ORIGINS="*"
ollama serve

すでにOllamaが起動している

Ollamaアプリが裏で起動していると、ollama serveがうまく起動しないことがあります。

その場合はタスクバーからOllamaを終了して、設定したPowerShellから起動し直します。

ファイアウォールで止まっている

Ollamaが待ち受けていても、Windowsファイアウォールが止めていると別PCからはつながりません。

11434番ポートへの接続を許可する必要があります。

まとめ

Ollamaを自分のPCだけで使うなら、普通にインストールしてollama runするだけで十分です。

でも、LAN内の別PCやブラウザアプリから使いたい場合は、設定が必要です。

大事なのはこの2つです。

外部PCから接続したい
  -> OLLAMA_HOST="0.0.0.0:11434"

ブラウザアプリからAPIを叩きたい
  -> OLLAMA_ORIGINS を設定

実験用にまとめて起動するなら、PowerShellではこれです。

$env:OLLAMA_HOST="0.0.0.0:11434"; $env:OLLAMA_ORIGINS="*"; ollama serve

ただし、*は広く許可する設定なので、公開環境では使わない方が安全です。
まずは自分のLAN内で試して、必要になったら許可するOriginを絞るのがいいと思います。

OllamaはローカルでLLMを動かせるので、うまく設定できると自作アプリや家庭内サーバーとかなり相性がいいです。
ローカルAIをAPIとして使いたいなら、OLLAMA_HOSTOLLAMA_ORIGINSの違いを理解しておくとかなり楽になります。

補足

この記事では、Ollama公式ドキュメントのFAQとAPIリファレンスを確認しながらまとめました。
公式FAQでは、Ollamaは標準で127.0.0.1:11434にバインドされ、ネットワーク上に公開するにはOLLAMA_HOSTを使うことが説明されています。
また、追加のWeb Originを許可する設定としてOLLAMA_ORIGINSが案内されています。