4c37f4ac1a
Co-authored-by: Cursor <cursoragent@cursor.com>
81 lines
2.4 KiB
Bash
81 lines
2.4 KiB
Bash
#!/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)}"
|
||
|
||
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 ---"
|
||
run_as_owner "npm install --omit=dev"
|
||
|
||
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 "Готово."
|