add uninstall.sh: full removal of what install.sh deploys (services, binaries, configs, nginx site, LE cert)

This commit is contained in:
ded_ikar
2026-08-17 14:19:04 +05:00
parent d352912b9b
commit 389d90bc83
2 changed files with 89 additions and 0 deletions
+8
View File
@@ -24,6 +24,14 @@ bash <(curl -fsSL https://git.my-handbook.ru/ded_ikar/sdm-xray/raw/main/install.
Скрипт: ставит бинарь + systemd, генерит UUID/ключ, получает Let's Encrypt, поднимает
туннель на 443 с зеркалом. В конце печатает готовый клиентский конфиг и пароль панели.
## Удаление сервера
Полный снос всего, что поставил install.sh (systemd, бинари, конфиги, nginx-сайт,
Let's Encrypt-сертификат):
```bash
bash <(curl -fsSL https://git.my-handbook.ru/ded_ikar/sdm-xray/raw/main/uninstall.sh) ваш-домен.ru
```
apt-пакеты (nginx/certbot) не трогаются — их могут использовать другие сервисы.
## Панель управления (`sdm-panel`)
Отдельный бинарь на VPS, слушает `127.0.0.1:8080` (наружу не торчит). Доступ через
SSH-туннель (трафик шифрован SSH):
Executable
+81
View File
@@ -0,0 +1,81 @@
#!/usr/bin/env bash
# sdm-xray — полная деинсталляция сервера stealth-туннеля.
# Зеркало install.sh: убирает ровно то, что он ставил.
# Использование:
# sudo bash uninstall.sh [domain]
# где [domain] — домен, для которого выпущен Let's Encrypt-сертификат
# (если не передан, домен автоопределяется из nginx-конфига /etc/nginx/sites-available/sdm).
set -u
if [ "${1:-}" = "-h" ] || [ "${1:-}" = "--help" ]; then
sed -n '2,9p' "$0"
exit 0
fi
DOMAIN="${1:-}"
INSTALL_DIR="/usr/local/xray"
DATA_DIR="/etc/xray"
if [ -z "$DOMAIN" ] && [ -f /etc/nginx/sites-available/sdm ]; then
DOMAIN="$(grep -m1 'server_name' /etc/nginx/sites-available/sdm 2>/dev/null | awk '{print $2}' | tr -d ';')"
fi
echo "=== sdm-xray uninstall ==="
[ -n "$DOMAIN" ] && echo "domain: $DOMAIN" || echo "domain: (не определён)"
echo "--- stop & disable systemd services ---"
for svc in sdm-panel xray; do
if [ -f "/etc/systemd/system/$svc.service" ]; then
systemctl stop "$svc" 2>/dev/null || true
systemctl disable "$svc" 2>/dev/null || true
rm -f "/etc/systemd/system/$svc.service"
echo "removed $svc.service"
else
echo "$svc.service not present"
fi
done
systemctl daemon-reload
echo "--- remove binaries & data ---"
rm -rf "$INSTALL_DIR"
rm -rf "$DATA_DIR"
echo "removed $INSTALL_DIR"
echo "removed $DATA_DIR (config.json, panel.json, uuid, key)"
echo "--- nginx site ---"
rm -f /etc/nginx/sites-enabled/sdm
rm -f /etc/nginx/sites-available/sdm
if [ -f /etc/nginx/sites-available/default ] && [ ! -e /etc/nginx/sites-enabled/default ]; then
ln -sf /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
echo "restored default nginx site"
fi
if nginx -t >/dev/null 2>&1; then
systemctl reload nginx 2>/dev/null || true
echo "nginx reloaded"
else
echo "WARN: nginx config is broken — fix manually (nginx -t)"
fi
echo "--- letsencrypt certificate ---"
if [ -n "$DOMAIN" ]; then
if [ -d "/etc/letsencrypt/live/$DOMAIN" ]; then
if command -v certbot >/dev/null 2>&1; then
certbot delete --cert-name "$DOMAIN" --non-interactive >/dev/null 2>&1 \
|| echo "WARN: certbot delete failed — удалите серт вручную: sudo certbot delete --cert-name $DOMAIN"
fi
rm -f "/etc/letsencrypt/renewal/$DOMAIN.conf"
rm -rf "/etc/letsencrypt/live/$DOMAIN" "/etc/letsencrypt/archive/$DOMAIN"
echo "removed LE cert for $DOMAIN"
else
echo "no cert for $DOMAIN"
fi
else
echo "domain not given — LE cert NOT removed. Вручную: sudo certbot delete --cert-name <domain>"
fi
echo
echo "=== UNINSTALLED ==="
echo "Остались apt-пакеты (не удаляю — их могут использовать другие сервисы):"
echo " curl openssl jq nginx certbot"
echo " полностью снести: sudo apt-get purge -y --auto-remove nginx certbot"
echo "Остался файл сертификата: /var/www/html/.well-known/acme-challenge (можно удалить вручную)"