From 0093b72f768e4398dde53037c8bbd3761d1f2cf2 Mon Sep 17 00:00:00 2001 From: Dominik Dzienia Date: Tue, 18 Jul 2023 04:45:34 +0000 Subject: [PATCH] New structure, additional setup --- build.js | 15 ---------- install.sh | 39 +++++++++++++++++------- package.json | 2 +- lib.sh => src/lib.sh | 21 +++++++++++-- setup.sh => src/setup.sh | 18 ++++++----- templates/deployment.env | 8 +++++ templates/docker-compose.yml | 58 ++++++++++++++++++++++++++++++++++++ templates/nightscout.env | 37 +++++++++++++++++++++++ tools/build.js | 19 ++++++++++++ 9 files changed, 181 insertions(+), 36 deletions(-) delete mode 100644 build.js rename lib.sh => src/lib.sh (93%) rename setup.sh => src/setup.sh (80%) create mode 100644 templates/deployment.env create mode 100644 templates/docker-compose.yml create mode 100644 templates/nightscout.env create mode 100644 tools/build.js diff --git a/build.js b/build.js deleted file mode 100644 index 2a506a3..0000000 --- a/build.js +++ /dev/null @@ -1,15 +0,0 @@ -const fs = require('fs'); -const regexDevRemove = /(\#dev\-begin.*?\#dev\-end)\n/mgs; -const regexInclude = /(#include\s+(\S+))/mgs; - -try { - let data = fs.readFileSync('setup.sh', 'utf8'); - data = data.replace(regexDevRemove, ''); - data = data.replace(regexInclude, (_, _2, fileName) => { - const included = fs.readFileSync(fileName, 'utf8'); - return included - }); - fs.writeFileSync('install.sh', data); -} catch (err) { - console.error(err); -} \ No newline at end of file diff --git a/install.sh b/install.sh index 504c6fb..830d36b 100644 --- a/install.sh +++ b/install.sh @@ -264,6 +264,23 @@ exit_on_no_cancel() { fi } +setup_users() { + id -u mongodb &>/dev/null + if [ $RESULT -eq 0 ]; then + msgcheck "Mongo DB user detected" + else + ohai "Configuring Mongo DB user" + useradd -u 1001 -g 0 mongodb + fi +} + +setup_dir_structure() { + ohai "Configuring folder structure" + mkdir -p /srv/nightscout/data/mongodb + mkdir -p /srv/nightscout/config + chown -R mongodb:root /srv/nightscout/data/mongodb +} + MIKRUS_APIKEY='' MIKRUS_HOST='' @@ -274,7 +291,7 @@ prompt_mikrus_host() { if [[ "$MIKRUS_HOST" =~ [a-z][0-9]{3} ]]; then break; else - MIKRUS_NEW_HOST=$(whiptail --title "Podaj identyfikator serwera" --inputbox "\nNie udało się wykryć identyfikatora serwera,\npodaj go poniżej ręcznie.\n\nIdentyfikator składa się z jednej litery i trzech cyfr\n" 13 65 3>&1 1>&2 2>&3) + MIKRUS_NEW_HOST=$(whiptail --title "Podaj identyfikator serwera" --inputbox "\nNie udało się wykryć identyfikatora serwera,\npodaj go poniżej ręcznie.\n\nIdentyfikator składa się z jednej litery i trzech cyfr\n" --cancel-button "Anuluj" 13 65 3>&1 1>&2 2>&3) exit_on_no_cancel if [[ "$MIKRUS_NEW_HOST" =~ [a-z][0-9]{3} ]]; then MIKRUS_HOST=$MIKRUS_NEW_HOST @@ -294,7 +311,7 @@ prompt_mikrus_apikey() { exit_on_no_cancel while : ; do - MIKRUS_APIKEY=$(whiptail --title "Podaj klucz API" --inputbox "\nWpisz klucz API. Jeśli masz go skopiowanego w schowku,\nkliknij prawym przyciskiem i wybierz z menu:" 11 65 3>&1 1>&2 2>&3) + MIKRUS_APIKEY=$(whiptail --title "Podaj klucz API" --inputbox "\nWpisz klucz API. Jeśli masz go skopiowanego w schowku,\nkliknij prawym przyciskiem i wybierz z menu:" --cancel-button "Anuluj" 11 65 3>&1 1>&2 2>&3) exit_on_no_cancel if [[ "$MIKRUS_APIKEY" =~ [0-9a-fA-F]{40} ]]; then MIKRUS_INFO_HOST=$(curl -s -d "srv=$MIKRUS_HOST&key=$MIKRUS_APIKEY" -X POST https://api.mikr.us/info | jq -r .server_id) @@ -321,14 +338,16 @@ prompt_mikrus_apikey() { #======================================= -#setup_update_repo -#check_git -#check_docker -#check_docker_compose -#check_jq -#check_dotenv -#setup_packages -#setup_node +setup_update_repo +check_git +check_docker +check_docker_compose +check_jq +check_dotenv +setup_packages +setup_node +setup_users +setup_dir_structure whiptail --title "Witamy" --yesno "Ten skrypt zainstaluje Nightscout na bieżącym serwerze mikr.us\n\nJeśli na tym serwerze istnieje już instalacja Nightscout - ten skrypt spróbuje ją przekonfigurować" --yes-button "$uni_start" --no-button "$uni_exit" 12 70 exit_on_no_cancel diff --git a/package.json b/package.json index c47cdf5..e2d399d 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Nightscout installer for mikr.us VPS", "main": "index.js", "scripts": { - "build": "node ./build.js" + "build": "node ./tools/build.js" }, "author": "Dominik Dzienia ", "license": "MIT" diff --git a/lib.sh b/src/lib.sh similarity index 93% rename from lib.sh rename to src/lib.sh index a4c8e91..8c073e5 100644 --- a/lib.sh +++ b/src/lib.sh @@ -261,6 +261,23 @@ exit_on_no_cancel() { fi } +setup_users() { + id -u mongodb &>/dev/null + if [ $RESULT -eq 0 ]; then + msgcheck "Mongo DB user detected" + else + ohai "Configuring Mongo DB user" + useradd -u 1001 -g 0 mongodb + fi +} + +setup_dir_structure() { + ohai "Configuring folder structure" + mkdir -p /srv/nightscout/data/mongodb + mkdir -p /srv/nightscout/config + chown -R mongodb:root /srv/nightscout/data/mongodb +} + MIKRUS_APIKEY='' MIKRUS_HOST='' @@ -271,7 +288,7 @@ prompt_mikrus_host() { if [[ "$MIKRUS_HOST" =~ [a-z][0-9]{3} ]]; then break; else - MIKRUS_NEW_HOST=$(whiptail --title "Podaj identyfikator serwera" --inputbox "\nNie udało się wykryć identyfikatora serwera,\npodaj go poniżej ręcznie.\n\nIdentyfikator składa się z jednej litery i trzech cyfr\n" 13 65 3>&1 1>&2 2>&3) + MIKRUS_NEW_HOST=$(whiptail --title "Podaj identyfikator serwera" --inputbox "\nNie udało się wykryć identyfikatora serwera,\npodaj go poniżej ręcznie.\n\nIdentyfikator składa się z jednej litery i trzech cyfr\n" --cancel-button "Anuluj" 13 65 3>&1 1>&2 2>&3) exit_on_no_cancel if [[ "$MIKRUS_NEW_HOST" =~ [a-z][0-9]{3} ]]; then MIKRUS_HOST=$MIKRUS_NEW_HOST @@ -291,7 +308,7 @@ prompt_mikrus_apikey() { exit_on_no_cancel while : ; do - MIKRUS_APIKEY=$(whiptail --title "Podaj klucz API" --inputbox "\nWpisz klucz API. Jeśli masz go skopiowanego w schowku,\nkliknij prawym przyciskiem i wybierz z menu:" 11 65 3>&1 1>&2 2>&3) + MIKRUS_APIKEY=$(whiptail --title "Podaj klucz API" --inputbox "\nWpisz klucz API. Jeśli masz go skopiowanego w schowku,\nkliknij prawym przyciskiem i wybierz z menu:" --cancel-button "Anuluj" 11 65 3>&1 1>&2 2>&3) exit_on_no_cancel if [[ "$MIKRUS_APIKEY" =~ [0-9a-fA-F]{40} ]]; then MIKRUS_INFO_HOST=$(curl -s -d "srv=$MIKRUS_HOST&key=$MIKRUS_APIKEY" -X POST https://api.mikr.us/info | jq -r .server_id) diff --git a/setup.sh b/src/setup.sh similarity index 80% rename from setup.sh rename to src/setup.sh index dc602ff..03fd74f 100755 --- a/setup.sh +++ b/src/setup.sh @@ -13,14 +13,16 @@ if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi #======================================= -#setup_update_repo -#check_git -#check_docker -#check_docker_compose -#check_jq -#check_dotenv -#setup_packages -#setup_node +setup_update_repo +check_git +check_docker +check_docker_compose +check_jq +check_dotenv +setup_packages +setup_node +setup_users +setup_dir_structure whiptail --title "Witamy" --yesno "Ten skrypt zainstaluje Nightscout na bieżącym serwerze mikr.us\n\nJeśli na tym serwerze istnieje już instalacja Nightscout - ten skrypt spróbuje ją przekonfigurować" --yes-button "$uni_start" --no-button "$uni_exit" 12 70 exit_on_no_cancel diff --git a/templates/deployment.env b/templates/deployment.env new file mode 100644 index 0000000..880a0a3 --- /dev/null +++ b/templates/deployment.env @@ -0,0 +1,8 @@ +### version: 1.0.0 + +NS_NIGHTSCOUT_TAG=latest_dev +NS_MONGODB_TAG=4.4.2 +NS_DBBACKUP_TAG=latest +NS_DATA_DIR=/srv/nightscout/data +NS_CONFIG_DIR=/srv/nightscout/config +NS_PORT=1330 diff --git a/templates/docker-compose.yml b/templates/docker-compose.yml new file mode 100644 index 0000000..81b21ec --- /dev/null +++ b/templates/docker-compose.yml @@ -0,0 +1,58 @@ +### version: 1.0.0 + +version: "2" + +networks: + app-tier: + driver: bridge + +services: + mongodb: + container_name: ns-database + mem_limit: 200m + mem_reservation: 100M + cpus: 0.25 + restart: always + image: "bitnami/mongodb:${NS_MONGODB_TAG}" + volumes: + - "${NS_DATA_DIR}/mongodb:/bitnami/mongodb" + ports: + - 27017:27017 + networks: + - ns-tier + + dbbackup: + container_name: ns-database-backup + restart: always + image: "tiredofit/db-backup:${NS_DBBACKUP_TAG}" + volumes: + - "${NS_DATA_DIR}/dbbackup:/backup" + environment: + - COMPRESSION="GZ" + - COMPRESSION_LEVEL=9 + - DB_TYPE=mongo + - DB_HOST=mongodb + - DB_PORT=27017 + - DB_CLEANUP_TIME=10080 + networks: + - ns-tier + depends_on: + - mongodb + + nightscout: + container_name: ns-server + restart: always + mem_limit: 200m + mem_reservation: 100M + cpus: 0.25 + image: "nightscout/cgm-remote-monitor:${NS_NIGHTSCOUT_TAG}" + env_file: + - ${NS_CONFIG_DIR}/nightscout.env + ports: + - ${NS_PORT}:1337 + networks: + - ns-tier + depends_on: + - mongodb + profiles: + - admin \ No newline at end of file diff --git a/templates/nightscout.env b/templates/nightscout.env new file mode 100644 index 0000000..a28a429 --- /dev/null +++ b/templates/nightscout.env @@ -0,0 +1,37 @@ +### version: 1.0.0 + +######################################## +# Unikalne ustawienia tej instancji +# - ustaw je pod siebie +######################################## + +API_SECRET= +CUSTOM_TITLE=Nightscout + +######################################## +# Konfiguracja działania NS +######################################## + +ENABLE=cors careportal boluscalc food bwp cage sage iage basal rawbg pushover bgi pump openaps dbsize +DEVICESTATUS_ADVANCED=true +SHOW_FORECAST=openaps +PUMP_FIELDS=reservoir battery clock +TIME_FORMAT=24 +THEME=colors +LANGUAGE=pl + +######################################## +# Konfiguracja bezpieczeństwa +######################################## + +AUTH_DEFAULT_ROLES=denied + +######################################## +# Ustawienia specyficzne dla kontenera +# - lepiej ich nie modyfikować +######################################## + +MONGO_CONNECTION=mongodb://mongodb/admin +PORT=1337 +INSECURE_USE_HTTP=true +DBSIZE_MAX=3000 diff --git a/tools/build.js b/tools/build.js new file mode 100644 index 0000000..937fed1 --- /dev/null +++ b/tools/build.js @@ -0,0 +1,19 @@ +const fs = require('fs'); +const path = require('path'); +const regexDevRemove = /(\#dev\-begin.*?\#dev\-end)\n/mgs; +const regexInclude = /(#include\s+(\S+))/mgs; + +const srcDir = fs.realpathSync(__dirname + path.sep + '..' + path.sep + 'src') +const baseDir = fs.realpathSync(__dirname + path.sep + '..' ) + +try { + let data = fs.readFileSync(srcDir + path.sep + 'setup.sh', 'utf8'); + data = data.replace(regexDevRemove, ''); + data = data.replace(regexInclude, (_, _2, fileName) => { + const included = fs.readFileSync(srcDir + path.sep + fileName, 'utf8'); + return included + }); + fs.writeFileSync(baseDir + path.sep + 'install.sh', data); +} catch (err) { + console.error(err); +} \ No newline at end of file