联系管理员

开通文章发布权限

扫码 添加微信
微信图片
电话:18888888888 QQ:

SHELL赋能:JumpServer自动化部署的灵动乐章

本文聚焦于Jumpserver的自动化部署,借助强大的Shell脚本展开。详细且系统地阐述利用Shell脚本自动化部署Jumpserver的具体步骤,旨在助力读者轻松掌握自动化部署Jumpserver的方法,提升运维效率与安全性,为企业的IT系统管理筑牢坚实根基 。

脚本概述

脚本自动化了在Linux服务器上安装Jumpserver的过程,确保所需工具的安装,从GitHub下载安装包并进行解压,配置安装程序并启动Jumpserver应用程序。

#!/usr/bin/env bash
#
# Jumpserver 安装脚本优化版
#

# 版本号
VERSION=v3.6.2
# 下载地址
DOWNLOAD_URL=https://github.com
# 默认安装目录,可通过环境变量 INSTALL_DIR 自定义
INSTALL_DIR=${INSTALL_DIR:-/opt}
# 下载重试次数
DOWNLOAD_RETRIES=3

# 日志打印函数
log() {
  echo -e "[`date '+%Y-%m-%d %H:%M:%S'`] $1"
}

# 安装必要软件包的函数
function install_soft() {
    package="$1"
    log "尝试安装依赖:$package"
    if command -v dnf > /dev/null; then
      dnf -q -y install "$package"
    elif command -v yum > /dev/null; then
      yum -q -y install "$package"
    elif command -v apt > /dev/null; then
      apt-get -qqy install "$package"
    elif command -v zypper > /dev/null; then
      zypper -q -n install "$package"
    elif command -v apk > /dev/null; then
      apk add -q "$package"
      # 安装gettext-dev和python3(如果未安装gettext)
      command -v gettext >/dev/null || apk add -q gettext-dev python3
    else
      echo -e "[\033[31m ERROR \033[0m] 未找到适用的包管理器,请先手动安装 $package"
      exit 1
    fi
}

# 准备安装:检查并安装所需工具
function prepare_install() {
  local deps=(curl wget tar iptables)
  for dep in "${deps[@]}"; do
    if ! command -v $dep &>/dev/null; then
      install_soft $dep
    else
      log "$dep 已安装"
    fi
  done
}

# 下载并解压安装包
function get_installer() {
  log "准备将安装脚本下载到 ${INSTALL_DIR}/jumpserver-installer-${VERSION}"
  cd "${INSTALL_DIR}" || { log "无法进入 ${INSTALL_DIR} 目录,退出。"; exit 1; }

  if [ ! -d "${INSTALL_DIR}/jumpserver-installer-${VERSION}" ]; then
    local tarball="jumpserver-installer-${VERSION}.tar.gz"
    local download_url="${DOWNLOAD_URL}/jumpserver/installer/releases/download/${VERSION}/${tarball}"
    
    # 下载重试逻辑
    local attempt=1
    while [ $attempt -le $DOWNLOAD_RETRIES ]; do
      log "下载尝试 $attempt/$DOWNLOAD_RETRIES$download_url"
      if wget --tries=1 --timeout=60 -qO "$tarball" "$download_url"; then
        log "下载成功"
        break
      else
        log "下载失败,正在重试..."
        ((attempt++))
      fi
    done

    if [ $attempt -gt $DOWNLOAD_RETRIES ]; then
      rm -f "$tarball"
      echo -e "[\033[31m ERROR \033[0m] 下载 jumpserver-installer-${VERSION} 失败,退出。"
      exit 1
    fi

    # 解压文件
    if tar -xf "$tarball" -C "${INSTALL_DIR}"; then
      log "解压成功"
    else
      rm -rf "${INSTALL_DIR}/jumpserver-installer-${VERSION}"
      echo -e "[\033[31m ERROR \033[0m] 解压 jumpserver-installer-${VERSION} 失败,退出。"
      exit 1
    fi
    # 删除压缩包以节省空间
    rm -f "$tarball"
  else
    log "安装目录已存在,跳过下载和解压步骤"
  fi
}

# 配置安装程序并启动 Jumpserver
function config_installer() {
  local installer_path="${INSTALL_DIR}/jumpserver-installer-${VERSION}"
  cd "$installer_path" || { log "无法进入安装目录 $installer_path,退出。"; exit 1; }

  # 修改配置文件中的 VERSION 变量
  if sed -i "s/VERSION=.*/VERSION=${VERSION}/g" static.env; then
    log "配置文件 static.env 更新成功"
  else
    echo -e "[\033[31m ERROR \033[0m] 更新 static.env 失败,退出。"
    exit 1
  fi

  # 安装 Jumpserver
  if ./jmsctl.sh install; then
    log "Jumpserver 安装成功"
  else
    echo -e "[\033[31m ERROR \033[0m] Jumpserver 安装失败,退出。"
    exit 1
  fi

  # 启动 Jumpserver
  if ./jmsctl.sh start; then
    log "Jumpserver 启动成功"
  else
    echo -e "[\033[31m ERROR \033[0m] Jumpserver 启动失败,请检查日志。"
    exit 1
  fi
}

# 主函数,组织安装流程
function main(){
  # 检查操作系统是否为 macOS(Darwin)
  if [ "$(uname)" == "Darwin" ]; then
    echo -e "[\033[31m ERROR \033[0m] macOS 系统不支持该安装脚本,退出。"
    exit 1
  fi

  log "开始准备安装环境..."
  prepare_install

  log "开始下载并解压安装包..."
  get_installer

  log "开始配置并启动 Jumpserver..."
  config_installer

  log "安装和启动过程完成!"
}

