🦙

Ollamaのサーバーを、Macでサービスとして利用する場合の注意点

2024/12/23に公開

はじめに

この記事は非公式のInfocom Advent Calendar 2024の24日目の記事です。

やりたいこと

  • Mac上にインストールしたローカルLLM実行ツールのollamaを、誰もログインしていない状態で動かしたい
    • いわゆるServiceやdaemonの状態
  • nginxでリバースプロキシをたて、他のマシンからOllamaのAPIを利用できるようにしたい

Ollamaをサービスとして起動する

Ollamaのインストール

今回はApple SiliconのMacに、インストーラーではなく、homebrewを使ってOllamaをインストールしました。

% brew install ollama

インストール先

  • /opt/homebrew/bin/ollama

サービスとして起動

今回は特定ユーザーがログインしていなくても起動したいので、サービス(デーモン)として設定します。

# 起動
% sudo brew services start ollama

# 停止
% sudo brew services stop ollama

設定ファイル

サービス起動するとlaunchd用の設定ファイルができます。サービスを停止すると設定ファイルは削除されます。

  • /Library/LaunchDaemons/homebrew.mxcl.ollama.plist

ログの確認

今回サービス(デーモン)として指定した後にpsコマンドで確認したところ、実際にはプロセスが存在しませんでした。起動直後に何らかの問題が発生して異常終了している可能性があります。

状況は次のログファイルで確認することができます。

  • /opt/homebrew/var/log/ollama.log
panic: $HOME is not defined

どうやら$HOME環境変数が必要のようです。

設定ファイルの編集

サービスの設定ファイルは停止時に削除されてしまうため、homebrew側のディレクトリにある元ファイルを編集する必要があります。

  • /opt/homebrew/Cellar/ollama/バージョン番号/homebrew.mxcl.ollama.plist

今回は次の2つを環境変数(EnvironmentVariables)として指定します。

  • 上記ログに出てきた $HOME
  • 今回はプロキシ内で動かしているため、モデルダウンロード用にプロキシを指定
... 省略 ...
<plist version="1.0">
<dict>
  <key>EnvironmentVariables</key>
    <dict>
      <key>HOME</key>
      <string>/Users/インストールしたユーザー/</string>
      <key>HTTPS_PROXY</key>
      <string>http://proxyサーバー:ポート番号</string>
    </dict>
  ... 省略 ...

再起動

一旦サービスを停止し、再度起動したところ、正常にサービスのプロセスが立ち上がりました。

ollamaバージョンアップ時の注意

homebrewを使ってollamaをバージョアップ(upgrade)すると、元になる設定ファイルのディレクトリが変わり、新たに設定ファイルが作られます。

今のところ手動で新しい設定ファイルを再度編集する必要があります。

nginxによるリバースプロキシの設定

Ollama API

ollamaサーバーは、WebAPIを提供しています。デフォルトでは次のURLでAPIにアクセスできます。

ただし、デフォルトでは同じマシン上からだけアクセス可能で、他のマシンからは接続できません。

nginxの設定

そこで今回はnginxをリバースプロキシとして利用し、他のマシンからもAPIを利用できるようにします。

nginxの設定ファイルには、次の記述を追加します。

    # --- for ollama  --- 
    location /ollama/ {
      proxy_pass http://localhost:11434/;
      proxy_set_header Host localhost;
    }

※良く例にあるように、proxy_set_header Host $host; としてしまうと、アクセスをが拒否されてしまいます。

終わりに

一連の手順で、Ollamaをサーバー的に動かすことが可能になりました。Macをサーバー用途として使うのは意外と面倒でしたが、なんとかやりたいことが実現できました。ご参考まで。

Discussion