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