Ubuntu ServerでローカルLLMを構築する方法|Ollamaで機密データを外に出さず業務AIを動かす完全ガイド

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)ローカルLLM > Ubuntu ServerでローカルLLMを構築する方法|Ollamaで機密データを外に出さず業務AIを動かす完全ガイド
「業務でAIを使いたいが、社外秘のコードや顧客データをChatGPTに貼り付けるわけにはいかない」
「ローカルLLMという選択肢は知っているが、Linuxサーバーでどう動かすのか具体像が見えない」

そんな悩みを抱えるインフラエンジニア・プログラマーは多いはずです。この記事では、Ubuntu ServerにOllamaを導入し、機密データを一切外部に出さずに業務用のローカルLLMを動かすまでの手順を、実機ベースで解説します。インストールから本番運用向けのsystemdサービス化、外部アクセス制限、トラブルシュートまで一通りカバーしました。

この記事のポイント

curl -fsSL https://ollama.com/install.sh | sh でOllamaを一発導入できる
・ローカルLLMなら機密データを外に出さず・月額ゼロ・オフラインで業務AIを動かせる
・本番運用はsystemdのoverride.confでOLLAMA_HOSTやモデル保存先を制御するのが基本
・「ollama: command not found」はPATHとsystemd起動の2点を切り分ければ解決できる
・巨大モデルが必要な場面はクラウドが優位。用途で使い分ける視点を持つ


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

なぜローカルLLMをUbuntu Serverで動かすのか|クラウドAIとの本質的な違い

ChatGPTやClaudeといったクラウドAIは非常に強力ですが、業務利用では一つ大きな壁にぶつかります。「入力したデータが自社の管理外に出る」という点です。

あるWeb制作会社のエンジニアから聞いた話ですが、顧客の個人情報を含むログをうっかりクラウドAIに貼り付けてしまい、社内で大問題になりかけたそうです。クラウドAIの利用規約や学習ポリシーは年々厳格化されていますが、それでも「秘密保持契約(NDA)を結んだ顧客データを外部送信する」こと自体が契約違反になるケースは少なくありません。

ローカルLLM(自社サーバー内で動かす大規模言語モデル)は、この問題を構造的に解決します。

ローカルLLMが解決する3つの課題

ローカルLLMをUbuntu Server上で動かす価値は、主に次の3点に整理できます。

機密データを外に出さない:推論はすべて自社サーバー内で完結し、プロンプトもレスポンスも外部に送信されません。NDA対象のコードや顧客データも安心して扱えます
月額コストがゼロ:API従量課金がなく、何回推論しても電気代以外の追加コストが発生しません。社内で大量に呼び出す用途ほど効果が大きくなります
オフラインで稼働する:一度モデルを取得すればインターネット接続なしで動きます。閉域ネットワークや外部接続が制限された環境でも利用できます

正直に言うと、ローカルLLMにも限界はある

ここは正直にお伝えしておきます。ローカルLLMは万能ではありません。

GPT-4クラスの巨大モデルと完全に同等の品質を、手元のGPU1枚で再現するのは現実的ではありません。数百億~数千億パラメータの最上位モデルを動かすには相応のVRAMが必要で、そこはクラウドAIに分があります。

したがって現場での現実的な使い分けは、「機密性が高い・反復回数が多い業務はローカルLLMで」「最高品質の推論が一度だけ必要な場面はクラウドAIで」という棲み分けです。本記事はその前者、ローカルLLMを業務で実用化するための構築手順にフォーカスします。

Ollamaのインストールと初回モデル起動

ローカルLLMを動かすツールはいくつかありますが、本記事では導入と運用が最もシンプルなOllamaを使います。OllamaはモデルのダウンロードからREST API提供までを一括で担うランタイムで、Ubuntu Serverとの相性も良好です。

動作確認環境は Ubuntu Server 24.04 LTS(NVIDIA GPU搭載・ドライバ導入済み)です。

1. Ubuntu 24.04 LTSへのOllama一発インストール

公式のインストールスクリプトを実行するだけで、Ollama本体・systemdサービス・GPU連携の設定がまとめて完了します。

# Ollamaの公式インストールスクリプトを実行 curl -fsSL https://ollama.com/install.sh | sh # インストール後、バージョンを確認 ollama --version

実機の出力例です。

>>> Installing ollama to /usr/local >>> Downloading Linux amd64 bundle >>> Creating ollama user... >>> Adding ollama user to render group... >>> Creating ollama systemd service... >>> Enabling and starting ollama service... >>> NVIDIA GPU installed. # バージョン確認の出力 ollama version is 0.x.x

