From e716bdaa3eb6cb3732eecf032373ff580c7eca1a Mon Sep 17 00:00:00 2001 From: ncd Date: Sat, 6 Dec 2025 14:54:32 +0100 Subject: [PATCH] Langflow and Langfuse working. --- bin/create_pod_langflow.sh | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/bin/create_pod_langflow.sh b/bin/create_pod_langflow.sh index 2fee02e..1d209cf 100755 --- a/bin/create_pod_langflow.sh +++ b/bin/create_pod_langflow.sh @@ -33,6 +33,9 @@ LANGFLOW_CONTAINER_PORT='7860' # Expose Langfuse Web on 8091 -> 3000 LANGFUSE_HOST_PORT='8091' LANGFUSE_CONTAINER_PORT='3000' +# MinIO API/console ports inside the pod (avoid conflict with ClickHouse native port 9000) +MINIO_API_PORT='9100' +MINIO_CONSOLE_PORT='9101' # All other services are only reachable inside the pod BIND_DIR="$HOME/.local/share/$POD_NAME" @@ -44,6 +47,8 @@ LANGFUSE_MINIO_DATA_DIR="$BIND_DIR/langfuse-minio-data" USER_SYSTEMD_DIR="$HOME/.config/systemd/user" LANGFUSE_PUBLIC_URL="http://$HOST_LOCAL_IP:$LANGFUSE_HOST_PORT" +LANGFLOW_DB_URL='postgresql://langflow:langflow@localhost:5432/langflow' + LANGFUSE_COMMON_ENV=( -e NEXTAUTH_URL="$LANGFUSE_PUBLIC_URL" -e DATABASE_URL="postgresql://langflow:langflow@localhost:5432/langfuse" @@ -61,21 +66,21 @@ LANGFUSE_COMMON_ENV=( -e LANGFUSE_S3_EVENT_UPLOAD_REGION="auto" -e LANGFUSE_S3_EVENT_UPLOAD_ACCESS_KEY_ID="minio" -e LANGFUSE_S3_EVENT_UPLOAD_SECRET_ACCESS_KEY="miniosecret" - -e LANGFUSE_S3_EVENT_UPLOAD_ENDPOINT="http://localhost:9000" + -e LANGFUSE_S3_EVENT_UPLOAD_ENDPOINT="http://localhost:$MINIO_API_PORT" -e LANGFUSE_S3_EVENT_UPLOAD_FORCE_PATH_STYLE=true -e LANGFUSE_S3_EVENT_UPLOAD_PREFIX="events/" -e LANGFUSE_S3_MEDIA_UPLOAD_BUCKET="langfuse" -e LANGFUSE_S3_MEDIA_UPLOAD_REGION="auto" -e LANGFUSE_S3_MEDIA_UPLOAD_ACCESS_KEY_ID="minio" -e LANGFUSE_S3_MEDIA_UPLOAD_SECRET_ACCESS_KEY="miniosecret" - -e LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT="http://localhost:9000" + -e LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT="http://localhost:$MINIO_API_PORT" -e LANGFUSE_S3_MEDIA_UPLOAD_FORCE_PATH_STYLE=true -e LANGFUSE_S3_MEDIA_UPLOAD_PREFIX="media/" -e LANGFUSE_S3_BATCH_EXPORT_ENABLED=false -e LANGFUSE_S3_BATCH_EXPORT_BUCKET="langfuse" -e LANGFUSE_S3_BATCH_EXPORT_PREFIX="exports/" -e LANGFUSE_S3_BATCH_EXPORT_REGION="auto" - -e LANGFUSE_S3_BATCH_EXPORT_ENDPOINT="http://localhost:9000" + -e LANGFUSE_S3_BATCH_EXPORT_ENDPOINT="http://localhost:$MINIO_API_PORT" -e LANGFUSE_S3_BATCH_EXPORT_EXTERNAL_ENDPOINT="$LANGFUSE_PUBLIC_URL" -e LANGFUSE_S3_BATCH_EXPORT_ACCESS_KEY_ID="minio" -e LANGFUSE_S3_BATCH_EXPORT_SECRET_ACCESS_KEY="miniosecret" @@ -95,7 +100,8 @@ LANGFUSE_COMMON_ENV=( # Stop existing systemd-managed pod if present, to avoid conflicts on rerun echo "Stopping systemd-managed pod 'pod-$POD_NAME.service' if it exists..." -if systemctl --user list-units --type=service --all 2>/dev/null | grep -q "pod-$POD_NAME.service"; then +if systemctl --user list-units --type=service --all 2>/dev/null | \ + grep -q "pod-$POD_NAME.service"; then systemctl --user stop "pod-$POD_NAME.service" || true fi @@ -147,8 +153,10 @@ done # Ensure separate database for Langfuse in the shared Postgres instance echo "Ensuring 'langfuse' database exists for Langfuse..." -if ! podman exec "$POSTGRES_CTR_NAME" psql -U langflow -d postgres -tc "SELECT 1 FROM pg_database WHERE datname = 'langfuse';" | grep -q 1; then - podman exec "$POSTGRES_CTR_NAME" psql -U langflow -d postgres -c "CREATE DATABASE langfuse OWNER langflow;" +if ! podman exec "$POSTGRES_CTR_NAME" psql -U langflow -d postgres \ + -tc "SELECT 1 FROM pg_database WHERE datname = 'langfuse';" | grep -q 1; then + podman exec "$POSTGRES_CTR_NAME" psql -U langflow -d postgres \ + -c "CREATE DATABASE langfuse OWNER langflow;" fi echo "Database 'langfuse' is ready for Langfuse." @@ -171,7 +179,7 @@ podman run -d --name "$MINIO_CTR_NAME" --pod "$POD_NAME" \ -e MINIO_ROOT_PASSWORD=miniosecret \ -v "$LANGFUSE_MINIO_DATA_DIR:/data:Z" \ "$MINIO_IMAGE" \ - server --address ":9000" --console-address ":9001" /data + server --address ":$MINIO_API_PORT" --console-address ":$MINIO_CONSOLE_PORT" /data echo "Container '$MINIO_CTR_NAME' started (rc=$?)" # Redis container (queue/cache for Langfuse) @@ -183,7 +191,7 @@ echo "Container '$REDIS_CTR_NAME' started (rc=$?)" # Langflow container podman run -d --name "$LANGFLOW_CTR_NAME" --pod "$POD_NAME" \ - -e LANGFLOW_DATABASE_URL=postgresql://langflow:langflow@localhost:5432/langflow \ + -e LANGFLOW_DATABASE_URL="$LANGFLOW_DB_URL" \ -e LANGFLOW_CONFIG_DIR=/app/langflow \ -e LANGFLOW_LOG_FILE=/app/langflow/langflow.log \ -e LANGFLOW_LOG_ENV=default \ @@ -242,10 +250,12 @@ echo "To view status: systemctl --user status pod-${POD_NAME}.service" echo "To view logs: journalctl --user -u pod-${POD_NAME}.service -f" # Wait for Langflow API readiness -CHECK_URL="http://$HOST_LOCAL_IP:$LANGFLOW_HOST_PORT" +CHECK_URL_LANGFLOW="http://$HOST_LOCAL_IP:$LANGFLOW_HOST_PORT" +CHECK_URL_LANGFUSE="http://$HOST_LOCAL_IP:$LANGFUSE_HOST_PORT" for attempt in $(seq 1 30); do - if curl -fsS "$CHECK_URL" >/dev/null 2>&1; then - echo "Langflow Web UI is reachable at http://$HOST_LOCAL_IP:$LANGFLOW_HOST_PORT." + if curl -fsS "$CHECK_URL_LANGFLOW" >/dev/null 2>&1; then + echo "Langflow Web UI is reachable at $CHECK_URL_LANGFLOW." + echo "Langfuse Web UI is reachable at $CHECK_URL_LANGFUSE." break fi sleep 2