From d37ff8829b0b41cada1267249a8bcbb19607cb22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B9=20=D0=91=D0=BE=D0=B1?= =?UTF-8?q?=D1=8B=D1=80=D0=B5=D0=B2?= Date: Sat, 6 Jun 2026 01:50:35 +0300 Subject: [PATCH] docs: prepare private subscriber install --- README.md | 68 +++++++++++++++++++++++++++++++++++------------- quick-install.sh | 29 ++++++++++++++++----- 2 files changed, 72 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 267071f..08d3b9d 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,14 @@ # Amnezia Web PRO Deploy -Публичный установщик для **Amnezia Web PRO** на VPS. Репозиторий нужен, чтобы пользователи ставили панель одной командой без доступа к private GHCR image и без ошибки `403 Forbidden`. +Приватный установщик **Amnezia Web PRO** на VPS. Доступ к репозиториям выдаётся подписчикам Boosty. -По умолчанию установка идёт из открытого source repo: +По умолчанию установка идёт из private source repo: -- source: [`andrey271192/amnezia_web-PRO_test`](https://github.com/andrey271192/amnezia_web-PRO_test); +- source: `andrey271192/amnezia_web-PRO_test`; - текущий релиз: `v1.5.2`; - old GHCR image больше не используется по умолчанию; - legacy GHCR mode оставлен только вручную через `USE_GHCR=1`. +- нужен `GITHUB_TOKEN` с доступом к private repo. ## Что делает установщик @@ -17,21 +18,28 @@ - создаёт `.env`; - собирает и запускает Docker Compose stack; - поддерживает явный первый пароль admin через `ADMIN_PASSWORD`; -- не требует GHCR PAT для обычной установки. +- не требует GHCR PAT для обычной установки; +- требует GitHub token для доступа к private source. ## Быстрая установка На VPS от root: ```bash -curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia-web-pro-deploy/main/quick-install.sh | sudo bash +export GITHUB_TOKEN='ТОКЕН_ИЗ_BOOSTY' +curl -fsSL -H "Authorization: Bearer ${GITHUB_TOKEN}" \ + https://raw.githubusercontent.com/andrey271192/amnezia-web-pro-deploy/main/quick-install.sh \ + | sudo -E bash ``` То же самое с явным первым паролем admin: ```bash -curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia-web-pro-deploy/main/quick-install.sh \ - | sudo ADMIN_PASSWORD='СЛОЖНЫЙ_ПАРОЛЬ' bash +export GITHUB_TOKEN='ТОКЕН_ИЗ_BOOSTY' +export ADMIN_PASSWORD='СЛОЖНЫЙ_ПАРОЛЬ' +curl -fsSL -H "Authorization: Bearer ${GITHUB_TOKEN}" \ + https://raw.githubusercontent.com/andrey271192/amnezia-web-pro-deploy/main/quick-install.sh \ + | sudo -E bash ``` `quick-install.sh` скачает и запустит рабочий установщик: @@ -40,6 +48,8 @@ curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia-web-pro-deploy https://raw.githubusercontent.com/andrey271192/amnezia_web-PRO_test/main/install.sh ``` +Если `GITHUB_TOKEN` не передан, private GitHub вернёт `404` или `403`. Это нормально: repo закрыт. + ## Почему больше не GHCR Старый сценарий тянул private image: @@ -54,7 +64,7 @@ ghcr.io/andrey271192/amnezia-admin-pro:v1.0.0 unexpected status ... 403 Forbidden ``` -Это не ошибка VPS и не ошибка Docker. Это отказ GitHub Container Registry. Чтобы не ловить эту ошибку у подписчиков, обычная установка теперь идёт из GitHub source. +Это не ошибка VPS и не ошибка Docker. Это отказ GitHub Container Registry. Чтобы не ловить эту ошибку у подписчиков, обычная установка теперь идёт из private GitHub source. Предупреждение Docker: @@ -69,7 +79,10 @@ WARNING! Your credentials are stored unencrypted in '/root/.docker/config.json' Оставлен только для ручного использования, если у вас реально есть доступ к package: ```bash -USE_GHCR=1 curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia-web-pro-deploy/main/quick-install.sh | sudo -E bash +export GITHUB_TOKEN='ТОКЕН_ИЗ_BOOSTY' +USE_GHCR=1 curl -fsSL -H "Authorization: Bearer ${GITHUB_TOKEN}" \ + https://raw.githubusercontent.com/andrey271192/amnezia-web-pro-deploy/main/quick-install.sh \ + | sudo -E bash ``` или: @@ -90,10 +103,13 @@ USE_GHCR=1 sudo -E bash scripts/install.sh Причина: старый GHCR-сценарий пытается скачать private image, а у token нет доступа к package. -Решение: используйте обычную установку без GHCR: +Решение: используйте обычную private source установку без GHCR: ```bash -curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia-web-pro-deploy/main/quick-install.sh | sudo bash +export GITHUB_TOKEN='ТОКЕН_ИЗ_BOOSTY' +curl -fsSL -H "Authorization: Bearer ${GITHUB_TOKEN}" \ + https://raw.githubusercontent.com/andrey271192/amnezia-web-pro-deploy/main/quick-install.sh \ + | sudo -E bash ``` ### `Login Succeeded`, но pull всё равно падает @@ -135,7 +151,11 @@ docker compose version Укажите другой порт при установке основного проекта: ```bash -NGINX_HTTP_PORT=8081 curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web-PRO_test/main/install.sh | sudo -E bash +export GITHUB_TOKEN='ТОКЕН_ИЗ_BOOSTY' +export NGINX_HTTP_PORT=8081 +curl -fsSL -H "Authorization: Bearer ${GITHUB_TOKEN}" \ + https://raw.githubusercontent.com/andrey271192/amnezia_web-PRO_test/main/install.sh \ + | sudo -E bash ``` ### Не входит в панель после переустановки @@ -143,8 +163,11 @@ NGINX_HTTP_PORT=8081 curl -fsSL https://raw.githubusercontent.com/andrey271192/a Задайте новый пароль admin явно: ```bash -curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web-PRO_test/main/install.sh \ - | sudo ADMIN_PASSWORD='НОВЫЙ_ПАРОЛЬ' bash +export GITHUB_TOKEN='ТОКЕН_ИЗ_BOOSTY' +export ADMIN_PASSWORD='НОВЫЙ_ПАРОЛЬ' +curl -fsSL -H "Authorization: Bearer ${GITHUB_TOKEN}" \ + https://raw.githubusercontent.com/andrey271192/amnezia_web-PRO_test/main/install.sh \ + | sudo -E bash ``` ### Нужна полная переустановка @@ -152,9 +175,13 @@ curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web-PRO_test/m Удалите панель с данными и поставьте заново: ```bash -curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web-PRO_test/main/uninstall.sh \ +export GITHUB_TOKEN='ТОКЕН_ИЗ_BOOSTY' +curl -fsSL -H "Authorization: Bearer ${GITHUB_TOKEN}" \ + https://raw.githubusercontent.com/andrey271192/amnezia_web-PRO_test/main/uninstall.sh \ | sudo REMOVE_DATA=1 REMOVE_DIR=1 bash -curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia-web-pro-deploy/main/quick-install.sh | sudo bash +curl -fsSL -H "Authorization: Bearer ${GITHUB_TOKEN}" \ + https://raw.githubusercontent.com/andrey271192/amnezia-web-pro-deploy/main/quick-install.sh \ + | sudo -E bash ``` ## Удаление @@ -162,13 +189,18 @@ curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia-web-pro-deploy Обычная остановка панели: ```bash -curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web-PRO_test/main/uninstall.sh | sudo bash +export GITHUB_TOKEN='ТОКЕН_ИЗ_BOOSTY' +curl -fsSL -H "Authorization: Bearer ${GITHUB_TOKEN}" \ + https://raw.githubusercontent.com/andrey271192/amnezia_web-PRO_test/main/uninstall.sh \ + | sudo -E bash ``` Полная очистка с данными: ```bash -curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web-PRO_test/main/uninstall.sh \ +export GITHUB_TOKEN='ТОКЕН_ИЗ_BOOSTY' +curl -fsSL -H "Authorization: Bearer ${GITHUB_TOKEN}" \ + https://raw.githubusercontent.com/andrey271192/amnezia_web-PRO_test/main/uninstall.sh \ | sudo REMOVE_DATA=1 REMOVE_DIR=1 bash ``` diff --git a/quick-install.sh b/quick-install.sh index 794dfc3..91d87de 100755 --- a/quick-install.sh +++ b/quick-install.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -# One-command installer kept for old links. Default path now installs from the -# open source repo, not the private GHCR image, so subscribers do not hit 403. +# One-command installer kept for subscriber links. Default path installs from +# the private source repo using GITHUB_TOKEN, not the legacy GHCR image. set -euo pipefail RAW_BASE="${RAW_BASE:-https://raw.githubusercontent.com/andrey271192/amnezia-web-pro-deploy/main}" @@ -8,7 +8,8 @@ SOURCE_INSTALL_URL="${SOURCE_INSTALL_URL:-https://raw.githubusercontent.com/andr need_root() { if [[ "${EUID:-$(id -u)}" -ne 0 ]]; then - echo "Запустите: curl -fsSL ${RAW_BASE}/quick-install.sh | sudo bash" + echo "Запустите с GITHUB_TOKEN:" + echo "curl -fsSL -H \"Authorization: Bearer \${GITHUB_TOKEN}\" ${RAW_BASE}/quick-install.sh | sudo -E bash" exit 1 fi } @@ -20,17 +21,29 @@ need_cmd() { } } +curl_auth_args() { + if [[ -n "${GITHUB_TOKEN:-}" ]]; then + printf '%s\n' -H "Authorization: Bearer ${GITHUB_TOKEN}" + fi +} + need_root need_cmd curl if [[ "${USE_GHCR:-0}" != "1" ]]; then echo "→ GHCR-установка отключена: старый private image часто даёт 403 Forbidden." - echo "→ Ставлю Amnezia Web PRO из GitHub: ${SOURCE_INSTALL_URL}" + echo "→ Ставлю Amnezia Web PRO из private GitHub source: ${SOURCE_INSTALL_URL}" echo "→ Для старого GHCR-сценария запустите: USE_GHCR=1 curl ... | sudo -E bash" + if [[ -z "${GITHUB_TOKEN:-}" ]]; then + echo "Нужен GITHUB_TOKEN с доступом к private repo andrey271192/amnezia_web-PRO_test." + echo "Пример: export GITHUB_TOKEN='ТОКЕН_ИЗ_BOOSTY'" + exit 1 + fi echo "" tmp="$(mktemp)" trap 'rm -f "$tmp"' EXIT - curl -fsSL "${SOURCE_INSTALL_URL}" -o "$tmp" + mapfile -t _curl_auth < <(curl_auth_args) + curl -fsSL "${_curl_auth[@]}" "${SOURCE_INSTALL_URL}" -o "$tmp" exec bash "$tmp" fi @@ -57,7 +70,8 @@ trim() { if ! docker compose version >/dev/null 2>&1; then _lib="$(mktemp)" - if ! curl -fsSL "${RAW_BASE}/scripts/lib-compose-v2.sh" -o "${_lib}"; then + mapfile -t _curl_auth < <(curl_auth_args) + if ! curl -fsSL "${_curl_auth[@]}" "${RAW_BASE}/scripts/lib-compose-v2.sh" -o "${_lib}"; then echo "Не удалось скачать вспомогательный файл Compose v2 (${RAW_BASE}/scripts/lib-compose-v2.sh)." >&2 rm -f "${_lib}" exit 1 @@ -87,7 +101,8 @@ remove_free_amnezia_web_panel() { remove_free_amnezia_web_panel echo "→ Получаю актуальный тег образа..." -IMAGE_TAG="$(trim "$(curl -fsSL "${RAW_BASE}/PRO_IMAGE_TAG")")" +mapfile -t _curl_auth < <(curl_auth_args) +IMAGE_TAG="$(trim "$(curl -fsSL "${_curl_auth[@]}" "${RAW_BASE}/PRO_IMAGE_TAG")")" if [[ -z "${IMAGE_TAG}" ]]; then echo "Не удалось прочитать PRO_IMAGE_TAG с GitHub." exit 1