langfuse linux下的安装部署

复制代码
1、git clone https://gh-proxy.com/https://github.com/langfuse/langfuse.git
2、在 langfuse目录下 创建 generate_env.sh - 为 Langfuse 生成安全的环境变量文件 .env

将脚本保存到与 docker-compose.yml 相同的目录 (通常就是 langfuse 文件夹)

复制代码
#!/bin/bash
# generate_env.sh - 为 Langfuse 生成安全的环境变量文件 .env(纯字母数字密码)

ENV_FILE=".env"

# 如果 .env 已存在,询问是否覆盖
if [ -f "$ENV_FILE" ]; then
    read -p "⚠️  文件 $ENV_FILE 已存在,是否覆盖? (y/N) " answer
    case $answer in
        [Yy]* ) echo "🔄 覆盖文件...";;
        * )     echo "❌ 已取消,未生成新文件。"; exit 1;;
    esac
fi

# 生成纯字母数字密码(十六进制,无特殊字符)
POSTGRES_PASSWORD=$(openssl rand -hex 24)          # 48 字符
DATABASE_URL="postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/postgres"
SALT=$(openssl rand -hex 16)                       # 32 字符
ENCRYPTION_KEY=$(openssl rand -hex 32)             # 64 字符(保持不变)
CLICKHOUSE_PASSWORD=$(openssl rand -hex 24)        # 48 字符
REDIS_AUTH=$(openssl rand -hex 24)                 # 48 字符

# 统一 MinIO 根密码和所有 S3 密钥(防止签名不匹配)
MINIO_ROOT_PASSWORD=$(openssl rand -hex 24)        # 48 字符
S3_COMMON_SECRET="${MINIO_ROOT_PASSWORD}"

NEXTAUTH_SECRET=$(openssl rand -hex 32)            # 64 字符

# 写入 .env 文件
cat > "$ENV_FILE" <<EOF
POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
DATABASE_URL=${DATABASE_URL}
SALT=${SALT}
ENCRYPTION_KEY=${ENCRYPTION_KEY}
CLICKHOUSE_PASSWORD=${CLICKHOUSE_PASSWORD}
REDIS_AUTH=${REDIS_AUTH}
MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}
LANGFUSE_S3_EVENT_UPLOAD_SECRET_ACCESS_KEY=${S3_COMMON_SECRET}
LANGFUSE_S3_MEDIA_UPLOAD_SECRET_ACCESS_KEY=${S3_COMMON_SECRET}
LANGFUSE_S3_BATCH_EXPORT_SECRET_ACCESS_KEY=${S3_COMMON_SECRET}
NEXTAUTH_SECRET=${NEXTAUTH_SECRET}
EOF

echo "✅ .env 文件已生成!"
echo "📁 路径: $(pwd)/${ENV_FILE}"
echo "🔐 所有密码均为纯字母数字(十六进制),无需担心特殊字符影响 URL。"
echo "⚠️  注意:所有 S3 密钥与 MinIO 根密码已统一为同一值,确保认证通过。"
复制代码
chmod +x generate_env.sh
复制代码
./generate_env.sh

生成完成后,脚本会输出文件路径,你就可以直接使用这个 .env 文件启动 Langfuse 了:

第三步:验证和启动

  1. 确保端口未被占用

    默认占用端口:3000(Web UI)、9090(MinIO API)、5432812390006379 等。如果冲突,可修改 ports 映射。

  2. 执行启动命令

复制代码
docker compose up -d
  1. 查看日志确认启动成功
复制代码
docker compose logs -f

报错了

说明你的服务器无法直接访问 Docker Hub(registry-1.docker.io)。

创建/编辑 Docker 配置文件

复制代码
{
   "registry-mirrors": [
      "https://m.daocloud.io",
      "https://docker.m.daocloud.io",
      "https://docker.1ms.run",
      "https://hub-mirror.c.163.com",
      "https://mirror.baidubce.com",
      "https://9cpn8tt6.mirror.aliyuncs.com"
   ],
   "insecure-registries": [
      "http://192.168.1.249:8086",
      "https://192.168.1.249:16443",
      "localhost:5000"
   ],
   "live-restore": true
}

修改后,务必重启 Docker

复制代码
systemctl daemon-reload
systemctl restart docker
复制代码
docker info | grep -A 2 "Registry Mirrors"

测试拉取是否成功

执行命令

cd /opt/langfuse/

docker compose up -d

开始下载了

参考:

国内部署 Langfuse v4 完整指南:镜像拉取、Docker Compose 与 Dify 无 Trace 排查_langfuse docker超时-CSDN博客