最後に「NVIDIA GPU installed.」と表示されれば、GPUが正しく認識されています。インストール直後からsystemdサービスとして起動しているため、別途デーモンを立ち上げる必要はありません。

GPUが搭載されているのにこの行が出ない場合は、NVIDIAドライバが未導入の可能性があります。先に nvidia-smi でドライバの状態を確認してください(後述のトラブルシュートで詳しく扱います)。

2. Llama3.3モデルの取得と動作確認

Ollamaの準備ができたら、実際にモデルを取得します。ここでは汎用性の高いLlama3.3を例にします。

# Llama3.3モデルをダウンロード(数GB~数十GBあるため時間がかかる) ollama pull llama3.3 # 取得済みモデルの一覧を確認 ollama list

ollama list の出力例です。

NAME ID SIZE MODIFIED llama3.3:latest a1b2c3d4e5f6 42 GB 2 minutes ago

モデルが取得できたら、対話形式で動作を確認します。

# 対話モードで起動(ローカルで完結する) ollama run llama3.3 # プロンプトが表示されたら質問を入力 >>> Linuxでディスク使用量を確認するコマンドは? # 終了するときは /bye と入力 >>> /bye

ここで応答が返ってくれば、推論はすべてこのサーバー内で完結しています。プロンプトもレスポンスも外部に一切送信されていません。

なお、もっと軽量なモデルから試したい場合は、Llama3.3の代わりに ollama pull gemma3ollama pull phi-4 を使うと、より小さいVRAMで動かせます(モデル選定は後述します)。

3. APIエンドポイントへのリクエスト確認(curl例)

Ollamaは対話モードだけでなく、REST APIを標準で提供します。業務システムや社内ツールに組み込む場合はこのAPIを叩きます。

デフォルトでは localhost:11434 でAPIが待ち受けています。単発の文章生成には /api/generate を使います。

# /api/generate に単発リクエストを送る curl http://localhost:11434/api/generate -d '{ "model": "llama3.3", "prompt": "Linuxのファイル権限を3行で説明して", "stream": false }'

"stream": false を指定すると、応答が分割されず1つのJSONとして返ります。出力例(抜粋)です。

{ "model": "llama3.3", "created_at": "2026-06-19T01:23:45.678Z", "response": "Linuxのファイル権限は、所有者・グループ・その他の3者に対して...", "done": true, "total_duration": 4231000000, "eval_count": 128 }

チャット形式(会話履歴を保持する用途)では /api/chat を使います。

# /api/chat に会話形式でリクエストを送る curl http://localhost:11434/api/chat -d '{ "model": "llama3.3", "messages": [ { "role": "user", "content": "systemctlの再起動コマンドは?" } ], "stream": false }'

このAPIが返ってくれば、あとは社内アプリケーションから呼び出すだけで、ローカルLLMを業務に組み込めます。

本番運用のための追加設定

動作確認ができたら、いよいよ本番運用向けの設定です。インストール直後の状態は「自分のマシンで試す」前提のため、サーバーとして運用するにはいくつか調整が必要になります。

1. systemdサービス化で自動起動(override.conf)

Ollamaは公式インストールスクリプトで既にsystemdサービスとして登録されています。まず状態を確認しましょう。

# Ollamaサービスの状態を確認 systemctl status ollama # サーバー起動時に自動起動するよう有効化(通常は有効済み) systemctl enable ollama

サービスの環境変数を変更したい場合、/etc/systemd/system/ollama.service を直接書き換えるのは推奨しません。パッケージ更新で上書きされる恐れがあるためです。代わりにoverride.conf(ドロップイン設定)を使います。

# 専用のエディタでoverride.confを開く(ファイルが自動生成される) systemctl edit ollama

開いたエディタに、以下のように環境変数を追記します。

[Service] # モデルの保存先を変更(大容量ディスクに置きたい場合) Environment="OLLAMA_MODELS=/data/ollama/models" # モデルをメモリに保持し続ける時間(デフォルト5分) # 24hにすると初回以降のレスポンスが速くなる Environment="OLLAMA_KEEP_ALIVE=24h"

主要な環境変数の意味は次の通りです。

OLLAMA_MODELS:モデルファイルの保存先ディレクトリ。デフォルトは /usr/share/ollama/.ollama/models
OLLAMA_KEEP_ALIVE:推論後にモデルをGPUメモリに保持する時間。長くすると2回目以降の応答が速くなる
OLLAMA_HOST:APIの待ち受けアドレス。デフォルトは 127.0.0.1:11434(後述)

