mirror of
				https://github.com/louislam/uptime-kuma.git
				synced 2025-11-04 05:36:13 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			204 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			204 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
# install.sh is generated by ./extra/install.batsh, do not modify it directly.
 | 
						|
# "npm run compile-install-script" to compile install.sh
 | 
						|
# The command is working on Windows PowerShell and Docker for Windows only.
 | 
						|
# curl -o kuma_install.sh https://raw.githubusercontent.com/louislam/uptime-kuma/master/install.sh && sudo bash kuma_install.sh
 | 
						|
"echo" "-e" "====================="
 | 
						|
"echo" "-e" "Uptime Kuma Installer"
 | 
						|
"echo" "-e" "====================="
 | 
						|
"echo" "-e" "Supported OS: CentOS 7/8, Ubuntu >= 16.04 and Debian"
 | 
						|
"echo" "-e" "---------------------------------------"
 | 
						|
"echo" "-e" "This script is designed for Linux and basic usage."
 | 
						|
"echo" "-e" "For advanced usage, please go to https://github.com/louislam/uptime-kuma/wiki/Installation"
 | 
						|
"echo" "-e" "---------------------------------------"
 | 
						|
"echo" "-e" ""
 | 
						|
"echo" "-e" "Local - Install Uptime Kuma in your current machine with git, Node.js 14 and pm2"
 | 
						|
"echo" "-e" "Docker - Install Uptime Kuma Docker container"
 | 
						|
"echo" "-e" ""
 | 
						|
if [ "$1" != "" ]; then
 | 
						|
  type="$1"
 | 
						|
else
 | 
						|
  "read" "-p" "Which installation method do you prefer? [DOCKER/local]: " "type"
 | 
						|
fi
 | 
						|
defaultPort="3001"
 | 
						|
function checkNode {
 | 
						|
  local _0
 | 
						|
  nodeVersion=$(node -e 'console.log(process.versions.node.split(`.`)[0])')
 | 
						|
  "echo" "-e" "Node Version: ""$nodeVersion"
 | 
						|
  _0="12"
 | 
						|
  if [ $(($nodeVersion < $_0)) == 1 ]; then
 | 
						|
    "echo" "-e" "Error: Required Node.js 14"
 | 
						|
    "exit" "1"  
 | 
						|
fi
 | 
						|
  if [ "$nodeVersion" == "12" ]; then
 | 
						|
    "echo" "-e" "Warning: NodeJS ""$nodeVersion"" is not tested."  
 | 
						|
fi
 | 
						|
}
 | 
						|
function deb {
 | 
						|
  nodeCheck=$(node -v)
 | 
						|
  apt --yes update
 | 
						|
  if [ "$nodeCheck" != "" ]; then
 | 
						|
    "checkNode" 
 | 
						|
  else
 | 
						|
    # Old nodejs binary name is "nodejs"
 | 
						|
    check=$(nodejs --version)
 | 
						|
    if [ "$check" != "" ]; then
 | 
						|
      "echo" "-e" "Error: 'node' command is not found, but 'nodejs' command is found. Your NodeJS should be too old."
 | 
						|
      exit 1    
 | 
						|
fi
 | 
						|
    curlCheck=$(curl --version)
 | 
						|
    if [ "$curlCheck" == "" ]; then
 | 
						|
      "echo" "-e" "Installing Curl"
 | 
						|
      apt --yes install curl    
 | 
						|
fi
 | 
						|
    "echo" "-e" "Installing Node.js 14"
 | 
						|
    curl -sL https://deb.nodesource.com/setup_14.x | bash - > log.txt
 | 
						|
    apt --yes install nodejs
 | 
						|
    node -v
 | 
						|
    nodeCheckAgain=$(node -v)
 | 
						|
    if [ "$nodeCheckAgain" == "" ]; then
 | 
						|
      "echo" "-e" "Error during Node.js installation"
 | 
						|
      exit 1    
 | 
						|
fi
 | 
						|
  fi
 | 
						|
  check=$(git --version)
 | 
						|
  if [ "$check" == "" ]; then
 | 
						|
    "echo" "-e" "Installing Git"
 | 
						|
    apt --yes install git  
 | 
						|
fi
 | 
						|
}
 | 
						|
if [ "$type" == "local" ]; then
 | 
						|
  defaultInstallPath="/opt/uptime-kuma"
 | 
						|
  if [ -e "/etc/redhat-release" ]; then
 | 
						|
    os=$("cat" "/etc/redhat-release")
 | 
						|
    distribution="rhel"
 | 
						|
  else
 | 
						|
    if [ -e "/etc/issue" ]; then
 | 
						|
      os=$(head -n1 /etc/issue | cut -f 1 -d ' ')
 | 
						|
      if [ "$os" == "Ubuntu" ]; then
 | 
						|
        distribution="ubuntu"      
 | 
						|
fi
 | 
						|
      if [ "$os" == "Debian" ]; then
 | 
						|
        distribution="debian"      
 | 
						|
fi    
 | 
						|
fi
 | 
						|
  fi
 | 
						|
  arch=$(uname -i)
 | 
						|
  "echo" "-e" "Your OS: ""$os"
 | 
						|
  "echo" "-e" "Distribution: ""$distribution"
 | 
						|
  "echo" "-e" "Arch: ""$arch"
 | 
						|
  if [ "$3" != "" ]; then
 | 
						|
    port="$3"
 | 
						|
  else
 | 
						|
    "read" "-p" "Listening Port [$defaultPort]: " "port"
 | 
						|
    if [ "$port" == "" ]; then
 | 
						|
      port="$defaultPort"    
 | 
						|
