「チームメンバーごとに専用のドキュメントセットと会話履歴を分離して管理したい」
そんな悩みを抱えるインフラエンジニアや情報システム担当者は多い。この記事では、OllamaをバックエンドにしてAnythingLLMを動かす手順を解説する。AnythingLLMはRAG・マルチワークスペース・ユーザー権限管理を標準搭載したオープンソースのUIツールで、Pythonコードを1行も書かずに社内ドキュメントQ&Aをローカル環境で実現できる。
Ubuntu 22.04/24.04でOllamaが稼働中のLinuxサーバーを前提に、DockerでAnythingLLMをインストールしてOllamaと繋ぐところから、マルチユーザー設定・RAGチューニング・よくあるトラブルの対処まで順に説明する。
この記事のポイント
・docker compose up -d だけでAnythingLLMのWeb UIとRAGが即起動する
・LinuxではDockerからOllamaへの接続にextra_hostsの明示設定が必要
・ワークスペース単位でドキュメントを隔離しユーザーごとに参照権限を割り当てられる
・チャンクサイズとTop K Resultsの調整がRAG精度向上の主要ポイント
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
OllamaとAnythingLLMを組み合わせると何が変わるか
Ollamaは推論エンジンとREST APIサーバーだが、「誰がどのドキュメントを参照しているか」「部署ごとにドキュメントを分離したい」という要件には応えられない。ここにAnythingLLMを重ねると、以下の機能がノーコードで追加される。・Webブラウザから操作できるチャットUI(Open WebUIに近いが、RAGが標準搭載)
・ワークスペース単位のドキュメント隔離(営業用・開発用・HR用など部署別に分けて管理)
・PDF・DOCX・XLSX・TXT・Markdownの直接アップロードとベクター化
・管理者・一般ユーザーの2段権限によるマルチユーザー管理
Open WebUIとの違いを一言で言えば、Open WebUIは「チャットインターフェース」でAnythingLLMは「社内ナレッジベース+チャット」だ。RAGを自前でPythonコードとして実装したい場合は別だが、すぐに使い始めたいチームにはAnythingLLMが向いている。
情報セキュリティの観点から社内データをクラウドに出せない場面でのローカルLLM活用については、社内でChatGPTが使えないときの代替手段も合わせて参考にしてほしい。
事前準備|OllamaサーバーとDockerの動作確認
1. Ollamaの動作確認
AnythingLLMを設定する前に、OllamaのAPIサーバーが正常に動作していることを確認する。$ curl http://localhost:11434 Ollama is running
$ systemctl status ollama * ollama.service - Ollama Service Loaded: loaded (/etc/systemd/system/ollama.service; enabled) Active: active (running) since Sun 2026-08-24 09:00:00 JST
$ ollama list NAME ID SIZE MODIFIED llama3.3:70b-instruct-q4_0 abc123def456 40 GB 2 hours ago # モデルがない場合は取得する $ ollama pull llama3.3:70b-instruct-q4_0
2. DockerとDocker Composeの確認
AnythingLLMはDockerイメージとして公式配布されている。以下のコマンドで動作環境を確認する。$ docker --version Docker version 27.0.3, build 7d4bcd8 $ docker compose version Docker Compose version v2.28.1
3. AnythingLLMの動作要件
・ポート 3001 の開放(`sudo ufw allow 3001/tcp` など、ファイアウォール設定に応じて対応)・ストレージ:10GB以上の空き容量(アップロードするドキュメント量に依存)
・RAM:4GB以上(OllamaのモデルはこれとはVRAMを別に使用)
AnythingLLMをDockerでLinuxサーバーにインストールする手順
1. 作業ディレクトリの準備
$ mkdir -p ~/anythingllm/storage $ cd ~/anythingllm
2. docker-compose.ymlの作成
# ~/anythingllm/docker-compose.yml services: anythingllm: image: mintplexlabs/anythingllm:latest container_name: anythingllm ports: - "3001:3001" volumes: - ./storage:/app/server/storage environment: - STORAGE_LOCATION=/app/server/storage - JWT_SECRET=change_this_to_a_random_64char_string_abcdefghijklmnopqrs - AUTH_TOKEN=change_this_to_your_admin_password extra_hosts: - "host.docker.internal:host-gateway" restart: unless-stopped
`JWT_SECRET` はセッション管理に使う秘密鍵で64文字以上のランダム文字列を設定する。`AUTH_TOKEN` はシングルユーザーモード時の管理者パスワードだ(マルチユーザーモード有効化後は無効になる)。
3. コンテナの起動と確認
$ docker compose up -d [+] Running 1/1 ✔ Container anythingllm Started $ docker compose ps NAME IMAGE STATUS anythingllm mintplexlabs/anythingllm:latest running
OllamaをAnythingLLMのLLMバックエンドとして登録する手順
1. セットアップウィザードでLLMを設定
初回アクセス時に「LLM Preference」の選択画面が表示される。リストから「Ollama」を選択して、以下を入力する。・Ollama Base URL: `http://host.docker.internal:11434`
・Model: リストから使用するモデルを選択(例: `llama3.3:70b-instruct-q4_0`)
・Token Context Window: モデルの最大コンテキスト長(Llama3.3なら131072)
「Test Connection」ボタンをクリックして「Connected to Ollama」と表示されれば接続成功だ。モデルリストが表示されない場合はBase URLの入力を確認し、末尾のスラッシュがないことをチェックする。
2. Embeddingモデルの設定
RAGを使う場合、テキストをベクター化するEmbeddingモデルも設定する。AnythingLLMには組み込みの軽量Embeddingモデルが含まれているが、日本語テキストの精度を上げたい場合はOllamaの専用モデルを使うとよい。先にホスト側でモデルを取得しておく。
$ ollama pull nomic-embed-text pulling manifest pulling ... success
EmbeddingモデルとベクトルDBを組み合わせてPythonでRAGパイプラインをゼロから実装したい場合は、OllamaをLinuxサーバーに構築する基本手順も参照してほしい。
ワークスペースを作成して社内ドキュメントをアップロードする手順
1. ワークスペースの作成
ホーム画面左サイドバー下部の「+ New Workspace」をクリックしてワークスペースを作成する。「営業部マニュアル」「開発チームWiki」「人事規程」など用途別に名前をつけると管理しやすい。ワークスペースごとにドキュメントセットが完全に独立するため、営業担当が開発用ドキュメントを誤って検索してしまうといった意図しないデータ混在が起きない。部署ごとに機密レベルが異なる文書を扱う場合に特に有効だ。
2. ドキュメントのアップロード
ワークスペース内の「Upload Document」ボタンをクリックしてファイルを追加する。対応形式はPDF・DOCX・XLSX・TXT・MD・CSVなど。複数ファイルを一括でドラッグ&ドロップできる。
アップロード後、ファイルにチェックを入れて「Move to Workspace」→「Save and Embed」の順にクリックするとチャンク分割とベクター化が始まる。ファイルサイズによって数秒~数分かかる。
3. 質問応答の動作確認
チャット入力欄に質問を入力すると、Ollamaが回答を生成し、右ペインに参照したドキュメントのチャンクが「Sources」として表示される。Sourcesに表示されるドキュメント名と該当箇所を確認することで、回答がどの根拠から来ているかを視覚的に追える。「RAGが本当に効いているかどうか」を目視で確認する習慣をつけると品質管理がしやすい。
マルチユーザーモードを有効化してユーザー権限を設定する手順
1. マルチユーザーモードの有効化
Settings > Security > Enable Multi-User Mode を開き、「Enable Multi-User Mode」をクリックする。初回は管理者アカウントの作成を求められる。入力したメールアドレスとパスワードが管理者ログイン情報になるため、必ず控えておく。
有効化後は `docker-compose.yml` の `AUTH_TOKEN` による単一パスワード認証が無効化され、ユーザーごとのログイン認証に切り替わる。
2. ユーザーの追加と権限割り当て
Settings > Users > New User からメンバーアカウントを作成する。ロールは「Administrator」と「Default」の2種類だ。Defaultユーザーは管理者が明示的に許可したワークスペースのみアクセスできる。各ワークスペースの Settings > Workspace Users でアクセスを許可するユーザーを選択することで、「このワークスペースはAさんとBさんだけ参照可能」という設定が実現できる。
RAG精度を高めるEmbeddingとチャンクサイズの調整ポイント
ドキュメントをアップロードしただけでは期待どおりの回答が得られないことがある。精度が低い場合はワークスペース単位のチャンク設定を見直す。Settings > Workspace Settings で設定できる主なパラメータ:
・Max Chunk Length(デフォルト1000字前後): 技術仕様書のような情報密度が高い文書は500~700に下げると検索ヒット精度が上がりやすい
・Top K Results(デフォルト4): 参照するチャンク数を増やすと広い文脈を取得できるがレスポンスが遅くなりモデルのコンテキスト長を消費する
・Similarity Threshold: 類似度スコアの足切り値。デフォルト付近でRAGが効かない場合は下げてみると改善することが多い
モデルごとの日本語対応能力には差があるため、RAGの回答品質が低い場合はモデルの切り替えも検討する。Llama3.3・Mistral・Gemma 3の特性比較はローカルLLMのモデルを比較する方法にまとめている。
運用現場で効果があったアプローチとして、PDFをそのままアップロードするよりテキストファイルに変換してから取り込む方法がある。PDFのOCR品質に依存しないためベクター化の品質が安定しやすく、不要な図表キャプションや目次ページを除去してから取り込むとチャンクの粒度が改善する。Markdownに変換して見出し構造を活かしたチャンク分割をさせるのも有効だ。
よくあるトラブルと対処法
1. コンテナからOllamaに接続できない(ConnectionError)
最も多いのが、OllamaのBase URLに `http://localhost:11434` を入力してしまうケースだ。コンテナ内の `localhost` はコンテナ自身を指すため、ホストのOllamaには到達しない。`docker-compose.yml` に `extra_hosts: - "host.docker.internal:host-gateway"` が設定されていれば `http://host.docker.internal:11434` で到達できる。
設定済みでもつながらない場合は、Ollamaのリスニングアドレスが `127.0.0.1` に限定されている可能性がある。systemdのoverride.confで `OLLAMA_HOST` を設定してサービスを再起動する。
# override.confを編集して OLLAMA_HOST を追加 $ sudo systemctl edit ollama # エディタが開くので以下を追記して保存 [Service] Environment="OLLAMA_HOST=0.0.0.0:11434" $ sudo systemctl restart ollama $ curl http://localhost:11434 # ホスト側からの確認 Ollama is running
2. ドキュメントのEmbeddingが途中で止まる
大きなPDFファイル(50ページ超)のEmbeddingは数分かかることがある。ブラウザタブを閉じるとジョブが中断することがあるため、処理中はタブを開いたまま待機する。Dockerのログで進捗を確認できる。$ docker compose logs -f anythingllm # 「Embedded N chunks from document.pdf」が出続けていれば処理中 # エラーが表示されていれば対象ファイルの形式や文字コードを確認する
3. マルチユーザー有効化後にログインできない
`AUTH_TOKEN` を設定した状態でマルチユーザーモードを有効化すると、ログイン画面に切り替わっても既存の `AUTH_TOKEN` 文字列では認証できない。認証方式がトークン単体からアカウントログインに変わるためだ。マルチユーザー有効化時に作成した管理者アカウントのメールアドレスとパスワードで改めてログインする。パスワードを紛失した場合は `./storage/anythingllm.db` (SQLiteデータベース)を直接操作して管理者パスワードをリセットする方法があるが、データベースの破損リスクがあるため、パスワードは必ずドキュメントに記録しておくこと。
まとめ
OllamaとAnythingLLMを組み合わせることで、Pythonコードを書かずに社内ドキュメントQ&A・マルチワークスペース・ユーザー権限管理をローカル環境で実現できる。| 項目 | コマンド・設定値 | ポイント |
|---|---|---|
| AnythingLLM起動 | docker compose up -d | storage/ディレクトリをボリュームマウントして永続化 |
| Ollama接続URL | http://host.docker.internal:11434 | Linuxではextra_hostsの設定が必須 |
| Embeddingモデル取得 | ollama pull nomic-embed-text | 日本語文書はnomic-embed-textが安定動作 |
| OllamaホストIPの公開 | sudo systemctl edit ollama | OLLAMA_HOST=0.0.0.0:11434 を追記して再起動 |
| マルチユーザー有効化 | Settings > Security > Enable Multi-User Mode | 有効化時に管理者アカウントを作成・記録する |
| Embeddingログ確認 | docker compose logs -f anythingllm | 処理進捗とエラーをリアルタイムで確認できる |
AnythingLLMとOllamaの構築を2日間で体験する
AnythingLLMのセットアップからRAGチューニング・ユーザー権限管理まで、実機GPU環境で手を動かしながら習得したい方向けに、「ローカルAIマスターセミナー」を開催しています。
少人数(最大8名)ZOOMハンズオン形式で実施しています。
・Ubuntu ServerでローカルLLMを構築する方法|Ollamaで機密データを外に出さず業務AIを動かす完全ガイド
・社内でChatGPTが使えないときの代替手段|機密データを守るローカルLLMという選択肢
・ローカルLLMのモデルを比較する方法|Llama3.3・Mistral・Gemma・Phi-4をUbuntuで使い分けるポイント
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:Ollamaのモデルをベンチマークする方法|応答速度・トークン/秒・VRAM使用量を実測してLinuxサーバーの最適構成を判断する手順
- この記事の属するカテゴリ:ローカルLLMへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます