feat: add laminar

This commit is contained in:
Sun-ZhenXing
2026-05-06 09:55:21 +08:00
parent 5f8503df42
commit c59a1e93f6
7 changed files with 663 additions and 0 deletions
+1
View File
@@ -104,6 +104,7 @@ These services require building custom Docker images from source.
| [Kodbox](./src/kodbox) | 1.62 | | [Kodbox](./src/kodbox) | 1.62 |
| [Kong](./src/kong) | 3.8.0 | | [Kong](./src/kong) | 3.8.0 |
| [Langflow](./apps/langflow) | latest | | [Langflow](./apps/langflow) | latest |
| [Laminar](./src/laminar) | latest |
| [Langfuse](./apps/langfuse) | 3.115.0 | | [Langfuse](./apps/langfuse) | 3.115.0 |
| [Letta](./src/letta) | 0.16.7 | | [Letta](./src/letta) | 0.16.7 |
| [LibreChat](./apps/librechat) | v0.8.4 | | [LibreChat](./apps/librechat) | v0.8.4 |
+1
View File
@@ -104,6 +104,7 @@ docker compose exec redis redis-cli ping
| [Kodbox](./src/kodbox) | 1.62 | | [Kodbox](./src/kodbox) | 1.62 |
| [Kong](./src/kong) | 3.8.0 | | [Kong](./src/kong) | 3.8.0 |
| [Langflow](./apps/langflow) | latest | | [Langflow](./apps/langflow) | latest |
| [Laminar](./src/laminar) | latest |
| [Langfuse](./apps/langfuse) | 3.115.0 | | [Langfuse](./apps/langfuse) | 3.115.0 |
| [Letta](./src/letta) | 0.16.7 | | [Letta](./src/letta) | 0.16.7 |
| [LibreChat](./apps/librechat) | v0.8.4 | | [LibreChat](./apps/librechat) | v0.8.4 |
+93
View File
@@ -0,0 +1,93 @@
# Laminar - Open-source observability platform for AI agents
# https://laminar.sh/
# =============================================================================
# REQUIRED: Core Configuration
# =============================================================================
# PostgreSQL Configuration
LAMINAR_POSTGRES_VERSION=16-alpine
LAMINAR_POSTGRES_USER=postgres
LAMINAR_POSTGRES_PASSWORD=change_me_in_production
LAMINAR_POSTGRES_DB=laminar
# ClickHouse Configuration
LAMINAR_CLICKHOUSE_VERSION=latest
LAMINAR_CLICKHOUSE_USER=clickhouse
LAMINAR_CLICKHOUSE_PASSWORD=change_me_in_production
# Shared Secret Token (used for inter-service authentication)
LAMINAR_SHARED_SECRET_TOKEN=shared_secret_change_in_production
# AEAD Secret Key (must be exactly 32 bytes / 64 hex characters)
LAMINAR_AEAD_SECRET_KEY=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
# =============================================================================
# OPTIONAL: External Service API Keys
# =============================================================================
# OpenAI API Key - Used for generating chat names
# LAMINAR_OPENAI_API_KEY=sk-...
# Google Generative AI API Key - Required for Signals/AI monitoring feature
# LAMINAR_GOOGLE_GENERATIVE_AI_API_KEY=...
# =============================================================================
# OPTIONAL: Image Versions
# =============================================================================
# LAMINAR_APP_SERVER_VERSION=latest
# LAMINAR_FRONTEND_VERSION=latest
# LAMINAR_QUERY_ENGINE_VERSION=latest
# LAMINAR_QUICKWIT_VERSION=v0.8.2
# Custom registries (useful for private mirror/proxy)
# LAMINAR_APP_SERVER_REGISTRY=ghcr.io/lmnr-ai/
# LAMINAR_FRONTEND_REGISTRY=ghcr.io/lmnr-ai/
# LAMINAR_QUERY_ENGINE_REGISTRY=ghcr.io/lmnr-ai/
# =============================================================================
# OPTIONAL: Port Overrides
# =============================================================================
# LAMINAR_FRONTEND_PORT_OVERRIDE=5667 # Web UI
# LAMINAR_APP_SERVER_PORT_OVERRIDE=8000 # HTTP API
# LAMINAR_APP_SERVER_GRPC_PORT_OVERRIDE=8001 # gRPC
# LAMINAR_APP_SERVER_RT_PORT_OVERRIDE=8002 # Real-time API
# LAMINAR_QUERY_ENGINE_PORT_OVERRIDE=8903 # Query Engine
# LAMINAR_QUICKWIT_PORT_OVERRIDE=7280 # Quickwit UI/API
# =============================================================================
# OPTIONAL: NextAuth Configuration
# =============================================================================
# LAMINAR_NEXTAUTH_URL=http://localhost:5667
# LAMINAR_NEXTAUTH_SECRET=nextauth_secret_change_in_production
# LAMINAR_NEXT_PUBLIC_URL=http://localhost:5667
# =============================================================================
# OPTIONAL: Resource Limits
# =============================================================================
# LAMINAR_FRONTEND_CPU_LIMIT=1.0
# LAMINAR_FRONTEND_MEMORY_LIMIT=1G
# LAMINAR_APP_SERVER_CPU_LIMIT=2.0
# LAMINAR_APP_SERVER_MEMORY_LIMIT=2G
# LAMINAR_POSTGRES_CPU_LIMIT=1.0
# LAMINAR_POSTGRES_MEMORY_LIMIT=1G
# LAMINAR_CLICKHOUSE_CPU_LIMIT=2.0
# LAMINAR_CLICKHOUSE_MEMORY_LIMIT=2G
# LAMINAR_QUICKWIT_CPU_LIMIT=1.0
# LAMINAR_QUICKWIT_MEMORY_LIMIT=1G
# LAMINAR_QUERY_ENGINE_CPU_LIMIT=1.0
# LAMINAR_QUERY_ENGINE_MEMORY_LIMIT=512M
# =============================================================================
# Global Settings
# =============================================================================
# Timezone
TZ=UTC
# Global Docker Registry Prefix (optional)
# GLOBAL_REGISTRY=docker.io/
+144
View File
@@ -0,0 +1,144 @@
# Laminar
[English](./README.md) | [中文](./README.zh.md)
Laminar is an open-source observability platform purpose-built for AI agents. It provides tracing, evaluations, AI monitoring, SQL access to data, dashboards, and data annotation capabilities.
## Features
- **Tracing**: OpenTelemetry-native powerful tracing SDK - 1 line of code to automatically trace Vercel AI SDK, Browser Use, Stagehand, LangChain, OpenAI, Anthropic, Gemini, and more.
- **Evals**: Unopinionated, extensible SDK and CLI for running evals locally or in CI/CD pipeline.
- **AI Monitoring**: Define events with natural language descriptions to track issues and custom behavior.
- **SQL Access**: Query traces, metrics, and events with a built-in SQL editor.
- **Dashboards**: Powerful dashboard builder for traces, metrics, and events.
- **Data Annotation**: Custom data rendering UI for fast data annotation and dataset creation.
- **High Performance**: Written in Rust with custom realtime engine and ultra-fast full-text search.
## Services
| Service | Description | Port |
| -------------- | ----------------------------------------------- | --------- |
| `frontend` | Laminar web UI and Next.js application | 5667 |
| `app-server` | Rust backend server (HTTP API, gRPC, Real-time) | 8000-8002 |
| `postgres` | PostgreSQL database for persistent storage | - |
| `clickhouse` | ClickHouse for high-performance analytics | - |
| `quickwit` | Quickwit for full-text search | 7280 |
| `query-engine` | Query engine for data processing | 8903 |
## Ports
| Port | Protocol | Description |
| ---- | -------- | ------------------------ |
| 5667 | HTTP | Laminar Web UI |
| 8000 | HTTP | App Server HTTP API |
| 8001 | gRPC | App Server gRPC |
| 8002 | HTTP | App Server Real-time API |
| 7280 | HTTP | Quickwit REST API and UI |
| 8903 | HTTP | Query Engine API |
## Environment Variables
| Variable | Description | Default |
| --------------------------------------- | ------------------------------------ | ------------------------------------ |
| `LAMINAR_POSTGRES_VERSION` | PostgreSQL image version | `16-alpine` |
| `LAMINAR_POSTGRES_USER` | PostgreSQL username | `postgres` |
| `LAMINAR_POSTGRES_PASSWORD` | PostgreSQL password | `change_me_in_production` |
| `LAMINAR_CLICKHOUSE_VERSION` | ClickHouse image version | `latest` |
| `LAMINAR_CLICKHOUSE_USER` | ClickHouse username | `clickhouse` |
| `LAMINAR_CLICKHOUSE_PASSWORD` | ClickHouse password | `change_me_in_production` |
| `LAMINAR_SHARED_SECRET_TOKEN` | Shared secret for inter-service auth | `shared_secret_change_in_production` |
| `LAMINAR_AEAD_SECRET_KEY` | AEAD encryption key (64 hex chars) | - |
| `LAMINAR_OPENAI_API_KEY` | OpenAI API key (optional) | - |
| `LAMINAR_GOOGLE_GENERATIVE_AI_API_KEY` | Google AI key for Signals feature | - |
| `LAMINAR_FRONTEND_PORT_OVERRIDE` | Host port for Web UI | `5667` |
| `LAMINAR_APP_SERVER_PORT_OVERRIDE` | Host port for HTTP API | `8000` |
| `LAMINAR_APP_SERVER_GRPC_PORT_OVERRIDE` | Host port for gRPC | `8001` |
| `LAMINAR_APP_SERVER_RT_PORT_OVERRIDE` | Host port for Real-time API | `8002` |
## Volumes
- `laminar_postgres_data`: PostgreSQL data
- `laminar_clickhouse_data`: ClickHouse data
- `laminar_clickhouse_logs`: ClickHouse logs
- `laminar_quickwit_data`: Quickwit data
## Quick Start
1. Copy the example environment file:
```bash
cp .env.example .env
```
2. Edit `.env` and set required secrets:
```dotenv
LAMINAR_POSTGRES_PASSWORD=your_secure_password
LAMINAR_CLICKHOUSE_PASSWORD=your_secure_password
LAMINAR_SHARED_SECRET_TOKEN=your_shared_secret
LAMINAR_AEAD_SECRET_KEY=your_64_character_hex_key
```
To generate a secure AEAD key:
```bash
openssl rand -hex 32
```
3. Start the services:
```bash
docker compose up -d
```
4. Access the UI at http://localhost:5667
## Enabling AI Monitoring (Signals)
To enable the Signals feature, set your Google Generative AI API key:
```dotenv
LAMINAR_GOOGLE_GENERATIVE_AI_API_KEY=your_key_here
```
## SDK Configuration
When using Laminar SDK with self-hosted instance:
**Python:**
```python
from lmnr import Laminar
Laminar.initialize(
project_api_key="<LMNR_PROJECT_API_KEY>",
base_url="http://localhost:8000"
)
```
**TypeScript:**
```typescript
import { Laminar } from '@lmnr-ai/lmnr';
Laminar.initialize({
projectApiKey: process.env.LMNR_PROJECT_API_KEY,
baseUrl: "http://localhost:8000"
});
```
## Documentation
For full documentation, visit: https://laminar.sh/docs
## Resource Requirements
Minimum recommended resources:
| Service | CPU | Memory |
| ------------ | ---- | ------ |
| frontend | 0.25 | 256M |
| app-server | 0.5 | 512M |
| postgres | 0.25 | 256M |
| clickhouse | 0.5 | 512M |
| quickwit | 0.25 | 256M |
| query-engine | 0.25 | 128M |
Total minimum: ~2 CPU cores, ~2GB RAM
For production use, increase ClickHouse and PostgreSQL resources based on data volume.
+144
View File
@@ -0,0 +1,144 @@
# Laminar
[English](./README.md) | [中文](./README.zh.md)
Laminar 是一个专为 AI Agent 打造的开源可观测性平台。它提供追踪、评估、AI 监控、SQL 数据访问、仪表板和数据标注功能。
## 功能特性
- **追踪(Tracing**:基于 OpenTelemetry 的强大追踪 SDK —— 只需一行代码即可自动追踪 Vercel AI SDK、Browser Use、Stagehand、LangChain、OpenAI、Anthropic、Gemini 等。
- **评估(Evals)**:无倾向性的可扩展 SDK 和 CLI,用于在本地或 CI/CD 流水线中运行评估。
- **AI 监控**:使用自然语言描述定义事件,追踪问题和自定义行为。
- **SQL 访问**:使用内置 SQL 编辑器查询追踪、指标和事件。
- **仪表板**:用于追踪、指标和事件的强大仪表板构建器。
- **数据标注**:自定义数据渲染 UI,用于快速数据标注和数据集创建。
- **高性能**:使用 Rust 编写,具有自定义实时引擎和超快的全文搜索。
## 服务
| 服务 | 描述 | 端口 |
| -------------- | --------------------------------------- | --------- |
| `frontend` | Laminar Web UI 和 Next.js 应用 | 5667 |
| `app-server` | Rust 后端服务器(HTTP API、gRPC、实时) | 8000-8002 |
| `postgres` | 用于持久化存储的 PostgreSQL 数据库 | - |
| `clickhouse` | 用于高性能分析的 ClickHouse | - |
| `quickwit` | 用于全文搜索的 Quickwit | 7280 |
| `query-engine` | 用于数据处理的查询引擎 | 8903 |
## 端口
| 端口 | 协议 | 描述 |
| ---- | ---- | ----------------------- |
| 5667 | HTTP | Laminar Web UI |
| 8000 | HTTP | 应用服务器 HTTP API |
| 8001 | gRPC | 应用服务器 gRPC |
| 8002 | HTTP | 应用服务器实时 API |
| 7280 | HTTP | Quickwit REST API 和 UI |
| 8903 | HTTP | 查询引擎 API |
## 环境变量
| 变量 | 描述 | 默认值 |
| --------------------------------------- | ----------------------------------- | ------------------------------------ |
| `LAMINAR_POSTGRES_VERSION` | PostgreSQL 镜像版本 | `16-alpine` |
| `LAMINAR_POSTGRES_USER` | PostgreSQL 用户名 | `postgres` |
| `LAMINAR_POSTGRES_PASSWORD` | PostgreSQL 密码 | `change_me_in_production` |
| `LAMINAR_CLICKHOUSE_VERSION` | ClickHouse 镜像版本 | `latest` |
| `LAMINAR_CLICKHOUSE_USER` | ClickHouse 用户名 | `clickhouse` |
| `LAMINAR_CLICKHOUSE_PASSWORD` | ClickHouse 密码 | `change_me_in_production` |
| `LAMINAR_SHARED_SECRET_TOKEN` | 服务间认证共享密钥 | `shared_secret_change_in_production` |
| `LAMINAR_AEAD_SECRET_KEY` | AEAD 加密密钥(64 位十六进制字符) | - |
| `LAMINAR_OPENAI_API_KEY` | OpenAI API 密钥(可选) | - |
| `LAMINAR_GOOGLE_GENERATIVE_AI_API_KEY` | Google AI 密钥(用于 Signals 功能) | - |
| `LAMINAR_FRONTEND_PORT_OVERRIDE` | Web UI 主机端口 | `5667` |
| `LAMINAR_APP_SERVER_PORT_OVERRIDE` | HTTP API 主机端口 | `8000` |
| `LAMINAR_APP_SERVER_GRPC_PORT_OVERRIDE` | gRPC 主机端口 | `8001` |
| `LAMINAR_APP_SERVER_RT_PORT_OVERRIDE` | 实时 API 主机端口 | `8002` |
## 数据卷
- `laminar_postgres_data`PostgreSQL 数据
- `laminar_clickhouse_data`ClickHouse 数据
- `laminar_clickhouse_logs`ClickHouse 日志
- `laminar_quickwit_data`Quickwit 数据
## 快速开始
1. 复制示例环境文件:
```bash
cp .env.example .env
```
2. 编辑 `.env` 并设置必需的密钥:
```dotenv
LAMINAR_POSTGRES_PASSWORD=your_secure_password
LAMINAR_CLICKHOUSE_PASSWORD=your_secure_password
LAMINAR_SHARED_SECRET_TOKEN=your_shared_secret
LAMINAR_AEAD_SECRET_KEY=your_64_character_hex_key
```
生成安全 AEAD 密钥:
```bash
openssl rand -hex 32
```
3. 启动服务:
```bash
docker compose up -d
```
4. 在浏览器中访问 http://localhost:5667
## 启用 AI 监控(Signals
要启用 Signals 功能,请设置 Google Generative AI API 密钥:
```dotenv
LAMINAR_GOOGLE_GENERATIVE_AI_API_KEY=your_key_here
```
## SDK 配置
在使用自托管实例时使用 Laminar SDK
**Python**
```python
from lmnr import Laminar
Laminar.initialize(
project_api_key="<LMNR_PROJECT_API_KEY>",
base_url="http://localhost:8000"
)
```
**TypeScript**
```typescript
import { Laminar } from '@lmnr-ai/lmnr';
Laminar.initialize({
projectApiKey: process.env.LMNR_PROJECT_API_KEY,
baseUrl: "http://localhost:8000"
});
```
## 文档
完整文档请访问:https://laminar.sh/docs
## 资源需求
最低推荐资源配置:
| 服务 | CPU | 内存 |
| ------------ | ---- | ---- |
| frontend | 0.25 | 256M |
| app-server | 0.5 | 512M |
| postgres | 0.25 | 256M |
| clickhouse | 0.5 | 512M |
| quickwit | 0.25 | 256M |
| query-engine | 0.25 | 128M |
最低总计:约 2 核 CPU,~2GB 内存
生产环境使用时,请根据数据量增加 ClickHouse 和 PostgreSQL 的资源。
@@ -0,0 +1,18 @@
<clickhouse>
<profiles>
<default>
<async_insert>1</async_insert>
<async_insert_busy_timeout_ms>1000</async_insert_busy_timeout_ms>
<async_insert_max_data_size>1048576</async_insert_max_data_size>
<wait_for_async_insert>0</wait_for_async_insert>
</default>
<readonly>
<readonly>1</readonly>
</readonly>
</profiles>
<users>
<default>
<profile>default</profile>
</default>
</users>
</clickhouse>
+262
View File
@@ -0,0 +1,262 @@
# Laminar - Open-source observability platform for AI agents
# https://laminar.sh/
# https://github.com/lmnr-ai/lmnr
x-defaults: &defaults
restart: unless-stopped
logging:
driver: json-file
options:
max-size: 100m
max-file: '3'
services:
postgres:
<<: *defaults
image: ${GLOBAL_REGISTRY:-}postgres:${LAMINAR_POSTGRES_VERSION:-16-alpine}
environment:
- TZ=${TZ:-UTC}
- POSTGRES_USER=${LAMINAR_POSTGRES_USER:-postgres}
- POSTGRES_PASSWORD=${LAMINAR_POSTGRES_PASSWORD:-postgres_password}
- POSTGRES_DB=${LAMINAR_POSTGRES_DB:-laminar}
volumes:
- laminar_postgres_data:/var/lib/postgresql/data
healthcheck:
test:
- CMD
- pg_isready
- -U
- ${LAMINAR_POSTGRES_USER:-postgres}
- -d
- ${LAMINAR_POSTGRES_DB:-laminar}
interval: 5s
timeout: 5s
retries: 5
start_period: 10s
deploy:
resources:
limits:
cpus: ${LAMINAR_POSTGRES_CPU_LIMIT:-1.0}
memory: ${LAMINAR_POSTGRES_MEMORY_LIMIT:-1G}
reservations:
cpus: ${LAMINAR_POSTGRES_CPU_RESERVATION:-0.25}
memory: ${LAMINAR_POSTGRES_MEMORY_RESERVATION:-256M}
clickhouse:
<<: *defaults
# Version 26.3 will break queries on the spans_v0 view, if they are
# not filtered by trace_id and/or ordered by start_time. This is a
# known bug, tracking https://github.com/ClickHouse/ClickHouse/pull/101218.
# We will pin to the earliest stable version once this is fixed
image: ${GLOBAL_REGISTRY:-}clickhouse/clickhouse-server:${LAMINAR_CLICKHOUSE_VERSION:-latest}
environment:
- TZ=${TZ:-UTC}
- CLICKHOUSE_USER=${LAMINAR_CLICKHOUSE_USER:-clickhouse}
- CLICKHOUSE_PASSWORD=${LAMINAR_CLICKHOUSE_PASSWORD:-clickhouse_password}
volumes:
- laminar_clickhouse_data:/var/lib/clickhouse
- laminar_clickhouse_logs:/var/log/clickhouse-server
- ./clickhouse-profiles-config.xml:/etc/clickhouse-server/users.d/lmnar.xml:ro
ulimits:
nofile:
soft: 262144
hard: 262144
healthcheck:
test:
- CMD
- wget
- --no-verbose
- --tries=1
- --spider
- http://localhost:8123/ping
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
deploy:
resources:
limits:
cpus: ${LAMINAR_CLICKHOUSE_CPU_LIMIT:-2.0}
memory: ${LAMINAR_CLICKHOUSE_MEMORY_LIMIT:-2G}
reservations:
cpus: ${LAMINAR_CLICKHOUSE_CPU_RESERVATION:-0.5}
memory: ${LAMINAR_CLICKHOUSE_MEMORY_RESERVATION:-512M}
quickwit:
<<: *defaults
image: ${GLOBAL_REGISTRY:-}quickwit/quickwit:${LAMINAR_QUICKWIT_VERSION:-v0.8.2}
command:
- run
environment:
- TZ=${TZ:-UTC}
- QW_DATA_DIR=/quickwit/qwdata
volumes:
- laminar_quickwit_data:/quickwit/qwdata
ports:
- '${LAMINAR_QUICKWIT_PORT_OVERRIDE:-7280}:7280'
healthcheck:
test:
- CMD
- curl
- -f
- http://localhost:7280/health/livez
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
deploy:
resources:
limits:
cpus: ${LAMINAR_QUICKWIT_CPU_LIMIT:-1.0}
memory: ${LAMINAR_QUICKWIT_MEMORY_LIMIT:-1G}
reservations:
cpus: ${LAMINAR_QUICKWIT_CPU_RESERVATION:-0.25}
memory: ${LAMINAR_QUICKWIT_MEMORY_RESERVATION:-256M}
query-engine:
<<: *defaults
image: ${LAMINAR_QUERY_ENGINE_REGISTRY:-ghcr.io/lmnr-ai/}query-engine:${LAMINAR_QUERY_ENGINE_VERSION:-latest}
environment:
- TZ=${TZ:-UTC}
- PORT=8903
ports:
- '${LAMINAR_QUERY_ENGINE_PORT_OVERRIDE:-8903}:8903'
healthcheck:
test:
- CMD
- wget
- --no-verbose
- --tries=1
- --spider
- http://localhost:8903/health
interval: 10s
timeout: 5s
retries: 3
start_period: 10s
deploy:
resources:
limits:
cpus: ${LAMINAR_QUERY_ENGINE_CPU_LIMIT:-1.0}
memory: ${LAMINAR_QUERY_ENGINE_MEMORY_LIMIT:-512M}
reservations:
cpus: ${LAMINAR_QUERY_ENGINE_CPU_RESERVATION:-0.25}
memory: ${LAMINAR_QUERY_ENGINE_MEMORY_RESERVATION:-128M}
app-server:
<<: *defaults
image: ${LAMINAR_APP_SERVER_REGISTRY:-ghcr.io/lmnr-ai/}app-server:${LAMINAR_APP_SERVER_VERSION:-latest}
environment:
- TZ=${TZ:-UTC}
- PORT=8000
- GRPC_PORT=8001
- RT_PORT=8002
- DATABASE_URL=postgres://${LAMINAR_POSTGRES_USER:-postgres}:${LAMINAR_POSTGRES_PASSWORD:-postgres_password}@postgres:5432/${LAMINAR_POSTGRES_DB:-laminar}
- SHARED_SECRET_TOKEN=${LAMINAR_SHARED_SECRET_TOKEN:-shared_secret}
- CLICKHOUSE_URL=http://clickhouse:8123
- CLICKHOUSE_USER=${LAMINAR_CLICKHOUSE_USER:-clickhouse}
- CLICKHOUSE_PASSWORD=${LAMINAR_CLICKHOUSE_PASSWORD:-clickhouse_password}
- CLICKHOUSE_RO_USER=${LAMINAR_CLICKHOUSE_USER:-clickhouse}
- CLICKHOUSE_RO_PASSWORD=${LAMINAR_CLICKHOUSE_PASSWORD:-clickhouse_password}
- ENVIRONMENT=LITE
- AEAD_SECRET_KEY=${LAMINAR_AEAD_SECRET_KEY:-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef}
- QUERY_ENGINE_URL=http://query-engine:8903
- QUICKWIT_SEARCH_URL=http://quickwit:7280
- QUICKWIT_INGEST_URL=http://quickwit:7281
- QUICKWIT_SPANS_INDEX_ID=spans_v2
- GOOGLE_GENERATIVE_AI_API_KEY=${LAMINAR_GOOGLE_GENERATIVE_AI_API_KEY:-}
ports:
- '${LAMINAR_APP_SERVER_PORT_OVERRIDE:-8000}:8000'
- '${LAMINAR_APP_SERVER_GRPC_PORT_OVERRIDE:-8001}:8001'
- '${LAMINAR_APP_SERVER_RT_PORT_OVERRIDE:-8002}:8002'
depends_on:
postgres:
condition: service_healthy
clickhouse:
condition: service_healthy
quickwit:
condition: service_healthy
query-engine:
condition: service_healthy
healthcheck:
test:
- CMD
- wget
- --no-verbose
- --tries=1
- --spider
- http://localhost:8000/health
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
deploy:
resources:
limits:
cpus: ${LAMINAR_APP_SERVER_CPU_LIMIT:-2.0}
memory: ${LAMINAR_APP_SERVER_MEMORY_LIMIT:-2G}
reservations:
cpus: ${LAMINAR_APP_SERVER_CPU_RESERVATION:-0.5}
memory: ${LAMINAR_APP_SERVER_MEMORY_RESERVATION:-512M}
frontend:
<<: *defaults
image: ${LAMINAR_FRONTEND_REGISTRY:-ghcr.io/lmnr-ai/}frontend:${LAMINAR_FRONTEND_VERSION:-latest}
environment:
- TZ=${TZ:-UTC}
- PORT=5667
- DATABASE_URL=postgres://${LAMINAR_POSTGRES_USER:-postgres}:${LAMINAR_POSTGRES_PASSWORD:-postgres_password}@postgres:5432/${LAMINAR_POSTGRES_DB:-laminar}
- BACKEND_URL=http://app-server:8000
- BACKEND_RT_URL=http://app-server:8002
- SHARED_SECRET_TOKEN=${LAMINAR_SHARED_SECRET_TOKEN:-shared_secret}
- NEXTAUTH_URL=${LAMINAR_NEXTAUTH_URL:-http://localhost:5667}
- NEXTAUTH_SECRET=${LAMINAR_NEXTAUTH_SECRET:-nextauth_secret_change_in_production}
- NEXT_PUBLIC_URL=${LAMINAR_NEXT_PUBLIC_URL:-http://localhost:5667}
- ENVIRONMENT=LITE
- CLICKHOUSE_URL=http://clickhouse:8123
- CLICKHOUSE_USER=${LAMINAR_CLICKHOUSE_USER:-clickhouse}
- CLICKHOUSE_PASSWORD=${LAMINAR_CLICKHOUSE_PASSWORD:-clickhouse_password}
- CLICKHOUSE_RO_USER=${LAMINAR_CLICKHOUSE_USER:-clickhouse}
- CLICKHOUSE_RO_PASSWORD=${LAMINAR_CLICKHOUSE_PASSWORD:-clickhouse_password}
- QUICKWIT_SEARCH_URL=http://quickwit:7280
- OPENAI_API_KEY=${LAMINAR_OPENAI_API_KEY:-}
- AEAD_SECRET_KEY=${LAMINAR_AEAD_SECRET_KEY:-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef}
- GOOGLE_GENERATIVE_AI_API_KEY=${LAMINAR_GOOGLE_GENERATIVE_AI_API_KEY:-}
ports:
- '${LAMINAR_FRONTEND_PORT_OVERRIDE:-5667}:5667'
depends_on:
postgres:
condition: service_healthy
clickhouse:
condition: service_healthy
quickwit:
condition: service_healthy
query-engine:
condition: service_healthy
app-server:
condition: service_healthy
healthcheck:
test:
- CMD
- wget
- --no-verbose
- --tries=1
- --spider
- http://localhost:5667/api/health
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
deploy:
resources:
limits:
cpus: ${LAMINAR_FRONTEND_CPU_LIMIT:-1.0}
memory: ${LAMINAR_FRONTEND_MEMORY_LIMIT:-1G}
reservations:
cpus: ${LAMINAR_FRONTEND_CPU_RESERVATION:-0.25}
memory: ${LAMINAR_FRONTEND_MEMORY_RESERVATION:-256M}
volumes:
laminar_postgres_data:
laminar_clickhouse_data:
laminar_clickhouse_logs:
laminar_quickwit_data: