diff --git a/scripts/deploy/2-install-dependency/install_openEulerIntelligence.sh b/scripts/deploy/2-install-dependency/install_openEulerIntelligence.sh index c6600b180021130339061909d3686dbcbd5e12ee..a8295364eea2f386c8b11eb9cedab519fb8fafe9 100644 --- a/scripts/deploy/2-install-dependency/install_openEulerIntelligence.sh +++ b/scripts/deploy/2-install-dependency/install_openEulerIntelligence.sh @@ -47,6 +47,55 @@ EOF dnf makecache } +# 安装MinIO +install_minio() { + echo -e "${COLOR_INFO}[Info] 开始安装MinIO...${COLOR_RESET}" + local minio_dir="/opt/minio" + if ! mkdir -p "$minio_dir"; then + echo -e "${COLOR_ERROR}[Error] 创建目录失败: $minio_dir${COLOR_RESET}" + return 1 + fi + ! is_x86_architecture || { + local minio_url="https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20250524170830.0.0-1.x86_64.rpm" + local minio_src="../5-resource/rpm/minio-20250524170830.0.0-1.x86_64.rpm" + local minio_file="/opt/minio/minio-20250524170830.0.0-1.x86_64.rpm" + + if [ -f "$minio_src" ]; then + cp -r "$minio_src" "$minio_file" + sleep 1 + fi + if [ ! -f "$minio_file" ]; then + echo -e "${COLOR_INFO}[Info] 正在下载MinIO软件包...${COLOR_RESET}" + if ! wget "$minio_url" --no-check-certificate -O "$minio_file"; then + echo -e "${COLOR_ERROR}[Error] MinIO下载失败${COLOR_RESET}" + return 1 + fi + fi + + dnf install -y $minio_file || { + echo -e "${COLOR_ERROR}[Error] MinIO安装失败${COLOR_RESET}" + return 1 + } + echo -e "${COLOR_SUCCESS}[Success] MinIO安装成功...${COLOR_RESET}" + return 0 + } + echo -e "${COLOR_INFO}[Info] 下载MinIO二进制文件(aarch64)...${COLOR_RESET}" + local minio_url="https://dl.min.io/server/minio/release/linux-arm64/minio" + local temp_dir=$minio_dir + local minio_path="../5-resource/rpm/minio" + + # 检查文件是否已存在 + if [ -f "$minio_path" ]; then + cp -r $minio_path $temp_dir + echo -e "${COLOR_INFO}[Info] MinIO二进制文件已存在,跳过下载${COLOR_RESET}" + else + if ! wget -q --show-progress "$minio_url" -O "$temp_dir/minio" --no-check-certificate; then + echo -e "${COLOR_ERROR}[Error] 下载MinIO失败,请检查网络连接${COLOR_RESET}" + rm -rf "$temp_dir" + return 1 + fi + fi +} # 智能安装函数 smart_install() { local pkg=$1 @@ -415,16 +464,62 @@ install_mongodb() { return 0 } -check_pip() { +check_pip_rag() { # 定义需要检查的包和版本 declare -A REQUIRED_PACKAGES=( ["sqlalchemy"]="2.0.23" - ["paddlepaddle"]="2.6.2" + ["paddlepaddle"]="3.0.0" ["paddleocr"]="2.9.1" + ["tiktoken"]="" + ) + + local need_install=0 + local install_list=() + + echo -e "${COLOR_INFO}[Info] 检查Python依赖包...${COLOR_RESET}" + + # 检查每个包是否需要安装 + for pkg in "${!REQUIRED_PACKAGES[@]}"; do + local required_ver="${REQUIRED_PACKAGES[$pkg]}" + local installed_ver=$(pip show "$pkg" 2>/dev/null | grep '^Version:' | awk '{print $2}') + + if [[ -z "$installed_ver" ]]; then + echo -e "${COLOR_WARNING}[Warning] 未安装包: $pkg${COLOR_RESET}" + need_install=1 + if [[ -n "$required_ver" ]]; then + install_list+=("${pkg}==${required_ver}") + else + install_list+=("$pkg") + fi + elif [[ -n "$required_ver" && "$installed_ver" != "$required_ver" ]]; then + echo -e "${COLOR_WARNING}[Warning] 包版本不匹配: $pkg (已安装: $installed_ver, 需要: $required_ver)${COLOR_RESET}" + need_install=1 + install_list+=("${pkg}==${required_ver}") + else + echo -e "${COLOR_SUCCESS}[OK] 已安装: $pkg${COLOR_RESET}" + fi + done + + # 如果需要安装,则执行安装命令 + if [[ "$need_install" -eq 1 ]]; then + echo -e "${COLOR_INFO}[Info] 开始安装Python依赖...${COLOR_RESET}" + pip install --retries 10 --timeout 120 "${install_list[@]}" -i https://repo.huaweicloud.com/repository/pypi/simple || { + echo -e "${COLOR_ERROR}[Error] Python依赖安装失败!${COLOR_RESET}" + return 1 + } + echo -e "${COLOR_SUCCESS}[Success] Python依赖安装完成!${COLOR_RESET}" + else + echo -e "${COLOR_SUCCESS}[Success] Python依赖已满足要求,跳过安装${COLOR_RESET}" + fi + + return 0 +} +check_pip() { + # 定义需要检查的包和版本 + declare -A REQUIRED_PACKAGES=( ["pymongo"]="" ["requests"]="" ["pydantic"]="" - ["tiktoken"]="" ["aiohttp"]="" ) @@ -464,7 +559,7 @@ check_pip() { } echo -e "${COLOR_SUCCESS}[Success] Python依赖安装完成!${COLOR_RESET}" else - echo -e "${COLOR_SUCCESS}[Success] 所有Python依赖已满足要求,跳过安装${COLOR_RESET}" + echo -e "${COLOR_SUCCESS}[Success] Python依赖已满足要求,跳过安装${COLOR_RESET}" fi return 0 @@ -510,6 +605,10 @@ install_rag() { install_pgvector || return 1 cd "$SCRIPT_DIR" || return 1 install_zhparser || return 1 + cd "$SCRIPT_DIR" || return 1 + install_minio || return 1 + cd "$SCRIPT_DIR" || return 1 + check_pip_rag || return 1 } install_web() { local pkgs=( diff --git a/scripts/deploy/3-install-server/init_config.sh b/scripts/deploy/3-install-server/init_config.sh index 89215575c2c5e0b37bf96c1e54905dbdb60b62ad..7e7b1ab25f78e7c8b2699fec9e3b140a605f4d92 100644 --- a/scripts/deploy/3-install-server/init_config.sh +++ b/scripts/deploy/3-install-server/init_config.sh @@ -33,6 +33,156 @@ config_toml_file="../5-resource/config.toml" env_file="../5-resource/env" mysql_temp="../5-resource/mysql_temp" +is_x86_architecture() { + # 获取系统架构信息(使用 uname -m 或 arch 命令) + local arch + arch=$(uname -m) # 多数系统支持,返回架构名称(如 x86_64、i686、aarch64 等) + # 备选:arch 命令,输出与 uname -m 类似 + # arch=$(arch) + + # x86 架构的常见标识:i386、i686(32位),x86_64(64位) + if [[ $arch == i386 || $arch == i686 || $arch == x86_64 ]]; then + return 0 # 是 x86 架构,返回 0(成功) + else + return 1 # 非 x86 架构,返回 1(失败) + fi +} +# 安装配置MinIO(非x86架构专用) +install_minio_arrch64() { + # 仅在非x86架构执行(主要针对aarch64) + if is_x86_architecture; then + echo -e "${COLOR_INFO}[Info] 当前为x86架构,跳过MinIO安装流程${COLOR_RESET}" + return 0 + fi + + # 检查是否已设置密码,未设置则使用默认值 + if [ -z "$MINIO_ROOT_PASSWORD" ]; then + echo -e "${COLOR_INFO}[Info] 未指定MINIO_ROOT_PASSWORD,使用默认密码${COLOR_RESET}" + MINIO_ROOT_PASSWORD="minioadmin" # 默认为minioadmin + fi + + echo -e "${COLOR_INFO}[Info] 开始安装配置MinIO...${COLOR_RESET}" + + echo -e "${COLOR_INFO}[Info] 安装MinIO到系统目录...${COLOR_RESET}" + minio_dir="/opt/minio" + chmod +x -R "$minio_dir" + mv "$minio_dir/minio" /usr/local/bin/ || { + echo -e "${COLOR_ERROR}[Error] 无法安装MinIO到/usr/local/bin${COLOR_RESET}" + rm -rf "$minio_dir" + return 1 + } + if ! file /usr/local/bin/minio | grep -q "ARM aarch64"; then + echo -e "${COLOR_ERROR}[Error] MinIO二进制文件架构不匹配${COLOR_RESET}" + rm -f /usr/local/bin/minio + return 1 + fi + + # 4. 配置MinIO环境变量 + echo -e "${COLOR_INFO}[Info] 配置MinIO环境变量...${COLOR_RESET}" + cat >/etc/default/minio </dev/null; then + groupadd minio-user + useradd -g minio-user --shell=/sbin/nologin -r minio-user || { + echo -e "${COLOR_ERROR}[Error] 创建minio-user失败${COLOR_RESET}" + return 1 + } + fi + + mkdir -p /var/lib/minio + chown -R minio-user:minio-user /var/lib/minio || { + echo -e "${COLOR_ERROR}[Error] 无法设置/var/lib/minio权限${COLOR_RESET}" + return 1 + } + + # 6. 配置systemd服务 + echo -e "${COLOR_INFO}[Info] 配置MinIO系统服务...${COLOR_RESET}" + cat >/etc/systemd/system/minio.service <<'EOF' +[Unit] +Description=MinIO Object Storage Server +Documentation=https://min.io/docs/minio/linux/index.html +Wants=network-online.target +After=network-online.target + +[Service] +User=minio-user +Group=minio-user +EnvironmentFile=/etc/default/minio +ExecStart=/usr/local/bin/minio server $MINIO_VOLUMES +Restart=always +RestartSec=5 +LimitNOFILE=65536 + +[Install] +WantedBy=multi-user.target +EOF + + # 7. 启动并启用服务 + echo -e "${COLOR_INFO}[Info] 启动MinIO服务...${COLOR_RESET}" + systemctl daemon-reload + systemctl enable --now minio || { + echo -e "${COLOR_ERROR}[Error] MinIO服务启动失败${COLOR_RESET}" + return 1 + } + + # 8. 检查服务状态 + echo -e "${COLOR_INFO}[Info] 验证MinIO服务状态...${COLOR_RESET}" + if systemctl is-active --quiet minio; then + echo -e "${COLOR_SUCCESS}[Success] MinIO安装配置完成" + return 0 + else + echo -e "${COLOR_ERROR}[Error] MinIO服务未正常运行,请查看日志: journalctl -u minio -f${COLOR_RESET}" + return 1 + fi +} + +# 安装配置MinIO +install_minio() { + ! is_x86_architecture || { + echo -e "${COLOR_INFO}[Info] 开始配置MinIO...${COLOR_RESET}" + + cat >/etc/default/minio </dev/null; then + groupadd minio-user + useradd -g minio-user --shell=/sbin/nologin -r minio-user + fi + + mkdir -p /var/lib/minio + chown -R minio-user:minio-user /var/lib/minio + + # 5. 启动服务 + echo -e "${COLOR_INFO}[Info] 启动MinIO服务...${COLOR_RESET}" + systemctl enable --now minio || { + echo -e "${COLOR_ERROR}[Error] MinIO服务启动失败${COLOR_RESET}" + return 1 + } + + # 6. 检查服务状态 + echo -e "${COLOR_INFO}[Info] 检查MinIO服务状态...${COLOR_RESET}" + if ! systemctl is-active --quiet minio; then + echo -e "${COLOR_ERROR}[Error] MinIO服务未正常运行${COLOR_RESET}" + return 1 + fi + + echo -e "${COLOR_SUCCESS}[Success] MinIO配置完成${COLOR_RESET}" + return 0 + } + install_minio_arrch64 || return 1 + return 0 + +} update_password() { # 使用sed命令更新配置文件 sed -i "s/secret_key = .*/secret_key = '$MINIO_ROOT_PASSWORD'/" $config_toml_file @@ -391,21 +541,6 @@ configure_postgresql() { return 0 } -is_x86_architecture() { - # 获取系统架构信息(使用 uname -m 或 arch 命令) - local arch - arch=$(uname -m) # 多数系统支持,返回架构名称(如 x86_64、i686、aarch64 等) - # 备选:arch 命令,输出与 uname -m 类似 - # arch=$(arch) - - # x86 架构的常见标识:i386、i686(32位),x86_64(64位) - if [[ $arch == i386 || $arch == i686 || $arch == x86_64 ]]; then - return 0 # 是 x86 架构,返回 0(成功) - else - return 1 # 非 x86 架构,返回 1(失败) - fi -} - install_rag() { echo -e "${COLOR_INFO}[Info] 开始初始化配置 euler-copilot-rag...${COLOR_RESET}" @@ -759,6 +894,26 @@ read_install_mode() { return 0 } +init_rag() { + cd "$SCRIPT_DIR" || return 1 + install_tika || return 1 + cd "$SCRIPT_DIR" || return 1 + configure_postgresql || return 1 + cd "$SCRIPT_DIR" || return 1 + install_minio || return 1 + cd "$SCRIPT_DIR" || return 1 + install_rag || return 1 +} + +init_web() { + cd "$SCRIPT_DIR" || return 1 + enable_services || return 1 + configure_mysql || return 1 + configure_nginx || return 1 + cd "$SCRIPT_DIR" || return 1 + ./install_authhub_config.sh || return 1 +} + # 示例:根据安装模式执行对应操作(可根据实际需求扩展) install_components() { # 读取安装模式 @@ -779,23 +934,6 @@ install_components() { fi } -init_rag() { - cd "$SCRIPT_DIR" || exit 1 - install_tika || return 1 - cd "$SCRIPT_DIR" || exit 1 - configure_postgresql || exit 1 - install_rag || return 1 -} - -init_web() { - cd "$SCRIPT_DIR" || exit 1 - enable_services || return 1 - configure_mysql || return 1 - configure_nginx || return 1 - cd "$SCRIPT_DIR" || exit 1 - ./install_authhub_config.sh || return 1 -} - main() { # 获取脚本所在的绝对路径 SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) diff --git a/scripts/deploy/3-install-server/uninstall_server.sh b/scripts/deploy/3-install-server/uninstall_server.sh index 8183ebc82dcc3383904c19b43c1c7b376e60a0de..4f1e76b1f592f1acdb7d78dc16ee35d9a78d6cd4 100644 --- a/scripts/deploy/3-install-server/uninstall_server.sh +++ b/scripts/deploy/3-install-server/uninstall_server.sh @@ -119,6 +119,14 @@ uninstall_server() { rm -rf /var/lib/mongo rm -rf /var/log/mongodb rm -rf /etc/mongod.conf + rm -rf /usr/lib/euler-copilot-rag + rm -rf /var/log/openEulerIntelligence + rm -rf /etc/euler-copilot-framework + rm -rf /etc/euler-copilot-rag + rm -rf /etc/euler_Intelligence_install_mode + rm -rf /etc/nginx/conf.d/authhub.nginx.conf.bak + rm -rf /etc/systemd/system/framework.service + rm -rf /etc/systemd/system/multi-user.target.wants/framework.service # 清理系统配置 systemctl daemon-reload