Configure Langfuse across development, staging, and production environments. Use when setting up multi-environment deployments, configuring per-environment keys, or implementing environment-specific Langfuse configurations. Trigger with phrases like "langfuse environments", "langfuse staging", "langfuse dev prod", "langfuse environment setup", "langfuse config by env".
Configure Langfuse across development, staging, and production environments with isolated API keys, environment-specific settings, and proper secret management. Each environment gets its own credentials and configuration to prevent cross-environment data leakage.
| Environment | Purpose | API Key Source | Settings |
|---|---|---|---|
| Development | Local development | .env.local | Debug enabled, relaxed limits |
| Staging | Pre-production testing | CI/CD secrets | Production-like settings |
| Production | Live traffic | Secret manager | Optimized, hardened |
config/
langfuse/
base.ts # Shared defaults
development.ts # Dev overrides
staging.ts # Staging overrides
production.ts # Prod overrides
index.ts # Environment resolver
// config/langfuse/base.ts
export const baseConfig = {
timeout: 30000, # 30000: 30 seconds in ms
maxRetries: 3,
cache: {
enabled: true,
ttlSeconds: 300, # 300: timeout: 5 minutes
},
};
// config/langfuse/development.ts
import { baseConfig } from "./base";
export const developmentConfig = {
...baseConfig,
apiKey: process.env.LANGFUSE_SECRET_KEY_DEV,
debug: true,
cache: { enabled: false, ttlSeconds: 60 },
};
// config/langfuse/staging.ts
import { baseConfig } from "./base";
export const stagingConfig = {
...baseConfig,
apiKey: process.env.LANGFUSE_SECRET_KEY_STAGING,
debug: false,
};
// config/langfuse/production.ts
import { baseConfig } from "./base";
export const productionConfig = {
...baseConfig,
apiKey: process.env.LANGFUSE_SECRET_KEY_PROD,
debug: false,
timeout: 60000, # 60000: 1 minute in ms
maxRetries: 5,
cache: { enabled: true, ttlSeconds: 600 }, # 600: timeout: 10 minutes
};
// config/langfuse/index.ts
import { developmentConfig } from "./development";
import { stagingConfig } from "./staging";
import { productionConfig } from "./production";
type Environment = "development" | "staging" | "production";
const configs = {
development: developmentConfig,
staging: stagingConfig,
production: productionConfig,
};
export function detectEnvironment(): Environment {
const env = process.env.NODE_ENV || "development";
if (env === "production") return "production";
if (env === "staging" || process.env.VERCEL_ENV === "preview") return "staging";
return "development";
}
export function getLangfuseConfig() {
const env = detectEnvironment();
const config = configs[env];
if (!config.apiKey) {
throw new Error(`LANGFUSE_SECRET_KEY not set for environment: ${env}`);
}
return { ...config, environment: env };
}
# Local development (.env.local - git-ignored)
LANGFUSE_SECRET_KEY_DEV=your-dev-key
# GitHub Actions
# Settings > Environments > staging/production > Secrets
# Add LANGFUSE_SECRET_KEY_STAGING and LANGFUSE_SECRET_KEY_PROD
# AWS Secrets Manager
aws secretsmanager create-secret \
--name langfuse/production/api-key \
--secret-string "your-prod-key"
# GCP Secret Manager
echo -n "your-prod-key" | gcloud secrets create langfuse-api-key-prod --data-file=-
# .github/workflows/deploy.yml