🪢

LangfuseをGCPでセルフホストする

2024/09/12に公開

はじめに

LangfuseとはLLMや関連する処理の入出力を記録できるツールです。実際にLLMアプリ上で入出力を記録する方法については、以前弊社で書いた以下の記事を参考にしてみてください。
https://zenn.dev/machinelearning/articles/langfuse_usage

本誌では公式ドキュメントを参考に、LangfuseをGCPでセルフホストする詳細な方法を解説します。具体的にはCloud Run + Cloud SQL(PostgreSQL)で、Cloud RunサービスからCloud SQLにプライベート接続するように構築していきます。

https://langfuse.com/docs/deployment/self-host#google-cloud-platform-cloud-run--cloud-sql

Cloud SQLのインスタンス作成

Cloud SQLインスタンスの作成に関しては、以下の記事の「Cloud SQL インスタンスの準備をする」を参照してください。

https://zenn.dev/google_cloud_jp/articles/cloudrun-cloudsql#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のコンソールに移動し、[コンテナをデプロイ]から[サービス]を選択します。

https://console.cloud.google.com/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のコンソールに移動し、シークレットの作成をします。

https://console.cloud.google.com/security/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]を選択します。

https://console.cloud.google.com/apis/credentials

[アプリケーションの種類]として[ウェブアプリケーション]を選びます。


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では環境変数を使用してさまざまな設定が可能です。例えばアプリケーションのログレベルやログ形式を指定することができます。詳細については以下を参照してください。

https://langfuse.com/docs/deployment/self-host#configuring-environment-variables

Discussion