編集を保存したら、設定を反映します。

# systemdに設定変更を読み込ませる systemctl daemon-reload # Ollamaを再起動して反映 systemctl restart ollama

2. 外部アクセス制限とファイアウォール設定(OLLAMA_HOST・ufw)

ここは本番運用で最も重要なポイントです。OllamaのAPIには認証機能がありません。そのため、待ち受けアドレスとファイアウォールの設計を誤ると、誰でもあなたのLLMを叩ける状態になってしまいます。

デフォルトの OLLAMA_HOST=127.0.0.1:11434 はローカルホストのみ受け付ける安全な設定です。同じサーバー内のアプリから使うだけなら、この設定のまま変更しないのが最も安全です。

社内の別マシンからアクセスさせたい場合のみ、待ち受けアドレスを広げます。その際は必ずファイアウォール(ufw)でアクセス元を絞ってください。

# override.confで全インターフェースを待ち受けにする場合 # (ufwでの制限とセットで行うこと) systemctl edit ollama # 追記内容: # [Service] # Environment="OLLAMA_HOST=0.0.0.0:11434" # 反映 systemctl daemon-reload systemctl restart ollama

続いて、ufwで11434番ポートを「特定の社内セグメントだけ」許可します。

# まずSSH(22)を許可してからufwを有効化(締め出し防止) ufw allow 22/tcp ufw enable # 社内セグメント(例: 192.168.10.0/24)だけ11434を許可 ufw allow from 192.168.10.0/24 to any port 11434 proto tcp # それ以外からの11434は拒否されることを確認 ufw status verbose

ufw status verbose の出力例です。

Status: active To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere 11434/tcp ALLOW IN 192.168.10.0/24

重要:ufwを有効化する前に、必ずSSH(22番)の許可を入れてください。順番を間違えると自分自身がサーバーから締め出されます。

インターネットに直接公開する構成は推奨しません。どうしても外部からアクセスさせる場合は、Nginx等のリバースプロキシで認証を挟むか、VPN経由に限定してください。

3. モデル選定の考え方・用途別VRAM早見表

「どのモデルを選べばいいのか」は最も多い質問の一つです。基本的な考え方は、搭載GPUのVRAM容量に収まる範囲で、用途に合った最大のモデルを選ぶことです。

量子化(モデルを軽量化する圧縮)の度合いでも必要VRAMは変わりますが、おおまかな目安として用途別の早見表を示します(数値は4bit量子化前後の概算で、環境により前後します)。
モデル 目安VRAM 向いている用途
Phi-4 約8GB~ 軽量・高速。要約や定型処理、低スペックGPU向け
Gemma 3 約8GB~ 軽量で日本語も実用的。汎用的な社内アシスタント
Mistral 約4~6GB~ バランス型。コード補助や文章生成に広く使える
Gemma 4 約16GB~ Gemma 3の上位。より高い精度が必要な業務向け
Llama3.3 約40GB~ 高精度。複雑な推論や長文処理、品質重視の用途
まずは軽量なPhi-4やGemma 3で試し、精度が足りなければ上位モデルへ段階的に切り替えるのが現実的です。VRAMが不足するモデルを無理に動かすと、CPUにオフロードされて極端に遅くなるため、早見表を目安に手持ちのGPUに合ったモデルを選んでください。

ローカルLLMで使うモデルの選び方は、用途とVRAMの2軸で考えると失敗しにくくなります。各モデルの特徴と切り替えコマンドは、別記事で詳しく解説しています。
ローカルLLMのモデルを比較する方法|Llama3.3・Mistral・Gemma・Phi-4をUbuntuで使い分けるポイント

「ollama: command not found」が出た時の対処法

導入直後によく遭遇するのが「ollama: command not found」というエラーです。原因はいくつかありますが、順番に切り分ければ確実に解決できます。

1. PATHの確認

最も多いのが、Ollamaのバイナリにパスが通っていないケースです。インストールスクリプトは通常 /usr/local/bin/ollama に配置します。

# バイナリが存在するか確認 ls -l /usr/local/bin/ollama # whichでパスが通っているか確認 which ollama # 現在のPATHを確認 echo $PATH

ls ではファイルが見つかるのに which で何も返らない場合は、PATHに /usr/local/bin が含まれていません。一時的にフルパスで実行するか、PATHを追加します。

# とりあえずフルパスで実行 /usr/local/bin/ollama --version # PATHに追加(.bashrcに追記して永続化) echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc source ~/.bashrc

