mirror of
https://github.com/andrey271192/amnezia-web-pro-deploy.git
synced 2026-09-20 13:50:06 +00:00
feat: quick-install removes FREE panel before PRO; detect AWG container
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
17
README.md
17
README.md
@@ -7,23 +7,32 @@
|
|||||||
- VPS с **Docker** и **Docker Compose v2** (`docker compose`), **curl**, при первой установке — **git**
|
- VPS с **Docker** и **Docker Compose v2** (`docker compose`), **curl**, при первой установке — **git**
|
||||||
- Активная подписка и **ключ** (GitHub PAT с `read:packages`), см. закрытый пост Boosty
|
- Активная подписка и **ключ** (GitHub PAT с `read:packages`), см. закрытый пост Boosty
|
||||||
|
|
||||||
## Одна ссылка — установка (спросит только ключ)
|
## Одна команда — FREE → PRO (спросит только ключ)
|
||||||
|
|
||||||
Скопируйте и выполните на VPS **от root** (или через `sudo`):
|
На VPS **от root**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia-web-pro-deploy/main/quick-install.sh | sudo 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
|
```bash
|
||||||
curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia-web-pro-deploy/main/quick-install.sh -o /tmp/amnezia-quick-install.sh
|
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
|
sudo bash /tmp/amnezia-quick-install.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Порт:** если после удаления FREE **8080** всё ещё занят — скрипт предложит другой или задайте `HOST_PORT=8081 curl … | sudo -E bash`.
|
||||||
|
|
||||||
## Ручной способ (git + .env)
|
## Ручной способ (git + .env)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -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
|
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
|
sudo bash /tmp/amnezia-quick-install.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
**Порт 8080 занят:** освободите его (`docker ps`, остановите лишний контейнер) или укажите другой порт и повторите установку:
|
**Порт 8080 занят не FREE-панелью:** скрипт сам предложит другой порт, либо явно:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
HOST_PORT=8081 curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia-web-pro-deploy/main/quick-install.sh | sudo -E 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)
|
### Ваш ключ (Personal Access Token для GHCR)
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -40,6 +40,26 @@ if ! docker info >/dev/null 2>&1; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
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 "→ Получаю актуальный тег образа..."
|
echo "→ Получаю актуальный тег образа..."
|
||||||
IMAGE_TAG="$(trim "$(curl -fsSL "${RAW_BASE}/PRO_IMAGE_TAG")")"
|
IMAGE_TAG="$(trim "$(curl -fsSL "${RAW_BASE}/PRO_IMAGE_TAG")")"
|
||||||
if [[ -z "${IMAGE_TAG}" ]]; then
|
if [[ -z "${IMAGE_TAG}" ]]; then
|
||||||
@@ -126,7 +146,24 @@ pick_host_port() {
|
|||||||
printf '%s' "${alt}"
|
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_HOST_PORT="$(pick_host_port)"
|
||||||
|
SELECTED_AWG="$(pick_awg_container_name)"
|
||||||
|
|
||||||
umask 077
|
umask 077
|
||||||
# %q экранирует $ и прочее — безопасно для «source .env» в install.sh
|
# %q экранирует $ и прочее — безопасно для «source .env» в install.sh
|
||||||
@@ -137,7 +174,7 @@ umask 077
|
|||||||
printf 'GHCR_TOKEN=%q\n' "${GHCR_KEY}"
|
printf 'GHCR_TOKEN=%q\n' "${GHCR_KEY}"
|
||||||
printf 'HOST_PORT=%q\n' "${SELECTED_HOST_PORT}"
|
printf 'HOST_PORT=%q\n' "${SELECTED_HOST_PORT}"
|
||||||
printf 'CONTAINER_NAME=%q\n' "${CONTAINER_NAME:-amnezia-admin-pro}"
|
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"
|
} >"${INSTALL_ROOT}/.env"
|
||||||
|
|
||||||
echo "→ Запуск установки из ${INSTALL_ROOT}"
|
echo "→ Запуск установки из ${INSTALL_ROOT}"
|
||||||
|
|||||||
Reference in New Issue
Block a user