From 60e6079b04cc9ffe6fe121c0091773ccabfb5b84 Mon Sep 17 00:00:00 2001 From: Dominik Dzienia Date: Sun, 4 Jan 2026 18:56:10 +0000 Subject: [PATCH] Migrate from bitnami/mongodb to official mongo image Updated docker-compose template to use official mongo image with correct data directory (/data/db). Added patch_docker_compose() function to automatically migrate existing configurations from bitnami/mongodb to mongo image, including volume path fixes. Containers are restarted automatically if they were running. --- .claude/CLAUDE.md | 3 ++ install.sh | 89 ++++++++++++++++++++++++++---------- package.json | 2 +- src/lib.sh | 52 ++++++++++++++++++--- src/setup.sh | 1 + templates/docker-compose.yml | 4 +- updated | 2 +- 7 files changed, 119 insertions(+), 34 deletions(-) create mode 100644 .claude/CLAUDE.md mode change 100644 => 100755 install.sh diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md new file mode 100644 index 0000000..9b2fe89 --- /dev/null +++ b/.claude/CLAUDE.md @@ -0,0 +1,3 @@ +- this script runs in console UI style (ncurses style) +- do not change install.sh file - it is generated from src/lib.sh and src/setup.sh with npm run build command +- when generating code with command that may output to console, make sure to use convention to add >> "$LOGTO" 2>&1 to capture it into logs and not break UI diff --git a/install.sh b/install.sh old mode 100644 new mode 100755 index ec3d1c0..e0b1b4f --- a/install.sh +++ b/install.sh @@ -1,6 +1,6 @@ #!/bin/bash -### version: 1.9.5 +### version: 1.10.0 # ~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.# # Nightscout Mikr.us setup script # @@ -23,7 +23,7 @@ REQUIRED_NODE_VERSION=18.0.0 REQUIRED_DOTENV_VERSION=1.3.0 -LOGTO=/dev/null +LOGTO=/srv/nightscout/data/debug.log NIGHTSCOUT_ROOT_DIR=/srv/nightscout CONFIG_ROOT_DIR=/srv/nightscout/config DATA_ROOT_DIR=/srv/nightscout/data @@ -54,8 +54,8 @@ DISK_LOW_MAIL=5184000 # == 60 days in seconds DISK_CRITICAL_WARNING=104857600 # == 100 MiB DISK_CRITICAL_MAIL=604800 # == 7 days in seconds DOCKER_DOWN_MAIL=604800 # == 7 days in seconds -SCRIPT_VERSION="1.9.5" #auto-update -SCRIPT_BUILD_TIME="2025.03.19" #auto-update +SCRIPT_VERSION="1.10.0" #auto-update +SCRIPT_BUILD_TIME="2026.01.04" #auto-update #======================================= # SETUP @@ -740,10 +740,50 @@ check_docker() { } check_docker_compose() { - docker-compose -v >/dev/null 2>&1 + docker compose -v >/dev/null 2>&1 add_if_not_ok "Docker compose" "docker-compose" } +patch_docker_compose() { + if [[ -f $DOCKER_COMPOSE_FILE ]]; then + local patched=0 + local containers_running=0 + + # Check if containers are already running before patching + local ns_status=$(get_docker_status "ns-server") + local db_status=$(get_docker_status "ns-database") + if [[ "$ns_status" == "running" ]] || [[ "$db_status" == "running" ]]; then + containers_running=1 + fi + + # Check if mongodb image needs patching (bitnami/mongodb or incorrect format) + if grep -qE "image:\s*(bitnami/)?mongo(db)?" "$DOCKER_COMPOSE_FILE"; then + ohai "Patching docker-compose.yml MongoDB image..." + # Replace any bitnami/mongodb or incorrect mongo image with proper format + sed -i -E 's|image:\s*"?bitnami/mongodb:.*"?|image: "mongo:${NS_MONGODB_TAG}"|g' "$DOCKER_COMPOSE_FILE" + sed -i -E 's|image:\s*"?mongo:[^"]+"?|image: "mongo:${NS_MONGODB_TAG}"|g' "$DOCKER_COMPOSE_FILE" + sed -i -E 's|image:\s*"?mongodb:[^"]+"?|image: "mongo:${NS_MONGODB_TAG}"|g' "$DOCKER_COMPOSE_FILE" + patched=1 + fi + # Check if volume path needs patching (bitnami/mongodb -> data/db) + if grep -q ":/bitnami/mongodb\"" "$DOCKER_COMPOSE_FILE"; then + ohai "Patching docker-compose.yml MongoDB volume path..." + sed -i -E 's|:/bitnami/mongodb"?|:/data/db"|g' "$DOCKER_COMPOSE_FILE" + patched=1 + fi + + if [ "$patched" -eq 1 ]; then + msgcheck "Docker compose file patched" + # Restart containers only if they were already running + if [ "$containers_running" -eq 1 ]; then + ohai "Restarting containers to apply patched configuration..." + update_containers + msgcheck "Containers restarted" + fi + fi + fi +} + check_jq() { jq --help >/dev/null 2>&1 add_if_not_ok "JSON parser" "jq" @@ -939,14 +979,14 @@ setup_firewall() { ufw allow ssh } >>"$LOGTO" 2>&1 - host=$(hostname) - - # Extract the last 3 digits from the hostname - port_number=$(echo "$host" | grep -oE '[0-9]{3}$') - - port1=$((10000 + port_number)) - port2=$((20000 + port_number)) - port3=$((30000 + port_number)) + host=$(hostname) + + # Extract the last 3 digits from the hostname + port_number=$(echo "$host" | grep -oE '[0-9]{3}$') + + port1=$((10000 + port_number)) + port2=$((20000 + port_number)) + port3=$((30000 + port_number)) if ufw allow "$port1" >>"$LOGTO" 2>&1; then msgcheck "Do regul firewalla poprawnie dodano port $port1" @@ -1007,12 +1047,12 @@ get_space_info() { } install_containers() { - docker-compose --env-file /srv/nightscout/config/deployment.env -f /srv/nightscout/config/docker-compose.yml up --no-recreate -d >>"$LOGTO" 2>&1 + docker compose --env-file /srv/nightscout/config/deployment.env -f /srv/nightscout/config/docker-compose.yml up --no-recreate -d >>"$LOGTO" 2>&1 } update_containers() { - docker-compose --env-file /srv/nightscout/config/deployment.env -f /srv/nightscout/config/docker-compose.yml pull >>"$LOGTO" 2>&1 - docker-compose --env-file /srv/nightscout/config/deployment.env -f /srv/nightscout/config/docker-compose.yml up -d >>"$LOGTO" 2>&1 + docker compose --env-file /srv/nightscout/config/deployment.env -f /srv/nightscout/config/docker-compose.yml pull >>"$LOGTO" 2>&1 + docker compose --env-file /srv/nightscout/config/deployment.env -f /srv/nightscout/config/docker-compose.yml up -d >>"$LOGTO" 2>&1 } install_containers_progress() { @@ -1023,7 +1063,7 @@ install_containers_progress() { } uninstall_containers() { - docker-compose --env-file /srv/nightscout/config/deployment.env -f /srv/nightscout/config/docker-compose.yml down >>"$LOGTO" 2>&1 + docker compose --env-file /srv/nightscout/config/deployment.env -f /srv/nightscout/config/docker-compose.yml down >>"$LOGTO" 2>&1 } uninstall_containers_progress() { @@ -1385,7 +1425,7 @@ prompt_mikrus_apikey() { 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) - if [[ "$MIKRUS_INFO_HOST" == "$MIKRUS_HOST" ]] || [[ "$MIKRUS_INFO_HOST" =~ [a-zA-Z]{1,16}[0-9]{3} ]]; then + if [[ "$MIKRUS_INFO_HOST" == "$MIKRUS_HOST" ]] || [[ "$MIKRUS_INFO_HOST" =~ [a-zA-Z]{1,16}[0-9]{3} ]]; then msgcheck "Mikrus OK" break else @@ -2322,12 +2362,12 @@ uninstall_menu() { get_td_domain() { local MHOST=$(hostname) if ! [[ "$MHOST" =~ [a-zA-Z]{2,16}[0-9]{3} ]]; then - MIKRUS_APIKEY=$(cat "/klucz_api") - MIKRUS_INFO_HOST=$(curl -s -d "srv=$MHOST&key=$MIKRUS_APIKEY" -X POST https://api.mikr.us/info | jq -r .imie_id) - if [[ "$MIKRUS_INFO_HOST" =~ [a-zA-Z]{2,16}[0-9]{3} ]]; then - MHOST="$MIKRUS_INFO_HOST" - fi - fi + MIKRUS_APIKEY=$(cat "/klucz_api") + MIKRUS_INFO_HOST=$(curl -s -d "srv=$MHOST&key=$MIKRUS_APIKEY" -X POST https://api.mikr.us/info | jq -r .imie_id) + if [[ "$MIKRUS_INFO_HOST" =~ [a-zA-Z]{2,16}[0-9]{3} ]]; then + MHOST="$MIKRUS_INFO_HOST" + fi + fi local APIKEY=$(dotenv-tool -r get -f "$ENV_FILE_ADMIN" "MIKRUS_APIKEY") curl -sd "srv=$MHOST&key=$APIKEY" https://api.mikr.us/domain | jq -r ".[].name" | grep ".ns.techdiab.pl" | head -n 1 } @@ -3009,6 +3049,7 @@ check_dotenv setup_users setup_dir_structure download_conf +patch_docker_compose download_tools setup_security diff --git a/package.json b/package.json index 2134c3f..1239e7b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@dlvoy/ns-installer-mikrus", - "version": "1.9.5", + "version": "1.10.0", "description": "Nightscout installer for mikr.us VPS", "main": "index.js", "scripts": { diff --git a/src/lib.sh b/src/lib.sh index c48b0ac..871ea86 100644 --- a/src/lib.sh +++ b/src/lib.sh @@ -7,7 +7,7 @@ REQUIRED_NODE_VERSION=18.0.0 REQUIRED_DOTENV_VERSION=1.3.0 -LOGTO=/dev/null +LOGTO=/srv/nightscout/data/debug.log NIGHTSCOUT_ROOT_DIR=/srv/nightscout CONFIG_ROOT_DIR=/srv/nightscout/config DATA_ROOT_DIR=/srv/nightscout/data @@ -724,10 +724,50 @@ check_docker() { } check_docker_compose() { - docker-compose -v >/dev/null 2>&1 + docker compose -v >/dev/null 2>&1 add_if_not_ok "Docker compose" "docker-compose" } +patch_docker_compose() { + if [[ -f $DOCKER_COMPOSE_FILE ]]; then + local patched=0 + local containers_running=0 + + # Check if containers are already running before patching + local ns_status=$(get_docker_status "ns-server") + local db_status=$(get_docker_status "ns-database") + if [[ "$ns_status" == "running" ]] || [[ "$db_status" == "running" ]]; then + containers_running=1 + fi + + # Check if mongodb image needs patching (bitnami/mongodb or incorrect format) + if grep -qE "image:\s*(bitnami/)?mongo(db)?" "$DOCKER_COMPOSE_FILE"; then + ohai "Patching docker-compose.yml MongoDB image..." + # Replace any bitnami/mongodb or incorrect mongo image with proper format + sed -i -E 's|image:\s*"?bitnami/mongodb:.*"?|image: "mongo:${NS_MONGODB_TAG}"|g' "$DOCKER_COMPOSE_FILE" + sed -i -E 's|image:\s*"?mongo:[^"]+"?|image: "mongo:${NS_MONGODB_TAG}"|g' "$DOCKER_COMPOSE_FILE" + sed -i -E 's|image:\s*"?mongodb:[^"]+"?|image: "mongo:${NS_MONGODB_TAG}"|g' "$DOCKER_COMPOSE_FILE" + patched=1 + fi + # Check if volume path needs patching (bitnami/mongodb -> data/db) + if grep -q ":/bitnami/mongodb\"" "$DOCKER_COMPOSE_FILE"; then + ohai "Patching docker-compose.yml MongoDB volume path..." + sed -i -E 's|:/bitnami/mongodb"?|:/data/db"|g' "$DOCKER_COMPOSE_FILE" + patched=1 + fi + + if [ "$patched" -eq 1 ]; then + msgcheck "Docker compose file patched" + # Restart containers only if they were already running + if [ "$containers_running" -eq 1 ]; then + ohai "Restarting containers to apply patched configuration..." + update_containers + msgcheck "Containers restarted" + fi + fi + fi +} + check_jq() { jq --help >/dev/null 2>&1 add_if_not_ok "JSON parser" "jq" @@ -991,12 +1031,12 @@ get_space_info() { } install_containers() { - docker-compose --env-file /srv/nightscout/config/deployment.env -f /srv/nightscout/config/docker-compose.yml up --no-recreate -d >>"$LOGTO" 2>&1 + docker compose --env-file /srv/nightscout/config/deployment.env -f /srv/nightscout/config/docker-compose.yml up --no-recreate -d >>"$LOGTO" 2>&1 } update_containers() { - docker-compose --env-file /srv/nightscout/config/deployment.env -f /srv/nightscout/config/docker-compose.yml pull >>"$LOGTO" 2>&1 - docker-compose --env-file /srv/nightscout/config/deployment.env -f /srv/nightscout/config/docker-compose.yml up -d >>"$LOGTO" 2>&1 + docker compose --env-file /srv/nightscout/config/deployment.env -f /srv/nightscout/config/docker-compose.yml pull >>"$LOGTO" 2>&1 + docker compose --env-file /srv/nightscout/config/deployment.env -f /srv/nightscout/config/docker-compose.yml up -d >>"$LOGTO" 2>&1 } install_containers_progress() { @@ -1007,7 +1047,7 @@ install_containers_progress() { } uninstall_containers() { - docker-compose --env-file /srv/nightscout/config/deployment.env -f /srv/nightscout/config/docker-compose.yml down >>"$LOGTO" 2>&1 + docker compose --env-file /srv/nightscout/config/deployment.env -f /srv/nightscout/config/docker-compose.yml down >>"$LOGTO" 2>&1 } uninstall_containers_progress() { diff --git a/src/setup.sh b/src/setup.sh index 41bf9e6..3290512 100755 --- a/src/setup.sh +++ b/src/setup.sh @@ -43,6 +43,7 @@ check_dotenv setup_users setup_dir_structure download_conf +patch_docker_compose download_tools setup_security diff --git a/templates/docker-compose.yml b/templates/docker-compose.yml index 4a2a152..e30cd78 100644 --- a/templates/docker-compose.yml +++ b/templates/docker-compose.yml @@ -12,11 +12,11 @@ services: mem_limit: 400m mem_reservation: 100M restart: always - image: "bitnami/mongodb:${NS_MONGODB_TAG}" + image: "mongo:${NS_MONGODB_TAG}" environment: - MONGODB_EXTRA_FLAGS=--wiredTigerCacheSizeGB=0.4 volumes: - - "${NS_DATA_DIR}/mongodb:/bitnami/mongodb" + - "${NS_DATA_DIR}/mongodb:/data/db" ports: - ${INTERNAL_MONGO_PORT}:27017 networks: diff --git a/updated b/updated index 96b74d7..322854e 100644 --- a/updated +++ b/updated @@ -1 +1 @@ -2025-03-19T00:31:27.110Z \ No newline at end of file +2026-01-04T18:53:49.085Z \ No newline at end of file