82 lines
3.1 KiB
Bash
Executable File
82 lines
3.1 KiB
Bash
Executable File
#!/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 (можно удалить вручную)"
|