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)、5432、8123、9000、6379 等。如果冲突,可修改 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
相关推荐
分布式存储与RustFS几秒前
给 RustFS 桶加一层内存缓存:用 Alluxio 让热数据少跑一遍网络
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
Oiiouui27 分钟前
linux服务器部署Logto后端与对应前端的实现
linux·服务器·前端·后端
ITKEY_1 小时前
用 Emacs Dired 实现 em:退出文件管理器后,让终端自动切换目录
linux·服务器·emacs
wt95271 小时前
VMware 虚拟机磁盘扩容实战文档(Ubuntu 22.04 + LVM)
linux·后端
就像楞次定律1 小时前
【Linux 学习记之二】C++ 构建体系与底层链接机制的深度透视(2)
linux·后端
Decay__1 小时前
22_MySQL 运维自动化平台 —— 部署编排 + 监控 + 巡检 + 告警 + 工单闭环一体化
运维·数据库·sql·mysql·架构
无足鸟ICT1 小时前
【RHCA+】slabtop命令(查看slab缓存)
linux
且从容.1 小时前
Ubuntu 安装 Docker
linux·ubuntu·docker
青梅味猪大肠2 小时前
【操作系统-60】临近适应算法
java·linux·开发语言·嵌入式硬件·算法·操作系统
迪康coolmu3 小时前
企业U盘管控落地实战:基于迪康端点安全一体化管理系统的移动存储安全实践
运维·人工智能·经验分享·笔记·安全·电脑