feat: mirror repo on api.savsis.xyz as primary update source, github as fallback

install.sh clones from the mirror first (falls back to github.com if
unreachable); mbs update fetches origin (mirror) first, falls back to
a github remote if that fetch fails. Mirror itself is a bare repo on
финка2, kept in sync from GitHub every 10 min via an authenticated
token (needed because that box's IP gets rate-limited/blocked by
GitHub for anonymous git clones).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Savsis? 2026-09-11 17:02:22 +05:00
parent 36fa7d55b0
commit 2604c2dfe7
2 changed files with 24 additions and 5 deletions

View file

@ -2,6 +2,7 @@
set -e set -e
set -o pipefail set -o pipefail
MIRROR_URL="https://api.savsis.xyz/git/mbs-panel.git/"
REPO_URL="https://github.com/devsavsis/mbs-panel.git" REPO_URL="https://github.com/devsavsis/mbs-panel.git"
APP_DIR="/opt/mbs-panel" APP_DIR="/opt/mbs-panel"
WEBROOT="/var/www/certbot" WEBROOT="/var/www/certbot"
@ -82,7 +83,12 @@ echo "клонируем репозиторий в $APP_DIR..."
if [ -d "$APP_DIR/.git" ]; then if [ -d "$APP_DIR/.git" ]; then
retry git -C "$APP_DIR" pull --quiet retry git -C "$APP_DIR" pull --quiet
else else
retry git clone --quiet "$REPO_URL" "$APP_DIR" if ! git clone --quiet "$MIRROR_URL" "$APP_DIR" 2>/dev/null; then
echo "зеркало недоступно, клонирую напрямую с GitHub..."
retry git clone --quiet "$REPO_URL" "$APP_DIR"
git -C "$APP_DIR" remote set-url origin "$MIRROR_URL"
fi
git -C "$APP_DIR" remote add github "$REPO_URL" 2>/dev/null || true
fi fi
cd "$APP_DIR" cd "$APP_DIR"

21
mbs
View file

@ -13,7 +13,7 @@ mbs — управление MBS Panel
mbs restart перезапустить всё (bot, api, xray, reload nginx) mbs restart перезапустить всё (bot, api, xray, reload nginx)
mbs logs [bot|api|xray] последние строки лога (по умолчанию api) mbs logs [bot|api|xray] последние строки лога (по умолчанию api)
mbs domain показать текущий домен панели mbs domain показать текущий домен панели
mbs update обновить код с GitHub и перезапустить (не трогает .env и базу) mbs update обновить код (зеркало api.savsis.xyz, потом GitHub) и перезапустить (не трогает .env и базу)
EOF EOF
} }
@ -58,17 +58,30 @@ cmd_domain() {
cmd_update() { cmd_update() {
cd "$APP_DIR" cd "$APP_DIR"
echo "проверяю обновления..." echo "проверяю обновления..."
git fetch --quiet origin main local remote="origin"
if ! git fetch --quiet origin main 2>/dev/null; then
if git remote | grep -q '^github$'; then
echo "зеркало недоступно, пробую github..."
if ! git fetch --quiet github main 2>/dev/null; then
echo "не удалось получить обновления ни с зеркала, ни с github"
return 1
fi
remote="github"
else
echo "не удалось получить обновления"
return 1
fi
fi
local before after local before after
before=$(git rev-parse HEAD) before=$(git rev-parse HEAD)
after=$(git rev-parse origin/main) after=$(git rev-parse "$remote/main")
if [ "$before" = "$after" ]; then if [ "$before" = "$after" ]; then
echo "уже последняя версия ($before)." echo "уже последняя версия ($before)."
return 0 return 0
fi fi
echo "текущая: $before" echo "текущая: $before"
echo "новая: $after" echo "новая: $after"
if ! git merge --ff-only origin/main --quiet; then if ! git merge --ff-only "$remote/main" --quiet; then
echo "не вышло быстро обновиться (похоже, файлы правились вручную на сервере) — разберись руками: git status" echo "не вышло быстро обновиться (похоже, файлы правились вручную на сервере) — разберись руками: git status"
return 1 return 1
fi fi