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_HOSTとOLLAMA_ORIGINSの違いを理解しておくとかなり楽になります。
補足
この記事では、Ollama公式ドキュメントのFAQとAPIリファレンスを確認しながらまとめました。
公式FAQでは、Ollamaは標準で127.0.0.1:11434にバインドされ、ネットワーク上に公開するにはOLLAMA_HOSTを使うことが説明されています。
また、追加のWeb Originを許可する設定としてOLLAMA_ORIGINSが案内されています。