创建网站平台,大连网站制作机构,云南建设厅查证网站,网络营销创意方案该脚本用于自动化安装 Open WebUI#xff0c;并支持以下功能#xff1a;
可选跳过 Ollama 安装#xff1a;通过 --no-ollama 参数跳过 Ollama 的安装。自动清理旧目录#xff1a;如果安装目录 (~/open-webui) 已存在#xff0c;脚本会自动删除旧目录并重新安装。完整的依…该脚本用于自动化安装 Open WebUI并支持以下功能
可选跳过 Ollama 安装通过 --no-ollama 参数跳过 Ollama 的安装。自动清理旧目录如果安装目录 (~/open-webui) 已存在脚本会自动删除旧目录并重新安装。完整的依赖安装包括 Python、Node.js、npm、Git 等依赖的安装。自动配置系统服务将 Open WebUI 配置为系统服务并设置开机自启。防火墙配置自动开放端口 8080以便访问 Open WebUI。更新后的脚本 bash 复制 #!/bin/bash# 遇到错误时退出脚本
set -e# 检查并设置 Conda
setup_conda() {# 如果 conda 命令不可用但目录存在if [ -d $HOME/miniconda ]; thenecho 检测到已存在的 Miniconda 安装正在配置...# 添加到 PATHexport PATH$HOME/miniconda/bin:$PATH# 初始化 bash 和 condaif [ ! -f $HOME/.bashrc ] || ! grep -q conda initialize $HOME/.bashrc; then$HOME/miniconda/bin/conda init bashsource $HOME/.bashrcfielseecho 正在安装 Miniconda...# 下载 Miniconda 安装脚本wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh# 安装 Minicondabash miniconda.sh -b -p $HOME/miniconda# 初始化 bash 和 condaexport PATH$HOME/miniconda/bin:$PATH$HOME/miniconda/bin/conda init bashsource $HOME/.bashrcfi
}# 生成随机密钥的函数
generate_secret_key() {python3 -c import secrets; print(secrets.token_urlsafe(32))
}# 显示脚本用法
usage() {echo 用法: $0 [--no-ollama] [--no-download]echo --no-ollama: 跳过 Ollama 安装echo --no-download: 跳过下载 Open WebUI 代码如果已经下载exit 1
}# 解析参数
SKIP_OLLAMAfalse
SKIP_DOWNLOADfalse
while [[ $# -gt 0 ]]; docase $1 in--no-ollama)SKIP_OLLAMAtrueshift;;--no-download)SKIP_DOWNLOADtrueshift;;*)usage;;esac
done# 检查 sudo 权限
check_sudo() {if ! sudo -n true 2/dev/null; thenecho 需要 sudo 权限来安装系统依赖。echo 请确保你有 sudo 权限或者以 root 用户运行此脚本。exit 1fi
}echo 开始安装 Open WebUI...# 检查 sudo 权限
check_sudo# 更新系统包
echo 更新系统包...
if command -v apt-get /dev/null; thensudo -n apt-get updatesudo -n apt-get upgrade -y
fi# 安装基本依赖
echo 安装基本依赖...
sudo -n apt-get install -y python3 python3-pip git curl python3-venv build-essential || { echo 安装依赖失败; exit 1; }# 安装 Node.js
echo 安装 Node.js...
if ! command -v node /dev/null; thenecho 安装 Node.js 20 LTS...# 添加 NodeSource 仓库if [ ! -f /etc/apt/sources.list.d/nodesource.list ]; thenecho 添加 NodeSource 仓库...curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo -n gpg --dearmor -o /usr/share/keyrings/nodesource.gpgecho deb [signed-by/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main | sudo -n tee /etc/apt/sources.list.d/nodesource.listsudo -n apt-get updatefi# 安装 Node.jssudo -n apt-get install -y nodejs# 验证安装if ! command -v node /dev/null; thenecho Node.js 安装失败exit 1fi
fi# 显示 Node.js 版本
echo Node.js 版本
node --version
echo npm 版本
npm --version# 安装 Ollama如果不跳过
if [[ $SKIP_OLLAMA false ]]; thenecho 安装 Ollama...curl -fsSL https://ollama.com/install.sh | sh || { echo Ollama 安装失败; exit 1; }sudo systemctl enable ollamasudo systemctl start ollama
elseecho 跳过 Ollama 安装。
fi# 检查 CUDA 环境
check_cuda() {echo 检查 CUDA 环境...if ! command -v nvidia-smi /dev/null; thenecho 警告: 未检测到 NVIDIA GPU 驱动return 1elseecho GPU 信息:nvidia-smi --query-gpugpu_name,driver_version,memory.total,memory.free,memory.used,temperature.gpu --formatcsv,noheaderreturn 0fi
}# 设置 CUDA 环境
setup_cuda() {# 检查 CUDA 是否已安装if [ -d /usr/local/cuda-11.4 ]; thenecho CUDA 11.4 已安装在 /usr/local/cuda-11.4# 设置环境变量if ! grep -q export PATH/usr/local/cuda-11.4/bin ~/.bashrc; thenecho export PATH/usr/local/cuda-11.4/bin:$PATH ~/.bashrcfiif ! grep -q export LD_LIBRARY_PATH/usr/local/cuda-11.4/lib64 ~/.bashrc; thenecho export LD_LIBRARY_PATH/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH ~/.bashrcfisource ~/.bashrcreturn 0# 如果没有安装且没有 nvcc 命令elif ! command -v nvcc /dev/null; thenecho 未检测到 CUDA toolkit正在安装...# 检查安装文件是否已存在CUDA_INSTALLERcuda_11.4.4_470.82.01_linux.runif [ ! -f $CUDA_INSTALLER ]; thenecho 下载 CUDA 11.4 安装包...wget https://developer.download.nvidia.com/compute/cuda/11.4.4/local_installers/$CUDA_INSTALLERelseecho CUDA 安装包已存在跳过下载...fiecho 安装 CUDA toolkit...sudo sh $CUDA_INSTALLER --toolkit --silent --override# 设置环境变量if ! grep -q export PATH/usr/local/cuda-11.4/bin ~/.bashrc; thenecho export PATH/usr/local/cuda-11.4/bin:$PATH ~/.bashrcfiif ! grep -q export LD_LIBRARY_PATH/usr/local/cuda-11.4/lib64 ~/.bashrc; thenecho export LD_LIBRARY_PATH/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH ~/.bashrcfisource ~/.bashrcreturn 0fireturn 1
}# 检查 GPU 和设置 CUDA
if check_cuda; thenecho 检测到 GPU设置 CUDA 环境...setup_cuda# 设置 GPU 相关环境变量export NODE_ONNX_RUNTIME_GPU1export CUDA_VISIBLE_DEVICES0# 显示 CUDA 版本echo CUDA 版本: $(nvidia-smi | grep CUDA Version | awk {print $9})# 下载 GPU 版本的 onnxruntimeecho 下载 onnxruntime GPU 版本...mkdir -p node_modules/onnxruntime-node/bin/napi-v3/linux/x64cd node_modules/onnxruntime-node/bin/napi-v3/linux/x64# 尝试多个下载源download_file() {local urls(https://mirror.ghproxy.com/https://github.com/microsoft/onnxruntime/releases/download/v1.20.1/onnxruntime-linux-x64-gpu-1.20.1.tgzhttps://hub.fastgit.xyz/microsoft/onnxruntime/releases/download/v1.20.1/onnxruntime-linux-x64-gpu-1.20.1.tgzhttps://github.com/microsoft/onnxruntime/releases/download/v1.20.1/onnxruntime-linux-x64-gpu-1.20.1.tgz)for url in ${urls[]}; doecho 尝试从 $url 下载...wget --no-check-certificate \--timeout15 \--tries3 \--continue \--inet4-only \-q --show-progress \$url return 0echo 从 $url 下载失败尝试下一个源...donereturn 1}if ! download_file; thenecho GPU 版本下载失败切换到 CPU 模式...export NODE_ONNX_RUNTIME_GPU0elseecho 解压 GPU 版本文件...tar xzf onnxruntime-linux-x64-gpu-1.20.1.tgzficd -
elseecho 未检测到 GPU将使用 CPU 模式...export NODE_ONNX_RUNTIME_GPU0# 下载 CPU 版本的 onnxruntimeecho 下载 onnxruntime CPU 版本...mkdir -p node_modules/onnxruntime-node/bin/napi-v3/linux/x64cd node_modules/onnxruntime-node/bin/napi-v3/linux/x64wget --no-check-certificate \--timeout15 \--tries3 \--continue \--inet4-only \-q --show-progress \https://github.com/microsoft/onnxruntime/releases/download/v1.20.1/onnxruntime-linux-x64-1.20.1.tgzif [ $? -eq 0 ]; thenecho 解压 CPU 版本文件...tar xzf onnxruntime-linux-x64-1.20.1.tgzelseecho 警告: onnxruntime CPU 版本下载失败ficd -
fi# 临时设置环境变量
if [ -d /usr/local/cuda-11.4 ]; thenexport PATH/usr/local/cuda-11.4/bin:$PATHexport LD_LIBRARY_PATH/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH
fi# 检查是否已经在虚拟环境中
if [ -z $VIRTUAL_ENV ]; then# 如果不在虚拟环境中则检查并设置 Condaif ! command -v conda /dev/null; thenecho Conda 未安装或不在 PATH 中正在设置...setup_condafi# 再次检查 conda 是否可用if ! command -v conda /dev/null; thenecho Conda 安装失败请手动安装 Conda 后重试exit 1fi# 确保 conda 命令可用source $HOME/.bashrceval $(conda shell.bash hook)# 检查并删除已存在的环境if conda env list | grep -q ^open-webui ; thenecho 删除已存在的 open-webui 环境...conda deactivateconda env remove -n open-webui -yfi# 创建并激活 Python 3.11 环境echo 创建 Python 3.11 环境...conda create -y -n open-webui python3.11source activate open-webui || conda activate open-webui
elseecho 检测到已存在的虚拟环境: $VIRTUAL_ENVecho 跳过创建新环境...
fi# 验证 Python 环境
echo 验证 Python 环境...
which python
python --version# 创建安装目录
echo 设置 Open WebUI 安装目录...
INSTALL_DIR/opt/open-webui
mkdir -p $INSTALL_DIR# 下载或更新 Open WebUI
if [[ $SKIP_DOWNLOAD false ]]; thenecho 下载 Open WebUI...if [ -d $INSTALL_DIR/open-webui ]; thenecho 更新 Open WebUI...cd $INSTALL_DIR/open-webuigit pullelseecho 克隆 Open WebUI...cd $INSTALL_DIRgit clone https://github.com/open-webui/open-webui.gitfi
elseecho 跳过下载 Open WebUI...if [ ! -d $INSTALL_DIR/open-webui ]; thenecho 错误Open WebUI 目录不存在于 $INSTALL_DIR/open-webuiecho 请确保目录存在或移除 --no-download 选项exit 1fi
fi# 设置权限
echo 设置目录权限...
sudo -n chown -R $USER:$USER $INSTALL_DIR# 进入项目目录
cd $INSTALL_DIR/open-webui# 安装系统依赖
echo 安装系统依赖...
if command -v apt-get /dev/null; thensudo -n apt-get updatesudo -n apt-get install -y ffmpeg
elif command -v yum /dev/null; thensudo -n yum install -y ffmpeg
elif command -v pacman /dev/null; thensudo -n pacman -S --noconfirm ffmpeg
elif command -v apk /dev/null; thensudo -n apk add --no-cache ffmpeg
elseecho 警告: 无法识别的包管理器请手动安装 ffmpeg
fi# 构建前端
echo 构建前端...
cd /opt/open-webui/open-webuiecho 清理旧的构建文件...
rm -rf node_modules package-lock.jsonecho 配置 npm...
npm config set registry https://registry.npmmirror.com
npm config set fetch-retries 5
npm config set fetch-timeout 60000
npm config set progress true
npm config set loglevel infoecho 安装前端依赖...
# 使用 pnpm 或 npm 安装依赖
if command -v pnpm /dev/null; thenecho 使用 pnpm 安装依赖...# 配置 pnpm 使用淘宝镜像pnpm config set registry https://registry.npmmirror.compnpm install --reporterdefault
elseecho 使用 npm 安装依赖...npm install --verbose
fi# 构建前端
echo 构建前端...
if command -v pnpm /dev/null; thenpnpm run build --reporterdefault
elsenpm run build --verbose
fi# 检查构建结果
if [ -d build ]; thenecho 前端构建成功
elseecho 前端构建失败请检查错误信息exit 1
fi# 初始化数据库
echo 初始化数据库...
cd backend
export PYTHONPATH/opt/open-webui/open-webui/backend# 运行数据库迁移
echo 运行数据库迁移...
if [ -f open_webui/alembic.ini ]; thencd open_webuiecho 当前目录: $(pwd)echo 运行迁移...alembic upgrade headcd ..
elseecho 在以下位置搜索 alembic.ini:find . -name alembic.ini -type fecho 错误: 找不到 alembic.iniexit 1
fi# 确保 .webui_secret_key 存在
if [ ! -f .webui_secret_key ]; thenecho 生成 secret key...head -c 12 /dev/random | base64 .webui_secret_key
fi# 设置环境变量
export WEBUI_SECRET_KEY$(cat .webui_secret_key)
export PORT8111
export HOST0.0.0.0# 启动服务
if command -v gunicorn /dev/null; thenecho 使用 gunicorn 启动...gunicorn -w 1 -k uvicorn.workers.UvicornWorker open_webui.main:app \--bind 0.0.0.0:8111 \--timeout 300 \--log-level debug \--error-logfile - \--capture-output # 保存进程 IDGUNICORN_PID$!echo Gunicorn PID: $GUNICORN_PID
elseecho 使用 uvicorn 启动...python -m uvicorn open_webui.main:app \--host 0.0.0.0 \--port 8111 \--log-level debug # 保存进程 IDUVICORN_PID$!echo Uvicorn PID: $UVICORN_PID
fi# 等待后端启动
echo 等待服务启动...
for i in {1..30}; doif curl -s http://localhost:8111/health /dev/null; thenecho 服务已启动成功echo 请访问 http://localhost:8111breakfi# 检查进程是否还在运行if [ ! -z $GUNICORN_PID ] ! ps -p $GUNICORN_PID /dev/null; thenecho 错误: Gunicorn 进程已退出breakfiif [ ! -z $UVICORN_PID ] ! ps -p $UVICORN_PID /dev/null; thenecho 错误: Uvicorn 进程已退出breakfiecho 尝试 $i/30...sleep 1
done# 如果服务没有启动显示调试信息
if ! curl -s http://localhost:8111/health /dev/null; thenecho 服务启动失败显示调试信息:echo Python 路径: $PYTHONPATHecho 当前目录: $(pwd)echo Python 版本: $(python --version)echo 已安装的包:pip listecho 目录内容:ls -laecho open_webui 目录内容:ls -la open_webui/echo 进程状态:ps aux | grep -E gunicorn|uvicornecho 端口状态:netstat -tuln | grep 8111echo 日志内容:tail -n 50 /var/log/syslog | grep -E gunicorn|uvicorn|open_webui
fi# 创建系统服务
echo 创建系统服务...
sudo tee /etc/systemd/system/open-webui-backend.service EOL
[Unit]
DescriptionOpen WebUI Backend
Afternetwork.target[Service]
Typesimple
User$USER
WorkingDirectory/opt/open-webui/open-webui/backend
ExecStart/opt/open-webui/open-webui/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app --bind 0.0.0.0:8111
EnvironmentPATH/opt/open-webui/open-webui/venv/bin
Restarton-failure
StandardOutputsyslog
StandardErrorsyslog
SyslogIdentifieropen-webui-backend[Install]
WantedBymulti-user.target
EOL# 启动并启用服务
echo 启动 Open WebUI 服务...
sudo systemctl daemon-reload
sudo systemctl enable open-webui-backend
sudo systemctl start open-webui-backend# 配置防火墙
echo 配置防火墙...
sudo ufw allow 8111/tcpecho 安装成功完成
echo 您现在可以通过 http://localhost:8111 访问 Open WebUI。
echo 首次访问时请创建一个管理员账户。
使用方法
将脚本保存为文件例如 install_open_webui.sh。赋予脚本执行权限
bash
复制chmod x install_open_webui.sh运行脚本默认安装包含 Ollamabash复制./install_open_webui.sh跳过 Ollama 安装bash复制./install_open_webui.sh --no-ollama注意事项
确保您具有 sudo 权限来运行脚本。如果安装失败可以通过以下命令查看服务日志
bash
复制sudo journalctl -u open-webui-backend如果前端构建失败请确保已正确安装 nodejs 和 npm然后手动运行以下命令
bash
复制npm install
npm run build如果有其他问题欢迎随时提问