diff --git a/docs/dash.sh b/docs/dash.sh index b93ab4b..170352b 100755 --- a/docs/dash.sh +++ b/docs/dash.sh @@ -1,7 +1,4 @@ #!/bin/bash -DASH_DIR="/home/ubuntu/src/dash" -REPO_DIR="${DASH_DIR}/dashback" - # Ensure private Docker network exists and sql_server is connected docker network create dash_net 2>/dev/null || true docker network connect dash_net sql_server 2>/dev/null || true @@ -10,15 +7,17 @@ docker rm -f dashback 2>/dev/null docker run -d \ --name dashback \ - --restart unless-stopped \ + --log-opt max-size=10m \ + --log-opt max-file=3 \ + --restart always \ --network dash_net \ --read-only \ - --tmpfs /tmp:rw,exec,nosuid,size=512m \ + --tmpfs /tmp:rw,noexec,nosuid,size=512m \ --tmpfs /run:rw,noexec,nosuid,size=16m \ -u $(id -u):$(id -g) \ - -p 127.0.0.1:4208:4208 \ + -p 127.0.0.1:4211:4211 \ -e HOST=0.0.0.0 \ - -e PORT=4208 \ + -e PORT=4211 \ -e HTTPS_PORT=0 \ -e MSSQL_SERVER=sql_server \ -e HEALTH_MONITOR_ENABLED=false \ @@ -35,5 +34,7 @@ docker run -d \ -e MSSQL_PORT=1433 \ -e MSSQL_ENCRYPT=false \ -e MSSQL_TRUST_SERVER_CERTIFICATE=false \ - -v "${REPO_DIR}/data:/app/data:rw" \ + -v "/home/ubuntu/src/docker/dashback_data:/app/data:rw" \ + -v "/home/ubuntu/src/docker/dashback/dist:/app/dist:ro" \ + -v "/home/ubuntu/src/docker/dashback/dist/dashback_current:/app/dist/dashback:ro" \ dashback:latest diff --git a/docs/dashdemo.sh b/docs/dashdemo.sh index a89ef09..5ecbbdf 100755 --- a/docs/dashdemo.sh +++ b/docs/dashdemo.sh @@ -3,9 +3,11 @@ docker rm -f dashdemo 2>/dev/null docker run -d \ --name dashdemo \ - --restart unless-stopped \ + --log-opt max-size=10m \ + --log-opt max-file=3 \ + --restart always \ --read-only \ - --tmpfs /tmp:rw,exec,nosuid,size=512m \ + --tmpfs /tmp:rw,noexec,nosuid,size=512m \ --tmpfs /run:rw,noexec,nosuid,size=16m \ -u $(id -u):$(id -g) \ -p 127.0.0.1:4209:4209 \ @@ -20,4 +22,6 @@ docker run -d \ -e JWT_SECRET=dfhjkswezui32476sdjkhvbn347865 \ -e IMPLICIT_CREATE=true \ -v "/home/ubuntu/dashdemo:/app/data:rw" \ + -v "/home/ubuntu/src/docker/dashback/dist:/app/dist:ro" \ + -v "/home/ubuntu/src/docker/dashback/dist/dashback_current:/app/dist/dashback:ro" \ dashback:latest diff --git a/docs/mssql.sh b/docs/mssql.sh index 7deded0..9568896 100755 --- a/docs/mssql.sh +++ b/docs/mssql.sh @@ -1,11 +1,12 @@ docker run -d \ --name sql_server \ - --restart unless-stopped \ + --restart always \ -e "ACCEPT_EULA=Y" \ -e "MSSQL_PID=Standard" \ -e "MSSQL_SA_PASSWORD=420Green" \ -e "MSSQL_COLLATION=Latin1_General_CI_AS" \ -p 127.0.0.1:1433:1433 \ + -p 192.168.122.1:1433:1433 \ -v /home/ubuntu/mssql_data:/var/opt/mssql \ -v /home/ubuntu/shared_backups:/shared \ mcr.microsoft.com/mssql/server:2025-latest diff --git a/docs/update.sh b/docs/update.sh new file mode 100755 index 0000000..6fc03e9 --- /dev/null +++ b/docs/update.sh @@ -0,0 +1,74 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +echo "=== 1. Pulling latest changes in all repositories ===" +for dir in "$ROOT_DIR"/*/; do + if [ -d "${dir}.git" ]; then + repo_name="$(basename "$dir")" + echo "-> git pull in ${repo_name}" + git -C "$dir" pull + fi +done + +echo "=== 2. Running npm ci in dashfront, dashdbschema, and dashback ===" +for pkg in dashfront dashdbschema dashback; do + echo "-> npm ci in ${pkg}" + npm --prefix "${ROOT_DIR}/${pkg}" ci +done + +echo "=== 3. Building dashfront ===" +npm --prefix "${ROOT_DIR}/dashfront" run build + +echo "=== 4. Building SEA in dashback ===" +npm --prefix "${ROOT_DIR}/dashback" run sea + +DOCKER_DIST_DIR="/home/ubuntu/src/docker/dashback/dist" +mkdir -p "$DOCKER_DIST_DIR" +TIMESTAMP="$(date +%Y%m%d%H%M%S)" +NEW_SEA="${DOCKER_DIST_DIR}/dashback_${TIMESTAMP}" +CURRENT_SEA="${DOCKER_DIST_DIR}/dashback_current" +PREV_SEA="$(readlink -f "$CURRENT_SEA" 2>/dev/null || true)" + +echo "-> Copying SEA to ${NEW_SEA} and linking ${CURRENT_SEA}..." +touch "${DOCKER_DIST_DIR}/dashback" +cp "${ROOT_DIR}/dashback/dist/dashback" "$NEW_SEA" +chmod +x "$NEW_SEA" +ln -sfn "$NEW_SEA" "$CURRENT_SEA" + +echo "=== 5. Running self-test on dashback_current in test container ===" +exec 3>&1 +set +e +SELFTEST_OUTPUT=$(docker run --rm \ + --read-only \ + --tmpfs /tmp:rw,noexec,nosuid,size=512m \ + --tmpfs /run:rw,noexec,nosuid,size=16m \ + --tmpfs /app/data:rw,noexec,nosuid,size=64m \ + -u "$(id -u):$(id -g)" \ + -v "${DOCKER_DIST_DIR}:/app/dist:ro" \ + -v "${CURRENT_SEA}:/app/dist/dashback:ro" \ + dashback:latest \ + ./dist/dashback --selftest 2>&1 | tee /dev/fd/3; exit "${PIPESTATUS[0]}") +SELFTEST_EXIT=$? +set -e +exec 3>&- + +if [ "$SELFTEST_EXIT" -ne 0 ] || ! grep -q "Self-test PASSED" <<< "$SELFTEST_OUTPUT"; then + echo "ERROR: Self-test did not confirm 'Self-test PASSED'. Aborting container restart." >&2 + if [ -n "$PREV_SEA" ] && [ -f "$PREV_SEA" ]; then + echo "-> Restoring ${CURRENT_SEA} to ${PREV_SEA}..." >&2 + ln -sfn "$PREV_SEA" "$CURRENT_SEA" + fi + exit 1 +fi + +echo "=== 6. Restarting dashback containers ===" +CONTAINERS=$(docker ps -q --filter "ancestor=dashback:latest") +if [ -n "$CONTAINERS" ]; then + echo "-> Restarting dashback containers ($(docker ps --filter "ancestor=dashback:latest" --format '{{.Names}}' | paste -sd ', ' -))..." + docker restart $CONTAINERS +fi + +echo "=== Update complete! ===" +