vim docker-compose.yml

复制代码
services:
  langfuse-worker:
    image: m.daocloud.io/docker.io/langfuse/langfuse-worker:4


langfuse-web:
    image: m.daocloud.io/docker.io/langfuse/langfuse:4

报错:

  1. CLICKHOUSE_PASSWORD contains special characters that are not URL-encoded. langfuse-langfuse-web-1 | HINT: Your CLICKHOUSE_PASSWORD contains special characters (&, =, #, ?, %, +, @, space) that may break the migration URL.

langfuse-web 连接 ClickHouse 时提示 Authentication failed: password is incorrect, or there is no user with such name。这通常由以下原因导致:

  • 特殊字符未转义.env 中的 CLICKHOUSE_PASSWORD=Ct4oNHroWhhbKXpjcnD8L59hnusLT0+y 包含 + 号。该密码在构建 ClickHouse 连接 URL 时会被解析为空格,导致认证失败。
  • 残留旧数据 :ClickHouse 仅在首次启动时读取环境变量初始化密码。若之前已用旧密码启动过,数据卷会保留旧配置,后续修改 .env 不会生效。
1. 修改 .env 文件中的密码

将以下三个密码改为纯字母数字组合 (不含 +, =, @, #, / 等特殊字符):

2. 删除 ClickHouse 数据卷并重启
复制代码
docker compose down
docker volume rm langfuse_langfuse_clickhouse_data
docker volume rm langfuse_langfuse_clickhouse_logs
docker compose up -d

注册用户名密码


创建 APIKEY

参考 Langfuse-开源AI观测分析平台,结合dify工作流 - LanternOps - 博客园

我们遇到了"SignatureDoesNotMatch"错误,这说明Langfuse在访问MinIO(S3兼容存储)时,使用的访问密钥与MinIO中实际配置的不匹配。

方法一:使用 sed 命令快速替换(推荐)

/opt/langfuse 目录下执行:

bash

复制代码
# 设置统一密码变量
UNIFIED_PASS="j5345YpoXw3aj4gjqK/5uUqALNIcFcFV"

# 删除已有的旧值(如果有)
sed -i '/^MINIO_ROOT_PASSWORD=/d' .env
sed -i '/^LANGFUSE_S3_EVENT_UPLOAD_SECRET_ACCESS_KEY=/d' .env
sed -i '/^LANGFUSE_S3_MEDIA_UPLOAD_SECRET_ACCESS_KEY=/d' .env
sed -i '/^LANGFUSE_S3_BATCH_EXPORT_SECRET_ACCESS_KEY=/d' .env

# 追加统一密码
echo "MINIO_ROOT_PASSWORD=${UNIFIED_PASS}" >> .env
echo "LANGFUSE_S3_EVENT_UPLOAD_SECRET_ACCESS_KEY=${UNIFIED_PASS}" >> .env
echo "LANGFUSE_S3_MEDIA_UPLOAD_SECRET_ACCESS_KEY=${UNIFIED_PASS}" >> .env
echo "LANGFUSE_S3_BATCH_EXPORT_SECRET_ACCESS_KEY=${UNIFIED_PASS}" >> .env

执行后,可以用 grep -E "MINIO|S3" .env 检查,确保四个变量的值都一致。

复制代码
重启 Langfuse 服务

docker compose down
docker compose up -d
相关推荐
NeilYuen1 小时前
用RDMA实现文件传输
linux
青禾8371 小时前
Docker 从入门到实践:镜像、容器、数据卷与 Docker Compose
运维·docker·容器
Discipline~Hai1 小时前
Linux网络编程05-sqlite3数据库
linux·c语言·网络·数据库·sqlite·linux应用软件编程
wdfk_prog1 小时前
Docker 开发环境到底要交付什么:镜像、源码与运行脚本
运维·docker·容器
Huangjin007_1 小时前
【Linux 系统篇(十七)】进程(五) :进程切换、O(1) 调度算法
linux·运维·服务器
weixin_464307631 小时前
linux虚拟机断网
linux·运维·服务器
ly-272531 小时前
IEEE PDF eXpress终稿检测踩坑记录:PDF图片字体未嵌入与LaTeX参考文献编译异常解决方法
服务器·人工智能·算法
志栋智能1 小时前
凌晨3点的告警,如何用AI在5分钟内完成定界?
运维·服务器·数据库·人工智能·自动化
λqaq71 小时前
Docker 容器入门基础:Cloud Studio 在线 Linux 环境上手
linux·运维·docker