#!/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