Zenn
🪤

Raspberry Pi + Tailscale + Open WebUI で手軽に自分だけの LLM 環境を構築するチュートリアル

2025/02/16に公開
28

作るもの

Raspberry Pi に Open WebUI をホストし、ローカル LLM や LLM API を利用できるようにします。さらに Tailscale (VPN) を利用することで、自宅外からでも Open WebUI にアクセスできるようにします。

自宅外からでもスマホや PC でアクセスできます。 Tailscale (VPN) を使っているので他の人からは見ることができない、自分専用のアプリになっています。

環境

  • Windows 11 24H2

Raspberry Pi をセットアップする

Raspberry Pi をセットアップして SSH 接続できるようにします。Raspberry Pi 4 を使用しますが、他のバージョンでも同様の手順でセットアップできるはずです。

必要なもの

  • PC
    • この記事では Windows PC を前提に説明します。
  • Raspberry Pi 本体
    • Raspberry Pi 4 / Raspberry Pi 5 くらいがおすすめです。
  • microSDカード (8 GB ~)
    • 中身が完全に消去されても問題ないものを使用してください。
  • ACアダプタ
    • 付属のものがあればそれを使用します。
  • (オプション) LANケーブル など、 Raspberry Pi を有線接続するためのもの
    • 無線接続よりも有線接続の方が設定が容易で、通信も安定するためおすすめです。
  • (オプション) microSD カードリーダー

SD カードに OS を書き込む

Raspberry Pi Imager というソフトウェアをインストールします。

https://www.raspberrypi.com/software/

microSD カードを PC に挿入し、Raspberry Pi Imager を起動します。起動すると画面が表示されるので、各項目を以下のように設定します。

  • Raspberry Pi デバイス
    • 用意した Raspberry Pi の種類を選択します。ここでは Raspberry Pi 4 を選択しました。
  • OS
    • 「Raspberry Pi OS (other)」の中にある 「Raspberry Pi OS Lite (64-bit)」を選択します。
    • 今回の用途では他の OS を選択しても大きな違いはありません。ここではサイズが小さいという理由で Raspberry Pi OS Lite を使用します。
  • ストレージ
    • PC に挿入した microSD カードを選択します。
    • ここで選択したデバイスの中身は完全に消去されるため、重要な情報が含まれる microSD カードや PC に接続されている他のデバイスを誤って選択しないように注意してください。

「次へ」ボタンをクリックし、OS の設定を編集するか確認されたら「設定を編集する」を選択します。

「一般」タブで、ホスト名、ユーザー名・パスワード、ロケールを設定します。ホスト名とユーザー名・パスワードは後で使用するので、必ずメモしておいてください。 例として、ホスト名を pi.local 、ユーザー名を pi とします。

ネットワークに無線接続する場合は、Wi-Fi の接続情報をここで設定します。

「サービス」タブで、SSH の設定を行います。SSH の有効化は必須ではありませんが、有効化することで Raspberry Pi にディスプレイやキーボードを接続せずに、ネットワーク越しに操作できるようになります。SSH を有効化することをおすすめします。

Windows の SSH 公開鍵は C:\Users\<ユーザー名>\.ssh ディレクトリにある .pub で終わるファイルです。

そのディレクトリに鍵が存在しない場合は、以下のコマンドで発行します。-C の中身はコメントで、後から鍵を識別できるような情報を記述します。

ssh-keygen -t ed25519 -C "コメント"

https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent

生成した公開鍵を Raspberry Pi Imager に貼り付けます。

WSL を使っている場合

普段 WSL で SSH を利用している場合は、WSL の SSH 公開鍵を利用することも可能です。ただし、Raspberry Pi に SSH 接続する際に、ホスト名ではなく IP アドレスを指定して接続する必要があります。WSL からは Raspberry Pi の mDSN ホスト名 (*.local) を解決できないためです。

「オプション」タブの設定は任意で構いません。

設定が完了したら「保存」ボタンを押して保存します。設定内容の確認画面に戻るので「はい」を選択し、書き込みを実行します。

数分待つと書き込みが完了するので、microSD カードを取り外します。

Raspberry Pi を起動する

