mirror of
https://github.com/andrey271192/amnezia_web.git
synced 2026-09-20 14:41:59 +00:00
feat: token field ON by default in FREE, donate links everywhere
- server.js: ALLOW_COMMUNITY_GITHUB_ACTIVATION defaults to true for community edition (disable explicitly with =0/false/no/off) - app.js: updated hint text when field is disabled by owner - public/index.html: donate links block on login screen - public/styles.css: .gate-donate styles - landing: proj-support-strip with donate links - README: unified "Поддержка проекта" block + blockquote at top - .github/FUNDING.yml: Boosty + Ozon + Telegram - scripts/install.sh: updated comment header - version bumped to 1.2.28 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2
.github/FUNDING.yml
vendored
2
.github/FUNDING.yml
vendored
@@ -3,3 +3,5 @@ github: andrey271192
|
|||||||
|
|
||||||
custom:
|
custom:
|
||||||
- https://boosty.to/andrey27/donate
|
- https://boosty.to/andrey27/donate
|
||||||
|
- https://finance.ozon.ru/apps/sbp/ozonbankpay/019dc200-2a5d-7931-a619-782d285f6798
|
||||||
|
- https://t.me/lot_andrey
|
||||||
|
|||||||
45
README.md
45
README.md
@@ -1,11 +1,22 @@
|
|||||||
# amnezia_web
|
# amnezia_web
|
||||||
|
|
||||||
|
> Где поддержать: [Boosty (донат)](https://boosty.to/andrey27/donate) · [Boosty (уровень PRO)](https://boosty.to/andrey27/purchase/3906453?ssource=DIRECT&share=subscription_link) · [Ozon СБП](https://finance.ozon.ru/apps/sbp/ozonbankpay/019dc200-2a5d-7931-a619-782d285f6798) · [Telegram @lot_andrey](https://t.me/lot_andrey) · [**GitHub** ↗](https://github.com/andrey271192/amnezia_web)
|
||||||
|
|
||||||
|
## Поддержка проекта
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
- ⭐ **GitHub:** [andrey271192/amnezia_web](https://github.com/andrey271192/amnezia_web)
|
||||||
|
- 💖 **Boosty:** [boosty.to/andrey27/donate](https://boosty.to/andrey27/donate)
|
||||||
|
- 💳 **Ozon Bank (СБП):** [ссылка](https://finance.ozon.ru/apps/sbp/ozonbankpay/019dc200-2a5d-7931-a619-782d285f6798)
|
||||||
|
- ✉️ **Telegram:** [@lot_andrey](https://t.me/lot_andrey)
|
||||||
|
|
||||||
Открытая **базовая** веб-панель для **просмотра** клиентов **AmneziaWG** на своём VPS: таблица клиентов, статус «в туннеле», AllowedIPs, несколько инстансов через **`AWG_PROFILES`**, часы сервера и браузера. В редакции **FREE/community** можно **удалить** клиента с сервера (peer и строка в таблице).
|
Открытая **базовая** веб-панель для **просмотра** клиентов **AmneziaWG** на своём VPS: таблица клиентов, статус «в туннеле», AllowedIPs, несколько инстансов через **`AWG_PROFILES`**, часы сервера и браузера. В редакции **FREE/community** можно **удалить** клиента с сервера (peer и строка в таблице).
|
||||||
**Нет** в интерфейсе и по API в FREE: включение/выключение peer, правка дат отключения, переименование, экспорт `.conf`, «Новый клиент под каскад», Cloudflare WARP, синхронизация времени хоста по SSH — это **[версия PRO](https://boosty.to/andrey27/purchase/3906453?ssource=DIRECT&share=subscription_link)** (приватный репозиторий **amnezia_web-PRO**, доступ подписчикам).
|
**Нет** в интерфейсе и по API в FREE: включение/выключение peer, правка дат отключения, переименование, экспорт `.conf`, «Новый клиент под каскад», Cloudflare WARP, синхронизация времени хоста по SSH — это **[версия PRO](https://boosty.to/andrey27/purchase/3906453?ssource=DIRECT&share=subscription_link)** (приватный репозиторий **amnezia_web-PRO**, доступ подписчикам).
|
||||||
|
|
||||||
**Редакция по умолчанию в этом репозитории — FREE (**`community`**, файл **`.amnezia-panel-edition`**). Чтобы клиент мог ввести GitHub-токен и запустить **«Установить PRO»**, используйте **только установку из раздела ниже:** **`INSTALL_FREE_COMMUNITY_ACTIVATION=1`** (создаётся признак **`/opt/amnezia-admin-data/.install-free-github-pro-opt-in`**; следующие апдейты сохранят эту возможность без повторного экспорта). Кнопка Boosty и текст настраиваются **`COMMUNITY_UPGRADE_URL`** и **`COMMUNITY_UPGRADE_PITCH`**.
|
**Редакция по умолчанию в этом репозитории — FREE (**`community`**, файл **`.amnezia-panel-edition`**). **Поле для GitHub‑токена и кнопка «Установить PRO»** в баннере сверху **включены по умолчанию** (до явного **`ALLOW_COMMUNITY_GITHUB_ACTIVATION=0|false|no|off`** в переменных контейнера). Переменная **`INSTALL_FREE_COMMUNITY_ACTIVATION=1`** при установке дополнительно создаёт **`${DATA_DIR}/.install-free-github-pro-opt-in`** и пробрасывает **`ALLOW_COMMUNITY_GITHUB_ACTIVATION=1`** в следующие запуски **`install.sh`** — удобно, когда админ уже отключил UI раньше, но хочет снова зафиксировать «разрешено» через том. Тексты Boosty и заголовков настраиваются **`COMMUNITY_UPGRADE_URL`** и **`COMMUNITY_UPGRADE_PITCH`**.
|
||||||
|
|
||||||
**Безопасность:** доступ к Docker-сокету в контейнере панели эквивалентен root на хосте — используйте сложный пароль и ограничьте доступ по IP / TLS. Режим **«Установить PRO» из панели** (`ALLOW_COMMUNITY_GITHUB_ACTIVATION=1`): любой авторизованный администратор может запускать приватный `install.sh` на хосте через Docker-сокет. Отключить позже — удалите **`${DATA_DIR}/.install-free-github-pro-opt-in`** и перезапустите установщик **без** `INSTALL_FREE…`, переменную **`ALLOW_COMMUNITY_GITHUB_ACTIVATION`** из контейнера не переопределяйте экспортом.
|
**Безопасность:** доступ к Docker-сокету в контейнере панели эквивалентен root на хосте — используйте сложный пароль и ограничьте доступ по IP / TLS. **Любой** вошедший администратор FREE может запустить приватный `install.sh`, пока возможность не отключена **`ALLOW_COMMUNITY_GITHUB_ACTIVATION=0`** (и перезапуском контейнера). Если маркера **`.install-free-github-pro-opt-in`** в томе нет и переменную не задают заново при апдейте, сервер всё равно показывает поле (**по умолчанию**) — маркер остаётся опцией совместимости и для явного экспорта в `docker run`.
|
||||||
|
|
||||||
Справочник по типичным сбоям и API (в т.ч. для PRO): в полной документации репозитория PRO.
|
Справочник по типичным сбоям и API (в т.ч. для PRO): в полной документации репозитория PRO.
|
||||||
|
|
||||||
@@ -23,28 +34,30 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Установка для клиента (FREE с «Установить PRO» по GitHub)
|
## Установка для клиента (маркер в томе + явный ALLOW в контейнере)
|
||||||
|
|
||||||
Рекомендуемый вариант: сразу **FREE-панель** с полем **GitHub-токена** под баннером Boosty и кнопкой **«Установить PRO»**:
|
Раньше многие полагались на этот режим ради поля PAT — сейчас оно включено по умолчанию. **`INSTALL_FREE_COMMUNITY_ACTIVATION=1`** по-прежнему полезен: создаёт **`/opt/amnezia-admin-data/.install-free-github-pro-opt-in`** и при следующих **`curl … | sudo bash`** снова прокидывает **`ALLOW_COMMUNITY_GITHUB_ACTIVATION=1`** в контейнер (если когда-то задали отключение вручную).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
export INSTALL_FREE_COMMUNITY_ACTIVATION=1
|
export INSTALL_FREE_COMMUNITY_ACTIVATION=1
|
||||||
curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web/main/scripts/install.sh | sudo -E bash
|
curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web/main/scripts/install.sh | sudo -E bash
|
||||||
```
|
```
|
||||||
|
|
||||||
Переменная **`INSTALL_FREE_COMMUNITY_ACTIVATION`** сохранится в томе как файл **`.install-free-github-pro-opt-in`** в **`/opt/amnezia-admin-data`**: дальше достаточно обычного **`curl … | sudo bash`** при обновлении (можно без `export`).
|
Переменная **`INSTALL_FREE_COMMUNITY_ACTIVATION`** сохранится в томе как файл **`.install-free-github-pro-opt-in`**: следующие апдейты через **`sudo bash`** подхватят маркер **без** повторного `export` (или с **`sudo -E`**, если передаёте другие переменные в той же сессии).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Прочее: установка без поля GitHub в панели
|
## Отключить поле GitHub и установку из панели (жёсткий FREE)
|
||||||
|
|
||||||
Если **специально** не нужно поле для токена (только просмотр FREE и удаление клиентов, без апгрейда из UI):
|
Чтобы под баннером **не было** ввода токена и **запретить** **`POST …/run-private-install`**, задайте в контейнере **`ALLOW_COMMUNITY_GITHUB_ACTIVATION=0`** (или **`false`** / **`no`** / **`off`**) и перезапустите панель. Обычная установка **`curl … | sudo bash`** без этой переменной **оставляет поле включённым** в FREE.
|
||||||
|
|
||||||
|
Стандартная установка того же образа без отключения:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web/main/scripts/install.sh | sudo bash
|
curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web/main/scripts/install.sh | sudo bash
|
||||||
```
|
```
|
||||||
|
|
||||||
Форк или ветка:
|
Форк или ветка (**с тем же режимом маркера по желанию**):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
export GITHUB_REPO="вы/репо"
|
export GITHUB_REPO="вы/репо"
|
||||||
@@ -53,8 +66,6 @@ export INSTALL_FREE_COMMUNITY_ACTIVATION=1
|
|||||||
curl -fsSL "https://raw.githubusercontent.com/${GITHUB_REPO}/${BRANCH}/scripts/install.sh" | sudo -E bash
|
curl -fsSL "https://raw.githubusercontent.com/${GITHUB_REPO}/${BRANCH}/scripts/install.sh" | sudo -E bash
|
||||||
```
|
```
|
||||||
|
|
||||||
Если нужен только FREE **без** поля для токена, не задавайте **`INSTALL_FREE…`** и не используйте **`-E`** (достаточно `sudo bash`).
|
|
||||||
|
|
||||||
Уже скачали проект:
|
Уже скачали проект:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -69,7 +80,7 @@ cd /opt/amnezia-admin && chmod +x scripts/install.sh && sudo SKIP_DOWNLOAD=1 bas
|
|||||||
|
|
||||||
| Переменная | По умолчанию | Назначение |
|
| Переменная | По умолчанию | Назначение |
|
||||||
|------------|--------------|------------|
|
|------------|--------------|------------|
|
||||||
| `INSTALL_FREE_COMMUNITY_ACTIVATION` | _(не задано)_ | `1` (**один раз** при установке клиента при необходимости): **`AMNEZIA_EDITION=community`** + **`ALLOW_COMMUNITY_GITHUB_ACTIVATION=1`** + маркер в **`${DATA_DIR}/.install-free-github-pro-opt-in`** для следующих запусков установщика. |
|
| `INSTALL_FREE_COMMUNITY_ACTIVATION` | _(не задано)_ | `1`: маркер **`.install-free-github-pro-opt-in`** в томе + явно **`ALLOW_COMMUNITY_GITHUB_ACTIVATION=1`** при сборке **`RUN_ENV`** (удобно после ручного `ALLOW=0` или если нужно навсегда фиксировать в томе).
|
||||||
| `GITHUB_REPO` | `andrey271192/amnezia_web` | Архив для установки |
|
| `GITHUB_REPO` | `andrey271192/amnezia_web` | Архив для установки |
|
||||||
| `HOST_PORT` | `8080` | Порт панели |
|
| `HOST_PORT` | `8080` | Порт панели |
|
||||||
| `AWG_CONTAINER` | `amnezia-awg2` | Контейнер WG по умолчанию |
|
| `AWG_CONTAINER` | `amnezia-awg2` | Контейнер WG по умолчанию |
|
||||||
@@ -84,7 +95,7 @@ cd /opt/amnezia-admin && chmod +x scripts/install.sh && sudo SKIP_DOWNLOAD=1 bas
|
|||||||
| `PANEL_FOOTER_TELEGRAM_LABEL` | `Telegram‑канал спонсора` | Текст якоря Telegram |
|
| `PANEL_FOOTER_TELEGRAM_LABEL` | `Telegram‑канал спонсора` | Текст якоря Telegram |
|
||||||
| `PANEL_FOOTER_PROMO_SUBTITLE` | _(строка по умолчанию в коде)_ | Поясняющий текст в верхней полосе панели |
|
| `PANEL_FOOTER_PROMO_SUBTITLE` | _(строка по умолчанию в коде)_ | Поясняющий текст в верхней полосе панели |
|
||||||
| `SKIP_LANDING` | `0` | `1` — без лендинга на порту 80 |
|
| `SKIP_LANDING` | `0` | `1` — без лендинга на порту 80 |
|
||||||
| `ALLOW_COMMUNITY_GITHUB_ACTIVATION` | `0` | `1` — в редакции community показывать ввод GitHub-токена и запускать приватный `install.sh` (доступ к репо с Contents Read / repo; **высокая чувствительность**, см. раздел безопасности) |
|
| `ALLOW_COMMUNITY_GITHUB_ACTIVATION` | _в редакции **`community` поле вкл по умолчанию_ | Явное **`0`** / **`false`** / **`no`** / **`off`** — **скрыть** ввод PAT и заблокировать **`POST /api/community/run-private-install`** (после перезапуска контейнера). **`1`** / **`true`** не обязательны. |
|
||||||
| `COMMUNITY_PRIVATE_INSTALL_SCRIPT_URL` | `https://raw.githubusercontent.com/andrey271192/amnezia_web-pro/main/scripts/install.sh` | Сырой URL `scripts/install.sh` в **вашем** приватном репозитории PRO |
|
| `COMMUNITY_PRIVATE_INSTALL_SCRIPT_URL` | `https://raw.githubusercontent.com/andrey271192/amnezia_web-pro/main/scripts/install.sh` | Сырой URL `scripts/install.sh` в **вашем** приватном репозитории PRO |
|
||||||
| `COMMUNITY_INSTALL_FETCH_MS` | `60000` | Таймаут HTTP при скачивании установщика из GitHub |
|
| `COMMUNITY_INSTALL_FETCH_MS` | `60000` | Таймаут HTTP при скачивании установщика из GitHub |
|
||||||
| `PRIVATE_INSTALL_SCRIPT_MAX_BYTES` | `2097152` | Максимальный размер скачанного скрипта (байты) |
|
| `PRIVATE_INSTALL_SCRIPT_MAX_BYTES` | `2097152` | Максимальный размер скачанного скрипта (байты) |
|
||||||
@@ -105,7 +116,7 @@ cd /opt/amnezia-admin && chmod +x scripts/install.sh && sudo SKIP_DOWNLOAD=1 bas
|
|||||||
|
|
||||||
**MTProto‑прокси и API панели:** **`GET /api/mtproto/status`** отдаёт состояние контейнера и ссылку **`tg://`** без тяжёлых операций при открытии блока. Опционально **`GET /api/mtproto/status?withLogs=1`** добавляет в ответ хвост **`docker logs`** (поле **`logsFetched`**). Отдельные эндпоинты: **`GET /api/mtproto/logs`** и **`GET /api/mtproto/tail`** (тот же смысл, если обратный прокси режет URI с **`logs`**). За nginx/Caddy перед панелью нужно пробрасывать **весь** префикс **`/api/`** одним правилом — см. блок **«Not found»** в **«Частые проблемы»** ниже.
|
**MTProto‑прокси и API панели:** **`GET /api/mtproto/status`** отдаёт состояние контейнера и ссылку **`tg://`** без тяжёлых операций при открытии блока. Опционально **`GET /api/mtproto/status?withLogs=1`** добавляет в ответ хвост **`docker logs`** (поле **`logsFetched`**). Отдельные эндпоинты: **`GET /api/mtproto/logs`** и **`GET /api/mtproto/tail`** (тот же смысл, если обратный прокси режет URI с **`logs`**). За nginx/Caddy перед панелью нужно пробрасывать **весь** префикс **`/api/`** одним правилом — см. блок **«Not found»** в **«Частые проблемы»** ниже.
|
||||||
|
|
||||||
Чтобы включить форму установки из панели после «обычной» установки без **`INSTALL_FREE…`**, задайте в контейнере **`AMNEZIA_EDITION=community`** и **`ALLOW_COMMUNITY_GITHUB_ACTIVATION=1`** (или проще переустановите с **`INSTALL_FREE_COMMUNITY_ACTIVATION=1`**). URL приватного `install.sh` при необходимости переопределите через **`COMMUNITY_PRIVATE_INSTALL_SCRIPT_URL`**.
|
Поле токена **по умолчанию уже есть**. Чтобы **убрать** его — см. раздел **«Отключить поле GitHub…»** выше. URL приватного `install.sh` задаёт **`COMMUNITY_PRIVATE_INSTALL_SCRIPT_URL`**.
|
||||||
|
|
||||||
**Важно:** при одноразовом запуске с переменными в одной строке с `curl … | sudo bash` они **пропадают** — нужен **`export`** перед `curl` и **`sudo -E bash`**, см. блок **«Установка для клиента»** выше.
|
**Важно:** при одноразовом запуске с переменными в одной строке с `curl … | sudo bash` они **пропадают** — нужен **`export`** перед `curl` и **`sudo -E bash`**, см. блок **«Установка для клиента»** выше.
|
||||||
|
|
||||||
@@ -115,13 +126,13 @@ cd /opt/amnezia-admin && chmod +x scripts/install.sh && sudo SKIP_DOWNLOAD=1 bas
|
|||||||
|
|
||||||
## Обновление
|
## Обновление
|
||||||
|
|
||||||
Клиентская панель (после первой установки с **`INSTALL_FREE_COMMUNITY_ACTIVATION=1`** маркер в томе подхватывается автоматически):
|
Обычно достаточно:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web/main/scripts/install.sh | sudo bash
|
curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web/main/scripts/install.sh | sudo bash
|
||||||
```
|
```
|
||||||
|
|
||||||
Или явно всегда **`export INSTALL_FREE_COMMUNITY_ACTIVATION=1`** и **`sudo -E bash`** как при первой установке.
|
Если нужен маркер **`.install-free-github-pro-opt-in`** в томе (см. раздел выше) или переменные хоста при **`sudo`**, используйте **`export INSTALL_FREE_COMMUNITY_ACTIVATION=1`** и **`sudo -E bash`**.
|
||||||
|
|
||||||
После сообщения **`→ Клонирование релиза …`** несколько минут **может ничего не печататься**: идёт `curl … | tar` с GitHub. Для **полосы прогресса**: `sudo INSTALL_SCRIPT_VERBOSE=1 bash` (или передайте переменную в окружение до `|`). Если обрывает по времени или «тишина» часами задайте таймауты: **`CURL_CONNECT_TIMEOUT`** (по умолчанию 30 с к подключению), **`CURL_MAX_TIME`** (по умолчанию до 900 с на загрузку), **`CURL_RETRY`**. Полный URL tar.gz можно подменить: **`GITHUB_REPO_URL_OVERRIDE`** (должен указывать на архив того же вида **`${REPO}-${BRANCH}.tar.gz`**, после распаковки каталог будет **`ИмяРепозитория-${BRANCH}`**).
|
После сообщения **`→ Клонирование релиза …`** несколько минут **может ничего не печататься**: идёт `curl … | tar` с GitHub. Для **полосы прогресса**: `sudo INSTALL_SCRIPT_VERBOSE=1 bash` (или передайте переменную в окружение до `|`). Если обрывает по времени или «тишина» часами задайте таймауты: **`CURL_CONNECT_TIMEOUT`** (по умолчанию 30 с к подключению), **`CURL_MAX_TIME`** (по умолчанию до 900 с на загрузку), **`CURL_RETRY`**. Полный URL tar.gz можно подменить: **`GITHUB_REPO_URL_OVERRIDE`** (должен указывать на архив того же вида **`${REPO}-${BRANCH}.tar.gz`**, после распаковки каталог будет **`ИмяРепозитория-${BRANCH}`**).
|
||||||
|
|
||||||
@@ -141,7 +152,9 @@ curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web/main/scrip
|
|||||||
|
|
||||||
### Пропало поле «токен GitHub» под плашкой FREE
|
### Пропало поле «токен GitHub» под плашкой FREE
|
||||||
|
|
||||||
Нужны **`ALLOW_COMMUNITY_GITHUB_ACTIVATION=1`** и редакция **community** (в образе они попадают из **`install.sh`**). Рекомендуется раздел **«Установка для клиента»**: **`INSTALL_FREE_COMMUNITY_ACTIVATION=1`** (создаётся **`…/data/.install-free-github-pro-opt-in`**; дальнейшие **`curl … | sudo bash`** подхватят это сами). При ручном отключении убедитесь, что файл-маркер удалён. Начиная с актуального **`install.sh`**, при апдейте панели многие **`COMMUNITY_*`**, **`ALLOW_COMMUNITY_*`**, **`AMNEZIA_EDITION`** восстанавливаются из **предыдущего** контейнера `amnezia-admin`; маркер в томе остаёт запасным вариантом, если переменная в контейнере пропала.
|
Редакция должна быть **`community`**. Чаще всего в **`docker inspect amnezia-admin` → Env** осталось **`ALLOW_COMMUNITY_GITHUB_ACTIVATION=0`** (или **`false`** / **`no`** / **`off`**) — удалите переменную или поставьте **`1`** и снова выполните **`install.sh`**. Установщик при апдейте переносит **`ALLOW_*`** из **предыдущего** контейнера. Маркер **`${DATA_DIR}/.install-free-github-pro-opt-in`** при **`INSTALL_FREE_COMMUNITY_ACTIVATION=1`** снова прокинет **`ALLOW=1`**, если установщику на хосте не задали **`ALLOW_COMMUNITY_GITHUB_ACTIVATION=0`**.
|
||||||
|
|
||||||
|
### Журнал установки и docker-helper
|
||||||
|
|
||||||
После успешной кнопки **«Установить PRO»** в той же панели открывается **живой блок «Журнал установки»** (поллинг каждые 2 с к **`GET /api/community/install-log`**; для запросов нужна сессия в браузере). Пока старый контейнер FREE снят и новый образ ещё не поднял ту же вкладку, поток журнала в браузере **прерывается** — откройте адрес панели снова после старта PRO; файл **`community-install-last.log`** на томе данных тот же. Кнопка **«Пауза»** останавливает опрос журнала.
|
После успешной кнопки **«Установить PRO»** в той же панели открывается **живой блок «Журнал установки»** (поллинг каждые 2 с к **`GET /api/community/install-log`**; для запросов нужна сессия в браузере). Пока старый контейнер FREE снят и новый образ ещё не поднял ту же вкладку, поток журнала в браузере **прерывается** — откройте адрес панели снова после старта PRO; файл **`community-install-last.log`** на томе данных тот же. Кнопка **«Пауза»** останавливает опрос журнала.
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,19 @@
|
|||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
<div class="proj-support-strip" role="navigation" aria-label="Поддержка и донат — проект панелей">
|
||||||
|
<div class="proj-support-inner">
|
||||||
|
<span class="proj-support-lead">Панели Amnezia Admin · поддержать проект:</span>
|
||||||
|
<a href="https://github.com/andrey271192/amnezia_web" target="_blank" rel="noopener noreferrer">⭐ GitHub</a>
|
||||||
|
<span class="proj-support-dot" aria-hidden="true">·</span>
|
||||||
|
<a href="https://boosty.to/andrey27/donate" target="_blank" rel="noopener noreferrer">💖 Boosty</a>
|
||||||
|
<span class="proj-support-dot" aria-hidden="true">·</span>
|
||||||
|
<a href="https://finance.ozon.ru/apps/sbp/ozonbankpay/019dc200-2a5d-7931-a619-782d285f6798" target="_blank" rel="noopener noreferrer">💳 Ozon СБП</a>
|
||||||
|
<span class="proj-support-dot" aria-hidden="true">·</span>
|
||||||
|
<a href="https://t.me/lot_andrey" target="_blank" rel="noopener noreferrer">✉️ Telegram @lot_andrey</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<section class="hero">
|
<section class="hero">
|
||||||
<div class="hero-badge">Частный сервер</div>
|
<div class="hero-badge">Частный сервер</div>
|
||||||
<h1>Подключение к VPN</h1>
|
<h1>Подключение к VPN</h1>
|
||||||
|
|||||||
@@ -839,6 +839,45 @@ body {
|
|||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.proj-support-strip {
|
||||||
|
border-bottom: 1px solid var(--border);
|
||||||
|
background: linear-gradient(90deg, rgba(29, 158, 117, 0.12), rgba(55, 138, 221, 0.08));
|
||||||
|
padding: 0.4rem 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.proj-support-inner {
|
||||||
|
max-width: 900px;
|
||||||
|
margin: 0 auto;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 0.35rem 0.65rem;
|
||||||
|
font-size: 12px;
|
||||||
|
color: var(--muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
.proj-support-lead {
|
||||||
|
margin-right: 0.25rem;
|
||||||
|
opacity: 0.95;
|
||||||
|
}
|
||||||
|
|
||||||
|
.proj-support-dot {
|
||||||
|
opacity: 0.35;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.proj-support-inner a {
|
||||||
|
color: #5fd8b0;
|
||||||
|
text-decoration: none;
|
||||||
|
white-space: nowrap;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.proj-support-inner a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
.site-footer {
|
.site-footer {
|
||||||
border-top: 1px solid var(--border);
|
border-top: 1px solid var(--border);
|
||||||
padding: 1.75rem 1.5rem 2rem;
|
padding: 1.75rem 1.5rem 2rem;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "amnezia-admin",
|
"name": "amnezia-admin",
|
||||||
"version": "1.2.25",
|
"version": "1.2.28",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "amnezia_web — базовая панель AmneziaWG (FREE: просмотр и удаление клиентов; полная версия — PRO).",
|
"description": "amnezia_web — базовая панель AmneziaWG (FREE: просмотр и удаление клиентов; полная версия — PRO).",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
@@ -213,9 +213,9 @@ async function hydratePanelPromoFooter() {
|
|||||||
if (fSepDO) fSepDO.classList.toggle("hidden", !(footerD && (footerO || footerT)));
|
if (fSepDO) fSepDO.classList.toggle("hidden", !(footerD && (footerO || footerT)));
|
||||||
if (fSepOT) fSepOT.classList.toggle("hidden", !(footerO && footerT));
|
if (fSepOT) fSepOT.classList.toggle("hidden", !(footerO && footerT));
|
||||||
|
|
||||||
if (strip && (okD || okO || okT)) strip.classList.remove("hidden");
|
if (strip) strip.classList.remove("hidden");
|
||||||
} catch {
|
} catch {
|
||||||
/* офлайн или сбой — блок остаётся скрытым */
|
/* офлайн или сбой — в HTML уже дефолтные ссылки шапки/подвала */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -420,7 +420,7 @@ function applyEditionPayload(data) {
|
|||||||
hint.className = "edition-banner-no-activation muted";
|
hint.className = "edition-banner-no-activation muted";
|
||||||
hint.setAttribute("role", "note");
|
hint.setAttribute("role", "note");
|
||||||
hint.textContent =
|
hint.textContent =
|
||||||
"Строки для GitHub‑токена нет специально: эта возможность была отключена при установке FREE. Чтобы она появилась здесь под кнопкой Boosty — переустановите панель с INSTALL_FREE_COMMUNITY_ACTIVATION=1 (README, раздел «Установка для клиента»), либо задайте ALLOW_COMMUNITY_GITHUB_ACTIVATION=1 в переменных контейнера; также помогает файл .install-free-github-pro-opt-in в каталоге данных панели и повторный запуск install.sh.";
|
"Владелец сервера отключил установку PRO из интерфейса (в контейнере задано ALLOW_COMMUNITY_GITHUB_ACTIVATION=0 или экв.). Уберите переменную или поставьте 1/true — и перезапустите контейнер панели.";
|
||||||
editionBanner.appendChild(hint);
|
editionBanner.appendChild(hint);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;600;700&family=JetBrains+Mono:wght@400;600&display=swap" rel="stylesheet">
|
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;600;700&family=JetBrains+Mono:wght@400;600&display=swap" rel="stylesheet">
|
||||||
<link rel="stylesheet" href="/styles.css?v=1.2.25">
|
<link rel="stylesheet" href="/styles.css?v=1.2.28">
|
||||||
<script>
|
<script>
|
||||||
(function () {
|
(function () {
|
||||||
try {
|
try {
|
||||||
@@ -23,15 +23,17 @@
|
|||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body class="page">
|
<body class="page">
|
||||||
<aside id="panel-promo-strip" class="panel-promo-strip hidden" role="complementary" aria-label="Поддержка проекта">
|
<aside id="panel-promo-strip" class="panel-promo-strip" role="complementary" aria-label="Поддержка и донат">
|
||||||
<div class="panel-promo-strip-inner">
|
<div class="panel-promo-strip-inner">
|
||||||
<p id="panel-promo-subtitle" class="panel-promo-subtitle muted"></p>
|
<p id="panel-promo-subtitle" class="panel-promo-subtitle muted">Поддержите через Boosty (или вашу ссылку), Ozon СБП и Telegram — те же ссылки внизу панели. На пользовательские лендинги это не выводится.</p>
|
||||||
<div class="panel-promo-links">
|
<div class="panel-promo-links">
|
||||||
<a id="panel-strip-donate" class="panel-promo-a hidden" target="_blank" rel="noopener noreferrer"></a>
|
<a class="panel-promo-a panel-promo-github-fixed" href="https://github.com/andrey271192/amnezia_web" target="_blank" rel="noopener noreferrer">⭐ GitHub</a>
|
||||||
<span id="panel-strip-sep-donate-ozon" class="panel-promo-sep hidden" aria-hidden="true">·</span>
|
<span class="panel-promo-sep" aria-hidden="true">·</span>
|
||||||
<a id="panel-strip-ozon" class="panel-promo-a hidden" target="_blank" rel="noopener noreferrer"></a>
|
<a id="panel-strip-donate" class="panel-promo-a" href="https://boosty.to/andrey27/purchase/3906453?ssource=DIRECT&share=subscription_link" target="_blank" rel="noopener noreferrer">Поддержать проект</a>
|
||||||
<span id="panel-strip-sep-ozon-tg" class="panel-promo-sep hidden" aria-hidden="true">·</span>
|
<span id="panel-strip-sep-donate-ozon" class="panel-promo-sep" aria-hidden="true">·</span>
|
||||||
<a id="panel-strip-telegram" class="panel-promo-a hidden" target="_blank" rel="noopener noreferrer"></a>
|
<a id="panel-strip-ozon" class="panel-promo-a" href="https://finance.ozon.ru/apps/sbp/ozonbankpay/019dc200-2a5d-7931-a619-782d285f6798" target="_blank" rel="noopener noreferrer">Донат · Ozon СБП</a>
|
||||||
|
<span id="panel-strip-sep-ozon-tg" class="panel-promo-sep" aria-hidden="true">·</span>
|
||||||
|
<a id="panel-strip-telegram" class="panel-promo-a" href="https://t.me/lot_andrey" target="_blank" rel="noopener noreferrer">Telegram‑канал спонсора</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</aside>
|
</aside>
|
||||||
@@ -47,6 +49,18 @@
|
|||||||
<button type="submit" class="btn primary full">Войти</button>
|
<button type="submit" class="btn primary full">Войти</button>
|
||||||
<p id="login-error" class="status err" role="alert"></p>
|
<p id="login-error" class="status err" role="alert"></p>
|
||||||
</form>
|
</form>
|
||||||
|
<nav class="gate-donate muted" aria-label="Поддержка и донат">
|
||||||
|
Поддержка веб‑панелей (вне этого сервера):<br/>
|
||||||
|
<a href="https://github.com/andrey271192/amnezia_web" target="_blank" rel="noopener noreferrer">GitHub</a>
|
||||||
|
<span class="gate-donate-dot" aria-hidden="true">·</span>
|
||||||
|
<a href="https://boosty.to/andrey27/purchase/3906453?ssource=DIRECT&share=subscription_link" target="_blank" rel="noopener noreferrer">Boosty · PRO панели</a>
|
||||||
|
<span class="gate-donate-dot" aria-hidden="true">·</span>
|
||||||
|
<a href="https://boosty.to/andrey27/donate" target="_blank" rel="noopener noreferrer">Донат</a>
|
||||||
|
<span class="gate-donate-dot" aria-hidden="true">·</span>
|
||||||
|
<a href="https://finance.ozon.ru/apps/sbp/ozonbankpay/019dc200-2a5d-7931-a619-782d285f6798" target="_blank" rel="noopener noreferrer">Ozon СБП</a>
|
||||||
|
<span class="gate-donate-dot" aria-hidden="true">·</span>
|
||||||
|
<a href="https://t.me/lot_andrey" target="_blank" rel="noopener noreferrer">Telegram</a>
|
||||||
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -267,15 +281,15 @@
|
|||||||
<strong class="support-title">amnezia_web</strong>
|
<strong class="support-title">amnezia_web</strong>
|
||||||
<span class="support-sep" aria-hidden="true">·</span>
|
<span class="support-sep" aria-hidden="true">·</span>
|
||||||
<a href="https://github.com/andrey271192/amnezia_web" target="_blank" rel="noopener noreferrer">GitHub</a>
|
<a href="https://github.com/andrey271192/amnezia_web" target="_blank" rel="noopener noreferrer">GitHub</a>
|
||||||
<span id="footer-promo-gap1" class="support-sep hidden" aria-hidden="true">·</span>
|
<span id="footer-promo-gap1" class="support-sep" aria-hidden="true">·</span>
|
||||||
<a id="footer-promo-donate" class="support-promo-link hidden" target="_blank" rel="noopener noreferrer"></a>
|
<a id="footer-promo-donate" class="support-promo-link" href="https://boosty.to/andrey27/purchase/3906453?ssource=DIRECT&share=subscription_link" target="_blank" rel="noopener noreferrer">Поддержать проект</a>
|
||||||
<span id="footer-promo-sep-donate-ozon" class="support-sep hidden" aria-hidden="true">·</span>
|
<span id="footer-promo-sep-donate-ozon" class="support-sep" aria-hidden="true">·</span>
|
||||||
<a id="footer-promo-ozon" class="support-promo-link hidden" target="_blank" rel="noopener noreferrer"></a>
|
<a id="footer-promo-ozon" class="support-promo-link" href="https://finance.ozon.ru/apps/sbp/ozonbankpay/019dc200-2a5d-7931-a619-782d285f6798" target="_blank" rel="noopener noreferrer">Донат · Ozon СБП</a>
|
||||||
<span id="footer-promo-sep-ozon-tg" class="support-sep hidden" aria-hidden="true">·</span>
|
<span id="footer-promo-sep-ozon-tg" class="support-sep" aria-hidden="true">·</span>
|
||||||
<a id="footer-promo-telegram" class="support-promo-link hidden" target="_blank" rel="noopener noreferrer"></a>
|
<a id="footer-promo-telegram" class="support-promo-link" href="https://t.me/lot_andrey" target="_blank" rel="noopener noreferrer">Telegram‑канал спонсора</a>
|
||||||
</div>
|
</div>
|
||||||
<p class="support-blurb">
|
<p class="support-blurb">
|
||||||
Базовая панель: AWG‑клиенты, статусы и MTProto‑прокси (Docker). Ссылки поддержки (Boosty, Ozon СБП, Telegram) подставляются из настроек сервера — только в этом интерфейсе, не на пользовательских лендингах.
|
AWG‑клиенты, статусы и MTProto‑прокси в FREE. Жёлтая шапка поддержки совпадает с подвалом; текст ссылок может подтягиваться с сервера (Boosty подписка / донат). На пользовательских лендингах блоков поддержки нет.
|
||||||
</p>
|
</p>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
@@ -313,6 +327,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</dialog>
|
</dialog>
|
||||||
|
|
||||||
<script src="/app.js?v=1.2.25" type="module"></script>
|
<script src="/app.js?v=1.2.28" type="module"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -340,6 +340,27 @@ h1 {
|
|||||||
margin-bottom: 0.75rem;
|
margin-bottom: 0.75rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.gate-donate {
|
||||||
|
margin-top: 1rem;
|
||||||
|
padding-top: 0.9rem;
|
||||||
|
border-top: 1px dashed rgba(148, 163, 184, 0.45);
|
||||||
|
font-size: 0.84rem;
|
||||||
|
line-height: 1.65;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gate-donate a {
|
||||||
|
color: var(--accent);
|
||||||
|
font-weight: 650;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.gate-donate-dot {
|
||||||
|
display: inline-block;
|
||||||
|
opacity: 0.45;
|
||||||
|
margin: 0 0.2rem;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
.btn.full {
|
.btn.full {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin-top: 0.25rem;
|
margin-top: 0.25rem;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Установка Amnezia Admin WebUI одной командой (см. README).
|
# Установка Amnezia Admin WebUI одной командой (см. README).
|
||||||
# Клиентский режим: INSTALL_FREE_COMMUNITY_ACTIVATION=1 — FREE-панель + поле GitHub и «Установить PRO».
|
# Клиентский режим: INSTALL_FREE_COMMUNITY_ACTIVATION=1 — маркер в томе данных + явно включает ALLOW в контейнере (поле PAT в FREE и так включено по умолчанию в server.js).
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
GITHUB_REPO="${GITHUB_REPO:-andrey271192/amnezia_web}"
|
GITHUB_REPO="${GITHUB_REPO:-andrey271192/amnezia_web}"
|
||||||
|
|||||||
18
server.js
18
server.js
@@ -29,6 +29,14 @@ function envTruthy(v) {
|
|||||||
return s === "1" || s === "true" || s === "yes";
|
return s === "1" || s === "true" || s === "yes";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Явное отключение поля GitHub‑токена / установки PRO из UI (`0`, `false`, `no`, `off`). Пустое или неизвестное — не отключает. */
|
||||||
|
function communityGithubActivationDisabledByEnv() {
|
||||||
|
const v = process.env.ALLOW_COMMUNITY_GITHUB_ACTIVATION;
|
||||||
|
if (typeof v !== "string") return false;
|
||||||
|
const s = v.trim().toLowerCase();
|
||||||
|
return s === "0" || s === "false" || s === "no" || s === "off";
|
||||||
|
}
|
||||||
|
|
||||||
/** Какие блоки веб-интерфейса скрыты: `UI_HIDE_SECTIONS=users,warp,cascade` или `UI_HIDE_USERS` и т.д. */
|
/** Какие блоки веб-интерфейса скрыты: `UI_HIDE_SECTIONS=users,warp,cascade` или `UI_HIDE_USERS` и т.д. */
|
||||||
function resolveUiHidden() {
|
function resolveUiHidden() {
|
||||||
const raw = process.env.UI_HIDE_SECTIONS?.trim();
|
const raw = process.env.UI_HIDE_SECTIONS?.trim();
|
||||||
@@ -51,7 +59,9 @@ const UI_HIDDEN = resolveUiHidden();
|
|||||||
|
|
||||||
const AMNEZIA_EDITION = (process.env.AMNEZIA_EDITION || "pro").trim().toLowerCase();
|
const AMNEZIA_EDITION = (process.env.AMNEZIA_EDITION || "pro").trim().toLowerCase();
|
||||||
const IS_COMMUNITY = AMNEZIA_EDITION === "community";
|
const IS_COMMUNITY = AMNEZIA_EDITION === "community";
|
||||||
const ALLOW_COMMUNITY_GITHUB_ACTIVATION = envTruthy(process.env.ALLOW_COMMUNITY_GITHUB_ACTIVATION);
|
/** В редакции FREE поле для PAT и установка из панели включены по умолчанию; выключить: `ALLOW_COMMUNITY_GITHUB_ACTIVATION=0` (или `false`/`no`/`off`). */
|
||||||
|
const ALLOW_COMMUNITY_GITHUB_ACTIVATION =
|
||||||
|
IS_COMMUNITY && !communityGithubActivationDisabledByEnv();
|
||||||
const COMMUNITY_PRIVATE_INSTALL_SCRIPT_URL =
|
const COMMUNITY_PRIVATE_INSTALL_SCRIPT_URL =
|
||||||
process.env.COMMUNITY_PRIVATE_INSTALL_SCRIPT_URL?.trim() ||
|
process.env.COMMUNITY_PRIVATE_INSTALL_SCRIPT_URL?.trim() ||
|
||||||
"https://raw.githubusercontent.com/andrey271192/amnezia_web-pro/main/scripts/install.sh";
|
"https://raw.githubusercontent.com/andrey271192/amnezia_web-pro/main/scripts/install.sh";
|
||||||
@@ -1837,7 +1847,11 @@ if (IS_COMMUNITY) {
|
|||||||
}
|
}
|
||||||
if (ALLOW_COMMUNITY_GITHUB_ACTIVATION && IS_COMMUNITY) {
|
if (ALLOW_COMMUNITY_GITHUB_ACTIVATION && IS_COMMUNITY) {
|
||||||
console.warn(
|
console.warn(
|
||||||
"Разрешена установка PRO из UI (ALLOW_COMMUNITY_GITHUB_ACTIVATION): GitHub-токен не сохранять в журналах; защитите доступ к паролю панели и Docker-сокету.",
|
"Установка PRO из панели включена (по умолчанию в FREE). Отключить: ALLOW_COMMUNITY_GITHUB_ACTIVATION=0. GitHub-токен не сохранять в журналах; ограничьте доступ к паролю панели и Docker-сокету.",
|
||||||
|
);
|
||||||
|
} else if (IS_COMMUNITY) {
|
||||||
|
console.warn(
|
||||||
|
"Установка PRO из панели отключена: ALLOW_COMMUNITY_GITHUB_ACTIVATION=0|false|no|off.",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
app.use(express.json({ limit: "512kb" }));
|
app.use(express.json({ limit: "512kb" }));
|
||||||
|
|||||||
Reference in New Issue
Block a user