人工知能(AI)
PR

【ローカルLLM】ゲーミングPCをAIサーバー化:スマホでアクセスできる Ollama+OpenWebUI環境の作り方【Docker】

えりる
記事内に商品プロモーションを含む場合があります

こんにちは!
最近、ローカルLLM(大規模言語モデル)で遊んでいますか?

「自分のPCでAIを動かすのは楽しいけど、PCの前に座っていないと使えないのが不便……
「リビングのソファで、iPadやスマホから自分のAIとお喋りしたい!」

そんなふうに思ったことはありませんか?ありますよね?
そう、あるんですよ(圧)

今回は、自宅のハイスペック Ubuntu PCを「AIサーバー」にして、家のWi-Fi(LAN)内ならスマホやノートPCからどこでもアクセスできる環境を作ってみましょう。

ターミナルでDockerの操作が少しありますが、コピペで進められるように解説しますので、Docker初心者の方もぜひチャレンジしてみてください!

今回作る環境のイメージ

今回使うのは以下の2つの主役です。

  1. Ollama: AIの「脳みそ」部分。LLMを動かすエンジン。
  2. Open WebUI: AIの「顔」部分。ChatGPTのような使いやすい画面を提供してくれます。

これらをDockerという箱に入れて動かし、Nginxという案内役を使って、家の中の端末からアクセスできるようにします。

準備(前提条件)

まず、作業を始める前に以下の準備が必要です。

必須環境

すでに以下の2つはインストール済みでしょうか?

  1. NVIDIA ドライバ: GPUがちゃんと認識されていること。
  2. Docker Desktop または Docker Engine: これがないと始まりません。

まだの方は、以下の記事を参考にセットアップしてください!

あわせて読みたい
【Linux】UbuntuにCUDAをインストールする方法【CUDA 12.8/12.9/13.0】
【Linux】UbuntuにCUDAをインストールする方法【CUDA 12.8/12.9/13.0】
あわせて読みたい
【Linux】UbuntuにDockerをインストールする方法
【Linux】UbuntuにDockerをインストールする方法

追加で必要なもの:NVIDIA Container Toolkit

Dockerの中からGPU(グラボ)を使うために、NVIDIA Container Toolkitが必要です。これがないと、AIがCPUで動いてしまい動作が激重になります。

以下のコマンド等でインストールし、Dockerを再起動しておく必要があります。

bash sudo apt install -y nvidia-container-toolkit 
sudo systemctl restart docker

Docker Composeファイルの作成

ここからが本番です。
「Ollama」と「Open WebUI」をまとめて起動するための設計図(docker-compose.yml)を作ります。

適当なフォルダ(例: my-ai-server)を作り、その中に docker-compose.yml という名前でファイルを作成して、以下をコピペしてください。

version: '3.8'

services:
  # --- AIの脳みそ: Ollama ---
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    # 自分のPC内(127.0.0.1)からしか見えないようにロックします
    ports:
      - "127.0.0.1:11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    restart: always
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

  # --- AIの見た目: Open WebUI ---
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    # こちらも自分のPC内(127.0.0.1)の3000番ポートに限定公開
    ports:
      - "127.0.0.1:3000:8080"
    environment:
      # Dockerの中でOllamaと通信する設定
      - OLLAMA_BASE_URL=http://ollama:11434
    volumes:
      - open-webui_data:/app/backend/data
    restart: always
    depends_on:
      - ollama

volumes:
  ollama_data:
  open-webui_data:

💡 こだわりポイント

設定の中に 127.0.0.1:3000:8080 という記述があります。
これは「このPC自身(localhost)からしかアクセスできないようにする」という設定です。いきなり全開放せず、あとで紹介するNginxを通して安全に接続するためにこうしています。

起動してみよう

ファイルができたら、その場所で以下のコマンドを実行します。

sudo docker compose up -d

-d は「バックグラウンドで静かに動いててね」という意味です)

よく使うコマンド集

Docker初心者の方のために、よく使うコマンドを置いておきます。

動いているか確認する

sudo docker ps -a STATUS

出力結果が Up になっていれば成功です!

基本の停止方法(おすすめ)