Raspberry Pi に microSD を挿入し、LAN ケーブルを接続します。準備が完了したら AC アダプタに接続して電源を入れます。Raspberry Pi の起動には 1 分程度かかります。

Raspberry Pi に SSH 接続

コマンドプロンプトを開き、次のコマンドで SSH 接続を試みます。Raspberry Pi の起動が完了していないと失敗することがあるので、成功するまで何度か実行してみてください。

ssh pi.local

成功すると次のような出力が表示されます。

The authenticity of host 'pi.local (2408:213:1660:fd00:b788:ab2a:eece:3ebd)' can't be established.
ED25519 key fingerprint is SHA256:doRqlkdkkktLWCpCJOLjZCQoBvVz45FTyUIzKH3FtHk.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

"Are you sure you want to continue connecting (yes/no/[fingerprint])?" と聞かれるので、"yes" と入力すると SSH 接続が開始されます。

Linux pi 6.6.51+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.6.51-1+rpt3 (2024-10-08) aarch64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Nov 19 22:40:49 2024 from 2408:213:1660:fd00:4dc4:bddf:1ef:2377

Wi-Fi is currently blocked by rfkill.
Use raspi-config to set the country before use.

pi@pi:~ $
WSL を使っている場合

例えば Raspberry Pi のホスト名が pi.local のとき、次のコマンドで Raspberry Pi の IP アドレスを確認できます。

ping -n 1 -4 pi.local

この IP アドレスを使って WSL から SSH 接続します。

ssh pi@<IPアドレス>

Tailscale をインストールする

Tailscale を初めて利用する場合は、以下のリンクからアカウントを作成してください。

https://login.tailscale.com/login?next_url=%2Fwelcome

PC に Tailscale をインストールする

PC に Tailscale をインストールします。手順はドキュメントを参照してください。

https://tailscale.com/kb/1022/install-windows

インストールが完了すると、タスクトレイに Tailscale のアイコンが表示されます。"Connected" と表示されていれば準備完了です。

WSL を使っている場合は?

Raspberry Pi に Tailscale をインストールする

Raspberry Pi にも Tailscale をインストールします。

ダッシュボードの Machines タブを開き、「Add device」 > 「Linux server」 を選択します。

「Add linux server」の画面が開きます。「Tags」をオフにします。一番下までスクロールして「Generate install script」ボタンを押し、表示されるスクリプトをコピーします。

Tagsをオフにする

Generate Install Script

Raspberry Pi に SSH で接続し、コピーしたスクリプトを実行します。

curl -fsSL https://tailscale.com/install.sh | sh && sudo tailscale up --auth-key=tskey-auth-xxxxxxxxxx

実行が完了したら、次のコマンドを実行して Tailscale SSH を有効化します。

sudo tailscale up --ssh

Tailscale ダッシュボードの Machines タブを確認すると、Raspberry Pi が新しいマシンとして追加されていることが確認できます。また、Tailscale SSH が有効になっていることも確認できます。

Raspberry Pi がダッシュボードに追加された

デフォルトのマシン名はホスト名と同じですが、マシンの詳細画面から好きな名前に変更することも可能です。

PC から Raspberry Pi に Tailscale SSH で接続する

ここでは Tailscale SSH を試してみます。

PC で新しいターミナルを開き、Tailscale のマシン名で SSH 接続します。例として、マシン名は pi とします。先ほど SSH 接続する際に使った Raspberry Pi のホスト名 pi.local とは異なるので注意してください。

ssh pi@pi

するとブラウザが自動的に起動し、Tailscale へのログインを求められます。ログインすると認証が完了し、SSH 接続が開始されます。

C:\Users\be4rr>ssh pi@pi
The authenticity of host 'pi (100.78.130.103)' can't be established.
ED25519 key fingerprint is SHA256:doRqlkdkkktLWCpCJOLjZCQoBvVz45FTyUIzKH3FtHk.
This host key is known by the following other names/addresses:
    C:\Users\be4rr/.ssh/known_hosts:5: pi.local
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'pi' (ED25519) to the list of known hosts.
# Tailscale SSH requires an additional check.
# To authenticate, visit: https://login.tailscale.com/a/l50fc687015e10
# Authentication checked with Tailscale SSH.
# Time since last authentication: 1s
Linux pi 6.6.51+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.6.51-1+rpt3 (2024-10-08) aarch64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Feb 16 13:49:15 JST 2025 from 2408:213:1660:fd00:f087:d2a5:da3b:fdf9 on pts/0

