install.sh 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #!/bin/bash
  2. INSTALL_DIR="${PWD}"
  3. # Check system requirements: Git, Node & NPM
  4. EXC_GIT="$(/usr/bin/which git)"
  5. if [ -z "$EXC_GIT" ]; then
  6. echo "[ERROR] Missing required system dependency 'git'." >&2
  7. echo "Please install using \"apt install git\"" >&2
  8. exit 1
  9. fi
  10. EXC_DOCKER="$(/usr/bin/which docker)"
  11. if [ -z "$EXC_DOCKER" ]; then
  12. echo "[ERROR] Missing required system dependency 'docker'." >&2
  13. echo "Please install using the official documentation." >&2
  14. exit 1
  15. fi
  16. GCC_CONFIG_DIR="${INSTALL_DIR}/google-cloud"
  17. FCM_ACCOUNT_JSON="${GCC_CONFIG_DIR}/firebase-adminsdk.json"
  18. if [ ! -d "$GCC_CONFIG_DIR" ]; then
  19. echo "[ERROR] Missing required google cloud key files. Please prepare directory 'google-cloud' in install directory." >&2
  20. exit 1
  21. fi
  22. if [ ! -f "$FCM_ACCOUNT_JSON" ]; then
  23. echo "[ERROR] Missing required Firebase Admin SDK key file. Please provide this file as 'google-cloud/firebase-adminsdk.json' in order to install." >&2
  24. exit 1
  25. fi
  26. # exit on error exit codes
  27. set -e
  28. TMPFOLDER="/tmp/hbbq/monitoring/$(date +'%Y%m%d%H%M%S')"
  29. echo "[INSTALL] Cloning entire project into temp folder $TMPFOLDER"
  30. mkdir -p "$TMPFOLDER"
  31. git clone https://gogs.hostbbq.com/hostbbq/hostbbq-monitoring.git "$TMPFOLDER"
  32. cd "$TMPFOLDER"
  33. echo "[INSTALL] Cloning submodules ..."
  34. git submodule init
  35. git submodule update
  36. if [[ -f "$INSTALL_DIR/.env" ]]; then
  37. export $(cat "$INSTALL_DIR/.env" | xargs)
  38. else
  39. export $(cat "$TMPFOLDER/server/.env.default" | xargs)
  40. fi
  41. echo "Checking data volume directory $INSTALL_DIR/$DB_DIR"
  42. if [[ ! -d "$INSTALL_DIR/$DB_DIR" ]]; then
  43. mkdir "$INSTALL_DIR/$DB_DIR"
  44. fi
  45. if [ -f "$INSTALL_DIR/.env" ]; then
  46. cp "$INSTALL_DIR/.env" ./
  47. else
  48. cp "$TMPFOLDER/server/.env.default" ./.env
  49. fi
  50. cp -r "$GCC_CONFIG_DIR" ./server/
  51. docker compose -f server.docker-compose.yml build
  52. echo "[INSTALL] Installing server application"
  53. if [ -d "$INSTALL_DIR/dist" ]; then
  54. rm -rf "$INSTALL_DIR/dist"
  55. fi
  56. if [ ! -f "$INSTALL_DIR/.env" ]; then
  57. cp -v "$TMPFOLDER/server/.env.default" "$INSTALL_DIR/.env"
  58. fi
  59. echo "[INSTALL] Creating docker-compose.yml"
  60. . "$INSTALL_DIR/.env"
  61. envsubst < "$TMPFOLDER/server.docker-compose.yml" > "$INSTALL_DIR/docker-compose.yml"
  62. cd "$INSTALL_DIR"
  63. DOCKER_NETWORK_NAME=hostbbq-monitoring-vlan
  64. docker network inspect ${DOCKER_NETWORK_NAME} > /dev/null 2>&1; EC=$?
  65. if [[ $EC -ne 0 ]]; then
  66. if [[ "${COMMAND}" == "up" ]]; then
  67. echo "⭐ Creating network '${DOCKER_NETWORK_NAME}'..."
  68. docker network create --subnet=172.20.5.0/24 "${DOCKER_NETWORK_NAME}"
  69. fi
  70. else
  71. if [[ "${COMMAND}" == "up" ]]; then
  72. echo "✔ Network '${DOCKER_NETWORK_NAME}' exists."
  73. fi
  74. fi
  75. COMPOSE_PROJECT_NAME="monitoring-server" \
  76. docker compose up -d --force-recreate
  77. echo "[CLEANUP] Removing temp folder $TMPFOLDER"
  78. rm -rf "$TMPFOLDER"
  79. echo "[SUCCESS] HostBBQ Monitoring Server installed and activated successfully"