feat: adapt panel docker build for low resource hosts

This commit is contained in:
JetSprow
2026-04-30 09:18:05 +10:00
parent 63ec3b0109
commit 36b4e8e0c8
5 changed files with 367 additions and 18 deletions

View File

@@ -10,31 +10,86 @@ HEALTH_URL="${HEALTH_URL:-http://127.0.0.1:3000/api/public/app-info}"
cd "$APP_DIR"
load_resource_helpers() {
if [ -f "$APP_DIR/scripts/lib-resource-profile.sh" ]; then
# shellcheck disable=SC1091
. "$APP_DIR/scripts/lib-resource-profile.sh"
fi
}
load_resource_helpers
compose() {
$COMPOSE "$@"
}
backup_sqlite_database() {
mkdir -p backups
local backup_path="backups/jboard-sqlite-$(date +%F-%H%M%S).tar.gz"
local backed_up="0"
local backup_cmd='cd /app/storage 2>/dev/null && if [ -f jboard.db ]; then set -- jboard.db; [ -f jboard.db-wal ] && set -- "$@" jboard.db-wal; [ -f jboard.db-shm ] && set -- "$@" jboard.db-shm; tar -czf - "$@"; fi'
if compose ps --services --filter status=running 2>/dev/null | grep -qx app; then
if compose exec -T app sh -lc "$backup_cmd" > "$backup_path"; then
backed_up="1"
fi
fi
if [ "$backed_up" != "1" ] || [ ! -s "$backup_path" ]; then
if compose --profile setup run --rm -T --entrypoint sh init -lc "$backup_cmd" > "$backup_path"; then
backed_up="1"
fi
fi
if [ "$backed_up" = "1" ] && [ -s "$backup_path" ]; then
echo "SQLite backup saved: $backup_path"
else
rm -f "$backup_path"
echo "No existing SQLite database found; skipping database backup."
fi
}
build_updated_images() {
if command -v jboard_prepare_docker_build_env >/dev/null 2>&1; then
jboard_prepare_docker_build_env
jboard_print_build_profile
if jboard_is_low_resource_build; then
compose build "${JBOARD_DOCKER_BUILD_ARGS[@]}" init
compose build "${JBOARD_DOCKER_BUILD_ARGS[@]}" app
else
compose build "${JBOARD_DOCKER_BUILD_ARGS[@]}" init app
fi
else
compose build init app
fi
}
echo "[1/7] Pulling latest code..."
git pull --ff-only
load_resource_helpers
if [ "$BACKUP" = "1" ]; then
echo "[2/7] Backing up database..."
mkdir -p backups
$COMPOSE exec -T db pg_dump -U jboard jboard > "backups/jboard-db-$(date +%F-%H%M%S).sql"
echo "[2/7] Backing up SQLite database..."
backup_sqlite_database
else
echo "[2/7] Skipping database backup..."
fi
echo "[3/7] Building updated images..."
$COMPOSE build init app
build_updated_images
echo "[4/7] Syncing Prisma schema inside Docker network..."
$COMPOSE --profile setup run --rm init sh -lc 'npm run db:push'
compose --profile setup run --rm init sh -lc 'npm run db:push'
echo "[5/7] Restarting services..."
$COMPOSE up -d app
compose up -d app
echo "[6/7] Waiting for app to boot..."
sleep 8
echo "[7/7] Checking service status..."
$COMPOSE ps
compose ps
echo
echo "App health:"
@@ -42,7 +97,7 @@ curl -fsS "$HEALTH_URL" || true
echo
echo "Recent app logs:"
$COMPOSE logs --tail=80 app || true
compose logs --tail=80 app || true
echo
echo "Upgrade complete."