Wi-Fi is currently blocked by rfkill.
Use raspi-config to set the country before use.

pi@pi:~ $

見た目はほとんど変わりませんが、Tailscale 経由で接続できています。つまり、自宅のローカルネットワークにいないデバイスでも、Tailscale ネットワークに参加していれば、この Raspberry Pi に SSH 接続できるということです。

スマホから Raspberry Pi に SSH

スマホに Tailscale をインストールし、Wi-Fi をオフにした状態で Raspberry Pi に SSH 接続してみます。Wi-Fi をオフにすることで、ローカルネットワークではなく Tailscale 経由で SSH 接続していることを確認できます。

Tailscale は Android / iPhone のアプリストアからインストールできます。

https://play.google.com/store/apps/details?id=com.tailscale.ipn

https://apps.apple.com/us/app/tailscale/id1470499037

SSH クライアントアプリとして、ここでは Termius を使用します。

https://play.google.com/store/apps/details?id=com.server.auditor.ssh.client&hl=ja

https://apps.apple.com/jp/app/termius-terminal-ssh-client/id549039908

ホスト名としてマシン名 (pi) を使用し、ユーザーは Raspberry Pi のユーザー名を使用します。その他の項目は空欄のままにして接続を開始します。初回は Tailscale の認証を求められるので、Tailscale アプリを開いてログインする必要があります。

スマホからSSH接続

Open WebUI セットアップ

Raspberry Pi に Open WebUI をセットアップし、Tailscale 内の他のデバイスから HTTPS でアクセスできるようにします。

Docker をインストールする

https://get.docker.com/ のスクリプトを利用します。

curl -fsSL https://get.docker.com -o install-docker.sh
sudo sh install-docker.sh

sudo なしで docker を実行できるように設定します。

sudo usermod -aG docker $USER
newgrp docker

参考:Manage Docker as a non-root user

名前解決が失敗する場合

環境によっては、Raspberry Pi で Tailscale が起動していると名前解決が失敗することがあります。その場合、一時的に Tailscale の DNS を無効化する設定を行います。

sudo tailscale up --ssh --accept-dns=false

Open WebUI をインストール

Docker で Open WebUI を実行します。

docker run -d -p 8080:8080 -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-web
ui/open-webui:main

-p 8080:8080 でポートをホストに公開しているため、他の Tailscale ネットワークにいるデバイスから http://pi:8080 のような URL でアクセスできます。

さらに Tailscale Serve という機能を使うと、Tailscale によって自動的に SSL 証明書が発行され、HTTPS で接続できます。

sudo tailscale serve --bg 8080

HTTPS の URL が表示されます。証明書の発行には 1 分程度時間がかかります。

Available within your tailnet:

https://pi.tailxxxx.ts.net/
|-- proxy http://127.0.0.1:8080

Serve started and running in the background.
To disable the proxy, run: tailscale serve --https=443 off

この URL は、自身の Tailscale ネットワークに参加しているデバイスからのみアクセス可能なプライベートな URL です。

Open WebUI の設定

Open WebUI の URL を開くと、管理者アカウントの作成を求められます。任意のメールアドレスとパスワードでアカウントを作成してください。

Open WebUI

例えば OpenAI の API キーを追加したい場合は、「管理者パネル」>「設定」>「接続」から API キーを設定します。

完成

以上で、どこからでもアクセスできる自分だけの Open WebUI が完成しました!

もし GPU を持っていて自前のローカル LLM を動かしたい場合は、まず GPU 付き PC に Tailscale と Ollama をインストールします。そして Raspberry Pi 上の Open WebUI から Tailscale ネットワーク経由で Ollama の API にアクセスすることで、自宅外からでも自宅の GPU で動く LLM にアクセスできます。

これ以降は Open WebUI のドキュメントなどを参考に進めていけると思います。

28

Discussion

ログインするとコメントできます