// 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");