feat: add laminar
This commit is contained in:
@@ -104,6 +104,7 @@ These services require building custom Docker images from source.
|
||||
| [Kodbox](./src/kodbox) | 1.62 |
|
||||
| [Kong](./src/kong) | 3.8.0 |
|
||||
| [Langflow](./apps/langflow) | latest |
|
||||
| [Laminar](./src/laminar) | latest |
|
||||
| [Langfuse](./apps/langfuse) | 3.115.0 |
|
||||
| [Letta](./src/letta) | 0.16.7 |
|
||||
| [LibreChat](./apps/librechat) | v0.8.4 |
|
||||
|
||||
@@ -104,6 +104,7 @@ docker compose exec redis redis-cli ping
|
||||
| [Kodbox](./src/kodbox) | 1.62 |
|
||||
| [Kong](./src/kong) | 3.8.0 |
|
||||
| [Langflow](./apps/langflow) | latest |
|
||||
| [Laminar](./src/laminar) | latest |
|
||||
| [Langfuse](./apps/langfuse) | 3.115.0 |
|
||||
| [Letta](./src/letta) | 0.16.7 |
|
||||
| [LibreChat](./apps/librechat) | v0.8.4 |
|
||||
|
||||
@@ -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/
|
||||
@@ -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.
|
||||
@@ -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>
|
||||
@@ -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:
|
||||
Reference in New Issue
Block a user