From c07028514ee0e81f7a3997a01b712c20550fb30a 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: Thu, 14 May 2026 23:46:43 +0300 Subject: [PATCH] feat: one-line quick-install with PAT prompt Co-authored-by: Cursor --- PRO_IMAGE_TAG | 1 + README.md | 18 +++++-- docs/BOOSTY_SUBSCRIBERS_POST.md | 63 +++++++++++------------- quick-install.sh | 86 +++++++++++++++++++++++++++++++++ scripts/install.sh | 13 +++++ scripts/update.sh | 10 ++++ 6 files changed, 152 insertions(+), 39 deletions(-) create mode 100644 PRO_IMAGE_TAG create mode 100755 quick-install.sh diff --git a/PRO_IMAGE_TAG b/PRO_IMAGE_TAG new file mode 100644 index 0000000..0ec25f7 --- /dev/null +++ b/PRO_IMAGE_TAG @@ -0,0 +1 @@ +v1.0.0 diff --git a/README.md b/README.md index 5a0046f..6b5b9c6 100644 --- a/README.md +++ b/README.md @@ -4,16 +4,26 @@ ## Требования -- VPS с Docker и Docker Compose v2 (`docker compose`) -- Подписка и значения `GHCR_*` из материалов для подписчиков +- VPS с **Docker** и **Docker Compose v2** (`docker compose`), **curl**, при первой установке — **git** +- Активная подписка и **ключ** (GitHub PAT с `read:packages`), см. закрытый пост Boosty -## Быстрый старт +## Одна ссылка — установка (спросит только ключ) + +Скопируйте и выполните на VPS **от root** (или через `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). Ввод скрыт. + +## Ручной способ (git + .env) ```bash git clone https://github.com/andrey271192/amnezia-web-pro-deploy.git cd amnezia-web-pro-deploy cp .env.example .env -# заполните GHCR_IMAGE, IMAGE_TAG, GHCR_USERNAME, GHCR_TOKEN (из закрытого поста Boosty) +# заполните GHCR_* из закрытого поста Boosty sudo bash scripts/install.sh ``` diff --git a/docs/BOOSTY_SUBSCRIBERS_POST.md b/docs/BOOSTY_SUBSCRIBERS_POST.md index c1c17d9..87148c2 100644 --- a/docs/BOOSTY_SUBSCRIBERS_POST.md +++ b/docs/BOOSTY_SUBSCRIBERS_POST.md @@ -1,60 +1,53 @@ # Шаблон закрытого поста Boosty (только для подписчиков) -Скопируйте в Boosty и замените плейсхолдеры. +Скопируйте в Boosty и подставьте **один** секрет — ключ ниже. --- ## Amnezia Admin — Pro (Docker) -Спасибо за поддержку. Исходный код Pro не распространяется — доступ только к готовому образу в GitHub Container Registry. +Спасибо за поддержку. Исходный код Pro не распространяется — доступ только к приватному образу на GitHub Container Registry. -### 1) Открытая инструкция и файлы +### Установка одной командой -Репозиторий установки (публичный): -https://github.com/andrey271192/amnezia-web-pro-deploy - -На VPS (Ubuntu/Debian, установлен Docker): +На VPS установите Docker и Compose v2, затем выполните **от root**: ```bash -sudo apt-get update && sudo apt-get install -y git -git clone https://github.com/andrey271192/amnezia-web-pro-deploy.git -cd amnezia-web-pro-deploy -cp .env.example .env -nano .env +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 ``` -### 2) Заполните `.env` значениями ниже +Скрипт спросит **ключ доступа** (скрытый ввод). Вставьте ключ из блока ниже и нажмите Enter. -| Переменная | Значение для подписчиков | -|------------|--------------------------| -| `GHCR_IMAGE` | `ghcr.io/andrey271192/amnezia-admin-pro` | -| `IMAGE_TAG` | `v1.0.0` *(или актуальный тег из объявления)* | -| `GHCR_USERNAME` | **`REPLACE_ME_USERNAME`** | -| `GHCR_TOKEN` | **`REPLACE_ME_TOKEN`** | +### Ваш ключ (Personal Access Token для GHCR) -⚠️ Не выкладывайте `.env` и токен в открытый доступ. Не коммитьте их в git. +``` +REPLACE_ME_PASTE_TOKEN_HERE +``` -### 3) Установка одной командой +- Логин GitHub для registry уже зашит в установщик (`andrey271192`). +- Актуальный тег образа скрипт подтягивает сам из репозитория установки (`PRO_IMAGE_TAG`). + +⚠️ Не публикуйте ключ в открытых чатах и скриншотах. Не отправляйте его третьим лицам. + +### После установки + +Панель: `http://ВАШ_IP:8080` (порт при необходимости задаётся переменной `HOST_PORT` до запуска quick-install или правкой `/opt/amnezia-web-pro-deploy/.env`). + +Файлы установки: `/opt/amnezia-web-pro-deploy` + +### Обновление ```bash -sudo bash scripts/install.sh +sudo bash /opt/amnezia-web-pro-deploy/scripts/update.sh ``` -Панель: `http://ВАШ_IP:8080` (порт меняется через `HOST_PORT` в `.env`). +Тег образа подтягивается из публичного файла `PRO_IMAGE_TAG` при следующем запуске quick-install; для **update.sh** при новом релизе при необходимости обновите строку `IMAGE_TAG` в `/opt/amnezia-web-pro-deploy/.env` (или заново выполните `quick-install.sh` — он перезапишет `.env` и запросит ключ снова). -### 4) Обновление до новой версии +### Если подписка закончилась -В посте при новом релизе будет указан новый `IMAGE_TAG`. В `.env` замените `IMAGE_TAG`, затем: - -```bash -cd amnezia-web-pro-deploy -sudo bash scripts/update.sh -``` - -### 5) Если подписка закончилась - -Доступ к закрытым материалам Boosty пропадает; pull-токен может быть отозван при ротации — новые установки и обновления станут недоступны без активной подписки. +Доступ к закрытому посту пропадает; выданный ключ можно отозвать на стороне GitHub — новые установки и pull образа станут невозможны без нового ключа. --- -**Поддержка:** напишите автору в личные сообщения на Boosty (вопросы по установке и обновлению). +**Поддержка:** напишите автору в личные сообщения на Boosty. diff --git a/quick-install.sh b/quick-install.sh new file mode 100755 index 0000000..522ca27 --- /dev/null +++ b/quick-install.sh @@ -0,0 +1,86 @@ +#!/usr/bin/env bash +# Одна команда: curl … | sudo bash — спросит только ключ (PAT для ghcr.io). +set -euo pipefail + +DEPLOY_REPO="${DEPLOY_REPO:-https://github.com/andrey271192/amnezia-web-pro-deploy.git}" +RAW_BASE="${RAW_BASE:-https://raw.githubusercontent.com/andrey271192/amnezia-web-pro-deploy/main}" +INSTALL_ROOT="${INSTALL_ROOT:-/opt/amnezia-web-pro-deploy}" + +DEFAULT_GHCR_IMAGE="${DEFAULT_GHCR_IMAGE:-ghcr.io/andrey271192/amnezia-admin-pro}" +DEFAULT_GHCR_USERNAME="${DEFAULT_GHCR_USERNAME:-andrey271192}" + +need_root() { + if [[ "${EUID:-$(id -u)}" -ne 0 ]]; then + echo "Запустите: curl -fsSL ${RAW_BASE}/quick-install.sh | sudo bash" + exit 1 + fi +} + +need_cmd() { + command -v "$1" >/dev/null 2>&1 || { + echo "Нужна утилита: $1 (например: apt-get install -y $1)" + exit 1 + } +} + +trim() { + local v="$1" + v="${v//$'\r'/}" + v="${v#"${v%%[![:space:]]*}"}" + v="${v%"${v##*[![:space:]]}"}" + printf '%s' "$v" +} + +need_root +need_cmd curl +need_cmd docker + +if ! docker info >/dev/null 2>&1; then + echo "Docker daemon недоступен. Запустите Docker и повторите." + exit 1 +fi + +echo "→ Получаю актуальный тег образа..." +IMAGE_TAG="$(trim "$(curl -fsSL "${RAW_BASE}/PRO_IMAGE_TAG")")" +if [[ -z "${IMAGE_TAG}" ]]; then + echo "Не удалось прочитать PRO_IMAGE_TAG с GitHub." + exit 1 +fi + +if [[ ! -d "${INSTALL_ROOT}/.git" ]]; then + need_cmd git + mkdir -p "$(dirname "${INSTALL_ROOT}")" + rm -rf "${INSTALL_ROOT}" + echo "→ Клонирую ${DEPLOY_REPO} → ${INSTALL_ROOT}" + git clone --depth 1 --branch main "${DEPLOY_REPO}" "${INSTALL_ROOT}" +else + echo "→ Обновляю ${INSTALL_ROOT}" + git -C "${INSTALL_ROOT}" fetch --depth 1 origin main + git -C "${INSTALL_ROOT}" reset --hard "origin/main" +fi + +echo "" +echo "Введите ключ доступа к образу (GitHub PAT с правом read:packages)." +echo "Ввод скрыт — символы не отображаются." +read -rs GHCR_KEY +echo "" + +GHCR_KEY="$(trim "${GHCR_KEY}")" +if [[ -z "${GHCR_KEY}" ]]; then + echo "Ключ пустой — выход." + exit 1 +fi + +umask 077 +cat >"${INSTALL_ROOT}/.env" <