install: retry flaky network steps (apt/git/pip/certbot/xray), pipefail safety
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
603d88acae
commit
235b61cd34
1 changed files with 27 additions and 10 deletions
37
install.sh
37
install.sh
|
|
@ -1,10 +1,24 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
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"
|
||||||
|
|
||||||
|
retry() {
|
||||||
|
local n=1 max=3 delay=5
|
||||||
|
until "$@"; do
|
||||||
|
if [ "$n" -ge "$max" ]; then
|
||||||
|
echo "команда не прошла после $max попыток: $*"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
echo "попытка $n не прошла, повтор через ${delay}с..."
|
||||||
|
n=$((n + 1))
|
||||||
|
sleep "$delay"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
if [ "$(id -u)" != "0" ]; then
|
if [ "$(id -u)" != "0" ]; then
|
||||||
echo "запусти от root: sudo bash install.sh"
|
echo "запусти от root: sudo bash install.sh"
|
||||||
exit 1
|
exit 1
|
||||||
|
|
@ -46,32 +60,35 @@ if [ -z "$PANEL_DOMAIN" ] || [ -z "$SUB_DOMAIN" ] || [ -z "$BOT_TOKEN" ] || [ -z
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ADMIN_PANEL_PASSWORD=$(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 14)
|
ADMIN_PANEL_PASSWORD=$(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 14) || true
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "ставим пакеты..."
|
echo "ставим пакеты..."
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
apt-get update -qq
|
retry apt-get update -qq
|
||||||
apt-get install -y -qq curl wget git openssl ufw fail2ban \
|
retry apt-get install -y -qq curl wget git openssl ufw fail2ban \
|
||||||
python3 python3-venv python3-pip \
|
python3 python3-venv python3-pip \
|
||||||
nginx-full certbot > /dev/null
|
nginx-full certbot > /dev/null
|
||||||
|
|
||||||
|
install_xray() {
|
||||||
|
bash -c "$(curl -Ls https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
|
||||||
|
}
|
||||||
if [ ! -f /usr/local/bin/xray ]; then
|
if [ ! -f /usr/local/bin/xray ]; then
|
||||||
echo "ставим Xray-core..."
|
echo "ставим Xray-core..."
|
||||||
bash -c "$(curl -Ls https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
|
retry install_xray
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "клонируем репозиторий в $APP_DIR..."
|
echo "клонируем репозиторий в $APP_DIR..."
|
||||||
if [ -d "$APP_DIR/.git" ]; then
|
if [ -d "$APP_DIR/.git" ]; then
|
||||||
git -C "$APP_DIR" pull --quiet
|
retry git -C "$APP_DIR" pull --quiet
|
||||||
else
|
else
|
||||||
git clone --quiet "$REPO_URL" "$APP_DIR"
|
retry git clone --quiet "$REPO_URL" "$APP_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd "$APP_DIR"
|
cd "$APP_DIR"
|
||||||
python3 -m venv venv
|
python3 -m venv venv
|
||||||
venv/bin/pip install --quiet --upgrade pip
|
retry venv/bin/pip install --quiet --upgrade pip
|
||||||
venv/bin/pip install --quiet -r requirements.txt
|
retry venv/bin/pip install --quiet -r requirements.txt
|
||||||
|
|
||||||
echo "генерируем Reality-ключи..."
|
echo "генерируем Reality-ключи..."
|
||||||
KEYS=$(/usr/local/bin/xray x25519)
|
KEYS=$(/usr/local/bin/xray x25519)
|
||||||
|
|
@ -134,9 +151,9 @@ ln -sf /etc/nginx/sites-available/mbs-http80.conf /etc/nginx/sites-enabled/mbs-h
|
||||||
nginx -t && systemctl enable --now nginx && systemctl reload nginx
|
nginx -t && systemctl enable --now nginx && systemctl reload nginx
|
||||||
|
|
||||||
echo "выпускаем сертификаты..."
|
echo "выпускаем сертификаты..."
|
||||||
certbot certonly --webroot -w "$WEBROOT" --non-interactive --agree-tos \
|
retry certbot certonly --webroot -w "$WEBROOT" --non-interactive --agree-tos \
|
||||||
--register-unsafely-without-email -d "$PANEL_DOMAIN" -d "$SUB_DOMAIN"
|
--register-unsafely-without-email -d "$PANEL_DOMAIN" -d "$SUB_DOMAIN"
|
||||||
certbot certonly --webroot -w "$WEBROOT" --non-interactive --agree-tos \
|
retry certbot certonly --webroot -w "$WEBROOT" --non-interactive --agree-tos \
|
||||||
--register-unsafely-without-email -d "$DE1_ADDRESS"
|
--register-unsafely-without-email -d "$DE1_ADDRESS"
|
||||||
|
|
||||||
mkdir -p /etc/letsencrypt/renewal-hooks/deploy
|
mkdir -p /etc/letsencrypt/renewal-hooks/deploy
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue