当前位置: 首页 > news >正文

手把手教你用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=clickhousepass

3. 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

服务启动后,可以通过以下方式验证各组件是否正常运行:

  1. PostgreSQL验证
docker exec -it langsmith-postgres psql -U langsmith -d langsmith -c "SELECT version();"
  1. Redis验证
docker exec -it langsmith-redis redis-cli -a redispass123 ping
  1. ClickHouse验证
curl -X POST "http://localhost:8123" -d "SELECT version()"
  1. LangSmith后端验证
curl -X GET "http://localhost:1984/health"
  1. 前端访问: 打开浏览器访问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: 4G

5.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.sh

6. 常见问题排查

6.1 服务启动失败

如果某个容器无法启动,首先检查日志:

docker compose logs <服务名>

常见问题及解决方案:

  1. 端口冲突:修改docker-compose.yml中的端口映射
  2. 内存不足:增加服务器内存或调整容器资源限制
  3. 配置错误:检查环境变量和配置文件是否正确

6.2 数据不显示

如果LangSmith界面没有显示追踪数据,检查:

  1. ClickHouse连接
curl -X POST "http://localhost:8123" -d "SHOW DATABASES"
  1. 后端日志
docker compose logs -f langsmith-backend
  1. 网络连通性
docker exec langsmith-backend ping clickhouse docker exec langsmith-backend ping postgres

6.3 性能优化建议

如果系统响应缓慢,可以考虑:

  1. 增加Redis缓存大小
  2. 优化ClickHouse表结构
  3. 为频繁查询添加数据库索引
  4. 调整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监控界面。

http://www.jsqmd.com/news/679952/

相关文章:

  • 2026冰袋生产厂家选购维度深度解析:冰袋生产厂家/大号加厚泡沫箱/生物医用泡沫箱/干冰配送/泡沫箱生产厂家/选择指南 - 优质品牌商家
  • iLQR vs DDP实战选型指南:自动驾驶场景下,到底该用哪个?
  • 2026 保姆级教程:4GB 显存微调 7B 大模型 LoRA 与 QLoRA 原理 + 完整代码 + 工业级部署
  • Python操作Minio避坑指南:从‘ImportError’到生产环境部署的8个常见问题
  • 企业AI转型最大的障碍是什么?
  • STM32F407上,用CubeMX和HAL库搞定FreeRTOS+FreeModbus从机(附环形队列优化串口)
  • 保姆级教程:用‘差分计数’这道题,彻底搞懂算法竞赛中的‘桶’与哈希表优化
  • AI 时代程序员必备:提示词工程高级技巧与实战模板全攻略(2026.4最新)
  • 如何分析enq- TM - contention_外键未建索引导致的表级锁阻塞
  • 从天线设计到声学分析:手把手教你用Python贝塞尔函数解决5个经典工程问题
  • 微积分基本定理实战:5个常见积分上限函数求导案例解析
  • 2026金属舵机选购指南:航模车模舵机/舵机云台/舵机公司/舵机厂家/舵机定制/舵机精度/转台舵机/转向能机/金属舵机/选择指南 - 优质品牌商家
  • 告别混乱提示!用SE91消息类统一管理你的SAP Fiori/ABAP程序用户交互
  • 海康iSC平台API对接门禁权限,别再乱调接口了!四种场景保姆级调用流程与避坑指南
  • 智能茅台预约系统:解放双手的自动化解决方案完全指南
  • 如何在响应式网页中精准居中表单(CSS绝对定位 + transform技巧)
  • 兔抗MLL1抗体亲和纯化,批次间稳定,低背景,高信噪比
  • 从战场到物流:多无人机路径规划中的A*、RRT和MPC到底该怎么选?
  • 从Victim Cache到CAM:深入ARM A78 CPU,看现代处理器如何‘抢救’Cache Miss
  • RTKLIB数据处理全流程实战:从观测文件下载到RTKPOST解算出图
  • 如何在 Go 方法中正确修改切片类型
  • 兔抗ASH2抗体亲和纯化,四平台验证,满足表观遗传学全流程需求
  • 别再乱设random.seed了!PyTorch模型可复现性实战指南(附完整代码)
  • 2026养虫室选型技术分享:低温型人工气候室、保鲜库、催芽室、全天候智能人工气候室、医药冷库、培养架型气候室、恒温恒湿库选择指南 - 优质品牌商家
  • Android应用保活完整指南:突破系统限制实现永久后台运行
  • 5分钟掌握:Blender 3MF格式完整导入导出终极指南
  • [大模型实战 - 完结篇] 告别孤岛:拥抱 MCP 协议,为大模型打造标准“USB 接口”
  • Java 8 Comparator.reversed() 实战避坑:为什么你的倒序排序结果和预期不一样?
  • 2026年比较好的定制集装箱推荐品牌厂家 - 品牌宣传支持者
  • CSS如何让背景图片在容器内居中_使用background-position设为center