目录
1.4、整合更新多版本linux系统仓库源和zabbix-agent多版本安装包脚本
本文提供多个Linux系统管理脚本,涵盖以下功能:
- 系统管理脚本
- 多版本替换镜像源(支持Ubuntu/Debian、CentOS/RHEL等)
- IP地址修改脚本(支持静态/DHCP配置)
- 监控工具安装
- Zabbix Agent/Agent2安装(支持多版本选择)
- 自动检测系统类型并适配安装方式
- 容器化部署
- Docker安装脚本(支持在线/离线安装)
- Harbor私有镜像仓库部署脚本
- 数据库安装
- Redis编译安装脚本(支持多版本)
- MongoDB一键安装脚本
主要特点:
- 自动识别操作系统类型和版本
- 支持阿里云镜像源替换
- 包含错误检测和网络检查
- 安装完成后自动配置服务
- 支持交互式版本选择
这些脚本适用于Linux系统管理员快速部署常用服务,提升运维效率。
1.1、多版本替换镜像源
#! /bin/bash RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' #查询版本 ID=$(cat /etc/os-release | grep -E '^ID='|cut -d "=" -f2 | tr -d "\"") #定义路径 ubuntupath="/etc/apt/sources.list" centospath="/etc/yum.repos.d/Rocky*.repo" file=/aliyun/aliyun.txt replace_ubuntu() { if [ -f $ubuntupath ];then sed -i 's#http://cn.archive.ubuntu.com/#https://mirrors.aliyun.com/#' $ubuntupath sed -i 's#http://security.ubuntu.com/#https://mirrors.aliyun.com/#' $ubuntupath echo -e "\e[31m 执行更新源:aliyun \e[0m" apt clean apt update echo -e "\e[32m 更新完成为aliyun源仓库 \e[0m" else touch $ubuntupath < $file fi } replace_centos() { echo -e "\e[31m 执行更新源:aliyun \e[0m" for file in $centospath ;do if [ -f $file ];then sed -i -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' $file else echo -e "${RED}不存在.repo文件" fi done echo -e "\e[32m 更新完成为aliyun源仓库 \e[0m" echo echo -e "$GREEN 执行清除源缓存" yum clean all echo -e "$GREEN 执行增加缓存" yum makecache echo -e "$GREEN 执行更新" yum update } case $ID in ubuntu|debian) echo -e "${GREEN}执行更新ubuntu源为aliyun" replace_ubuntu ;; centos|rhel|almalinux|rocky) echo -e "${GREEN}执行更新rocky源为aliyun" replace_centos ;; *) echo -e "${RED}不支持的操作系统:$ID" ;; esac
1.2、安装zabbix agent,agent2脚本
#! /bin/bash RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' #公共变量 ID=$(. /etc/os-release;echo $ID ) VERSION_ID=$(. /etc/os-release;echo $VERSION_ID ) package_name=zabbix-release_latest_6.0+${ID}${VERSION_ID}_all.deb centos_name=$(. /etc/os-release;echo $VERSION_ID |cut -d "." -f1 ) read -p "请输入想要下载的agent版本: " usernum ping_net() { echo -e "${YELLOW}检测网络是否正常..." for num in {1..5};do num=`ping -c$num -w1 www.bu.com` echo $num > /dev/null if [ $(echo $?) -eq 0 ];then echo -e "${GREEN}网络正常" else echo -e "${RED}网络不正常" fi done } #ubunutu agent安装 install_ubunturepo() { echo -e "$YELLOW检测是否存在zabbix包并做删除" delete_zbfile=$(find . -name "zabbix-release_latest*" -exec rm -rf ./{} \;) echo echo -e "$GREEN删除成功" echo -e "$YELLOW获取zabbix包" wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/$package_name echo echo -e "$GREEN安装zabbix包" dpkg -i ./$package_name echo if [ $usernum -eq 1 ];then echo -e "$YELLOW将zabbix的默认源替换为aliyun源" ubuntu_path=$(find /etc/apt/sources.list.d/ -name "zabbix*") for f in $ubuntu_path;do sed -i 's#repo.zabbix.com#mirrors.aliyun.com/zabbix#' $f done echo -e "$YELLOW zabbix的默认源替换为aliyun源完成" echo -e "$GREEN更新源" apt update echo echo echo -e "$GREEN安装zabbix-agent" apt -y install zabbix-agent elif [ $usernum -eq 2 ];then echo -e "$YELLOW将zabbix的默认源替换为aliyun源" ubuntu_path=$(find /etc/apt/sources.list.d/ -name "zabbix*") for f in $ubuntu_path;do sed -i 's#repo.zabbix.com#mirrors.aliyun.com/zabbix#' $f done echo -e "$YELLOW zabbix的默认源替换为aliyun源完成" echo -e "$GREEN更新源" apt update echo echo -e "$YELLOW zabbix的默认源替换为aliyun源完成" echo -e "$GREEN安装zabbix-agent2" apt -y install zabbix-agent2 fi } #centos agent安装 install_centosrepo(){ echo -e "$YELLOW检测是否存在zabbix包并做删除" delete_zbfile=$(find . -name "zabbix-release*" -exec rm -rf ./{} \;) echo -e "$GREEN删除成功" echo echo -e "$YELLOW获取zabbix包" rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-latest-6.0.el$centos_name.noarch.rpm echo if [ $usernum -eq 1 ];then echo -e "$GREEN安装zabbix_agent包" dnf clean all dnf -y install zabbix-agent echo elif [ $usernum -eq 2 ];then echo -e "$GREEN安装zabbix_agent2包" dnf clean all dnf -y install zabbix-agent2 fi echo -e "$GREEN更新源" yum update } #ubuntu,centos服务重启 server_restart() { if [ $usernum -eq 1 ];then echo -e "$GREEN重启agent服务" $(systemctl restart zabbix-agent) echo echo -e "$GREEN设置开机自启服务" $(systemctl enable --now zabbix-agent) echo echo -e "$GREEN检测服务是否存活" systemctl is-active zabbix-agent elif [ $usernum -eq 2 ];then echo -e "$GREEN重启agent2服务" $(systemctl restart zabbix-agent2) echo echo -e "$GREEN设置开机自启服务" $(systemctl enable --now zabbix-agent2) echo echo -e "$GREEN检测服务是否存活" systemctl is-active zabbix-agent2 else echo -e "$RED######未知请求######" fi } #ubuntu主函数 ubuntu_main(){ install_ubunturepo server_restart } #centos主函数 centos_main(){ install_centosrepo server_restart } case $ID in ubuntu|debian) echo -e "${GREEN}执行安装ubuntu_zabbixagent" ubuntu_main ;; centos|rhel|almalinux|rocky) echo -e "${GREEN}执行安装centos_zabbixagent" centos_main ;; *) echo -e "${RED}不支持的操作系统:$ID" ;; esac
1.3、整合更新多版本linux系统仓库源和zabbix-agent多版本安装包脚本
#! /bin/bash RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' #公共变量 ID=$(. /etc/os-release;echo $ID ) VERSION_ID=$(. /etc/os-release;echo $VERSION_ID ) package_name=zabbix-release_latest_6.0+${ID}${VERSION_ID}_all.deb centos_name=$(. /etc/os-release;echo $VERSION_ID |cut -d "." -f1 ) read -p "请输入想要下载的agent版本: " usernum #定义路径 ubuntu_repo="/etc/apt/sources.list" centos_repo="/etc/yum.repos.d/Rocky*.repo" file=/aliyun/aliyun.txt #检测网络正常是否 ping_net() { echo -e "${YELLOW}检测网络是否正常..." for num in {1..5};do num=`ping -c$num -w1 www.bu.com` echo $num > /dev/null if [ $(echo $?) -eq 0 ];then echo -e "${GREEN}网络正常" else echo -e "${RED}网络不正常" fi done } #替换ubuntu系列源路径 replace_ubuntu() { echo -e "${GREEN}执行更新ubuntu系列源为aliyun" if [ -f $ubuntu_repo ];then sed -i 's#http://cn.archive.ubuntu.com/#https://mirrors.aliyun.com/#' $ubuntu_repo sed -i 's#http://security.ubuntu.com/#https://mirrors.aliyun.com/#' $ubuntu_repo echo -e "\e[31m 执行更新源:aliyun \e[0m" apt -y clean apt -y update echo -e "\e[32m 更新完成为aliyun源仓库 \e[0m" echo echo else touch $ubuntu_repo < $file fi } #替换centos系列源路径 replace_centos() { echo -e "${GREEN}执行更新ubuntu系列源为aliyun" for file in $centos_repo ;do if [ -f $file ];then sed -i -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' $file else echo -e "${RED}不存在.repo文件" fi done echo -e "\e[32m 更新完成为aliyun源仓库 \e[0m" echo echo -e "$GREEN 执行清除源缓存" yum -y clean all echo -e "$GREEN 执行增加缓存" yum -y makecache echo -e "$GREEN 执行更新" yum -y update } #ubunutu agent安装 install_ubunturepo() { echo -e "${GREEN}*********执行安装ubuntu_zabbixagent系列***********" echo echo echo -e "$YELLOW检测是否存在zabbix包并做删除" delete_zbfile=$(find . -name "zabbix-release_latest*" -exec rm -rf ./{} \;) echo echo -e "$GREEN删除成功" echo -e "$YELLOW获取zabbix包" wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/$package_name echo echo -e "$GREEN安装zabbix包" dpkg -i ./$package_name echo if [ $usernum -eq 1 ];then echo -e "$YELLOW将zabbix的默认源替换为aliyun源" ubuntu_path=$(find /etc/apt/sources.list.d/ -name "zabbix*") for f in $ubuntu_path;do sed -i 's#repo.zabbix.com#mirrors.aliyun.com/zabbix#' $f done echo -e "$YELLOW zabbix的默认源替换为aliyun源完成" echo -e "$GREEN更新源" apt -y update echo echo echo -e "$GREEN安装zabbix-agent" apt -y install zabbix-agent elif [ $usernum -eq 2 ];then echo -e "$YELLOW将zabbix的默认源替换为aliyun源" ubuntu_path=$(find /etc/apt/sources.list.d/ -name "zabbix*") for f in $ubuntu_path;do sed -i 's#repo.zabbix.com#mirrors.aliyun.com/zabbix#' $f done echo -e "$YELLOW zabbix的默认源替换为aliyun源完成" echo -e "$GREEN更新源" apt -y update echo echo -e "$YELLOW zabbix的默认源替换为aliyun源完成" echo -e "$GREEN安装zabbix-agent2" apt -y install zabbix-agent2 fi } #centos agent安装 install_centosrepo(){ echo -e "${GREEN}*********执行安装centos_zabbixagent系列***********" echo echo echo -e "$YELLOW检测是否存在zabbix包并做删除" delete_zbfile=$(find . -name "zabbix-release*" -exec rm -rf ./{} \;) echo -e "$GREEN删除成功" echo echo -e "$YELLOW获取zabbix包" rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-latest-6.0.el$centos_name.noarch.rpm echo if [ $usernum -eq 1 ];then echo -e "$GREEN安装zabbix_agent包" dnf clean all dnf -y install zabbix-agent echo elif [ $usernum -eq 2 ];then echo -e "$GREEN安装zabbix_agent2包" dnf clean all dnf -y install zabbix-agent2 fi echo -e "$GREEN更新源" yum -y update } #ubuntu,centos服务重启 server_restart() { if [ $usernum -eq 1 ];then echo -e "$GREEN重启agent服务" $(systemctl restart zabbix-agent) echo echo -e "$GREEN设置开机自启服务" $(systemctl enable --now zabbix-agent) echo echo -e "$GREEN检测服务是否存活" systemctl is-active zabbix-agent elif [ $usernum -eq 2 ];then echo -e "$GREEN重启agent2服务" $(systemctl restart zabbix-agent2) echo echo -e "$GREEN设置开机自启服务" $(systemctl enable --now zabbix-agent2) echo echo -e "$GREEN检测服务是否存活" systemctl is-active zabbix-agent2 else echo -e "$RED######未知请求######" fi } #ubuntu主函数 ubuntu_main(){ replace_ubuntu echo -e "$RED****************************************************************************************" echo -e "$YELLOW****************************************************************************************" echo -e "$GREEN****************************************************************************************" echo echo echo install_ubunturepo echo -e "$RED****************************************************************************************" echo -e "$YELLOW****************************************************************************************" echo -e "$GREEN****************************************************************************************" echo echo echo server_restart } #centos主函数 centos_main(){ replace_centos echo -e "$RED****************************************************************************************" echo -e "$YELLOW****************************************************************************************" echo -e "$GREEN****************************************************************************************" echo echo echo install_centosrepo echo -e "$RED****************************************************************************************" echo -e "$YELLOW****************************************************************************************" echo -e "$GREEN****************************************************************************************" echo echo echo server_restart } case $ID in ubuntu|debian) ubuntu_main ;; centos|rhel|almalinux|rocky) centos_main ;; *) echo -e "${RED}不支持的操作系统:$ID" ;; esac
1.5、一键更改IP
#!/bin/bash # Linux Network Configuration Script # Supported Distributions: Ubuntu/Debian, CentOS/RHEL, Fedora, openSUSE/SLES, Arch Linux # Check root permission if [ "$(id -u)" != "0" ]; then echo "Error: This script must be run as root!" 1>&2 exit 1 fi # Detect distribution detect_distro() { if [ -f /etc/os-release ]; then . /etc/os-release DISTRO=$ID VERSION=$VERSION_ID elif [ -f /etc/centos-release ]; then DISTRO="centos" VERSION=$(grep -oE '[0-9]+\.[0-9]+' /etc/centos-release) else echo "Unsupported Linux distribution" exit 1 fi } # Backup current configuration backup_config() { local interface=$1 TIMESTAMP=$(date +%Y%m%d%H%M%S) case $DISTRO in ubuntu|debian) cp /etc/netplan/*.yaml /etc/netplan/*.yaml.bak.$TIMESTAMP 2>/dev/null ;; centos|rhel|fedora) cp /etc/sysconfig/network-scripts/ifcfg-$interface /etc/sysconfig/network-scripts/ifcfg-$interface.bak.$TIMESTAMP 2>/dev/null ;; opensuse|sles) cp /etc/sysconfig/network/ifcfg-$interface /etc/sysconfig/network/ifcfg-$interface.bak.$TIMESTAMP 2>/dev/null ;; arch) cp /etc/netctl/$interface /etc/netctl/$interface.bak.$TIMESTAMP 2>/dev/null ;; esac echo "Configuration backed up with timestamp: $TIMESTAMP" } # Configure Ubuntu/Debian (Netplan) configure_netplan() { local interface=$1 local mode=$2 local ip=${3:-""} local prefix=${4:-""} local gateway=${5:-""} local dns=${6:-""} CONFIG_FILE=$(ls /etc/netplan/*.yaml | head -n1) if [ -z "$CONFIG_FILE" ]; then CONFIG_FILE="/etc/netplan/01-network.yaml" fi # Generate Netplan config cat > "$CONFIG_FILE" << EOF network: version: 2 renderer: networkd ethernets: $interface: dhcp4: $([ "$mode" == "dhcp" ] && echo "true" || echo "false") EOF if [ "$mode" == "static" ]; then cat >> "$CONFIG_FILE" << EOF addresses: [$ip/$prefix] routes: - to: default via: $gateway nameservers: addresses: [$dns] EOF fi # Apply configuration netplan apply } # Configure CentOS/RHEL/Fedora (ifcfg) configure_rhel() { local interface=$1 local mode=$2 local ip=${3:-""} local prefix=${4:-""} local gateway=${5:-""} local dns=${6:-""} CONFIG_FILE="/etc/sysconfig/network-scripts/ifcfg-$interface" # Generate config cat > "$CONFIG_FILE" << EOF DEVICE=$interface ONBOOT=yes BOOTPROTO=$([ "$mode" == "dhcp" ] && echo "dhcp" || echo "none") EOF if [ "$mode" == "static" ]; then cat >> "$CONFIG_FILE" << EOF IPADDR=$ip PREFIX=$prefix GATEWAY=$gateway DNS1=$dns EOF fi # Apply configuration if systemctl is-active NetworkManager >/dev/null; then nmcli connection reload nmcli device reapply $interface else systemctl restart network fi } # Configure openSUSE/SLES (ifcfg) configure_suse() { local interface=$1 local mode=$2 local ip=${3:-""} local prefix=${4:-""} local gateway=${5:-""} local dns=${6:-""} CONFIG_FILE="/etc/sysconfig/network/ifcfg-$interface" # Generate config cat > "$CONFIG_FILE" << EOF BOOTPROTO=$([ "$mode" == "dhcp" ] && echo "dhcp" || echo "static") STARTMODE=auto NAME=$interface EOF if [ "$mode" == "static" ]; then cat >> "$CONFIG_FILE" << EOF IPADDR=$ip NETMASK=255.255.255.0 GATEWAY=$gateway DNS1=$dns EOF fi # Apply configuration systemctl restart network } # Configure Arch Linux (netctl) configure_arch() { local interface=$1 local mode=$2 local ip=${3:-""} local prefix=${4:-""} local gateway=${5:-""} local dns=${6:-""} CONFIG_FILE="/etc/netctl/$interface" if [ "$mode" == "dhcp" ]; then cat > "$CONFIG_FILE" << EOF Interface=$interface Connection=ethernet IP=dhcp EOF else cat > "$CONFIG_FILE" << EOF Interface=$interface Connection=ethernet IP=static Address=('$ip/$prefix') Gateway='$gateway' DNS=('$dns') EOF fi # Apply configuration netctl stop $interface 2>/dev/null netctl start $interface } # Main script detect_distro echo "Detected distribution: $DISTRO $VERSION" # Get available interfaces echo -e "\nAvailable network interfaces:" ip -o link show | awk -F': ' '{print $2}' read -p "Enter interface name: " INTERFACE # Select configuration mode PS3="Select configuration mode: " options=("Static IP" "DHCP" "Quit") select opt in "${options[@]}" do case $opt in "Static IP") MODE="static" read -p "IP Address (e.g., 192.168.1.100): " IP read -p "Subnet Prefix (e.g., 24): " PREFIX read -p "Gateway (e.g., 192.168.1.1): " GATEWAY read -p "DNS Server (e.g., 8.8.8.8): " DNS break ;; "DHCP") MODE="dhcp" break ;; "Quit") exit 0 ;; *) echo "Invalid option";; esac done # Backup and configure backup_config $INTERFACE case $DISTRO in ubuntu|debian) configure_netplan $INTERFACE $MODE $IP $PREFIX $GATEWAY $DNS ;; centos|rhel|fedora) configure_rhel $INTERFACE $MODE $IP $PREFIX $GATEWAY $DNS ;; opensuse|sles) configure_suse $INTERFACE $MODE $IP $PREFIX $GATEWAY $DNS ;; arch) configure_arch $INTERFACE $MODE $IP $PREFIX $GATEWAY $DNS ;; *) echo "Unsupported distribution: $DISTRO" exit 1 ;; esac echo -e "\nNetwork configuration applied successfully!" echo "Interface $INTERFACE configured in $MODE mode"
二、安装docker脚本
在线安装参考aliyun官网
离线安装docker
#!/bin/bash # #******************************************************************** #Author: wangxiaochun #QQ: 29308620 #Date: 2022-10-14 #FileName: install_docker_offline.sh #URL: http://www.wangxiaochun.com #Description: The test script #Copyright (C): 2022 All rights reserved #******************************************************************** #支持在线和离线安装 DOCKER_VERSION=26.1.4 #DOCKER_VERSION=26.0.0 #DOCKER_VERSION=24.0.7 #DOCKER_VERSION=24.0.5 #DOCKER_VERSION=23.0.3 #DOCKER_VERSION=20.10.19 URL=https://mirrors.tuna.tsinghua.edu.cn #URL=https://mirrors.aliyun.com #URL=https://download.docker.com color () { RES_COL=60 MOVE_TO_COL="echo -en \\033[${RES_COL}G" SETCOLOR_SUCCESS="echo -en \\033[1;32m" SETCOLOR_FAILURE="echo -en \\033[1;31m" SETCOLOR_WARNING="echo -en \\033[1;33m" SETCOLOR_NORMAL="echo -en \E[0m" echo -n "$1" && $MOVE_TO_COL echo -n "[" if [ $2 = "success" -o $2 = "0" ] ;then ${SETCOLOR_SUCCESS} echo -n $" OK " elif [ $2 = "failure" -o $2 = "1" ] ;then ${SETCOLOR_FAILURE} echo -n $"FAILED" else ${SETCOLOR_WARNING} echo -n $"WARNING" fi ${SETCOLOR_NORMAL} echo -n "]" echo } prepare () { if [ ! -e docker-${DOCKER_VERSION}.tgz ];then #wget ${URL}/docker-ce/linux/static/stable/x86_64/docker-${DOCKER_VERSION}.tgz wget ${URL}/docker-ce/linux/static/stable/x86_64/docker-${DOCKER_VERSION}.tgz fi [ $? -ne 0 ] && { echo "文件下载失败"; exit; } } install_docker () { tar xf docker-${DOCKER_VERSION}.tgz -C /usr/local/ cp /usr/local/docker/* /usr/local/bin/ cat > /lib/systemd/system/docker.service <<-EOF [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not support the cgroup feature set required # for containers run by docker ExecStart=/usr/local/bin/dockerd -H unix://var/run/docker.sock ExecReload=/bin/kill -s HUP \$MAINPID # Having non-zero Limit*s causes performance problems due to accounting overhead # in the kernel. We recommend using cgroups to do container-local accounting. LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity # Uncomment TasksMax if your systemd version supports it. # Only systemd 226 and above support this version. #TasksMax=infinity TimeoutStartSec=0 # set delegate yes so that systemd does not reset the cgroups of docker containers Delegate=yes # kill only the docker process, not all processes in the cgroup KillMode=process # restart the docker process if it exits prematurely Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target EOF systemctl daemon-reload } config_docker () { mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://si7y70hh.mirror.aliyuncs.com"] } EOF #systemctl restart docker } start_docker (){ systemctl enable --now docker docker version && color "Docker 安装成功" 0 || color "Docker 安装失败" 1 } config_docker_completion () { wget -P /etc/bash_completion.d http://www.wangxiaochun.com:8888/testdir/docker/docker_completion #source /etc/bash_completion.d/docker_completion } prepare install_docker config_docker start_docker config_docker_completion
三、安装harbor脚本
#!/bin/bash # #******************************************************************** #Author: wangxiaochun #QQ: 29308620 #Date: 2020-02-04 #FileName: install_harbor.sh #URL: http://www.wangxiaochun.com #Description: The test script #Copyright (C): 2020 All rights reserved #******************************************************************** #建议提前下载Harbor文件进行离线安装,也支持在线下载安装 #docker和docker-compose无需下载,在线安装即可 HARBOR_VERSION=2.11.0 #HARBOR_VERSION=2.10.2 #HARBOR_VERSION=2.9.1 #HARBOR_VERSION=2.9.0 #HARBOR_VERSION=2.8.2 #HARBOR_VERSION=2.7.1 #HARBOR_VERSION=2.7.0 #HARBOR_VERSION=2.6.1 #HARBOR_VERSION=2.6.0 GITHUB_PROXY=https://mirror.ghproxy.com/ HARBOR_BASE=/usr/local #HARBOR_NAME=harbor.wang.org HARBOR_NAME=`hostname -I|awk '{print $1}'` #HARBOR_NAME=10.0.0.200 DOCKER_VERSION="26.1.3" #DOCKER_VERSION="24.0.0" #DOCKER_VERSION="20.10.20" #DOCKER_VERSION="19.03.14" DOCKER_URL="http://mirrors.ustc.edu.cn" #DOCKER_URL="https://mirrors.tuna.tsinghua.edu.cn" DOCKER_COMPOSE_VERSION=2.27.1 #DOCKER_COMPOSE_VERSION=2.18.1 #DOCKER_COMPOSE_VERSION=2.6.1 #DOCKER_COMPOSE_VERSION=1.29.2 DOCKER_COMPOSE_FILE=docker-compose-linux-x86_64 HARBOR_ADMIN_PASSWORD=123456 HARBOR_IP=`hostname -I|awk '{print $1}'` COLOR_SUCCESS="echo -e \\033[1;32m" COLOR_FAILURE="echo -e \\033[1;31m" END="\033[m" . /etc/os-release UBUNTU_DOCKER_VERSION="5:${DOCKER_VERSION}~3-0~${ID}-${UBUNTU_CODENAME}" color () { RES_COL=60 MOVE_TO_COL="echo -en \\033[${RES_COL}G" SETCOLOR_SUCCESS="echo -en \\033[1;32m" SETCOLOR_FAILURE="echo -en \\033[1;31m" SETCOLOR_WARNING="echo -en \\033[1;33m" SETCOLOR_NORMAL="echo -en \E[0m" echo -n "$1" && $MOVE_TO_COL echo -n "[" if [ $2 = "success" -o $2 = "0" ] ;then ${SETCOLOR_SUCCESS} echo -n $" OK " elif [ $2 = "failure" -o $2 = "1" ] ;then ${SETCOLOR_FAILURE} echo -n $"FAILED" else ${SETCOLOR_WARNING} echo -n $"WARNING" fi ${SETCOLOR_NORMAL} echo -n "]" echo } install_docker(){ if [ $ID = "centos" -o $ID = "rocky" ];then if [ $VERSION_ID = "7" ];then cat > /etc/yum.repos.d/docker.repo <<EOF [docker] name=docker gpgcheck=0 #baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/ baseurl=${DOCKER_URL}/docker-ce/linux/centos/7/x86_64/stable/ EOF else cat > /etc/yum.repos.d/docker.repo <<EOF [docker] name=docker gpgcheck=0 #baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/8/x86_64/stable/ baseurl=${DOCKER_URL}/docker-ce/linux/centos/8/x86_64/stable/ EOF fi yum clean all ${COLOR_FAILURE} "Docker有以下版本"${END} yum list docker-ce --showduplicates ${COLOR_FAILURE}"5秒后即将安装: docker-"${DOCKER_VERSION}" 版本....."${END} ${COLOR_FAILURE}"如果想安装其它Docker版本,请按ctrl+c键退出,修改版本再执行"${END} sleep 5 yum -y install docker-ce-$DOCKER_VERSION docker-ce-cli-$DOCKER_VERSION \ || { color "Base,Extras的yum源失败,请检查yum源配置" 1;exit; } else dpkg -s docker-ce &> /dev/null && $COLOR"Docker已安装,退出" 1 && exit apt update || { color "更新包索引失败" 1 ; exit 1; } apt -y install docker.io fi if [ $? -eq 0 ];then color "安装软件包成功" 0 else color "安装软件包失败,请检查网络配置" 1 exit fi mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://si7y70hh.mirror.aliyuncs.com"], "insecure-registries": ["harbor.wang.org"] } EOF systemctl daemon-reload systemctl enable docker systemctl restart docker docker version && color "Docker 安装成功" 0 || color "Docker 安装失败" 1 echo 'alias rmi="docker images -qa|xargs docker rmi -f"' >> ~/.bashrc echo 'alias rmc="docker ps -qa|xargs docker rm -f"' >> ~/.bashrc } install_docker_compose(){ if [ $ID = "centos" -o $ID = "rocky" ];then ${COLOR_SUCCESS}"开始安装 Docker compose....."${END} sleep 1 if [ ! -e ${DOCKER_COMPOSE_FILE} ];then curl -L ${GITHUB_PROXY}https://github.com/docker/compose/releases/download/v${DOCKER_COMPOSE_VERSION}/${DOCKER_COMPOSE_FILE} -o /usr/bin/docker-compose #curl -L https://get.daocloud.io/docker/compose/releases/download/v${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m) -o /usr/bin/docker-compose else mv ${DOCKER_COMPOSE_FILE} /usr/bin/docker-compose fi chmod +x /usr/bin/docker-compose else apt -y install docker-compose fi if docker-compose --version ;then ${COLOR_SUCCESS}"Docker Compose 安装完成"${END} else ${COLOR_FAILURE}"Docker compose 安装失败"${END} exit fi } install_harbor(){ ${COLOR_SUCCESS}"开始安装 Harbor....."${END} sleep 1 if [ ! -e harbor-offline-installer-v${HARBOR_VERSION}.tgz ] ;then wget ${GITHUB_PROXY}https://github.com/goharbor/harbor/releases/download/v${HARBOR_VERSION}/harbor-offline-installer-v${HARBOR_VERSION}.tgz || ${COLOR_FAILURE} "下载失败!" ${END} fi [ -d ${HARBOR_BASE} ] || mkdir ${HARBOR_BASE} tar xvf harbor-offline-installer-v${HARBOR_VERSION}.tgz -C ${HARBOR_BASE} cd ${HARBOR_BASE}/harbor cp harbor.yml.tmpl harbor.yml sed -ri "/^hostname/s/reg.mydomain.com/${HARBOR_NAME}/" harbor.yml sed -ri "/^https/s/(https:)/#\1/" harbor.yml sed -ri "s/(port: 443)/#\1/" harbor.yml sed -ri "/certificate:/s/(.*)/#\1/" harbor.yml sed -ri "/private_key:/s/(.*)/#\1/" harbor.yml sed -ri "s/Harbor12345/${HARBOR_ADMIN_PASSWORD}/" harbor.yml sed -i 's#^data_volume: /data#data_volume: /data/harbor#' harbor.yml #mkdir -p /data/harbor #{HARBOR_BASE}/harbor/install.sh --with-chartmuseum && ${COLOR_SUCCESS}"Harbor 安装完成"${END} || ${COLOR_FAILURE}"Harbor 安装失败"${END} ${HARBOR_BASE}/harbor/install.sh && ${COLOR_SUCCESS}"Harbor 安装完成"${END} || ${COLOR_FAILURE}"Harbor 安装失败"${END} cat > /lib/systemd/system/harbor.service <<EOF [Unit] Description=Harbor After=docker.service systemd-networkd.service systemd-resolved.service Requires=docker.service Documentation=http://github.com/vmware/harbor [Service] Type=simple Restart=on-failure RestartSec=5 ExecStart=/usr/bin/docker-compose -f ${HARBOR_BASE}/harbor/docker-compose.yml up ExecStop=/usr/bin/docker-compose -f ${HARBOR_BASE}/harbor/docker-compose.yml down [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable harbor &>/dev/null || ${COLOR}"Harbor已配置为开机自动启动"${END} if [ $? -eq 0 ];then echo color "Harbor安装完成!" 0 echo "-------------------------------------------------------------------" echo -e "请访问链接: \E[32;1mhttp://${HARBOR_IP}/\E[0m" echo -e "用户和密码: \E[32;1madmin/${HARBOR_ADMIN_PASSWORD}\E[0m" else color "Harbor安装失败!" 1 exit fi echo "$HARBOR_IP $HARBOR_NAME" >> /etc/hosts } docker info &> /dev/null && ${COLOR_FAILURE}"Docker已安装"${END} || install_docker docker-compose --version &> /dev/null && ${COLOR_FAILURE}"Docker Compose已安装"${END} || install_docker_compose install_harbor
四、一键编译安装Redis脚本
#!/bin/bash # #******************************************************************** #Author: wangxiaochun #QQ: 29308620 #Date: 2020-07-22 #FileName: install_redis.sh #URL: http://www.magedu.com #Description: The test script #Copyright (C): 2020 All rights reserved #******************************************************************** #本脚本支持在线和离线安装 REDIS_VERSION=redis-7.2.5 #REDIS_VERSION=redis-7.2.4 #REDIS_VERSION=redis-7.2.3 #REDIS_VERSION=redis-7.2.1 #REDIS_VERSION=redis-7.0.11 #REDIS_VERSION=redis-7.0.7 #REDIS_VERSION=redis-7.0.3 #REDIS_VERSION=redis-6.2.6 #REDIS_VERSION=redis-4.0.14 PASSWORD=123456 INSTALL_DIR=/apps/redis CPUS=`lscpu |awk '/^CPU\(s\)/{print $2}'` . /etc/os-release color () { RES_COL=60 MOVE_TO_COL="echo -en \\033[${RES_COL}G" SETCOLOR_SUCCESS="echo -en \\033[1;32m" SETCOLOR_FAILURE="echo -en \\033[1;31m" SETCOLOR_WARNING="echo -en \\033[1;33m" SETCOLOR_NORMAL="echo -en \E[0m" echo -n "$1" && $MOVE_TO_COL echo -n "[" if [ $2 = "success" -o $2 = "0" ] ;then ${SETCOLOR_SUCCESS} echo -n $" OK " elif [ $2 = "failure" -o $2 = "1" ] ;then ${SETCOLOR_FAILURE} echo -n $"FAILED" else ${SETCOLOR_WARNING} echo -n $"WARNING" fi ${SETCOLOR_NORMAL} echo -n "]" echo } prepare(){ if [ $ID = "centos" -o $ID = "rocky" ];then yum -y install gcc make jemalloc-devel systemd-devel else apt update apt -y install gcc make libjemalloc-dev libsystemd-dev fi if [ $? -eq 0 ];then color "安装软件包成功" 0 else color "安装软件包失败,请检查网络配置" 1 exit fi } install() { if [ ! -f ${REDIS_VERSION}.tar.gz ];then wget http://download.redis.io/releases/${REDIS_VERSION}.tar.gz || { color "Redis 源码下载失败" 1 ; exit; } fi tar xf ${REDIS_VERSION}.tar.gz -C /usr/local/src cd /usr/local/src/${REDIS_VERSION} make -j $CUPS USE_SYSTEMD=yes PREFIX=${INSTALL_DIR} install && color "Redis 编译安装完成" 0 || { color "Redis 编译安装失败" 1 ;exit ; } ln -s ${INSTALL_DIR}/bin/redis-* /usr/local/bin/ mkdir -p ${INSTALL_DIR}/{etc,log,data,run} cp redis.conf ${INSTALL_DIR}/etc/ sed -i -e 's/bind 127.0.0.1/bind 0.0.0.0/' -e "/# requirepass/a requirepass $PASSWORD" -e "/^dir .*/c dir ${INSTALL_DIR}/data/" -e "/logfile .*/c logfile ${INSTALL_DIR}/log/redis-6379.log" -e "/^pidfile .*/c pidfile ${INSTALL_DIR}/run/redis_6379.pid" ${INSTALL_DIR}/etc/redis.conf if id redis &> /dev/null ;then color "Redis 用户已存在" 1 else useradd -r -s /sbin/nologin redis color "Redis 用户创建成功" 0 fi chown -R redis.redis ${INSTALL_DIR} cat >> /etc/sysctl.conf <<EOF net.core.somaxconn = 1024 vm.overcommit_memory = 1 EOF sysctl -p if [ $ID = "centos" -o $ID = "rocky" ];then echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local chmod +x /etc/rc.d/rc.local /etc/rc.d/rc.local else echo -e '#!/bin/bash\necho never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local chmod +x /etc/rc.local /etc/rc.local fi cat > /lib/systemd/system/redis.service <<EOF [Unit] Description=Redis persistent key-value database After=network.target [Service] ExecStart=${INSTALL_DIR}/bin/redis-server ${INSTALL_DIR}/etc/redis.conf --supervised systemd ExecStop=/bin/kill -s QUIT \$MAINPID Type=notify User=redis Group=redis RuntimeDirectory=redis RuntimeDirectoryMode=0755 LimitNOFILE=1000000 [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable --now redis &> /dev/null if [ $? -eq 0 ];then color "Redis 服务启动成功,Redis信息如下:" 0 else color "Redis 启动失败" 1 exit fi sleep 2 redis-cli -a $PASSWORD INFO Server 2> /dev/null } prepare install
五、一键安装MongoDB脚本
#!/bin/bash # #******************************************************************** #Author: wangxiaochun #QQ: 29308620 #Date: 2021-02-19 #Filename: install_mongodb.sh #URL: http://www.wangxiaochun.com #Description: The test script #Copyright (C): 2021 All rights reserved #******************************************************************** MONGODB_VERSOIN=rhel80-5.0.3 #MONGODB_VERSOIN=rhel70-5.0.3 #MONGODB_VERSOIN=ubuntu1804-5.0.3 #MONGODB_VERSOIN=ubuntu1804-4.4.4 MONGODB_FILE=mongodb-linux-x86_64-${MONGODB_VERSOIN}.tgz #MONGODB_FILE=mongodb-linux-x86_64-ubuntu1804-4.4.4.tgz URL=https://fastdl.mongodb.org/linux/$MONGODB_FILE MONGODB_DIR=/mongodb INSTALL_DIR=/usr/local PORT=27017 MY_IP=`hostname -I|awk '{print $1}'` . /etc/os-release color () { RES_COL=60 MOVE_TO_COL="echo -en \\033[${RES_COL}G" SETCOLOR_SUCCESS="echo -en \\033[1;32m" SETCOLOR_FAILURE="echo -en \\033[1;31m" SETCOLOR_WARNING="echo -en \\033[1;33m" SETCOLOR_NORMAL="echo -en \E[0m" echo -n "$1" && $MOVE_TO_COL echo -n "[" if [ $2 = "success" -o $2 = "0" ] ;then ${SETCOLOR_SUCCESS} echo -n $" OK " elif [ $2 = "failure" -o $2 = "1" ] ;then ${SETCOLOR_FAILURE} echo -n $"FAILED" else ${SETCOLOR_WARNING} echo -n $"WARNING" fi ${SETCOLOR_NORMAL} echo -n "]" echo } system_prepare () { [ -e $MONGODB_DIR -o -e $INSTALL_DIR/mongodb ] && { color "MongoDB 数据库已安装!" 1;exit; } if [ $ID = "centos" -o $ID = "rocky" ];then rpm -q curl &> /dev/null || yum install -y -q curl elif [ $ID = "ubuntu" ];then dpkg -l curl &> /dev/null || apt -y install curl else color '不支持当前操作系统!' 1 exit fi if [ -e /etc/rc.local ];then echo "echo never > /sys/kernel/mm/transparent hugepage/enabled" >> /etc/rc.local else cat > /etc/rc.local <<EOF #!/bin/bash echo never > /sys/kernel/mm/transparent hugepage/enabled EOF fi chmod +x /etc/rc.local } mongodb_file_prepare () { if [ ! -e $MONGODB_FILE ];then curl -O $URL || { color "MongoDB 数据库文件下载失败" 1; exit; } fi } install_mongodb () { id mongod &> /dev/null || useradd -m -s /bin/bash mongod tar xf $MONGODB_FILE -C $INSTALL_DIR ln -s $INSTALL_DIR/mongodb-linux-x86_64-${MONGODB_VERSOIN} $INSTALL_DIR/mongodb #mongod --dbpath $db_dir --bind_ip_all --port $PORT --logpath $db_dir/mongod.log --fork } config_mongodb(){ echo PATH=$INSTALL_DIR/mongodb/bin/:'$PATH' > /etc/profile.d/mongodb.sh . /etc/profile.d/mongodb.sh mkdir -p $MONGODB_DIR/{conf,data,log} cat > $MONGODB_DIR/conf/mongo.conf <<EOF systemLog: destination: file path: "$MONGODB_DIR/log/mongodb.log" logAppend: true storage: dbPath: "$MONGODB_DIR/data/" journal: enabled: true processManagement: fork: true net: port: 27017 bindIp: 0.0.0.0 EOF chown -R mongod.mongod $MONGODB_DIR/ cat > /lib/systemd/system/mongod.service <<EOF [Unit] Description=mongodb After=network.target remote-fs.target nss-lookup.target [Service] Type=forking User=mongod Group=mongod ExecStart=$INSTALL_DIR/mongodb/bin/mongod --config $MONGODB_DIR/conf/mongo.conf ExecReload=/bin/kill -s HUP \$MAINPID ExecStop=$INSTALL_DIR/bin/mongod --config $MONGODB/conf/mongo.conf --shutdown PrivateTmp=true # file size LimitFSIZE=infinity # cpu time LimitCPU=infinity # virtual memory size LimitAS=infinity # open files LimitNOFILE=64000 # processes/threads LimitNPROC=64000 # locked memory LimitMEMLOCK=infinity # total threads (user+kernel) TasksMax=infinity TasksAccounting=false # Recommended limits for mongod as specified in # https://docs.mongodb.com/manual/reference/ulimit/#recommended-ulimit-settings [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable --now mongod &>/dev/null } start_mongodb() { systemctl is-active mongod.service &>/dev/null if [ $? -eq 0 ];then echo color "MongoDB 安装完成!" 0 else color "MongoDB 安装失败!" 1 exit fi } system_prepare mongodb_file_prepare install_mongodb config_mongodb start_mongodb
五、一键安装mongdb脚本
#!/bin/bash # #******************************************************************** #Author: wangxiaochun #QQ: 29308620 #Date: 2021-02-19 #Filename: install_mongodb.sh #URL: http://www.wangxiaochun.com #Description: The test script #Copyright (C): 2021 All rights reserved #******************************************************************** MONGODB_VERSOIN=rhel80-5.0.3 #MONGODB_VERSOIN=rhel70-5.0.3 #MONGODB_VERSOIN=ubuntu1804-5.0.3 #MONGODB_VERSOIN=ubuntu1804-4.4.4 MONGODB_FILE=mongodb-linux-x86_64-${MONGODB_VERSOIN}.tgz #MONGODB_FILE=mongodb-linux-x86_64-ubuntu1804-4.4.4.tgz URL=https://fastdl.mongodb.org/linux/$MONGODB_FILE MONGODB_DIR=/mongodb INSTALL_DIR=/usr/local PORT=27017 MY_IP=`hostname -I|awk '{print $1}'` . /etc/os-release color () { RES_COL=60 MOVE_TO_COL="echo -en \\033[${RES_COL}G" SETCOLOR_SUCCESS="echo -en \\033[1;32m" SETCOLOR_FAILURE="echo -en \\033[1;31m" SETCOLOR_WARNING="echo -en \\033[1;33m" SETCOLOR_NORMAL="echo -en \E[0m" echo -n "$1" && $MOVE_TO_COL echo -n "[" if [ $2 = "success" -o $2 = "0" ] ;then ${SETCOLOR_SUCCESS} echo -n $" OK " elif [ $2 = "failure" -o $2 = "1" ] ;then ${SETCOLOR_FAILURE} echo -n $"FAILED" else ${SETCOLOR_WARNING} echo -n $"WARNING" fi ${SETCOLOR_NORMAL} echo -n "]" echo } system_prepare () { [ -e $MONGODB_DIR -o -e $INSTALL_DIR/mongodb ] && { color "MongoDB 数据库已安装!" 1;exit; } if [ $ID = "centos" -o $ID = "rocky" ];then rpm -q curl &> /dev/null || yum install -y -q curl elif [ $ID = "ubuntu" ];then dpkg -l curl &> /dev/null || apt -y install curl else color '不支持当前操作系统!' 1 exit fi if [ -e /etc/rc.local ];then echo "echo never > /sys/kernel/mm/transparent hugepage/enabled" >> /etc/rc.local else cat > /etc/rc.local <<EOF #!/bin/bash echo never > /sys/kernel/mm/transparent hugepage/enabled EOF fi chmod +x /etc/rc.local } mongodb_file_prepare () { if [ ! -e $MONGODB_FILE ];then curl -O $URL || { color "MongoDB 数据库文件下载失败" 1; exit; } fi } install_mongodb () { id mongod &> /dev/null || useradd -m -s /bin/bash mongod tar xf $MONGODB_FILE -C $INSTALL_DIR ln -s $INSTALL_DIR/mongodb-linux-x86_64-${MONGODB_VERSOIN} $INSTALL_DIR/mongodb #mongod --dbpath $db_dir --bind_ip_all --port $PORT --logpath $db_dir/mongod.log --fork } config_mongodb(){ echo PATH=$INSTALL_DIR/mongodb/bin/:'$PATH' > /etc/profile.d/mongodb.sh . /etc/profile.d/mongodb.sh mkdir -p $MONGODB_DIR/{conf,data,log} cat > $MONGODB_DIR/conf/mongo.conf <<EOF systemLog: destination: file path: "$MONGODB_DIR/log/mongodb.log" logAppend: true storage: dbPath: "$MONGODB_DIR/data/" journal: enabled: true processManagement: fork: true net: port: 27017 bindIp: 0.0.0.0 EOF chown -R mongod.mongod $MONGODB_DIR/ cat > /lib/systemd/system/mongod.service <<EOF [Unit] Description=mongodb After=network.target remote-fs.target nss-lookup.target [Service] Type=forking User=mongod Group=mongod ExecStart=$INSTALL_DIR/mongodb/bin/mongod --config $MONGODB_DIR/conf/mongo.conf ExecReload=/bin/kill -s HUP \$MAINPID ExecStop=$INSTALL_DIR/bin/mongod --config $MONGODB/conf/mongo.conf --shutdown PrivateTmp=true # file size LimitFSIZE=infinity # cpu time LimitCPU=infinity # virtual memory size LimitAS=infinity # open files LimitNOFILE=64000 # processes/threads LimitNPROC=64000 # locked memory LimitMEMLOCK=infinity # total threads (user+kernel) TasksMax=infinity TasksAccounting=false # Recommended limits for mongod as specified in # https://docs.mongodb.com/manual/reference/ulimit/#recommended-ulimit-settings [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable --now mongod &>/dev/null } start_mongodb() { systemctl is-active mongod.service &>/dev/null if [ $? -eq 0 ];then echo color "MongoDB 安装完成!" 0 else color "MongoDB 安装失败!" 1 exit fi } system_prepare mongodb_file_prepare install_mongodb config_mongodb start_mongodb