fix: git в админке — ls-remote и pull от владельца репозитория

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
shop
2026-05-17 14:35:15 +03:00
parent d4166ec62a
commit 4c37f4ac1a
4 changed files with 133 additions and 50 deletions
+23 -19
View File
@@ -1,37 +1,41 @@
#!/bin/bash
# Обновление кода из админки (git pull + npm + перезапуск shop)
# Запуск: bash scripts/admin-web-update.sh
# С www-data часто нужен sudoers: NOPASSWD на этот скрипт (ADMIN_UPDATE_USE_SUDO=1)
# С 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"
RUN_USER="${SHOP_RUN_USER:-www-data}"
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)}"
run_in_shop() {
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)" != "$RUN_USER" ]; then
sudo -u "$RUN_USER" env SHOP_ROOT="$SHOP_ROOT" bash -c "cd \"$SHOP_ROOT\" && $cmd"
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() {
git config --global --add safe.directory "$SHOP_ROOT" 2>/dev/null || true
if [ "$(id -u)" -eq 0 ] && id "$RUN_USER" &>/dev/null; then
sudo -u "$RUN_USER" git config --global --add safe.directory "$SHOP_ROOT" 2>/dev/null || true
fi
}
ensure_git_safe
ensure_git_safe "$REPO_OWNER"
ensure_git_safe "$(whoami)"
echo "=== Обновление Shop (админка) ==="
echo "Каталог: $SHOP_ROOT"
echo "Пользователь для git/npm: $(id -un 2>/dev/null || echo ?)"
echo "Git от пользователя: $REPO_OWNER (текущий: $(whoami))"
if [ ! -d .git ]; then
echo "Ошибка: нет .git в $SHOP_ROOT"
@@ -40,19 +44,19 @@ fi
echo ""
echo "Текущая версия:"
git log -1 --oneline || true
run_as_owner "git log -1 --oneline"
echo ""
echo "--- git sync ---"
run_in_shop "bash scripts/git-sync.sh"
run_as_owner "bash scripts/git-sync.sh"
echo ""
echo "--- npm install ---"
run_in_shop "npm install --omit=dev"
run_as_owner "npm install --omit=dev"
echo ""
echo "Новая версия:"
git log -1 --oneline
run_as_owner "git log -1 --oneline"
echo ""
echo "--- перезапуск shop ---"
@@ -69,7 +73,7 @@ if command -v systemctl >/dev/null 2>&1 && systemctl cat shop.service >/dev/null
exit 1
fi
else
echo "INFO: служба shop не найдена — перезапустите Node вручную (pm2/npm start)"
echo "INFO: служба shop не найдена — перезапустите Node вручную"
fi
echo ""