手把手教你用Docker Compose在Ubuntu 22.04上部署LangSmith监控平台(含PostgreSQL+Redis+ClickHouse配置)
基于Docker Compose的LangSmith全栈监控平台部署指南
在当今AI技术快速迭代的背景下,构建可观测的LLM应用开发环境已成为技术团队的刚需。LangSmith作为LangChain生态中的核心监控工具,能够帮助开发者实时追踪模型调用、分析性能瓶颈并优化工作流程。本文将详细介绍如何在Ubuntu 22.04系统上,使用Docker Compose编排PostgreSQL、Redis和ClickHouse三大核心服务,搭建完整的LangSmith监控平台。
1. 环境准备与基础配置
部署LangSmith前,需要确保基础环境满足运行要求。推荐使用物理服务器或云主机,避免在资源受限的虚拟环境中运行。
硬件最低配置要求:
- CPU:4核(推荐8核)
- 内存:16GB(推荐32GB)
- 存储:100GB SSD(推荐200GB以上)
- 网络:千兆网卡
对于软件环境,我们需要准备以下组件:
# 更新系统并安装基础工具 sudo apt update && sudo apt upgrade -y sudo apt install -y curl git python3 python3-pip # 安装Docker引擎 curl -fsSL https://get.docker.com | sudo sh # 安装Docker Compose插件 sudo apt install -y docker-compose-plugin # 验证安装 docker --version docker compose version配置完成后,建议将当前用户加入docker组以避免频繁使用sudo:
sudo usermod -aG docker $USER newgrp docker提示:执行上述命令后需要重新登录才能使权限变更生效
2. 安全密钥与配置文件生成
LangSmith运行需要两类关键密钥:API密钥盐值(API Key Salt)和JWT密钥(JWT Secret)。这些密钥用于加密存储和身份验证。
生成密钥的命令如下:
# 生成API Key Salt openssl rand -base64 32 > api_key_salt.txt # 生成JWT Secret openssl rand -base64 32 > jwt_secret.txt生成的密钥应该妥善保管,建议将它们存储在安全的位置。接下来创建LangSmith的配置文件config.env:
# LangSmith核心配置 LANGCHAIN_ENV=production API_KEY_SALT=$(cat api_key_salt.txt) JWT_SECRET=$(cat jwt_secret.txt) # 数据库连接配置 POSTGRES_DB=langsmith POSTGRES_USER=langsmith POSTGRES_PASSWORD=strongpassword # Redis配置 REDIS_PASSWORD=redispass123 # ClickHouse配置 CLICKHOUSE_PASSWORD=clickhousepass3. Docker Compose编排配置
创建docker-compose.yml文件,定义完整的服务栈。我们将使用PostgreSQL 14作为主数据库,Redis 7作为缓存,ClickHouse 24作为分析型数据库。
version: '3.8' services: # PostgreSQL服务 postgres: image: postgres:14 container_name: langsmith-postgres environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"] interval: 5s timeout: 5s retries: 5 networks: - langsmith-net # Redis服务 redis: image: redis:7 container_name: langsmith-redis command: redis-server --requirepass ${REDIS_PASSWORD} volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 5s retries: 5 networks: - langsmith-net # ClickHouse服务 clickhouse: image: clickhouse/clickhouse-server:24.8 container_name: langsmith-clickhouse environment: CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD} volumes: - clickhouse_data:/var/lib/clickhouse - ./clickhouse-config.xml:/etc/clickhouse-server/config.d/custom.xml ports: - "8123:8123" # HTTP接口 - "9000:9000" # 原生接口 networks: - langsmith-net # LangSmith后端服务 langsmith-backend: image: langchain/langsmith-backend:latest container_name: langsmith-backend depends_on: postgres: condition: service_healthy redis: condition: service_healthy clickhouse: condition: service_healthy environment: - API_KEY_SALT=${API_KEY_SALT} - JWT_SECRET=${JWT_SECRET} - POSTGRES_DATABASE_URI=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB} - REDIS_DATABASE_URI=redis://:${REDIS_PASSWORD}@redis:6379/0 - CLICKHOUSE_HOST=clickhouse - CLICKHOUSE_PASSWORD=${CLICKHOUSE_PASSWORD} ports: - "1984:1984" networks: - langsmith-net # LangSmith前端服务 langsmith-frontend: image: langchain/langsmith-frontend:latest container_name: langsmith-frontend depends_on: langsmith-backend: condition: service_started environment: - VITE_BACKEND_URL=http://langsmith-backend:1984 ports: - "1980:1980" networks: - langsmith-net volumes: postgres_data: redis_data: clickhouse_data: networks: langsmith-net: driver: bridge同时创建ClickHouse的优化配置文件clickhouse-config.xml:
<yandex> <profiles> <default> <max_memory_usage>8000000000</max_memory_usage> <max_threads>8</max_threads> <background_pool_size>16</background_pool_size> <async_insert>1</async_insert> <async_insert_threads>4</async_insert_threads> </default> </profiles> </yandex>4. 服务启动与验证
配置完成后,可以启动整个服务栈:
# 加载环境变量 export $(grep -v '^#' config.env | xargs) # 启动服务 docker compose up -d # 查看服务状态 docker compose ps服务启动后,可以通过以下方式验证各组件是否正常运行:
- PostgreSQL验证:
docker exec -it langsmith-postgres psql -U langsmith -d langsmith -c "SELECT version();"- Redis验证:
docker exec -it langsmith-redis redis-cli -a redispass123 ping- ClickHouse验证:
curl -X POST "http://localhost:8123" -d "SELECT version()"- LangSmith后端验证:
curl -X GET "http://localhost:1984/health"- 前端访问: 打开浏览器访问
http://服务器IP:1980,应该能看到LangSmith的登录界面。
5. 高级配置与优化
5.1 数据库性能调优
对于生产环境,需要对数据库进行针对性优化。以下是PostgreSQL的推荐配置:
# 进入PostgreSQL容器 docker exec -it langsmith-postgres bash # 编辑PostgreSQL配置 vi /var/lib/postgresql/data/postgresql.conf建议修改以下参数:
shared_buffers = 4GB effective_cache_size = 12GB maintenance_work_mem = 1GB work_mem = 128MB random_page_cost = 1.1 max_connections = 200对于ClickHouse,我们已经在配置文件中设置了异步插入等优化参数,还可以通过以下命令进一步优化:
# 进入ClickHouse容器 docker exec -it langsmith-clickhouse bash # 执行优化命令 clickhouse-client --password clickhousepass --query " ALTER TABLE langsmith.runs MODIFY SETTING parts_to_delay_insert=1000, parts_to_throw_insert=2000; "5.2 容器资源限制
为了避免某个服务占用过多资源影响整体稳定性,可以在docker-compose.yml中为每个服务添加资源限制:
services: langsmith-backend: deploy: resources: limits: cpus: '4' memory: 8G reservations: cpus: '2' memory: 4G postgres: deploy: resources: limits: cpus: '4' memory: 6G reservations: cpus: '2' memory: 4G5.3 数据备份策略
为确保数据安全,需要建立定期备份机制。创建备份脚本backup.sh:
#!/bin/bash # 备份PostgreSQL docker exec langsmith-postgres pg_dump -U langsmith -Fc langsmith > /backups/langsmith_$(date +%Y%m%d).dump # 备份Redis docker exec langsmith-redis redis-cli -a redispass123 save docker cp langsmith-redis:/data/dump.rdb /backups/redis_$(date +%Y%m%d).rdb # 备份ClickHouse docker exec langsmith-clickhouse clickhouse-backup create docker cp langsmith-clickhouse:/var/lib/clickhouse/backup /backups/clickhouse_$(date +%Y%m%d)设置定时任务每天执行备份:
crontab -e添加以下内容:
0 2 * * * /path/to/backup.sh6. 常见问题排查
6.1 服务启动失败
如果某个容器无法启动,首先检查日志:
docker compose logs <服务名>常见问题及解决方案:
- 端口冲突:修改
docker-compose.yml中的端口映射 - 内存不足:增加服务器内存或调整容器资源限制
- 配置错误:检查环境变量和配置文件是否正确
6.2 数据不显示
如果LangSmith界面没有显示追踪数据,检查:
- ClickHouse连接:
curl -X POST "http://localhost:8123" -d "SHOW DATABASES"- 后端日志:
docker compose logs -f langsmith-backend- 网络连通性:
docker exec langsmith-backend ping clickhouse docker exec langsmith-backend ping postgres6.3 性能优化建议
如果系统响应缓慢,可以考虑:
- 增加Redis缓存大小
- 优化ClickHouse表结构
- 为频繁查询添加数据库索引
- 调整LangSmith的批处理参数
7. 系统维护与监控
为了保持系统稳定运行,建议部署监控系统。以下是使用cAdvisor和Prometheus的配置示例:
在docker-compose.yml中添加:
services: cadvisor: image: gcr.io/cadvisor/cadvisor:v0.47.0 container_name: cadvisor volumes: - /:/rootfs:ro - /var/run:/var/run:ro - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro ports: - "8080:8080" networks: - langsmith-net prometheus: image: prom/prometheus:latest container_name: prometheus volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml ports: - "9090:9090" networks: - langsmith-net创建prometheus.yml配置文件:
global: scrape_interval: 15s scrape_configs: - job_name: 'docker' static_configs: - targets: ['cadvisor:8080'] - job_name: 'langsmith' static_configs: - targets: ['langsmith-backend:1984']启动后,可以通过http://服务器IP:9090访问Prometheus监控界面。
