LangfuseをGCPでセルフホストする
はじめに
LangfuseとはLLMや関連する処理の入出力を記録できるツールです。実際にLLMアプリ上で入出力を記録する方法については、以前弊社で書いた以下の記事を参考にしてみてください。
本誌では公式ドキュメントを参考に、LangfuseをGCPでセルフホストする詳細な方法を解説します。具体的にはCloud Run + Cloud SQL(PostgreSQL)で、Cloud RunサービスからCloud SQLにプライベート接続するように構築していきます。
Cloud SQLのインスタンス作成
Cloud SQLインスタンスの作成に関しては、以下の記事の「Cloud SQL インスタンスの準備をする」を参照してください。
ここでCloud RunからCloud SQLインスタンスに接続するために、Cloud RunにDATABASE_URL
という環境変数を設定し、Postgresデータベースの接続文字列を指定する必要があります。Cloud SQLのインスタンス作成と同時に以下の接続文字列を作成しておきましょう。
postgresql://<user-name>:<password>@localhost/<db-name>/?host=/cloudsql/<google-cloud-project-id>:<region-id>:<sql-instance-id>&sslmode=none&pgbouncer=true
Postgresデータベース接続文字列の各部分については、以下のように設定します。
項目 | 値 |
---|---|
<user-name> | PostgreSQL のユーザー名 (デフォルトはpostgres) |
<password> | <user-name>に指定したユーザーのパスワード |
<db-name> | データベース名 (上記の記事ではdb になる) |
<google-cloud-project-id> | Google Cloud プロジェクト ID |
<region-id> | Cloud SQL のリージョン |
<sql-instance-id> | Cloud SQL のインスタンス名 |
Cloud RunでのLangfuseのデプロイ
Cloud Runのコンソールに移動し、[コンテナをデプロイ]から[サービス]を選択します。
コンテナイメージの設定
[コンテナ イメージ]にはdocker.io/langfuse/langfuse:2
を指定します。
コンテナイメージの設定
認証の設定
Langfuseには独自の認証があるため、Cloud Runの[認証]では[未認証の呼び出しを許可]を選択します。
認証の設定
コンテナポートの設定
[コンテナ、ボリューム、ネットワーキング、セキュリティ]の[コンテナポート]に3000
を設定します。
コンテナポートの設定
環境変数の設定
環境変数には以下の項目を設定していきます。
環境変数名 | 値 |
---|---|
DATABASE_URL |
Postgresデータベースの接続文字列 (前述の手順で作成したもの) |
NEXTAUTH_URL |
http://localhost:3000 (デプロイ後にCloud RunサービスのURLに更新します) |
NEXTAUTH_SECRET |
openssl rand -base64 32 で生成した文字列 |
SALT |
openssl rand -base64 32 で生成した文字列 |
ここでLangfuseのドキュメントでは、機密情報を安全にアプリケーションに渡すため、少なくとも以下の情報についてはSecret Managerで管理することが推奨されています。
AUTH_GOOGLE_CLIENT_ID
AUTH_GOOGLE_CLIENT_SECRET
DATABASE_URL
DIRECT_URL
NEXTAUTH_SECRET
NEXTAUTH_URL
SALT
Secret Managerのコンソールに移動し、シークレットの作成をします。
シークレットを作成した後、[コンテナ、ボリューム、ネットワーキング、セキュリティ]の[コンテナ]の[変数とシークレット]からシークレットを参照し、環境変数を設定します。
環境変数のシークレットによる設定
Cloud SQL接続の設定
次に[Cloud SQL接続]の[接続を追加]をクリックし、先ほど作成したCloud SQLインスタンスを設定します。
Cloud SQL接続の設定
ネットワークの設定
次に[ネットワーキング]タブを開き、[アウトバウンド トラフィック用の VPC に接続する]で[VPC に直接トラフィックを送信する]を選択します。そして、[ネットワーク]と[サブネット]にはCloud SQLと同じVPC、サブネットを設定します。
ネットワークの設定
デプロイ
最後に[作成]をクリックしてデプロイし、Cloud RunがデプロイされたらNEXTAUTH_URL
という名前の環境変数を.run.app
で終わるCloud RunサービスのURLに更新してください。
Google sign-inを用いたOAuth認証 (任意)
認証情報のコンソールに移動し、[認証情報を作成]から[OAuth クライアント ID]を選択します。
[アプリケーションの種類]として[ウェブアプリケーション]を選びます。
OAuth クライアント IDの設定
作成後「クライアントID」と「クライアントシークレット」が生成されるので、それぞれ以下の環境変数に設定することで、LangfuseでGoogle sign-inを用いたOAuth認証を利用できます。これらに関しても環境変数に設定する場合はシークレットを作成してください。
環境変数名 | 値 |
---|---|
AUTH_GOOGLE_CLIENT_ID |
クライアントID |
AUTH_GOOGLE_CLIENT_SECRET |
クライアントシークレット |
もしEmailとパスワードによる認証を無効にして、Google sign-inのみを使用したい場合は、環境変数にAUTH_DISABLE_USERNAME_PASSWORD=true
を設定してください。
Langfuseにおける環境変数の設定
Langfuseでは環境変数を使用してさまざまな設定が可能です。例えばアプリケーションのログレベルやログ形式を指定することができます。詳細については以下を参照してください。
Discussion