Index: .gitignore =================================================================== diff -u -r19632962daaf74f75aebddb56833168214339903 -r1c0061afa4b32d33e414c0d3afe5602ed57f122e --- .gitignore (.../.gitignore) (revision 19632962daaf74f75aebddb56833168214339903) +++ .gitignore (.../.gitignore) (revision 1c0061afa4b32d33e414c0d3afe5602ed57f122e) @@ -1,3 +1,5 @@ _MCOSX .DS_Store + +*.sh~ Index: install.sh =================================================================== diff -u --- install.sh (revision 0) +++ install.sh (revision 1c0061afa4b32d33e414c0d3afe5602ed57f122e) @@ -0,0 +1,234 @@ +#!/bin/bash + +# ---------- Error definition +ERR_DRT_SERVER_DIR_EXISTS=1 +ERR_DRT_SERVER_ENV_INVALID=2 +ERR_DRT_SERVER_IP_EMPTY=3 +ERR_DRT_SERVER_NJS_FAILED=4 +ERR_DRT_SERVER_RED_FAILED=5 +ERR_DRT_SERVER_ENV_NOTFOUND=6 +ERR_DRT_SERVER_ENV_ENV_NOTFOUND=7 +ERR_DRT_SERVER_ENV_PTS_NOTFOUND=8 +ERR_DRT_SERVER_ENV_PTS_IP_SET=9 + +# ---------- Varialbes definition +HOSTNAME=$(hostname) +ENVIRONMENT_LIST="production staging quality" + +# ---------- DRT Server Variables +DRT_SERVER_DIR="drt-server" +DRT_SERVER_SRC=/boot/$DRT_SERVER_DIR +DRT_SERVER_DST=$HOME/$DRT_SERVER_DIR +DRT_SERVER_ENV="${HOSTNAME:4}" +DRT_SERVER_IP="$(ip -4 address show wlan0 | grep -oP '\d+.\d+.\d+.\d+' | head -n1)" +DRT_SERVER_NJS="" +DRT_SERVER_RED="" +DRT_SERVER_ENV_DIR="environments" +DRT_SERVER_ENV_PATH=$DRT_SERVER_DST/$DRT_SERVER_ENV_DIR +DRT_SERVER_ENV_ENV=".env" +DRT_SERVER_ENV_PTS="environment.prod.ts" +DRT_SERVER_ENV_PTS_DST="apps/mt-client/src/environments/" +DRT_SERVER_ENV_PTS_IP_PLACEHOLDER="" + +# ---------------------------------------------------------------------------------------------------- +# -------------------------------------------------- OS Configuration, Setup +# ---------------------------------------------------------------------------------------------------- + +function check_print() { + echo "Environment : $DRT_SERVER_ENV" + echo "IP Address : $DRT_SERVER_IP" + echo "Node JS : $DRT_SERVER_NJS" + echo "Redis Server : $DRT_SERVER_RED" +} + +function check_environment() { + local ENV=$( grep "$DRT_SERVER_ENV" <<< "$ENVIRONMENT_LIST" ) + if [[ -z $ENV ]]; then + echo "---------------------------------------- ERR: Invalid environment '$DRT_SERVER_ENV' " + exit $ERR_DRT_SERVER_ENV_INVALID + fi +} + +function check_ip() { + local IP=$( grep "$DRT_SERVER_ENV" <<< "$ENVIRONMENT_LIST" ) + if [[ -z $DRT_SERVER_IP ]]; then + echo "---------------------------------------- ERR: Server IP is not set " + exit $ERR_DRT_SERVER_IP_EMPTY + fi +} + +function version_node_js() { + DRT_SERVER_NJS="$(node -v)" +} + +function install_node_js() { + version_node_js + if [[ -n "$DRT_SERVER_NJS" ]]; then + echo "---------------------------------------- NodeJs already installed $DRT_SERVER_NJS " + return + fi + cd + curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - + sudo apt install nodejs -y + version_node_js + if [[ -z "$DRT_SERVER_NJS" ]]; then + echo "---------------------------------------- ERR: NodeJs installation FAILED " + exit $ERR_DRT_SERVER_NJS_FAILED + fi +} + +function version_redis_server() { + DRT_SERVER_RED="$(redis-server -v | grep -oP '\d+.\d+.\d+' | head -n1)" +} + +function install_redis_server() { + version_redis_server + if [[ -n "$DRT_SERVER_RED" ]]; then + echo "---------------------------------------- Redis Server already installed $DRT_SERVER_RED " + return + fi + cd + sudo apt install redis-server -y + version_redis_server + if [[ -z "$DRT_SERVER_RED" ]]; then + echo "---------------------------------------- ERR: Redis Server installation FAILED" + exit $ERR_DRT_SERVER_RED_FAILED + fi +} + +# ---------------------------------------------------------------------------------------------------- +# -------------------------------------------------- DRT SERVER +# ---------------------------------------------------------------------------------------------------- + +function drt_server_copy() { + local CONTINUE="N" + if [[ -d $DRT_SERVER_DST ]]; then + read -p "The $DRT_SERVER_DST exists, if you continue the entire content will be removed. continue? [y/N]" -n 1 -i "N" -r CONTINUE + echo "" + if [ "$CONTINUE" == "Y" ] || [ "$CONTINUE" == "y" ]; then + echo "---------------------------------------- DRT Server removing the folder '$DRT_SERVER_DST'" + rm -frd $DRT_SERVER_DST + sync;sync;sync + else + echo "---------------------------------------- ERR: DRT Server installation ABORT" + exit $ERR_DRT_SERVER_DIR_EXISTS + fi + fi + cp -r $DRT_SERVER_SRC $DRT_SERVER_DST + echo "---------------------------------------- DRT Server copied to the folder '$PWD'" +} + +function drt_server_install() { + cd $DRT_SERVER_DST + echo "current path '$PWD'" + npm install +} + +function drt_server_configuration() { + local ENV_DIR_SRC=$DRT_SERVER_ENV_PATH/$DRT_SERVER_ENV + local ENV_ENV_FILE_SRC=$ENV_DIR_SRC/$DRT_SERVER_ENV_ENV + local ENV_ENV_FOLD_DST=$DRT_SERVER_DST + local ENV_PTS_FILE_SRC=$ENV_DIR_SRC/$DRT_SERVER_ENV_PTS + local ENV_PTS_FOLD_DST=$DRT_SERVER_DST/$DRT_SERVER_ENV_PTS_DST + local ENV_PTS_FILE_DST=$ENV_PTS_FOLD_DST/$DRT_SERVER_ENV_PTS + + if [[ -d $ENV_DIR_SRC ]]; then + # ---------- copy env file + cp $ENV_ENV_FILE_SRC $ENV_ENV_FOLD_DST + if [[ ! $? ]]; then + echo "---------------------------------------- ERR: DRT Server env file cannot be set" + exit $ERR_DRT_SERVER_ENV_ENV_NOTFOUND + fi + + # ---------- copy .ts file + cp $ENV_PTS_FILE_SRC $ENV_PTS_FOLD_DST + if [[ ! $? ]]; then + echo "---------------------------------------- ERR: DRT Server .ts file cannot be set" + exit $ERR_DRT_SERVER_ENV_PTS_NOTFOUND + fi + fi + + # ---------- set server ip + sed -i "s/$DRT_SERVER_ENV_PTS_IP_PLACEHOLDER/$DRT_SERVER_IP/" $ENV_PTS_FILE_DST + if [[ ! $? ]]; then + echo "---------------------------------------- ERR: DRT Server .ts file cannot be configured" + exit $ERR_DRT_SERVER_ENV_PTS_IP_SET + fi +} + +function drt_server_build() { + cd $DRT_SERVER_DST + npm run build:client + npm run build:api +} + +function drt_server_autostart() { + # create a symlink for manual execution + # TODO create a script to stop/start the service instead of a direct symlink + cd + ln -s $DRT_SERVER_DST/dist/apps/mt-api/main.js drt + + # TODO : add a service to autostart the drt server on each reboot + + # create drt-server.service + # [Unit] + # Description=DRT Server + # Wants= + # + # [Service] + # ExecStart=/path/to/your/executable + # # Add any other relevant configuration options here + # + # [Install] + # WantedBy=multi-user.target + + # systemctl enable drt-server + # systemctl start drt-server +} + +function drt_server_cleanup() { + # ---------- remove the residue env files + rm -frd $DRT_SERVER_ENV_PATH +} + +# ---------------------------------------------------------------------------------------------------- +# -------------------------------------------------- MAIN +# ---------------------------------------------------------------------------------------------------- + +echo "---------------------------------------- Checking OS " +check_environment +check_ip + +echo "---------------------------------------- Updating OS " +sudo apt update +sudo apt upgrade -y + +echo "---------------------------------------- Installing curl " +sudo apt install curl + +echo "---------------------------------------- Installing NodeJS " +install_node_js + +echo "---------------------------------------- Installing Redis Server " +install_redis_server + +echo "---------------------------------------- Installation summary " +check_print + +echo "---------------------------------------- DRT-Server Copy" +drt_server_copy + +echo "---------------------------------------- DRT-Server Install" +drt_server_install + +echo "---------------------------------------- DRT-Server Configuration" +drt_server_configuration + +echo "---------------------------------------- DRT-Server Build" +drt_server_build + +echo "---------------------------------------- DRT-Server Cleanup" +drt_server_cleanup + +exit 0 +