fi
 | 
						|
  fi
 | 
						|
  if [ "$2" != "" ]; then
 | 
						|
    installPath="$2"
 | 
						|
  else
 | 
						|
    "read" "-p" "Installation Path [$defaultInstallPath]: " "installPath"
 | 
						|
    if [ "$installPath" == "" ]; then
 | 
						|
      installPath="$defaultInstallPath"    
 | 
						|
fi
 | 
						|
  fi
 | 
						|
  # CentOS
 | 
						|
  if [ "$distribution" == "rhel" ]; then
 | 
						|
    nodeCheck=$(node -v)
 | 
						|
    if [ "$nodeCheck" != "" ]; then
 | 
						|
      "checkNode" 
 | 
						|
    else
 | 
						|
      curlCheck=$(curl --version)
 | 
						|
      if [ "$curlCheck" == "" ]; then
 | 
						|
        "echo" "-e" "Installing Curl"
 | 
						|
        yum -y -q install curl      
 | 
						|
fi
 | 
						|
      "echo" "-e" "Installing Node.js 14"
 | 
						|
      curl -sL https://rpm.nodesource.com/setup_14.x | bash - > log.txt
 | 
						|
      yum install -y -q nodejs
 | 
						|
      node -v
 | 
						|
      nodeCheckAgain=$(node -v)
 | 
						|
      if [ "$nodeCheckAgain" == "" ]; then
 | 
						|
        "echo" "-e" "Error during Node.js installation"
 | 
						|
        exit 1      
 | 
						|
fi
 | 
						|
    fi
 | 
						|
    check=$(git --version)
 | 
						|
    if [ "$check" == "" ]; then
 | 
						|
      "echo" "-e" "Installing Git"
 | 
						|
      yum -y -q install git    
 | 
						|
fi
 | 
						|
    # Ubuntu
 | 
						|
  else
 | 
						|
    if [ "$distribution" == "ubuntu" ]; then
 | 
						|
      "deb" 
 | 
						|
      # Debian
 | 
						|
    else
 | 
						|
      if [ "$distribution" == "debian" ]; then
 | 
						|
        "deb" 
 | 
						|
      else
 | 
						|
        # Unknown distribution
 | 
						|
        error=$((0))
 | 
						|
        check=$(git --version)
 | 
						|
        if [ "$check" == "" ]; then
 | 
						|
          error=$((1))
 | 
						|
          "echo" "-e" "Error: git is missing"        
 | 
						|
fi
 | 
						|
        check=$(node -v)
 | 
						|
        if [ "$check" == "" ]; then
 | 
						|
          error=$((1))
 | 
						|
          "echo" "-e" "Error: node is missing"        
 | 
						|
fi
 | 
						|
        if [ $(($error > 0)) == 1 ]; then
 | 
						|
          "echo" "-e" "Please install above missing software"
 | 
						|
          exit 1        
 | 
						|
fi
 | 
						|
      fi
 | 
						|
    fi
 | 
						|
  fi
 | 
						|
  check=$(pm2 --version)
 | 
						|
  if [ "$check" == "" ]; then
 | 
						|
    "echo" "-e" "Installing PM2"
 | 
						|
    npm install pm2 -g && pm2 install pm2-logrotate
 | 
						|
    pm2 startup  
 | 
						|
fi
 | 
						|
  mkdir -p $installPath
 | 
						|
  cd $installPath
 | 
						|
  git clone https://github.com/louislam/uptime-kuma.git .
 | 
						|
  npm run setup
 | 
						|
  pm2 start server/server.js --name uptime-kuma -- --port=$port
 | 
						|
else
 | 
						|
  defaultVolume="uptime-kuma"
 | 
						|
  check=$(docker -v)
 | 
						|
  if [ "$check" == "" ]; then
 | 
						|
    "echo" "-e" "Error: docker is not found!"
 | 
						|
    exit 1  
 | 
						|
fi
 | 
						|
  check=$(docker info)
 | 
						|
  if [[ "$check" == *"Is the docker daemon running"* ]]; then
 | 
						|
      "echo" "Error: docker is not running"
 | 
						|
      "exit" "1"
 | 
						|
    fi
 | 
						|
  if [ "$3" != "" ]; then
 | 
						|
    port="$3"
 | 
						|
  else
 | 
						|
    "read" "-p" "Expose Port [$defaultPort]: " "port"
 | 
						|
    if [ "$port" == "" ]; then
 | 
						|
      port="$defaultPort"    
 | 
						|
fi
 | 
						|
  fi
 | 
						|
  if [ "$2" != "" ]; then
 | 
						|
    volume="$2"
 | 
						|
  else
 | 
						|
    "read" "-p" "Volume Name [$defaultVolume]: " "volume"
 | 
						|
    if [ "$volume" == "" ]; then
 | 
						|
      volume="$defaultVolume"    
 | 
						|
fi
 | 
						|
  fi
 | 
						|
  "echo" "-e" "Port: $port"
 | 
						|
  "echo" "-e" "Volume: $volume"
 | 
						|
  docker volume create $volume
 | 
						|
  docker run -d --restart=always -p $port:3001 -v $volume:/app/data --name uptime-kuma louislam/uptime-kuma:1
 | 
						|
fi
 | 
						|
"echo" "-e" "http://localhost:$port"
 |