2. systemd起動失敗の切り分け

コマンドは見つかるのに ollama run で「サーバーに接続できない」旨のエラーが出る場合は、Ollamaサービス自体が起動していない可能性があります。

# サービスの状態を確認 systemctl status ollama # 起動していなければ起動 systemctl start ollama # 詳細なログを確認(起動失敗の原因がここに出る) journalctl -u ollama -n 50 --no-pager

journalctl のログには、ポート競合・権限エラー・環境変数の記述ミスなど、起動失敗の具体的な原因が記録されています。先ほどoverride.confを編集した直後にサービスが起動しなくなった場合は、記述ミスを真っ先に疑ってください。

# override.confの内容を確認 systemctl cat ollama # 修正後は必ずdaemon-reloadしてから再起動 systemctl daemon-reload systemctl restart ollama

3. GPUが認識されない場合の確認手順(nvidia-smi)

サービスは起動しているのに推論が異常に遅い、あるいはログに「GPU not found」と出る場合は、GPUが認識されていません。まず nvidia-smi でドライバの状態を確認します。

# NVIDIAドライバとGPUの状態を確認 nvidia-smi

正常な場合の出力例(抜粋)です。

+-----------------------------------------------------------------------------+ | NVIDIA-SMI 5xx.xx Driver Version: 5xx.xx CUDA Version: 12.x | |-----------------------------------------+----------------------------------+ | GPU Name Persistence-M | Memory-Usage | |=========================================+==================================| | 0 NVIDIA RTX A4000 Off | 1024MiB / 16384MiB | +-----------------------------------------+----------------------------------+

nvidia-smi: command not found や「No devices were found」と表示される場合は、NVIDIAドライバが未導入か、正しくロードされていません。Ubuntu 24.04では次のように導入します。

# 推奨ドライバ管理ツールを導入 apt update apt install -y ubuntu-drivers-common # 利用可能な推奨ドライバを確認 ubuntu-drivers devices # 推奨ドライバを自動インストール ubuntu-drivers autoinstall # 導入後は再起動してドライバを読み込む reboot

ドライバ導入後に nvidia-smi でGPUが見えるようになったら、Ollamaを再起動してGPUが使われることを確認してください。

# Ollamaを再起動 systemctl restart ollama # 推論中に別ターミナルでGPU使用率を確認(数値が上がればGPU稼働) nvidia-smi

本記事のまとめ|ローカルLLM構築の全体像

Ubuntu ServerでローカルLLMを構築する一連の流れを、早見表にまとめます。
ステップ コマンド/設定 ポイント
Ollama導入 curl -fsSL https://ollama.com/install.sh | sh systemdサービスまで自動登録される
モデル取得 ollama pull llama3.3 軽量モデルから試すならgemma3やphi-4
動作確認 ollama run llama3.3 推論はサーバー内で完結し外部送信なし
API呼び出し curl http://localhost:11434/api/generate -d '...' /api/chatは会話履歴を保持する用途
環境変数設定 systemctl edit ollama override.confでOLLAMA_MODELS等を制御
アクセス制限 ufw allow from 192.168.10.0/24 to any port 11434 proto tcp APIに認証なし。待ち受けとufwで必ず保護
command not found対処 which ollama PATHとsystemd起動の2点を切り分ける
GPU確認 nvidia-smi 未認識ならドライバ導入後にreboot
ローカルLLMは、機密データを外に出さず・月額ゼロ・オフラインで業務AIを動かせる、エンジニアにとって心強い選択肢です。一方で、最高品質の推論が必要な場面ではクラウドAIに分があります。両者の特性を理解し、用途で使い分けることが、業務でAIを安全かつ実用的に活用する鍵になります。

ローカルLLM構築を2日間のハンズオンで体験する

この記事で扱った構築手順を、実機GPU環境で手を動かしながら習得したい方向けに、「ローカルAIマスターセミナー」を開催しています。
Ollamaの導入からモデル切り替え・業務活用まで、少人数(最大8名)ZOOMハンズオン形式で実施しています。

>> ローカルAIマスターセミナーの詳細を確認する
AI活用の他のテクニックについては、以下の記事も参考にしてください。

AIを活用してLinuxコマンドを効率的に学ぶ方法|ChatGPTやCopilotの使い方も
GitHub CopilotでLinuxコマンドを学ぶ方法
AIにLinuxトラブルを解析させる方法|journalctl・dmesgのログをChatGPT・Claudeに渡すコツ

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。