#!/bin/bash INSTALL_DIR="${PWD}" # Check system requirements: Git, Node & NPM EXC_GIT="$(/usr/bin/which git)" if [ -z "$EXC_GIT" ]; then echo "[ERROR] Missing required system dependency 'git'." >&2 echo "Please install using \"apt install git\"" >&2 exit 1 fi EXC_NPM="$(/usr/bin/which npm)" if [ -z "$EXC_NPM" ]; then echo "[ERROR] Missing required system dependency 'npm'." >&2 echo "Please install following the official install documentation." >&2 exit 1 fi EXC_NODE="$(/usr/bin/which node)" if [ -z "$EXC_NODE" ]; then echo "[ERROR] Missing required system dependency 'node'." >&2 echo "Please install following the official install documentation." >&2 exit 1 fi GCC_CONFIG_DIR="${INSTALL_DIR}/google-cloud" FCM_ACCOUNT_JSON="${GCC_CONFIG_DIR}/firebase-adminsdk.json" GCM_API_JSON="${GCC_CONFIG_DIR}/gcm-api.json" if [ ! -d "$GCC_CONFIG_DIR" ]; then echo "[ERROR] Missing required google cloud key files. Please prepare directory 'google-cloud' in install directory." >&2 exit 1 fi if [ ! -f "$FCM_ACCOUNT_JSON" ]; then echo "[ERROR] Missing required Firebase Admin SDK key file. Please provide this file as 'google-cloud/firebase-adminsdk.json' in order to install." >&2 exit 1 fi if [ ! -f "$GCM_API_JSON" ]; then echo "[ERROR] Missing required Google Cloud API key file. Please provide this file as 'google-cloud/gcm-api.json' in order to install." >&2 exit 1 fi # exit on error exit codes set -e TMPFOLDER="/tmp/hbbq/monitoring/$(date +'%Y%m%d%H%M%S')" echo "[INSTALL] Cloning entire project into temp folder $TMPFOLDER" mkdir -p "$TMPFOLDER" git clone https://gogs.hostbbq.com/hostbbq/hostbbq-monitoring.git "$TMPFOLDER" cd "$TMPFOLDER" echo "[INSTALL] Cloning submodules ..." git submodule init git submodule update cd "$TMPFOLDER/fcm/express" echo "[INSTALL] Installing npm build dependencies for FCM backend API project" $EXC_NPM install cd "$TMPFOLDER/fcm/ng" echo "[INSTALL] Installing npm build dependencies for FCM Angular frontend project" $EXC_NPM install echo "[INSTALL] Building FCM Angular frontend project" $EXC_NPM run build cd "$TMPFOLDER/fcm/express" echo "[INSTALL] Transpiling typescript sources of FCM backend API project" $EXC_NPM run build echo "[INSTALL] Installing server application" if [ -d "$INSTALL_DIR/dist" ]; then rm -rf "$INSTALL_DIR/dist" fi cp -rv "dist" "$INSTALL_DIR/" if [ -d "$INSTALL_DIR/public" ]; then rm -rf "$INSTALL_DIR/public" fi cp -rv "public" "$INSTALL_DIR/" if [ ! -f "$INSTALL_DIR/.env" ]; then cp -v ".env.default" "$INSTALL_DIR/.env" fi cp -v "package.json" "$INSTALL_DIR/" cd "$INSTALL_DIR" echo "[INSTALL] Installing npm runtime dependencies" $EXC_NPM install --omit=dev echo "[INSTALL] Creating and enabling systemd unit \"monitoring@fcm.service\"" SVC_FILE="/lib/systemd/system/monitoring@fcm.service" ACTION="update" if [ ! -f "$SVC_FILE" ]; then ACTION="install" fi cat > $SVC_FILE << EOF [Unit] Description=HostBBQ FCM Registration Service After=network.target [Service] Type=simple WorkingDirectory=$INSTALL_DIR ExecStart=node . [Install] WantedBy=multi-user.target Alias=monitoring@fcm.service EOF if [[ "$ACTION" = "install" ]]; then systemctl enable monitoring@fcm.service systemctl start monitoring@fcm.service else systemctl daemon-reload systemctl restart monitoring@fcm.service fi echo "[CLEANUP] Removing temp folder $TMPFOLDER" rm -rf "$TMPFOLDER" echo "[SUCCESS] HostBBQ FCM Registration Service installed and activated successfully"