From c7e2afa63180c4b18180259eb1516c8086d3c53e Mon Sep 17 00:00:00 2001 From: Den Piligrim <89912505+vasiljevdenis@users.noreply.github.com> Date: Thu, 21 May 2026 23:19:13 +0300 Subject: [PATCH] fix uninstall --- delete.sh | 62 ++++++++++++++++++++++++++++++++++++++---------------- install.sh | 19 +++++++++++------ 2 files changed, 57 insertions(+), 24 deletions(-) diff --git a/delete.sh b/delete.sh index 50235ea..36aae6c 100644 --- a/delete.sh +++ b/delete.sh @@ -17,6 +17,20 @@ need_root() { [[ $EUID -eq 0 ]] || die "Запускать только от root" } +resolve_compose_cmd() { + if docker compose version >/dev/null 2>&1; then + COMPOSE_CMD=("docker" "compose") + return 0 + fi + + if command -v docker-compose >/dev/null 2>&1; then + COMPOSE_CMD=("docker-compose") + return 0 + fi + + return 1 +} + echo "Перед удалением самостоятельно удалите подписки в 3DP-MANAGER, чтобы инбунды удалились в панели 3x-ui" read -r -p "Вы уверены, что хотите удалить? (y/n): " answer @@ -39,44 +53,56 @@ PROJECT_DIR="/opt/3dp-manager" log "Начинаем удаление 3dp-manager" -if [[ ! -d "$PROJECT_DIR" ]]; then - warn "Директория $PROJECT_DIR не найдена — удалять нечего" - exit 0 +if [[ -d "$PROJECT_DIR" ]]; then + cd "$PROJECT_DIR" +else + warn "Директория $PROJECT_DIR не найдена — проверяем Docker-ресурсы по известным именам" fi -cd "$PROJECT_DIR" - ################################# # DOCKER COMPOSE DOWN ################################# -if command -v docker >/dev/null 2>&1 && docker compose version >/dev/null 2>&1; then - if [[ -f docker-compose.yml ]]; then +if command -v docker >/dev/null 2>&1; then + if [[ -d "$PROJECT_DIR" && -f docker-compose.yml ]] && resolve_compose_cmd; then log "Останавливаем контейнеры 3dp-manager" - docker compose down --volumes --remove-orphans || warn "Ошибка при docker compose down" + "${COMPOSE_CMD[@]}" down --volumes --remove-orphans || warn "Ошибка при docker compose down" else - warn "docker-compose.yml не найден" + warn "docker-compose.yml или Docker Compose не найден — удаляем контейнеры и volumes по известным именам" fi + + docker rm -f 3dp-postgres 3dp-backend 3dp-frontend >/dev/null 2>&1 || true + + for volume in 3dp-manager_pg_data 3dpmanager_pg_data; do + if docker volume inspect "$volume" >/dev/null 2>&1; then + log "Удаляем volume $volume" + docker volume rm "$volume" >/dev/null 2>&1 || warn "Не удалось удалить volume $volume" + fi + done else - warn "Docker или docker compose не установлен — пропуск" + warn "Docker не установлен — пропуск удаления Docker-ресурсов" fi ################################# # CLEAN IMAGES ################################# -log "Удаляем образы 3dp-manager (если есть)" +if command -v docker >/dev/null 2>&1; then + log "Удаляем образы 3dp-manager (если есть)" -docker images --format '{{.Repository}} {{.ID}}' \ - | grep 3dp-manager \ - | awk '{print $2}' \ - | xargs -r docker rmi -f || true + docker images --format '{{.Repository}} {{.ID}}' \ + | grep 3dp-manager \ + | awk '{print $2}' \ + | xargs -r docker rmi -f || true +fi ################################# # REMOVE DIRECTORY ################################# -log "Удаляем $PROJECT_DIR" -rm -rf "$PROJECT_DIR" +if [[ -d "$PROJECT_DIR" ]]; then + log "Удаляем $PROJECT_DIR" + rm -rf "$PROJECT_DIR" +fi ################################# # DONE ################################# -log "✔ 3dp-manager полностью удалён" \ No newline at end of file +log "✔ 3dp-manager полностью удалён" diff --git a/install.sh b/install.sh index ef5ed57..cfd606a 100644 --- a/install.sh +++ b/install.sh @@ -104,9 +104,10 @@ cleanup_previous_install_data() { "${COMPOSE_CMD[@]}" down --volumes --remove-orphans || true else warn "docker-compose.yml not found. Removing known 3dp-manager containers if they still exist." - docker rm -f 3dp-postgres 3dp-backend 3dp-frontend >/dev/null 2>&1 || true fi + docker rm -f 3dp-postgres 3dp-backend 3dp-frontend >/dev/null 2>&1 || true + for volume in 3dp-manager_pg_data 3dpmanager_pg_data; do if docker volume inspect "$volume" >/dev/null 2>&1; then warn "Removing stale Postgres volume: $volume" @@ -323,13 +324,19 @@ case "$ssl_choice" in ;; 3) + read -rp "Введите домен для панели (например panel.example.com; Enter — использовать IP): " INPUT_HOST read -rp "Путь к fullchain.pem: " user_cert read -rp "Путь к privkey.pem: " user_key if [[ -f "$user_cert" && -f "$user_key" ]]; then USE_SSL=true CERT_PATH="$user_cert" KEY_PATH="$user_key" - UI_HOST=$(hostname -I | awk '{print $1}') + if [ -n "$INPUT_HOST" ]; then + UI_HOST="$INPUT_HOST" + else + UI_HOST=$(hostname -I | awk '{print $1}') + warn "Домен не указан. В итоговом URL будет использован IP: $UI_HOST" + fi else warn "Файлы не найдены. Переключение на HTTP." fi @@ -359,11 +366,11 @@ ADMIN_USER=$(openssl rand -base64 8) ADMIN_PASS=$(openssl rand -base64 12) # Определяем ALLOWED_ORIGINS из домена или IP if [[ -n "${UI_HOST:-}" ]]; then - if [[ "$UI_HOST" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then - ALLOWED_ORIGINS="http://${UI_HOST}" - else - ALLOWED_ORIGINS="https://${UI_HOST}" + URL_SCHEME="http" + if [[ "$USE_SSL" == "true" ]]; then + URL_SCHEME="https" fi + ALLOWED_ORIGINS="${URL_SCHEME}://${UI_HOST}" else ALLOWED_ORIGINS="" fi