Files
shop10/scripts/admin-web-update.sh
2026-05-17 14:48:33 +03:00

94 lines
2.8 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Обновление кода из админки (git pull + npm + перезапуск shop)
# Запуск: bash scripts/admin-web-update.sh
# С www-data: ADMIN_UPDATE_USE_SUDO=1 + sudoers NOPASSWD на этот скрипт
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=shop-root.sh
source "$SCRIPT_DIR/shop-root.sh"
PORT="${PORT:-3000}"
REPO_OWNER="${SHOP_GIT_USER:-$(stat -c '%U' "$SHOP_ROOT/.git" 2>/dev/null || stat -c '%U' "$SHOP_ROOT" 2>/dev/null || echo root)}"
SHOP_SERVICE_USER="${SHOP_SERVICE_USER:-www-data}"
ensure_git_safe() {
local user="$1"
if [ -z "$user" ]; then return; fi
if [ "$(id -u)" -eq 0 ]; then
sudo -u "$user" git config --global --add safe.directory "$SHOP_ROOT" 2>/dev/null || true
else
git config --global --add safe.directory "$SHOP_ROOT" 2>/dev/null || true
fi
}
run_as_owner() {
local cmd="$1"
if [ "$(id -u)" -eq 0 ] && [ "$(whoami)" != "$REPO_OWNER" ]; then
sudo -u "$REPO_OWNER" env SHOP_ROOT="$SHOP_ROOT" bash -c "cd \"$SHOP_ROOT\" && $cmd"
else
bash -c "cd \"$SHOP_ROOT\" && $cmd"
fi
}
ensure_git_safe "$REPO_OWNER"
ensure_git_safe "$(whoami)"
echo "=== Обновление Shop (админка) ==="
echo "Каталог: $SHOP_ROOT"
echo "Git от пользователя: $REPO_OWNER (текущий: $(whoami))"
if [ ! -d .git ]; then
echo "Ошибка: нет .git в $SHOP_ROOT"
exit 1
fi
echo ""
echo "Текущая версия:"
run_as_owner "git log -1 --oneline"
echo ""
echo "--- git sync ---"
run_as_owner "bash scripts/git-sync.sh"
echo ""
echo "--- npm install ---"
if [ "$(id -u)" -eq 0 ]; then
npm install --omit=dev
else
run_as_owner "npm install --omit=dev"
fi
echo ""
echo "--- права для службы shop ($SHOP_SERVICE_USER) ---"
if [ "$(id -u)" -eq 0 ]; then
bash "$SCRIPT_DIR/fix-shop-permissions.sh"
else
echo "WARN: запустите от root: sudo bash scripts/fix-shop-permissions.sh"
fi
echo ""
echo "Новая версия:"
run_as_owner "git log -1 --oneline"
echo ""
echo "--- перезапуск shop ---"
if command -v systemctl >/dev/null 2>&1 && systemctl cat shop.service >/dev/null 2>&1; then
if systemctl restart shop; then
sleep 2
if curl -sf "http://127.0.0.1:${PORT}/health" >/dev/null; then
echo "OK: служба shop перезапущена, /health отвечает"
else
echo "WARN: shop перезапущен, но /health не ответил — journalctl -u shop -n 40"
fi
else
echo "WARN: systemctl restart shop не удался. Выполните от root: systemctl restart shop"
exit 1
fi
else
echo "INFO: служба shop не найдена — перезапустите Node вручную"
fi
echo ""
echo "Готово."