Files
TrulyMEM-TrueHumanMEM/scripts/install_neo4j_ubuntu.sh

236 lines
8.2 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# =============================================================================
# Neo4j 一键安装配置脚本 - Ubuntu/Debian
# =============================================================================
set -e
echo "========================================"
echo "Neo4j 一键安装脚本 - Ubuntu/Debian"
echo "========================================"
# 检测是否为 root
if [ "$EUID" -eq 0 ]; then
echo "[Info] Running as root"
SUDO=""
else
echo "[Info] Running as user, will use sudo"
SUDO="sudo"
fi
# -------------------------------------------------------------------------
# 1. 检查 Java 环境
# -------------------------------------------------------------------------
echo "[1/6] 检查 Java 环境..."
if command -v java &> /dev/null; then
java_version=$(java -version 2>&1 | head -n 1)
echo " 已安装: $java_version"
else
echo " 未检测到 Java安装 OpenJDK 17..."
$SUDO apt update
$SUDO apt install -y openjdk-17-jre-headless
echo " Java 安装完成"
fi
# -------------------------------------------------------------------------
# 2. 添加 Neo4j apt 源
# -------------------------------------------------------------------------
echo "[2/6] 添加 Neo4j apt 源..."
# 安装依赖
$SUDO apt install -y curl gnupg
# 添加 GPG key
curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key | $SUDO gpg --dearmor -o /usr/share/keyrings/neo4j.gpg
# 添加 repository - 只使用 stable latest5.0 已不可用)
echo "deb [signed-by=/usr/share/keyrings/neo4j.gpg] https://debian.neo4j.com stable latest" | $SUDO tee /etc/apt/sources.list.d/neo4j.list
# 允许 apt update 失败继续,但只关注 Neo4j
$SUDO apt update -o Dir::Etc::sourcelist="sources.list.d/neo4j.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="false" 2>/dev/null || true
# -------------------------------------------------------------------------
# 3. 安装 Neo4j
# -------------------------------------------------------------------------
echo "[3/6] 安装 Neo4j Community Edition..."
# 尝试通过 apt 安装,如果失败则使用备用方案
if $SUDO apt install -y neo4j 2>/dev/null; then
echo " Neo4j 通过 apt 安装成功"
else
echo " apt 安装失败,尝试使用 Docker..."
# 检查并安装 Docker如果未安装
if ! command -v docker &> /dev/null; then
echo " 安装 Docker..."
$SUDO apt install -y docker.io 2>/dev/null || true
fi
# 如果 Docker 可用,使用 Docker 启动 Neo4j
if command -v docker &> /dev/null; then
# 检查是否有已存在的容器
EXISTING=$(docker ps -a --filter "name=neo4j" --format "{{.Names}}" | head -1)
if [ -n "$EXISTING" ]; then
echo " 找到已有 Neo4j 容器: $EXISTING"
docker start "$EXISTING" 2>/dev/null || true
# 尝试从环境变量获取密码
NEO4J_AUTH=$(docker inspect "$EXISTING" --format '{{.Config.Env}}' 2>/dev/null | grep -o 'NEO4J_AUTH=[^ ]*' | cut -d'=' -f2)
if [ -n "$NEO4J_AUTH" ]; then
NEO4J_PASSWORD=$(echo "$NEO4J_AUTH" | cut -d'/' -f2)
fi
else
# 生成随机密码
NEO4J_PASS=$(openssl rand -hex 8 2>/dev/null || echo "openclaw$(date +%s)")
docker run -d --name openclaw-neo4j \
-p 7474:7474 -p 7687:7687 \
-e NEO4J_AUTH=neo4j/${NEO4J_PASS} \
-e NEO4J_PLUGINS='["apoc"]' \
neo4j:5 || true
echo " Neo4j Docker 容器已启动"
echo " 密码: $NEO4J_PASS"
NEO4J_PASSWORD="$NEO4J_PASS"
# 保存密码到文件
echo "$NEO4J_PASS" > "$PROJECT_DIR/.neo4j_pass"
fi
else
echo " 无法安装 Neo4j请手动安装或使用 Docker"
exit 1
fi
fi
# -------------------------------------------------------------------------
# 4. 配置 Neo4j
# -------------------------------------------------------------------------
echo "[4/6] 配置 Neo4j..."
# 检测是否使用 Docker
if command -v docker &> /dev/null && docker ps 2>/dev/null | grep -q neo4j; then
echo " 检测到 Neo4j Docker 容器,跳过配置步骤"
NEO4J_IS_DOCKER=true
else
NEO4J_IS_DOCKER=false
# 允许远程访问
$SUDO sed -i 's/#server.default_listen_address=0.0.0.0/server.default_listen_address=0.0.0.0/' /etc/neo4j/neo4j.conf 2>/dev/null || true
# 关闭增强监控(开发环境)
$SUDO sed -i 's/#dbms.security.procedures.unrestricted=.*/dbms.security.procedures.unrestricted=apoc.*/' /etc/neo4j/neo4j.conf 2>/dev/null || true
# 启用 APOC
$SUDO sed -i 's/#dbms.security.procedures.unallowed=.*/dbms.security.procedures.unallowed=apoc.*/' /etc/neo4j/neo4j.conf 2>/dev/null || true
fi
# -------------------------------------------------------------------------
# 5. 启动 Neo4j
# -------------------------------------------------------------------------
echo "[5/6] 启动 Neo4j 服务..."
if [ "$NEO4J_IS_DOCKER" = "true" ]; then
docker start neo4j 2>/dev/null || true
sleep 5
echo " Neo4j Docker 容器已启动"
else
$SUDO systemctl enable neo4j 2>/dev/null || true
$SUDO systemctl start neo4j 2>/dev/null || true
sleep 5
if $SUDO systemctl is-active --quiet neo4j 2>/dev/null; then
echo " Neo4j 已启动"
else
echo " 警告: Neo4j 启动可能失败"
fi
fi
# -------------------------------------------------------------------------
# 6. 安装 Python 依赖
# -------------------------------------------------------------------------
echo "[6/6] 配置 Python 虚拟环境..."
# 创建项目目录和虚拟环境
PROJECT_DIR="$HOME/openclaw"
mkdir -p "$PROJECT_DIR"
cd "$PROJECT_DIR"
# 创建虚拟环境(使用 virtualenv 以保证兼容性)
if ! command -v virtualenv &> /dev/null; then
$SUDO apt install -y python3-virtualenv
fi
python3 -m virtualenv venv
source venv/bin/activate
# 安装依赖
pip install --upgrade pip
pip install neo4j openai
# 获取 Neo4j 密码
NEO4J_PASSWORD="neo4j"
RUNNING_CONTAINER=$(docker ps --filter "name=neo4j" --format "{{.Names}}" 2>/dev/null | head -1)
if [ -n "$RUNNING_CONTAINER" ]; then
# 运行中的容器,检查是否已有 auth 文件
if docker exec "$RUNNING_CONTAINER" test -f /var/lib/neo4j/data/neo4j.auth 2>/dev/null; then
echo " 检测到运行中的 Neo4j 容器: $RUNNING_CONTAINER"
fi
fi
# 检查之前是否保存过密码
if [ -f "$PROJECT_DIR/.neo4j_pass" ]; then
NEO4J_PASSWORD=$(cat "$PROJECT_DIR/.neo4j_pass")
fi
# 创建环境变量文件
cat > .env << EOF
DEEPSEEK_API_KEY=your-api-key-here
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=${NEO4J_PASSWORD}
EOF
echo " 虚拟环境已创建: $PROJECT_DIR/venv"
echo " Neo4j 密码: $NEO4J_PASSWORD"
echo " 激活: source $PROJECT_DIR/venv/bin/activate"
# -------------------------------------------------------------------------
# 检查是否需要立即运行
# -------------------------------------------------------------------------
if [ "$1" = "--run" ] || [ "$1" = "-r" ]; then
echo ""
echo "========================================"
echo "启动 OpenClaw 对话 Demo..."
echo "========================================"
echo "请设置 DEEPSEEK_API_KEY 后按回车继续..."
read -p "输入 API Key (或直接回车跳过): " user_api_key
if [ -n "$user_api_key" ]; then
export DEEPSEEK_API_KEY="$user_api_key"
fi
# 导出 Neo4j 密码
export NEO4J_PASSWORD="$NEO4J_PASSWORD"
source venv/bin/activate
cd /home/program/graph_enable_ability
python openclaw_neo4j_demo.py
exit 0
fi
# -------------------------------------------------------------------------
# 完成
# -------------------------------------------------------------------------
echo ""
echo "========================================"
echo "安装完成!"
echo "========================================"
echo ""
echo "Neo4j 控制台: http://localhost:7474"
echo "默认用户: neo4j"
echo "默认密码: neo4j"
echo ""
echo "快速启动:"
echo " $0 --run # 安装后直接运行 Demo"
echo ""
echo "或手动启动:"
echo " cd $PROJECT_DIR"
echo " source venv/bin/activate"
echo " python /home/program/graph_enable_ability/openclaw_neo4j_demo.py"