- Dockerfile с multi-stage сборкой для linux/amd64 и linux/arm64 - Gitea Actions CI/CD для автоматической сборки и пуша в registry - docker-compose с поддержкой multi-arch образов - install.sh с автоопределением архитектуры и выбором: pull vs build - uninstall.sh обновлён для Docker-деинсталляции - README.md обновлён: multi-arch, CI/CD, Gitea registry
140 lines
4.8 KiB
Bash
140 lines
4.8 KiB
Bash
#!/usr/bin/env bash
|
||
# =============================================================================
|
||
# WireGuard VPS Tunnel — Деинсталлятор (Docker)
|
||
# Останавливает и удаляет Docker-контейнеры, образы и конфигурацию.
|
||
# =============================================================================
|
||
set -euo pipefail
|
||
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
BOLD='\033[1m'
|
||
NC='\033[0m'
|
||
|
||
info() { echo -e "${BLUE}[INFO]${NC} $*"; }
|
||
success() { echo -e "${GREEN}[OK]${NC} $*"; }
|
||
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
|
||
error() { echo -e "${RED}[ERROR]${NC} $*"; }
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
REMOVE_IMAGES=false
|
||
REMOVE_CONFIG=false
|
||
|
||
usage() {
|
||
echo "Использование: $0 [ОПЦИИ]"
|
||
echo ""
|
||
echo "Опции:"
|
||
echo " --remove-images Также удалить Docker-образы"
|
||
echo " --remove-config Также удалить директорию config/ с ключами"
|
||
echo " --help, -h Показать эту справку"
|
||
echo ""
|
||
echo "Пример:"
|
||
echo " sudo $0"
|
||
echo " sudo $0 --remove-images --remove-config"
|
||
exit 0
|
||
}
|
||
|
||
parse_args() {
|
||
while [[ $# -gt 0 ]]; do
|
||
case "$1" in
|
||
--remove-images) REMOVE_IMAGES=true; shift ;;
|
||
--remove-config) REMOVE_CONFIG=true; shift ;;
|
||
--help|-h) usage ;;
|
||
*) error "Неизвестный аргумент: $1"; usage ;;
|
||
esac
|
||
done
|
||
}
|
||
|
||
check_root() {
|
||
if [[ $EUID -ne 0 ]]; then
|
||
error "Скрипт должен выполняться от root. Используйте: sudo $0"
|
||
exit 1
|
||
fi
|
||
}
|
||
|
||
stop_containers() {
|
||
echo ""
|
||
info "Остановка Docker-контейнеров..."
|
||
|
||
if docker ps -a --format '{{.Names}}' | grep -q "wireguard-server"; then
|
||
docker compose -f "$SCRIPT_DIR/docker-compose.server.yml" down 2>/dev/null || true
|
||
success "Контейнер wireguard-server остановлен и удалён"
|
||
else
|
||
info "Контейнер wireguard-server не найден"
|
||
fi
|
||
|
||
if docker ps -a --format '{{.Names}}' | grep -q "wireguard-client"; then
|
||
docker compose -f "$SCRIPT_DIR/docker-compose.client.yml" down 2>/dev/null || true
|
||
success "Контейнер wireguard-client остановлен и удалён"
|
||
else
|
||
info "Контейнер wireguard-client не найден"
|
||
fi
|
||
}
|
||
|
||
remove_images() {
|
||
if [[ "$REMOVE_IMAGES" != true ]]; then
|
||
return 0
|
||
fi
|
||
|
||
info "Удаление Docker-образов..."
|
||
|
||
if docker images --format '{{.Repository}}' | grep -q "wireguard-vps-tunnel-server"; then
|
||
docker rmi wireguard-vps-tunnel-server 2>/dev/null || true
|
||
success "Образ wireguard-vps-tunnel-server удалён"
|
||
fi
|
||
|
||
if docker images --format '{{.Repository}}' | grep -q "wireguard-vps-tunnel-client"; then
|
||
docker rmi wireguard-vps-tunnel-client 2>/dev/null || true
|
||
success "Образ wireguard-vps-tunnel-client удалён"
|
||
fi
|
||
}
|
||
|
||
remove_config() {
|
||
if [[ "$REMOVE_CONFIG" != true ]]; then
|
||
return 0
|
||
fi
|
||
|
||
if [[ -d "$SCRIPT_DIR/config" ]]; then
|
||
rm -rf "$SCRIPT_DIR/config"
|
||
success "Директория config/ удалена"
|
||
fi
|
||
|
||
if [[ -f "$SCRIPT_DIR/.env" ]]; then
|
||
rm -f "$SCRIPT_DIR/.env"
|
||
success "Файл .env удалён"
|
||
fi
|
||
}
|
||
|
||
main() {
|
||
echo -e "${RED}${BOLD}"
|
||
echo "╔══════════════════════════════════════════════════════════╗"
|
||
echo "║ WireGuard VPS Tunnel — ДЕИНСТАЛЛЯТОР (Docker) ║"
|
||
echo "╚══════════════════════════════════════════════════════════╝"
|
||
echo -e "${NC}"
|
||
|
||
check_root
|
||
parse_args "$@"
|
||
|
||
warn "Этот скрипт остановит и удалит Docker-контейнеры WireGuard VPS Tunnel."
|
||
echo ""
|
||
read -r -p "Продолжить? [y/N]: " confirm
|
||
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
|
||
info "Отмена."
|
||
exit 0
|
||
fi
|
||
|
||
stop_containers
|
||
remove_images
|
||
remove_config
|
||
|
||
echo ""
|
||
success "WireGuard VPS Tunnel полностью удалён."
|
||
echo ""
|
||
echo -e "${YELLOW}${BOLD}Примечание:${NC} ${YELLOW}SSH-сервер и другие сервисы не были затронуты.${NC}"
|
||
echo -e "${YELLOW}PasswordAuthentication в sshd_config НЕ изменялся.${NC}"
|
||
echo -e "${YELLOW}Docker и wireguard-tools (на хосте) не удалялись.${NC}"
|
||
}
|
||
|
||
main "$@"
|