diff --git a/README.md b/README.md index dacb61b..231193b 100644 --- a/README.md +++ b/README.md @@ -7,23 +7,32 @@ - VPS с **Docker** и **Docker Compose v2** (`docker compose`), **curl**, при первой установке — **git** - Активная подписка и **ключ** (GitHub PAT с `read:packages`), см. закрытый пост Boosty -## Одна ссылка — установка (спросит только ключ) +## Одна команда — FREE → PRO (спросит только ключ) -Скопируйте и выполните на VPS **от root** (или через `sudo`): +На VPS **от root**: ```bash curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia-web-pro-deploy/main/quick-install.sh | sudo bash ``` -Скрипт сам возьмёт актуальный тег образа из файла [`PRO_IMAGE_TAG`](PRO_IMAGE_TAG), склонирует этот репозиторий в `/opt/amnezia-web-pro-deploy` и попросит ввести **ключ** (персональный токен для `docker pull` с GHCR). Ввод скрыт; запрос идёт через **`/dev/tty`**, чтобы работало при конструкции `curl | sudo bash`. +Скрипт **перед установкой PRO**: -Если на сервере интерактив всё равно недоступен — тот же скрипт файлом: +1. **Убирает FREE-панель** из типового `install.sh` (**amnezia_web**): контейнеры `amnezia-admin`, `amnezia-web-landing`, локальные образы `amnezia-admin:latest` / `amnezia-web-landing:latest`, каталог сборки **`/opt/amnezia-admin`**. +2. **Не трогает** контейнеры VPN/Wi‑Fi (**amnezia-awg**, **amnezia-awg2** и т.д.). +3. Подставляет **`AWG_CONTAINER`** автоматически, если на сервере уже есть `amnezia-awg` или `amnezia-awg2`. +4. Клонирует/обновляет **`/opt/amnezia-web-pro-deploy`**, тянет тег из [`PRO_IMAGE_TAG`](PRO_IMAGE_TAG), запрашивает **ключ PAT** (ввод с **`/dev/tty`**). + +Отключить снос FREE (редко нужно): `SKIP_REMOVE_FREE=1 curl … | sudo -E bash`. + +Если **нет интерактива** на stdin: ```bash curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia-web-pro-deploy/main/quick-install.sh -o /tmp/amnezia-quick-install.sh sudo bash /tmp/amnezia-quick-install.sh ``` +**Порт:** если после удаления FREE **8080** всё ещё занят — скрипт предложит другой или задайте `HOST_PORT=8081 curl … | sudo -E bash`. + ## Ручной способ (git + .env) ```bash diff --git a/docs/BOOSTY_SUBSCRIBERS_POST.md b/docs/BOOSTY_SUBSCRIBERS_POST.md index dbf350d..7fdc70a 100644 --- a/docs/BOOSTY_SUBSCRIBERS_POST.md +++ b/docs/BOOSTY_SUBSCRIBERS_POST.md @@ -17,7 +17,9 @@ sudo apt-get update && sudo apt-get install -y curl git curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia-web-pro-deploy/main/quick-install.sh | sudo bash ``` -Скрипт спросит **ключ доступа** (скрытый ввод с клавиатуры). Вставьте ключ из блока ниже и нажмите Enter. +Установщик **снимает FREE-панель** (типовой `amnezia_web`: контейнеры `amnezia-admin`, лендинг, образы и `/opt/amnezia-admin`). **Контейнер AmneziaWG/VPN не удаляется.** Затем ставится PRO и запрашивается ключ ниже. + +Если FREE оставить нельзя по ошибке (редко): `SKIP_REMOVE_FREE=1 curl … | sudo -E bash`. Если после вставки ключа появляются ошибки — альтернатива (тот же установщик): @@ -26,14 +28,12 @@ curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia-web-pro-deploy sudo bash /tmp/amnezia-quick-install.sh ``` -**Порт 8080 занят:** освободите его (`docker ps`, остановите лишний контейнер) или укажите другой порт и повторите установку: +**Порт 8080 занят не FREE-панелью:** скрипт сам предложит другой порт, либо явно: ```bash HOST_PORT=8081 curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia-web-pro-deploy/main/quick-install.sh | sudo -E bash ``` -Либо правкой `/opt/amnezia-web-pro-deploy/.env` и `cd /opt/amnezia-web-pro-deploy && docker compose up -d`. - ### Ваш ключ (Personal Access Token для GHCR) ``` diff --git a/quick-install.sh b/quick-install.sh index b1c4e66..5cf5c96 100755 --- a/quick-install.sh +++ b/quick-install.sh @@ -40,6 +40,26 @@ if ! docker info >/dev/null 2>&1; then exit 1 fi +# Снимаем FREE-панель (amnezia_web / install.sh): контейнеры + локальный образ + каталог сборки. +# VPN/AWG контейнеры (amnezia-awg, amnezia-awg2 и т.д.) не останавливаем. +remove_free_amnezia_web_panel() { + if [[ "${SKIP_REMOVE_FREE:-}" == "1" ]]; then + echo "→ SKIP_REMOVE_FREE=1 — FREE-панель не удаляю." + return 0 + fi + echo "→ Удаляю FREE-панель Amnezia Web (освобождаю порт 8080 при необходимости)..." + local c + for c in amnezia-admin amnezia-web-landing; do + docker rm -f "${c}" 2>/dev/null || true + done + docker rmi -f amnezia-admin:latest 2>/dev/null || true + docker rmi -f amnezia-web-landing:latest 2>/dev/null || true + rm -rf /opt/amnezia-admin 2>/dev/null || true + echo "→ FREE-панель снята (контейнеры WireGuard/AmneziaWG не трогались)." +} + +remove_free_amnezia_web_panel + echo "→ Получаю актуальный тег образа..." IMAGE_TAG="$(trim "$(curl -fsSL "${RAW_BASE}/PRO_IMAGE_TAG")")" if [[ -z "${IMAGE_TAG}" ]]; then @@ -126,7 +146,24 @@ pick_host_port() { printf '%s' "${alt}" } +pick_awg_container_name() { + if [[ -n "${AWG_CONTAINER:-}" ]]; then + printf '%s' "${AWG_CONTAINER}" + return + fi + if docker inspect amnezia-awg >/dev/null 2>&1; then + printf '%s' 'amnezia-awg' + return + fi + if docker inspect amnezia-awg2 >/dev/null 2>&1; then + printf '%s' 'amnezia-awg2' + return + fi + printf '%s' 'amnezia-awg2' +} + SELECTED_HOST_PORT="$(pick_host_port)" +SELECTED_AWG="$(pick_awg_container_name)" umask 077 # %q экранирует $ и прочее — безопасно для «source .env» в install.sh @@ -137,7 +174,7 @@ umask 077 printf 'GHCR_TOKEN=%q\n' "${GHCR_KEY}" printf 'HOST_PORT=%q\n' "${SELECTED_HOST_PORT}" printf 'CONTAINER_NAME=%q\n' "${CONTAINER_NAME:-amnezia-admin-pro}" - printf 'AWG_CONTAINER=%q\n' "${AWG_CONTAINER:-amnezia-awg2}" + printf 'AWG_CONTAINER=%q\n' "${SELECTED_AWG}" } >"${INSTALL_ROOT}/.env" echo "→ Запуск установки из ${INSTALL_ROOT}"