mirror of
https://github.com/louislam/uptime-kuma.git
synced 2024-11-30 10:14:03 +00:00
276 lines
7.8 KiB
Text
276 lines
7.8 KiB
Text
// 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 Install Script");
|
|
println("=====================");
|
|
println("Supported OS: Ubuntu >= 16.04, Debian and CentOS/RHEL 7/8");
|
|
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 on your current machine with git, Node.js 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");
|
|
}
|
|
}
|
|
|
|
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 16");
|
|
bash("curl -sL https://deb.nodesource.com/setup_16.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";
|
|
|
|
// Get ubuntu version
|
|
bash(". /etc/lsb-release");
|
|
version = DISTRIB_RELEASE;
|
|
}
|
|
if (os == "Debian") {
|
|
distribution = "debian";
|
|
}
|
|
}
|
|
|
|
bash("arch=$(uname -i)");
|
|
|
|
println("Your OS: " ++ os);
|
|
println("Distribution: " ++ distribution);
|
|
println("Version: " ++ version);
|
|
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("dnfCheck=$(dnf --version)");
|
|
|
|
// Use yum
|
|
if (dnfCheck == "") {
|
|
bash("curlCheck=$(curl --version)");
|
|
if (curlCheck == "") {
|
|
println("Installing Curl");
|
|
bash("yum -y -q install curl");
|
|
}
|
|
|
|
println("Installing Node.js 16");
|
|
bash("curl -sL https://rpm.nodesource.com/setup_16.x | bash - > log.txt");
|
|
bash("yum install -y -q nodejs");
|
|
} else {
|
|
bash("curlCheck=$(curl --version)");
|
|
if (curlCheck == "") {
|
|
println("Installing Curl");
|
|
bash("dnf -y install curl");
|
|
}
|
|
|
|
println("Installing Node.js 16");
|
|
bash("curl -sL https://rpm.nodesource.com/setup_16.x | bash - > log.txt");
|
|
bash("dnf install -y 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 not found!");
|
|
println("help: an installation guide is available at https://git-scm.com/book/en/v2/Getting-Started-Installing-Git");
|
|
}
|
|
|
|
bash("check=$(node -v)");
|
|
if (check == "") {
|
|
error = 1;
|
|
println("Error: node is not found");
|
|
println("help: an installation guide is available at https://nodejs.org/en/download");
|
|
}
|
|
|
|
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");
|
|
}
|
|
|
|
|
|
// Check again
|
|
bash("check=$(pm2 --version)");
|
|
if (check == "") {
|
|
println("Error: pm2 is not found!");
|
|
println("help: an installation guide is available at https://pm2.keymetrics.io/docs/usage/quick-start/");
|
|
bash("exit 1");
|
|
}
|
|
|
|
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!");
|
|
println("help: an installation guide is available at https://docs.docker.com/desktop/");
|
|
bash("exit 1");
|
|
}
|
|
|
|
bash("check=$(docker info)");
|
|
|
|
bash("if [[ \"$check\" == *\"Is the docker daemon running\"* ]]; then
|
|
\"echo\" \"Error: docker is not running\"
|
|
\"echo\" \"help: a troubleshooting guide is available at https://docs.docker.com/config/daemon/troubleshoot/\"
|
|
\"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");
|