コンテナを停止し、さらにコンテナ自体を削除します(データは消えません)。
次回起動するときに設定変更などがきれいに反映されるため、通常はこちらを使います。
docker-compose.yml があるディレクトリで以下を実行すればOK。

sudo docker compose down

一時停止(コンテナを残す)

docker-compose.yml があるディレクトリで以下を実行します。

sudo docker compose stop

再開するときは

sudo docker compose start

で素早く復帰できます。(sudo docker compose up -d でもOK)

3. ホスト側 Nginx の設定

今のままだと、PCの中からは使えますが、スマホからは繋がりません。
そこで、WebサーバーのNginxを使って「外(LAN内)からのアクセスを、Docker内のOpen WebUIへ転送する」設定を行います。

設定ファイルの作成

/etc/nginx/sites-available/openwebui-server というファイルを作成し、以下を記述します。(openwebui-server のところは何でもよいです。)

server {
    listen 80;
    server_name _;  # 特定のドメインやホスト名がない場合はこれでOK

    location / {
        # ホスト自身(127.0.0.1)で動いているDockerのポート3000へ転送
        proxy_pass http://127.0.0.1:3000;

        # 重要:AIの文字がパラパラ出る(Streaming)ために必要
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # 誰からアクセスが来たかの情報を正しく伝える
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # AIの生成が遅くてもタイムアウトしないように時間を延ばす(300秒)
        proxy_read_timeout 300s;
    }
}

ファイアウォール(UFW)について

セキュリティのため、UFWなどのファイアウォールを使って「家のWi-Fi(LAN)からのみ許可」する設定をおすすめします。
(例:自宅のIP帯域が 192.168.1.x の場合)

sudo ufw allow from 192.168.1.0/24 to any port 80 proto tcp

これで、外部の知らない人からのアクセスを防ぎつつ、家族や自分の端末からはアクセスできるようになります。

詳しくは以下の記事で解説しているのであわせてこちらも読んでみてください!
(Raspberry Pi用に書いてますが、Ubuntuでもやり方は同じです)

あわせて読みたい
【Raspberry Pi】ローカルネットワークからの接続のみ許可する方法(ラズパイのセキュリティ設定)
【Raspberry Pi】ローカルネットワークからの接続のみ許可する方法(ラズパイのセキュリティ設定)

設定を反映させる

書き終わったら、Nginxにこの設定を読み込ませて再起動します。

# 設定を有効化(シンボリックリンク作成)
sudo ln -s /etc/nginx/sites-available/openwebui-server /etc/nginx/sites-enabled/

# 書き間違いがないかチェック
sudo nginx -t 

# Nginxを再起動
sudo systemctl restart nginx

4. いざ、スマホからアクセス!

さあ、準備完了です!
スマホやタブレットのブラウザを開いて、PCのIPアドレスを入力してみましょう。
(※初回はアカウント作成画面が出ますが、これはあなたのローカル環境に保存される管理者アカウントです)

http://192.168.x.x (あなたのPCのIPアドレス)

これで、トイレの中でも布団の中でも、ハイパワーなPCのGPUを使ってサクサクAIと会話ができるようになりました!
ぜひ、快適なローカルLLMライフを楽しんでくださいね。

参考文献

えりるさんが気になっている商品紹介コーナー

Minisforum のミニPC UN150P です。CPUは Intel N150 というもので基本的な消費電力は6Wくらいとかなり低消費電力でありながら、ネットサーフィンやYouTubeの動画視聴くらいなら困らないくらいの性能があります。Raspberry Pi 5 よりも性能が良いそうです。
消費電力が少ないので、Ubuntu等を入れてサーバー的に使うこともできますね。同じような用途だとRaspberry Piでもできますが、ケース等を買っていると結局同じくらいの値段になるので、それだったらミニPCにした方がいいかなと思います。
えりるさんはサーバー運用のお勉強に買ってみようかなあと計画中です。(Raspberry Pi 4 1GBだとちょっとスペックが足りなかった…)

えりるについて
えりる
えりる
日本のどこかに生息する平成生まれの研究者。とっても理論家と思いきや気分屋さんでもある。基本的にめんどくさがり。修士(工学)を持っている。 Windows, Mac, Linuxの三刀流。
記事URLをコピーしました