@ -1,13 +1,15 @@
// install.sh is generated by ./extra/install.batsh, do not modify it directly.
// install.sh is generated by ./extra/install.batsh, do not modify it directly.
// "npm run compile-install-script" to compile install.sh
// "npm run compile-install-script" to compile install.sh
// The command is working on Windows PowerShell and Docker for Windows only.
// 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("=====================");
println("Uptime Kuma Installer");
println("Uptime Kuma Installer");
println("=====================");
println("=====================");
println("");
println("Supported OS: CentOS 7/8, Ubuntu >= 16.04 and Debian ");
println("---------------------------------------");
println("---------------------------------------");
println("This script is designed for Linux and basic usage.");
println("This script is designed for Linux and basic usage.");
println("Tested with CentOS 7/8");
println("For advanced usage, please go to https://github.com/louislam/uptime-kuma/wiki/Installation");
println("For advanced usage, please go to https://github.com/louislam/uptime-kuma/wiki/Installation");
println("---------------------------------------");
println("---------------------------------------");
println("");
println("");
@ -21,8 +23,64 @@ if ("$1" != "") {
call("read", "-p", "Which installation method do you prefer? [DOCKER/local]: ", "type");
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") {
if (type == "local") {
defaultPort = "3001";
defaultInstallPath = "/opt/uptime-kuma";
defaultInstallPath = "/opt/uptime-kuma";
if (exists("/etc/redhat-release")) {
if (exists("/etc/redhat-release")) {
@ -34,7 +92,9 @@ if (type == "local") {
if (os == "Ubuntu") {
if (os == "Ubuntu") {
distribution = "ubuntu";
distribution = "ubuntu";
}
}
if (os == "Debian") {
distribution = "debian";
}
}
}
bash("arch=$(uname -i)");
bash("arch=$(uname -i)");
@ -46,7 +106,7 @@ if (type == "local") {
if ("$3" != "") {
if ("$3" != "") {
port = "$3";
port = "$3";
} else {
} else {
call("read", "-p", "Listening Port [$p ort]: ", "port");
call("read", "-p", "Listening Port [$defaultP ort]: ", "port");
if (port == "") {
if (port == "") {
port = defaultPort;
port = defaultPort;
@ -56,28 +116,19 @@ if (type == "local") {
if ("$2" != "") {
if ("$2" != "") {
installPath = "$2";
installPath = "$2";
} else {
} else {
call("read", "-p", "Installation Path [$i nstallPath]: ", "installPath");
call("read", "-p", "Installation Path [$defaultI nstallPath]: ", "installPath");
if (installPath == "") {
if (installPath == "") {
installPath = defaultInstallPath;
installPath = defaultInstallPath;
}
}
}
}
// CentOS
if (distribution == "rhel") {
if (distribution == "rhel") {
bash("nodeCheck=$(node -v)");
bash("nodeCheck=$(node -v)");
if (nodeCheck != "") {
if (nodeCheck != "") {
bash("nodeVersion=$(node -e 'console.log(process.versions.node.split(`.`)[0])')");
checkNode();
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.");
}
} else {
} else {
bash("curlCheck=$(curl --version)");
bash("curlCheck=$(curl --version)");
@ -105,6 +156,36 @@ if (type == "local") {
bash("yum -y -q install 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)");
bash("check=$(pm2 --version)");
if (check == "") {
if (check == "") {
println("Installing PM2");
println("Installing PM2");
@ -118,15 +199,47 @@ if (type == "local") {
bash("npm run setup");
bash("npm run setup");
bash("pm2 start npm --name uptime-kuma -- run start-server -- --port=$port");
bash("pm2 start npm --name uptime-kuma -- run start-server -- --port=$port");
bash("pm2 list");
} 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 (distribution == "ubuntu") {
if ("$2" != "") {
println("TODO");
volume = "$2";
// TODO
} else {
call("read", "-p", "Volume Name [$defaultVolume]: ", "volume");
if (volume == "") {
volume = defaultVolume;
}
}
}
} else {
println("Port: $port");
call("read", "-p", "Expose Port [3001]: ", "port");
println("Volume: $volume");
call("read", "-p", "Volume Name [uptime-kuma]: ", "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");