# 执行主函数
main

详细分解

1. 初始化变量

VERSION=v3.6.2
DOWNLOAD_URL=https://github.com
  • VERSION: 指定要安装的Jumpserver版本。

  • DOWNLOAD_URL: 用于从GitHub下载Jumpserver安装包的URL。

2. install_soft函数

function install_soft() {
    ...
}
  • 该函数检查系统中是否存在某些包管理器(如 dnfyumaptzypperapk)。

  • 根据系统中可用的包管理器,安装必要的工具,如 curlwgettariptables

  • 如果找不到任何支持的包管理器,则打印错误信息并退出脚本。

3. prepare_install函数

function prepare_install() {
    ...
}
  • 确保所需的工具(如 curlwgettariptables)已经安装。

  • 使用 command -v 检查这些工具是否已安装,若未安装,则调用 install_soft() 安装它们。

4. get_installer函数

function get_installer() {
    ...
}
  • 该函数从GitHub下载Jumpserver安装包到 /opt/ 目录。

  • 检查安装目录是否已存在,如果不存在,它将:

    • 下载压缩包 (jumpserver-installer-${VERSION}.tar.gz)。

    • 解压文件到 /opt/ 目录。

    • 解压后删除压缩包以节省空间。

  • 如果任何步骤(下载或解压)失败,脚本会清理掉部分下载或解压的文件,并退出脚本,显示错误信息。

5. config_installer函数

function config_installer() {
    ...
}
  • 该函数修改 static.env 配置文件中的 VERSION 变量,以确保版本号正确。

  • 然后运行安装脚本 (./jmsctl.sh install),并启动Jumpserver服务 (./jmsctl.sh start)。

6. main函数

function main(){
    ...
}
  • 这是脚本的入口点。

  • 它首先检查操作系统是否为macOS(Darwin)。如果是,脚本会退出并显示错误信息,因为macOS不受支持。

  • 然后,它依次执行以下步骤:

    • 调用 prepare_install() 确保所需工具已安装。

    • 调用 get_installer() 下载并解压安装包。

    • 调用 config_installer() 配置并启动安装程序。

7. 执行脚本

main
  • 调用 main 函数,执行整个安装过程。

Reasoned for 4 seconds

这是一个优化版的Jumpserver 安装脚本,版本为 v3.6.2,以下是该脚本的详细功能和步骤:

主要功能:

  1. 版本号与下载信息

    • 该脚本专为 Jumpserver v3.6.2 版本设计。

    • 默认安装目录为 /opt,可以通过环境变量 INSTALL_DIR 自定义修改。

    • 下载地址指向 GitHub 的 Jumpserver 仓库。

  2. 日志打印功能

    • log() 函数会输出带有时间戳的日志信息,方便记录和追踪安装过程。

  3. 安装依赖包

    • 脚本会检查并根据当前系统的包管理工具(dnfyumaptzypperapk 等)自动安装必要的依赖包,如 curlwgettariptables 等。

    • 如果系统中没有找到相应的包管理工具,会提示用户手动安装。

  4. 准备安装

    • prepare_install() 函数会确保所需工具已经安装。如果工具缺失,会自动安装对应的依赖。

  5. 下载并解压安装包

    • 脚本会从指定的下载 URL 获取 Jumpserver 安装包(tar.gz 格式),并将其解压到指定的安装目录。

    • 如果下载失败,脚本会尝试重新下载最多三次。

  6. 配置文件与安装 Jumpserver

    • config_installer() 函数会检查并更新 static.env 配置文件,确保安装使用正确的版本。

    • 然后,脚本会通过 jmsctl.sh 脚本安装 Jumpserver 并启动服务。

  7. 系统检查

    • 脚本会检查当前操作系统是否为 macOS(Darwin),如果是macOS,会输出错误信息并退出,因为该脚本不支持 macOS。

关键特性与考虑事项

  1. 操作系统兼容性

    • 脚本显式声明不支持macOS(即 Darwin)。如果操作系统是macOS,脚本将提前退出并显示错误信息。

    • 支持多种Linux发行版,依赖包管理器如 dnfyumaptzypperapk

  2. 依赖管理

    • 脚本确保安装必需的工具(如 curlwgettariptables),避免因缺少依赖而导致安装失败。

  3. 错误处理

    • 如果安装过程中任何部分(如下载、解压)失败,脚本会清理临时文件并打印错误信息。

    • 这样可以确保即使出现问题,系统仍处于干净状态。

  4. 安装目录

    • 脚本假设安装目录为 /opt/。这是Linux系统上常用的系统级安装路径。

    • 它将解压安装包文件到 /opt/jumpserver-installer-${VERSION}

  5. 安装过程

    • 下载并解压安装包后,脚本修改 static.env 配置文件,设置正确的版本号。

    • 然后,它使用 jmsctl.sh 安装Jumpserver并自动启动服务。

相关文章

neo4j部署手册
Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。
DataX和DataX-WEB 安装步骤
DataX 是阿里云 DataWorks数据集成 的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、 MaxCompute(ODPS)、Hologres、DRDS, databend 等各种异构数据源之间高效的数据同步功能。
K8S集群搭建手册(集群版)
kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
Apollo部署手册
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

评论

快捷导航

把好文章收藏到微信

打开微信,扫码查看

关闭

还没有账号?立即注册