🦖

自宅PCのローカルLLMに独自ドメインで外部からアクセスする【Cloudflare Tunnel + Ollama】

に公開

なにこれ

「自宅のデスクトップでLLMを動かして、外出先やバックエンドサーバーからAPIとして叩きたい!」

この記事では、自宅のUbuntu PCにOllamaをセットアップし、Cloudflare Tunnelを使って外部からアクセスできるようにした自身の備忘録を書きます。

この記事でできるようになること

  • 自宅PCでLLM(Llama 3.2など)を動かす
  • https://llm.your-domain.com のような独自ドメインでアクセス
  • メール認証やService Tokenによるセキュリティ保護
  • バックエンドサーバーからAPIとして利用

必要なもの

  • 独自ドメイン (ムームードメインなどで取得)
  • Cloudflareアカウント(無料プランでOK)

全体の構成

[外部] → [Cloudflare Edge] → [Cloudflare Tunnel] → [自宅PC:Ollama]
              ↑
         認証(Access)

ポート開放不要で、Cloudflareが安全なトンネルを提供してくれます。

Step 1: Ollamaのインストール

まずは自宅PCにOllamaをインストールします。

# 公式スクリプトでインストール
curl -fsSL https://ollama.com/install.sh | sh

または Homebrew を使っている場合:

brew install ollama

モデルのダウンロード

# Llama 3.2をダウンロード(約2GB)
ollama pull llama3.2

動作確認

ollama run llama3.2

対話モードで動けばOKです。/bye で終了。

Step 2: Cloudflareにドメインを追加

私はムームードメインで、ドメインを取得しました。

Cloudflareアカウント作成

https://dash.cloudflare.com/ にアクセスしてアカウントを作成します。

ドメインの追加

  1. ダッシュボードのDomains」 → ドメインを入力
  2. 「Quick scan for DNS records」を選択して Continue
  3. プラン選択 → Free を選択
  4. Cloudflareのネームサーバーが表示されます

ネームサーバーの変更

ドメインを管理しているサービス(ムームードメインなど)で、ネームサーバーをCloudflareのものに変更します。

例:
ネームサーバ1: xxxx.ns.cloudflare.com
ネームサーバ2: ????.ns.cloudflare.com

反映には数分〜数時間かかります

Cloudflare Tunnelの作成

cloudflaredのインストール

# Homebrewの場合
brew install cloudflared

Zero Trustダッシュボードでトンネル作成

  1. https://one.dash.cloudflare.com/ にアクセス
  2. 初回はチーム名を設定(例:myteam)
  3. Networks → Tunnels → Create a tunnel
  4. Cloudflaredを選択 → Next
  5. トンネル名を入力(例:llm-server)→ Save tunnel

コネクタのインストール

表示される画面でDebianを選択(Ubuntuなので)し、表示されるコマンドを実行:

sudo cloudflared service install hogepiyo...(トークン)

これでcloudflaredがsystemdサービスとして登録され、自動起動するようになります。

Public Hostnameの設定

Nextをクリックして、以下を設定:

項目 値
Subdomain llm
Domain your-domain.com(ドロップダウンから選択)
Type HTTP
URL localhost:11434

Save tunnelをクリック。

つまりポイント (追加設定)

ここまでで https://llm.your-domain.com にアクセスできるはずですが、おそらく 403 Forbidden が返ってきます。

これはOllamaのセキュリティ機能が原因でした。私はここでめっちゃ詰まりました。

HTTP Host Headerの設定

ローカルのOllamaは Host: llm.your-domain.com のヘッダーを拒否するっぽいです。
Cloudflare側で書き換える必要があります。

  1. https://one.dash.cloudflare.com/
  2. Networks → Tunnels → llm-server
  3. Public Hostname タブ → llm.your-domain.com の Edit
  4. Additional application settings を展開
  5. HTTP Settings → HTTP Host Header に localhost と入力 (これで、localhostがヘッダーになる)
  6. Save

動作確認

curl https://llm.your-domain.com

Ollama is running と表示されれば成功です!

Step 5: 認証の追加

このままだと誰でもアクセスできてしまうので、認証を追加します。

メール認証(ブラウザアクセス用のメール認証)

  1. https://one.dash.cloudflare.com/
  2. Access → Applications → Add an application
  3. Self-hostedを選択
  4. 設定:
    • Application name: LLM Server
    • Session duration: 24 hours
  5. Add public hostname → llm.your-domain.com を入力
  6. Add a policy:
    • Policy name: Allow Me
    • Action: Allow
    • Selector: Emails
    • Value: 自分のメールアドレス
  7. Save

これでブラウザからアクセスすると、メール認証が求められるようになります。

Service Token(API・バックエンド用)

プログラムからアクセスする場合は、認証で突破したいですよね。
Service Tokenを使います。

トークンの作成:

  1. Access → Service Auth → Service Tokens
  2. Create Service Token
  3. 名前を入力(例:Backend)
  4. Generate token
  5. Client ID と Client Secret をメモ(Secretは一度しか表示されません)

ポリシーの追加:

  1. Access → Applications → LLM Server を編集
  2. Policies タブ → Add a policy
  3. 設定:
    • Policy name: Allow Service Token
    • Action: Service Auth
    • Selector: Service Token
    • Value: 作成したトークンを選択
  4. Save

APIからのアクセス方法:

curl -H "CF-Access-Client-Id: YOUR_CLIENT_ID" \
     -H "CF-Access-Client-Secret: YOUR_CLIENT_SECRET" \
     https://llm.your-domain.com/api/generate \
     -d '{"model": "llama3.2", "prompt": "Hello", "stream": false}'

Step 6: Ollamaの自動起動設定

PCを再起動してもOllamaが自動で起動しててほしいですね。

sudo tee /etc/systemd/system/ollama-custom.service << 'EOF'
[Unit]
Description=Ollama Service
After=network.target

[Service]
Environment="OLLAMA_ORIGINS=*"
ExecStart=/usr/local/bin/ollama serve
Restart=always
User=your-username

[Install]
WantedBy=multi-user.target
EOF

# パスは環境に合わせて変更(which ollama で確認)
# Homebrewの場合: /home/linuxbrew/.linuxbrew/bin/ollama

sudo systemctl daemon-reload
sudo systemctl enable ollama-custom
sudo systemctl start ollama-custom

まとめ

項目 設定
エンドポイント https://llm.your-domain.com
LLMサーバー Ollama
トンネル Cloudflare Tunnel(無料)
認証(ブラウザ) メール認証
認証(API) Service Token

これで、外出先からでも、バックエンドサーバーからでも、安全に自宅のLLMを利用できてハッピー!!!!!

Discussion