mirror of
https://github.com/andrey271192/amnezia_web-PRO.git
synced 2026-09-20 14:42:00 +00:00
docs: align README, panel-guide, and installer messages
Describe :80 landing vs :HOST_PORT admin; export filename ASCII note. Fix install.sh echoes that still referred to a support footer on landing. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
21
README.md
21
README.md
@@ -6,7 +6,14 @@
|
|||||||
|
|
||||||
**Безопасность:** контейнер с монтированием `docker.sock` эквивалентен root на хосте — используйте сложный пароль и по возможности ограничьте доступ по IP или TLS.
|
**Безопасность:** контейнер с монтированием `docker.sock` эквивалентен root на хосте — используйте сложный пароль и по возможности ограничьте доступ по IP или TLS.
|
||||||
|
|
||||||
Поле **About** на странице репозитория GitHub принимает только текст; изображения показываются через README или через прямую ссылку на файл (например после загрузки в Issue).
|
## Что открывается по какому порту
|
||||||
|
|
||||||
|
| Адрес | Назначение |
|
||||||
|
|-------|------------|
|
||||||
|
| **`http://IP:HOST_PORT`** (по умолчанию **`:8080`**) | **Админ-панель:** клиенты AmneziaWG, WARP, каскад, экспорт `.conf`, смена пароля. Внизу страницы — футер со ссылками автора (GitHub, донат, Telegram и т.д.). |
|
||||||
|
| **`http://IP:LANDING_PORT`** (по умолчанию **`:80`**) | **Публичная страница** для приглашённых: инструкция, кнопка перехода в админку (`landing/admin-port.js` подставляет тот же `HOST_PORT`). Текст «проблемы — администратору сервера» и дисклеймер. **Без** блока доната и личных ссылок автора — они только в админке. |
|
||||||
|
|
||||||
|
Если порт **80** занят другим сервисом, задайте **`LANDING_PORT`** (например `8081`) или **`SKIP_LANDING=1`**. На работу панели по **`HOST_PORT`** это не влияет.
|
||||||
|
|
||||||
## Скриншоты
|
## Скриншоты
|
||||||
|
|
||||||
@@ -66,7 +73,7 @@ cd /opt/amnezia-admin && chmod +x scripts/install.sh && sudo SKIP_DOWNLOAD=1 bas
|
|||||||
| `ADMIN_PASSWORD` | _(генерируется)_ | Первый пароль вместо файла |
|
| `ADMIN_PASSWORD` | _(генерируется)_ | Первый пароль вместо файла |
|
||||||
| `SKIP_DOWNLOAD` | `0` | `1` — не качать GitHub, собрать из `INSTALL_DIR` |
|
| `SKIP_DOWNLOAD` | `0` | `1` — не качать GitHub, собрать из `INSTALL_DIR` |
|
||||||
| `ALLOW_DEFAULT_PASSWORD` | `0` | `1` — см. раздел «Пароль» ниже |
|
| `ALLOW_DEFAULT_PASSWORD` | `0` | `1` — см. раздел «Пароль» ниже |
|
||||||
| `SKIP_LANDING` | `0` | `1` — не ставить публичную страницу с футером поддержки |
|
| `SKIP_LANDING` | `0` | `1` — не поднимать nginx-лендинг на `LANDING_PORT` |
|
||||||
| `LANDING_PORT` | `80` | Порт nginx-лендинга (если `80` занят — например `8081`) |
|
| `LANDING_PORT` | `80` | Порт nginx-лендинга (если `80` занят — например `8081`) |
|
||||||
| `LANDING_CONTAINER` | `amnezia-web-landing` | Имя контейнера лендинга |
|
| `LANDING_CONTAINER` | `amnezia-web-landing` | Имя контейнера лендинга |
|
||||||
| `NO_CACHE` | `0` | `1` — `docker build --no-cache` при проблемах с обновлением образа |
|
| `NO_CACHE` | `0` | `1` — `docker build --no-cache` при проблемах с обновлением образа |
|
||||||
@@ -114,9 +121,7 @@ chmod +x scripts/warp-amnezia.sh
|
|||||||
|
|
||||||
Необязательно передайте в контейнер **amnezia-admin** переменные `WARP_DIR`, `WARP_CONF_PATH`, `WARP_CLIENTS_LIST`, `AMNEZIA_START_SCRIPT` через установщик — см. таблицу выше.
|
Необязательно передайте в контейнер **amnezia-admin** переменные `WARP_DIR`, `WARP_CONF_PATH`, `WARP_CLIENTS_LIST`, `AMNEZIA_START_SCRIPT` через установщик — см. таблицу выше.
|
||||||
|
|
||||||
После установки: **админ-панель** `http://IP:8080` (или ваш `HOST_PORT`). **Лендинг** с инструкцией по умолчанию на порту **80** (без блока доната — только текст администратору и дисклеймер); если порт занят, установщик сообщит об ошибке — задайте **`LANDING_PORT=8081`** или **`SKIP_LANDING=1`** (на работу панели это не влияет). Кнопка на лендинге ведёт на админку с тем же `HOST_PORT`.
|
Итоговые URL после установки совпадают с таблицей **«Что открывается по какому порту»** в начале этого файла; установщик записывает выбранный `HOST_PORT` в **`landing/admin-port.js`**, чтобы кнопка на лендинге вела на нужную админку.
|
||||||
|
|
||||||
Футер с ссылками (**Amnezia Admin WebUI**, Boosty, Ozon СБП, Telegram) в админке находится **внизу страницы** — прокрутите ниже таблицы.
|
|
||||||
|
|
||||||
### Каскад (свой Endpoint для клиента)
|
### Каскад (свой Endpoint для клиента)
|
||||||
|
|
||||||
@@ -134,11 +139,13 @@ chmod +x scripts/warp-amnezia.sh
|
|||||||
|
|
||||||
Для корректного **`Endpoint`** задайте **`CLIENT_CONFIG_ENDPOINT`** при установке (публичный IP или домен VPS), либо убедитесь, что в `last_config` указан **`hostName`**, либо открывайте панель по тому же хосту, который клиенты должны использовать для подключения (не `localhost`).
|
Для корректного **`Endpoint`** задайте **`CLIENT_CONFIG_ENDPOINT`** при установке (публичный IP или домен VPS), либо убедитесь, что в `last_config` указан **`hostName`**, либо открывайте панель по тому же хосту, который клиенты должны использовать для подключения (не `localhost`).
|
||||||
|
|
||||||
|
Имя скачиваемого файла в заголовке **`Content-Disposition`** составляется только из **ASCII** (латиница, цифры, `.`, `_`, `-`). Если имя клиента в приложении на кириллице или с другими символами, в имени файла используется безопасный фрагмент (например префикс `clientId`), чтобы ответ не падал с ошибкой заголовка в Node.js.
|
||||||
|
|
||||||
### Обновление до новой версии
|
### Обновление до новой версии
|
||||||
|
|
||||||
Коммиты на GitHub **сами не попадают** в уже запущенный контейнер: нужно заново **скачать код и пересобрать образ**.
|
Коммиты на GitHub **сами не попадают** в уже запущенный контейнер: нужно заново **скачать код и пересобрать образ** (`amnezia-admin` и, если не отключали лендинг, **`amnezia-web-landing`**).
|
||||||
|
|
||||||
Проще всего — та же команда, что при установке (данные в `DATA_DIR`, пароль сохранится). Скрипт **подставит прежний внешний порт** контейнера `amnezia-admin`, если вы не передавали `HOST_PORT` и в коде по умолчанию стоит `8080`:
|
Проще всего — та же команда, что при установке (данные в `DATA_DIR`, пароль и `AWG_PROFILES` сохранятся — профили подтягиваются из файла на VPS или из старого контейнера). Скрипт **подставит прежний внешний порт** контейнера `amnezia-admin`, если вы не передавали `HOST_PORT` и в коде по умолчанию стоит `8080`:
|
||||||
|
|
||||||
```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
|
||||||
|
|||||||
@@ -25,11 +25,24 @@
|
|||||||
|
|
||||||
При ошибке bind `:80` используйте при установке **`SKIP_LANDING=1`** или **`LANDING_PORT=8081`** — админка на `HOST_PORT` (например 8080) от этого не зависит.
|
При ошибке bind `:80` используйте при установке **`SKIP_LANDING=1`** или **`LANDING_PORT=8081`** — админка на `HOST_PORT` (например 8080) от этого не зависит.
|
||||||
|
|
||||||
|
## Публичная страница и админка
|
||||||
|
|
||||||
|
- **`http://IP:LANDING_PORT`** (часто **80**) — статический nginx из каталога **`landing/`**: инструкция, переход в админку, напоминание написать **администратору вашего сервера**, дисклеймер. Ссылок на донат и автора репозитория здесь нет.
|
||||||
|
- **`http://IP:HOST_PORT`** (часто **8080**) — сама панель (`public/`). Футер со ссылками автора (GitHub, Boosty и т.д.) только здесь, внизу после таблицы клиентов.
|
||||||
|
|
||||||
|
Файл **`landing/admin-port.js`** пересобирается установщиком и задаёт порт админки для кнопки на лендинге.
|
||||||
|
|
||||||
## Конфигурации клиентов
|
## Конфигурации клиентов
|
||||||
|
|
||||||
- **Старые строки без `last_config`** — полный `.conf` с сервера собрать нельзя (нет приватного ключа). Используйте приложение Amnezia или блок **«Новый клиент под каскад»** (новый ключ на сервере).
|
- **Старые строки без `last_config`** — полный `.conf` с сервера собрать нельзя (нет приватного ключа). Используйте приложение Amnezia или блок **«Новый клиент под каскад»** (новый ключ на сервере).
|
||||||
- **Экспорт по кнопкам** — только если в `clientsTable` есть **`userData.last_config`** с полем `config` или `client_priv_key`.
|
- **Экспорт по кнопкам** — только если в `clientsTable` есть **`userData.last_config`** с полем `config` или `client_priv_key`.
|
||||||
|
|
||||||
|
### Экспорт: имя файла и прямая ссылка
|
||||||
|
|
||||||
|
Ответ **`GET /api/clients/export-config`** отдаёт заголовок **`Content-Disposition: attachment; filename="…"`**. В Node.js значение заголовка должно быть в **ASCII**: кириллическое имя клиента в приложении не попадает в имя файла как есть — используется безопасная подстановка (латиница из имени или короткий префикс от `clientId`), чтобы не было ошибки вида `Invalid character in header content`. Содержимое `.conf` при этом остаётся полным UTF-8 текстом.
|
||||||
|
|
||||||
|
Прямая ссылка в браузере работает при активной **cookie-сессии** после входа или с **`?token=…`**, если задан **`EXPORT_CONFIG_SECRET`**.
|
||||||
|
|
||||||
## HTTP API (все маршруты под `/`, кроме статики)
|
## HTTP API (все маршруты под `/`, кроме статики)
|
||||||
|
|
||||||
Требуют cookie-сессии после **`POST /api/login`**, если не указано иное.
|
Требуют cookie-сессии после **`POST /api/login`**, если не указано иное.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "amnezia-admin",
|
"name": "amnezia-admin",
|
||||||
"version": "1.1.1",
|
"version": "1.1.2",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "Web-панель AmneziaWG: несколько инстансов, WARP, каскад/Endpoint, экспорт .conf (Docker)",
|
"description": "Web-панель AmneziaWG: несколько инстансов, WARP, каскад/Endpoint, экспорт .conf (Docker)",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
@@ -175,7 +175,7 @@ if [[ "${SKIP_LANDING:-}" != "1" ]] && [[ -d "${INSTALL_DIR}/landing" ]]; then
|
|||||||
if docker run -d --name "${LANDING_CONTAINER}" --restart unless-stopped \
|
if docker run -d --name "${LANDING_CONTAINER}" --restart unless-stopped \
|
||||||
-p "${LANDING_PORT}:80" \
|
-p "${LANDING_PORT}:80" \
|
||||||
"${LANDING_IMAGE}"; then
|
"${LANDING_IMAGE}"; then
|
||||||
echo "→ Лендинг с блоком поддержки: http://${IP:-SERVER_IP}:${LANDING_PORT}/"
|
echo "→ Публичная страница (лендинг): http://${IP:-SERVER_IP}:${LANDING_PORT}/"
|
||||||
else
|
else
|
||||||
echo "⚠ Не удалось запустить лендинг (часто порт ${LANDING_PORT} занят). Поставьте LANDING_PORT=8081 или SKIP_LANDING=1."
|
echo "⚠ Не удалось запустить лендинг (часто порт ${LANDING_PORT} занят). Поставьте LANDING_PORT=8081 или SKIP_LANDING=1."
|
||||||
fi
|
fi
|
||||||
@@ -187,7 +187,7 @@ echo ""
|
|||||||
echo "=== Готово ==="
|
echo "=== Готово ==="
|
||||||
echo "Админ-панель: http://${IP:-SERVER_IP}:${HOST_PORT}"
|
echo "Админ-панель: http://${IP:-SERVER_IP}:${HOST_PORT}"
|
||||||
if [[ "${SKIP_LANDING:-}" != "1" ]]; then
|
if [[ "${SKIP_LANDING:-}" != "1" ]]; then
|
||||||
echo "Страница с поддержкой проекта: http://${IP:-SERVER_IP}:${LANDING_PORT}/"
|
echo "Лендинг для пользователей: http://${IP:-SERVER_IP}:${LANDING_PORT}/ (ссылки доната автора — только в админ-панели)"
|
||||||
fi
|
fi
|
||||||
if [[ -f "${PASS_FILE}" ]]; then
|
if [[ -f "${PASS_FILE}" ]]; then
|
||||||
echo "Первый пароль: $(cat "${PASS_FILE}")"
|
echo "Первый пароль: $(cat "${PASS_FILE}")"
|
||||||
|
|||||||
Reference in New Issue
Block a user