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 了:
第三步:验证和启动
-
确保端口未被占用 :
默认占用端口:
3000(Web UI)、9090(MinIO API)、5432、8123、9000、6379等。如果冲突,可修改ports映射。 -
执行启动命令:
docker compose up -d
- 查看日志确认启动成功:
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

报错:
- 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