飞牛OS Ollama+OpenWebUI 完整适配版脚本(v7.0)
解决问题:OpenWebUI源码包目录层级、requirements.txt路径、虚拟环境权限
适配路径:
Ollama: /vol1/@appcenter/ai_installer/ollama/bin/ollama
OpenWebUI: /vol1/@appcenter/ai_installer/ui(源码包结构)
====================== 1. 初始化与路径验证 ======================
clear
echo "===== 飞牛OS Ollama+OpenWebUI 完整适配版脚本(v7.0)====="
固定路径(飞牛OS定制版)
AI_INSTALLER="/vol1/@appcenter/ai_installer"
OLLAMA_DIR="$AI_INSTALLER/ollama"
OLLAMA_BIN="$OLLAMA_DIR/bin/ollama"
WEBUI_DIR="$AI_INSTALLER/ui"
升级包路径
OLLAMA_TGZ="/tmp/ollama-linux-amd64.tgz"
WEBUI_TGZ="/tmp/open-webui.tar.gz"
验证基础路径
if [ ! -f "$OLLAMA_BIN" ]; then
echo "❌ 未找到Ollama核心文件:$OLLAMA_BIN"
exit 1
fi
if [ ! -d "$WEBUI_DIR" ]; then
echo "❌ 未找到OpenWebUI目录:$WEBUI_DIR"
exit 1
fi
echo "✅ 确认安装路径:"
echo " Ollama核心:$OLLAMA_BIN"
echo " OpenWebUI:$WEBUI_DIR"
====================== 2. 输入版本号 ======================
echo -e "\n📌 步骤1:输入目标版本号"
read -p "请输入Ollama版本号(如0.11.11):" OLLAMA_VER
read -p "请输入OpenWebUI版本号(如0.6.28,回车跳过):" WEBUI_VER
验证Ollama版本格式
if ! echo "OLLAMA_VER" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+'; then
echo "❌ Ollama版本号格式错误(必须是x.x.x)"
exit 1
fi
echo "✅ 目标版本:Ollama vOLLAMA_VER,OpenWebUI vWEBUI_VER"
====================== 3. 验证升级包 ======================
echo -e "\n📌 步骤2:验证升级包"
if [ ! -f "$OLLAMA_TGZ" ]; then
echo "❌ 未找到Ollama升级包:$OLLAMA_TGZ"
exit 1
fi
if [ -n "WEBUI_VER" ] && [ ! -f "WEBUI_TGZ" ]; then
echo "❌ 未找到OpenWebUI升级包:$WEBUI_TGZ"
exit 1
fi
echo "✅ 所有升级包验证通过"
====================== 4. 停止服务(强制模式) ======================
echo -e "\n📌 步骤3:停止服务(强制模式)"
停止Ollama
if ps aux | grep -v grep | grep "ollama/bin/ollama" &> /dev/null; then
echo "🛑 停止所有Ollama进程"
sudo pkill -f "ollama/bin/ollama"
sleep 2
fi
停止OpenWebUI
if [ -n "$WEBUI_VER" ] && ps aux | grep -v grep | grep "ui/venv/bin/python" &> /dev/null; then
echo "🛑 停止所有OpenWebUI进程"
sudo pkill -f "ui/venv/bin/python"
sleep 2
fi
====================== 5. 备份旧版本 ======================
echo -e "\n📌 步骤4:备份旧版本"
备份Ollama
OLLAMA_BAK="AI_INSTALLER/ollama_bak_(date +%Y%m%d_%H%M%S)"
sudo mv "OLLAMA_DIR" "OLLAMA_BAK"
echo "✅ Ollama备份至:$OLLAMA_BAK"
备份OpenWebUI
if [ -n "$WEBUI_VER" ]; then
WEBUI_BAK="AI_INSTALLER/ui_bak_(date +%Y%m%d_%H%M%S)"
sudo mv "WEBUI_DIR" "WEBUI_BAK"
echo "✅ OpenWebUI备份至:$WEBUI_BAK"
fi
====================== 6. 升级Ollama ======================
echo -e "\n📌 步骤5:升级Ollama"
sudo mkdir -p "$OLLAMA_DIR"
sudo tar -xzf "OLLAMA_TGZ" -C "OLLAMA_DIR"
sudo chmod +x "$OLLAMA_BIN"
sudo chown -R GL:Users "$OLLAMA_DIR"
echo "✅ Ollama升级完成"
====================== 7. 升级OpenWebUI(适配源码包结构) ======================
if [ -n "$WEBUI_VER" ]; then
echo -e "\n📌 步骤6:升级OpenWebUI(源码包模式)"
创建WebUI目录
sudo mkdir -p "$WEBUI_DIR"
处理源码包层级:先解压到/tmp,再移动核心文件(解决版本号目录问题)
echo "🔧 解压并整理WebUI源码..."
sudo tar -xzf "$WEBUI_TGZ" -C /tmp # 解压到临时目录
自动识别源码目录(如open-webui-0.6.28)
WEBUI_SRC_DIR=$(find /tmp -maxdepth 1 -type d -name "open-webui-*" | head -n 1)
if [ -z "$WEBUI_SRC_DIR" ]; then
echo "❌ 未找到OpenWebUI源码目录,请检查升级包是否正确"
exit 1
fi
移动所有文件到目标目录
sudo mv "WEBUI_SRC_DIR"/* "WEBUI_DIR/"
清理临时文件
sudo rm -rf "$WEBUI_SRC_DIR"
修复权限
sudo chown -R GL:Users "$WEBUI_DIR"
进入WebUI目录
cd "$WEBUI_DIR" || {
echo "❌ 无法进入WebUI目录"
exit 1
}
创建并激活虚拟环境
echo "🔧 创建Python虚拟环境..."
python3 -m venv venv
source venv/bin/activate || {
echo "❌ 虚拟环境激活失败"
exit 1
}
安装依赖(指向backend目录下的requirements.txt)
echo "🔧 安装WebUI依赖(适配源码包结构)..."
pip install --upgrade pip
if [ ! -f "backend/requirements.txt" ]; then
echo "❌ 未找到backend/requirements.txt,请检查升级包是否完整"
deactivate
exit 1
fi
pip install -r backend/requirements.txt || {
echo "❌ 依赖安装失败"
deactivate
exit 1
}
deactivate # 退出虚拟环境
echo "✅ OpenWebUI升级完成(源码包模式)"
fi
====================== 8. 启动服务并验证 ======================
echo -e "\n📌 步骤7:启动服务"
启动Ollama
sudo nohup "OLLAMA_BIN" serve > "AI_INSTALLER/ollama.log" 2>&1 &
sleep 3
启动OpenWebUI(使用虚拟环境Python)
if [ -n "$WEBUI_VER" ]; then
cd "$WEBUI_DIR" || exit 1
sudo nohup ./venv/bin/python -m uvicorn backend.main:app --host 0.0.0.0 --port 3000 > "$AI_INSTALLER/webui.log" 2>&1 &
sleep 3
fi
验证Ollama版本
OLLAMA_ACTUAL=("OLLAMA_BIN" -v 2>/dev/null | awk '{print $4}')
if [ "OLLAMA_ACTUAL" = "OLLAMA_VER" ]; then
echo "🎉 Ollama升级成功(版本:$OLLAMA_ACTUAL)"
else
echo "⚠️ Ollama版本不符(实际:OLLAMA_ACTUAL,预期:OLLAMA_VER)"
fi
验证服务状态
if ps aux | grep -v grep | grep "$OLLAMA_BIN" &> /dev/null; then
echo "✅ Ollama服务运行中"
else
echo "❌ Ollama服务启动失败,日志:$AI_INSTALLER/ollama.log"
fi
if [ -n "$WEBUI_VER" ] && ps aux | grep -v grep | grep "venv/bin/python -m uvicorn" &> /dev/null; then
echo "✅ OpenWebUI服务运行中(访问:http://飞牛IP:3000)"
else
echo "❌ OpenWebUI服务启动失败,日志:$AI_INSTALLER/webui.log"
fi
====================== 9. 回滚命令 ======================
echo -e "\n===== 升级结束 ====="
echo "📌 回滚命令:"
echo " Ollama回滚:"
echo " sudo pkill -f 'ollama/bin/ollama'"
echo " sudo mv OLLAMA_BAK OLLAMA_DIR"
echo " sudo nohup OLLAMA_BIN serve > AI_INSTALLER/ollama.log 2>&1 &"
if [ -n "$WEBUI_VER" ]; then
echo " OpenWebUI回滚:"
echo " sudo pkill -f 'venv/bin/python -m uvicorn'"
echo " sudo mv WEBUI_BAK WEBUI_DIR"
echo " cd WEBUI_DIR && sudo nohup ./venv/bin/python -m uvicorn backend.main:app --host 0.0.0.0 --port 3000 > AI_INSTALLER/webui.log 2>&1 &"
fi