diff --git a/extra/install.batsh b/extra/install.batsh index 005b2db4d..a89254f8f 100644 --- a/extra/install.batsh +++ b/extra/install.batsh @@ -1,9 +1,13 @@ +// 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. println("====================="); println("Uptime Kuma Installer"); println("====================="); println(""); println("---------------------------------------"); 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("---------------------------------------"); println(""); @@ -18,16 +22,19 @@ if ("$1" != "") { } if (type == "local") { - - if ("$1" != "") { - port = "$3"; - } else { - call("read", "-p", "Listening Port [3001]: ", "port"); - } + defaultPort = "3001"; + 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"; + } + } bash("arch=$(uname -i)"); @@ -36,33 +43,89 @@ if (type == "local") { println("Distribution: " ++ distribution); println("Arch: " ++ arch); - if (distribution == "rhel") { - bash("nodePath=$(command -v node)"); + if ("$3" != "") { + port = "$3"; + } else { + call("read", "-p", "Listening Port [$port]: ", "port"); - if (nodePath != "") { + if (port == "") { + port = defaultPort; + } + } + + if ("$2" != "") { + installPath = "$2"; + } else { + call("read", "-p", "Installation Path [$installPath]: ", "installPath"); + + if (installPath == "") { + installPath = defaultInstallPath; + } + } + + if (distribution == "rhel") { + bash("nodeCheck=$(node -v)"); + + if (nodeCheck != "") { 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"); - - } else { - if (nodeVersion == "12") { - println("Warning: NodeJS " ++ nodeVersion ++ " is not tested."); - } - println("OK"); } + if (nodeVersion == "12") { + println("Warning: NodeJS " ++ nodeVersion ++ " is not tested."); + } } 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"); + } + bash("check=$(pm2 --version)"); + if (check == "") { + println("Installing PM2"); + bash("npm install pm2 -g"); + bash("pm2 startup"); + } - call("yum", "install", "git", "-y"); + bash("mkdir -p $installPath"); + bash("cd $installPath"); + bash("git clone https://github.com/louislam/uptime-kuma.git ."); + bash("npm run setup"); + + bash("pm2 start npm --name uptime-kuma -- run start-server -- --port=$port"); + bash("pm2 list"); } + if (distribution == "ubuntu") { + println("TODO"); + // TODO + } + } else { call("read", "-p", "Expose Port [3001]: ", "port"); call("read", "-p", "Volume Name [uptime-kuma]: ", "volume"); diff --git a/install.sh b/install.sh index 8e9c82823..2d4479a82 100644 --- a/install.sh +++ b/install.sh @@ -1,50 +1,108 @@ +# 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. "echo" "-e" "=====================" "echo" "-e" "Uptime Kuma Installer" "echo" "-e" "=====================" "echo" "-e" "" "echo" "-e" "---------------------------------------" "echo" "-e" "This script is designed for Linux and basic usage." +"echo" "-e" "Tested with CentOS 7/8" "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" "" -"echo" "-e" "$1" if [ "$1" != "" ]; then type="$1" else "read" "-p" "Which installation method do you prefer? [DOCKER/local]: " "type" fi if [ "$type" == "local" ]; then - "read" "-p" "Listening Port [3001]: " "port" + defaultPort="3001" + defaultInstallPath="/opt/uptime-kuma" if [ -e "/etc/redhat-release" ]; then os=$("cat" "/etc/redhat-release") - distribution="rhel" + distribution="rhel" + else + if [ -e "/etc/issue" ]; then + os=$(head -n1 /etc/issue | cut -f 1 -d ' ') + if [ "$os" == "Ubuntu" ]; then + distribution="ubuntu" +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 [$port]: " "port" + if [ "$port" == "" ]; then + port="$defaultPort" +fi + fi + if [ "$2" != "" ]; then + installPath="$2" + else + "read" "-p" "Installation Path [$installPath]: " "installPath" + if [ "$installPath" == "" ]; then + installPath="$defaultInstallPath" +fi + fi if [ "$distribution" == "rhel" ]; then - nodePath=$(command -v node) - if [ "$nodePath" != "" ]; then + nodeCheck=$(node -v) + if [ "$nodeCheck" != "" ]; then 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" - else - if [ "$nodeVersion" == "12" ]; then - "echo" "-e" "Warning: NodeJS ""$nodeVersion"" is not tested." + "exit" "1" +fi + if [ "$nodeVersion" == "12" ]; then + "echo" "-e" "Warning: NodeJS ""$nodeVersion"" is not tested." fi - "echo" "-e" "OK" - fi 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 - "yum" "install" "git" "-y" + check=$(git --version) + if [ "$check" == "" ]; then + "echo" "-e" "Installing Git" + yum -y -q install git +fi + check=$(pm2 --version) + if [ "$check" == "" ]; then + "echo" "-e" "Installing PM2" + npm install pm2 -g + pm2 startup +fi + mkdir -p $installPath + cd $installPath + git clone https://github.com/louislam/uptime-kuma.git . + npm run setup + pm2 start npm --name uptime-kuma -- run start-server -- --port=$port + pm2 list +fi + if [ "$distribution" == "ubuntu" ]; then + "echo" "-e" "TODO" + # TODO fi else "read" "-p" "Expose Port [3001]: " "port" diff --git a/test/test_install_script/centos7.dockerfile b/test/test_install_script/centos7.dockerfile index ef3ec5b61..6e50b9192 100644 --- a/test/test_install_script/centos7.dockerfile +++ b/test/test_install_script/centos7.dockerfile @@ -1,9 +1,4 @@ FROM centos:7 -RUN useradd -ms /bin/bash test_user -USER test_user -WORKDIR /home/test_user - COPY ./install.sh . -RUN ls RUN bash install.sh local /opt/uptime-kuma 3000 0.0.0.0 diff --git a/test/test_install_script/centos8.dockerfile b/test/test_install_script/centos8.dockerfile new file mode 100644 index 000000000..7a121f728 --- /dev/null +++ b/test/test_install_script/centos8.dockerfile @@ -0,0 +1,4 @@ +FROM centos:8 + +COPY ./install.sh . +RUN bash install.sh local /opt/uptime-kuma 3000 0.0.0.0 diff --git a/test/test_install_script/ubuntu1604.dockerfile b/test/test_install_script/ubuntu1604.dockerfile new file mode 100644 index 000000000..8cc6e1449 --- /dev/null +++ b/test/test_install_script/ubuntu1604.dockerfile @@ -0,0 +1,4 @@ +FROM ubuntu:16.04 + +COPY ./install.sh . +RUN bash install.sh local /opt/uptime-kuma 3000 0.0.0.0