2 Commits

Author SHA1 Message Date
Бобырев Андрей
1be56c1f60 v1.4.1: installer installs Docker, step-by-step quick start, drop confusing AWG_PROFILES hint
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 01:20:11 +03:00
Бобырев Андрей
a843f300a7 docs: 00, 09.2 v1.4.0, archive closed panel
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 01:09:32 +03:00
9 changed files with 87 additions and 10 deletions

View File

@@ -0,0 +1,8 @@
# 00. НАЧНИ ОТСЮДА — amnezia_web-PRO
**Промпт для нового чата:**
> Проект «Открытые проекты/amnezia_web-PRO» — полностью открытая веб-панель Amnezia (Node, `server.js` + `public/`). Закрытой версии нет (старая — в `Архив/amnezia_web-PRO_test`). Прочитай `PROJECT_INDEX.md` и `09. История и грабли`. Тесты — на school-friends (сервер) и school-it-kruzhok (клиент) через svault. Релиз: тег + GitHub API, затем Gitea, Notes, новость в @PCAdministration ботом PCA_jarvis_bot (токен `TG_BOT_TOKEN` в `~/jarvis-ru-windows/.env`).
## Оглавление
- `PROJECT_INDEX.md` — что где лежит, установка
- `09. История и грабли` — оглавление записей 09.N

View File

@@ -1,4 +1,5 @@
# 09. История и грабли # 09. История и грабли
- [09.1 Версия 1.3.0 — протоколы с сайта, каскад, домен, тема](<09.1 Версия 1.3.0 — протоколы с сайта, каскад, домен, тема.md>) — 23.10.2026 - [09.1 Версия 1.3.0 — протоколы с сайта, каскад, домен, тема](<09.1 Версия 1.3.0 — протоколы с сайта, каскад, домен, тема.md>) — 23.10.2026
- [09.2 Версия 1.4.0 — Xray VLESS, всё открыто](<09.2 Версия 1.4.0 — Xray VLESS, всё открыто.md>) — 23.10.2026
- 04.10.2026 — проект переехал в папку-группу; код не менялся. - 04.10.2026 — проект переехал в папку-группу; код не менялся.

View File

@@ -0,0 +1,20 @@
# 09.2 Версия 1.4.0 — Xray VLESS-Reality, всё открыто (23.10.2026)
**Задача.** Перенести Xray/VLESS из закрытой панели, закрытую версию не развивать, убрать всё «платное».
**Сделано.**
- Убрана редакция community («только просмотр», баннер «купите PRO», `requireProTier`, `AMNEZIA_EDITION`, `COMMUNITY_UPGRADE_*`). Все функции открыты.
- Xray VLESS-Reality в `server.js` (блок «Xray VLESS-Reality») и раздел на странице: установка (TCP-порт, сайт-маскировка), клиенты создать/выкл/вкл/удалить, ссылка `vless://`.
Образ собирается на сервере (alpine + Xray v26.3.27), контейнер `amnezia-xray`, файлы `/opt/amnezia/xray` в формате приложения Amnezia (`xray_*.key`, `clientsTable`). Выключенный клиент — убран из `server.json`, помечен `disabled` в `clientsTable`.
- Закрытая панель `amnezia_web-PRO_test` перенесена в `Архив/` (SSD и Notes), там файл «АРХИВ — почему».
**Проверено** на school-friends (сервер) + school-it-kruzhok (клиент xray-core): соединение есть (HTTP 200 через socks), выключение клиента рвёт связь, включение возвращает. Тестовое удалено.
## Грабли
- **СИМПТОМ:** установка Xray «Не удалось получить ключи x25519». **ПРИЧИНА:** новый Xray пишет `Password (PublicKey): …` вместо `Public key:`. **ИСПРАВЛЕНИЕ:** регэксп `(?:Public\s*key|Password)[^:\n]*:`. **ПРОВЕРИТЬ:** `docker run --rm --entrypoint /usr/bin/xray amnezia-xray x25519`.
- **СИМПТОМ:** форма установки видна при установленном Xray. **ПРИЧИНА:** CSS `.instance-form` перебивает атрибут `hidden`. **ИСПРАВЛЕНИЕ:** `style.display`.
- Оба школьных сервера выходят в интернет через один NAT — проверка «по IP» не отличает туннель; проверять выключением клиента.
## Осталось
- Gitea (192.168.88.153) — Proxmox .5 был не в сети: `git push gitea main --tags`.
- QR-кода для vless нет (ссылка копируется) — добавить, если попросят.

View File

@@ -11,7 +11,7 @@
| Заметки | Apple Notes → `МОИ ПРОЕКТЫ` → папка `amnezia_web-PRO` | | Заметки | Apple Notes → `МОИ ПРОЕКТЫ` → папка `amnezia_web-PRO` |
| GitHub (публичный) | https://github.com/andrey271192/amnezia_web-PRO | | GitHub (публичный) | https://github.com/andrey271192/amnezia_web-PRO |
| Ветка прода | `main` | | Ветка прода | `main` |
| Тестовая копия рядом | `/Volumes/ssd/Мои проекты/Закрытые продукты/amnezia_web-PRO_test/` | | Старая закрытая панель (архив, не развивается) | `/Volumes/ssd/Мои проекты/Архив/amnezia_web-PRO_test/` |
Путь `/Volumes/andrey/Мои проекты/...` из старого промпта синхронизации **не существует** — Путь `/Volumes/andrey/Мои проекты/...` из старого промпта синхронизации **не существует** —
актуальная копия только на `/Volumes/ssd`. актуальная копия только на `/Volumes/ssd`.

View File

@@ -5,6 +5,7 @@
## Что нового в 1.4.0 ## Что нового в 1.4.0
- **Xray VLESS‑Reality** — раздел «Xray VLESS‑Reality»: установка с выбором TCP‑порта и сайта‑маскировки, клиенты (создать, выключить/включить, удалить), ссылка `vless://` для Amnezia VPN, v2rayNG, Hiddify, Streisand, Happ. Файлы в `/opt/amnezia/xray` в том же формате, что у приложения Amnezia. - **Xray VLESS‑Reality** — раздел «Xray VLESS‑Reality»: установка с выбором TCP‑порта и сайта‑маскировки, клиенты (создать, выключить/включить, удалить), ссылка `vless://` для Amnezia VPN, v2rayNG, Hiddify, Streisand, Happ. Файлы в `/opt/amnezia/xray` в том же формате, что у приложения Amnezia.
- **Установщик сам ставит Docker** на чистом сервере.
- **Всё открыто:** убрана редакция «community / только просмотр» и переменные `AMNEZIA_EDITION`, `COMMUNITY_UPGRADE_*` — все функции доступны всем. - **Всё открыто:** убрана редакция «community / только просмотр» и переменные `AMNEZIA_EDITION`, `COMMUNITY_UPGRADE_*` — все функции доступны всем.
## Что нового в 1.3.0 ## Что нового в 1.3.0
@@ -25,6 +26,55 @@
- **Светлая / тёмная тема** — кнопка «◐ Тема» в шапке (по умолчанию как в системе). - **Светлая / тёмная тема** — кнопка «◐ Тема» в шапке (по умолчанию как в системе).
- Старые установки не затрагиваются: контейнеры, поставленные приложением Amnezia, остаются как были. - Старые установки не затрагиваются: контейнеры, поставленные приложением Amnezia, остаются как были.
## Быстрый старт: от пустого сервера до VPN за 10 минут
**Что нужно:** VPS с Ubuntu 22.04/24.04 или Debian 12 (1 ГБ ОЗУ хватает), доступ root по SSH. Docker ставить не нужно — установщик поставит его сам.
**1. Установите панель.** Зайдите на сервер по SSH и выполните:
```bash
curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web-PRO/main/scripts/install.sh | sudo bash
```
В конце будет строка `Админ-панель: http://IP:8080`.
**2. Откройте порты** в фаерволе хостинга (панель управления VPS) и, если включён, в `ufw`:
| Порт | Зачем |
|---|---|
| `8080/tcp` | админ-панель |
| `80/tcp` | страница для пользователей (необязательно, `SKIP_LANDING=1` — без неё) |
| UDP-порт AmneziaWG, который выберете на шаге 4 (например `41010/udp`) | VPN AmneziaWG |
| TCP-порт Xray, если будете ставить (например `443/tcp`) | VPN Xray |
```bash
sudo ufw allow 8080/tcp && sudo ufw allow 41010/udp # пример, если ufw включён
```
**3. Войдите** на `http://IP:8080` — пароль **`admin`**. Сразу смените его в блоке «Сменить пароль».
**4. Разверните протокол.** Раздел «Протоколы / инстансы» → выберите вариант → порт (например `41010`) → «Развернуть инстанс». Какой выбрать:
- **AmneziaWG 2.0** — по умолчанию, для телефонов и ПК (приложение Amnezia VPN);
- **AmneziaWG 3.1 / 3.0** — самые новые, нужна свежая версия приложения;
- **AmneziaWG 1.x** — для роутеров Keenetic / OpenWrt;
- **WireGuard** — для любых WG-клиентов, без маскировки.
Если на сервере уже стоит VPN, поставленный приложением Amnezia, — шаг пропустите: панель найдёт его сама.
**5. Создайте клиента.** Блок «Новый клиент» → имя → «Создать и скачать .conf». Файл импортируйте в Amnezia VPN (на телефоне/ПК: «+» → «Файл с настройками»).
**6. (по желанию) Xray VLESS‑Reality** — если AmneziaWG у провайдера режут. Раздел «Xray VLESS‑Reality» → порт TCP (`443`, если свободен) и сайт‑маскировка → «Установить Xray» (~1 минута) → «Создать» клиента — ссылка `vless://` скопируется. Вставьте её в Amnezia VPN, v2rayNG, Hiddify, Streisand или Happ («+» → «Из буфера обмена»).
**7. Свой домен (по желанию).** В «Протоколы / инстансы» → «Домен или IP сервера в конфигах клиентов» → «Сохранить адрес». Без него в конфиги подставляется IP.
**Обновление** — та же команда из шага 1: клиенты, пароль и настройки сохраняются. **Удаление** — см. «Удаление одной командой».
**Если не работает:**
- «Рукопожатие есть, интернета нет» или нет рукопожатия — не открыт UDP-порт у хостинга (шаг 2).
- Панель не открывается — не открыт `8080/tcp`; проверка на сервере: `curl -s localhost:8080/health`.
- Xray: «TCP-порт занят» — выберите другой порт (например `8443`) и откройте его.
- Логи панели: `sudo docker logs --tail 50 amnezia-admin`.
## Что открывается по какому порту ## Что открывается по какому порту
| Адрес | Назначение | | Адрес | Назначение |

View File

@@ -1,6 +1,6 @@
{ {
"name": "amnezia-admin", "name": "amnezia-admin",
"version": "1.4.0", "version": "1.4.1",
"private": false, "private": false,
"description": "amnezia_web-PRO — веб-панель AmneziaWG: несколько инстансов, WARP, каскад/Endpoint, экспорт .conf (Docker)", "description": "amnezia_web-PRO — веб-панель AmneziaWG: несколько инстансов, WARP, каскад/Endpoint, экспорт .conf (Docker)",
"license": "MIT", "license": "MIT",

View File

@@ -8,7 +8,7 @@
<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">
<script>try{var t=localStorage.getItem("theme")||(matchMedia("(prefers-color-scheme: light)").matches?"light":"dark");document.documentElement.dataset.theme=t}catch(e){}</script> <script>try{var t=localStorage.getItem("theme")||(matchMedia("(prefers-color-scheme: light)").matches?"light":"dark");document.documentElement.dataset.theme=t}catch(e){}</script>
<link rel="stylesheet" href="/styles.css?v=1.4.0"> <link rel="stylesheet" href="/styles.css?v=1.4.1">
</head> </head>
<body class="page"> <body class="page">
<aside class="panel-promo-strip" role="complementary" aria-label="Поддержка и донат"> <aside class="panel-promo-strip" role="complementary" aria-label="Поддержка и донат">
@@ -460,6 +460,6 @@
</div> </div>
</dialog> </dialog>
<script src="/app.js?v=1.4.0" type="module"></script> <script src="/app.js?v=1.4.1" type="module"></script>
</body> </body>
</html> </html>

View File

@@ -21,8 +21,9 @@ need_root() {
need_docker() { need_docker() {
command -v docker >/dev/null 2>&1 || { command -v docker >/dev/null 2>&1 || {
echo "Ошибка: нужен Docker." echo "→ Docker не найден — ставлю официальным скриптом get.docker.com..."
exit 1 curl -fsSL https://get.docker.com | sh || { echo "Ошибка: не удалось поставить Docker."; exit 1; }
systemctl enable --now docker 2>/dev/null || true
} }
docker info >/dev/null 2>&1 || { docker info >/dev/null 2>&1 || {
echo "Ошибка: демон Docker не отвечает." echo "Ошибка: демон Docker не отвечает."

View File

@@ -2626,10 +2626,7 @@ app.post("/api/settings", requireAuth, async (req, res) => {
app.get("/api/protocols", requireAuth, (req, res) => { app.get("/api/protocols", requireAuth, (req, res) => {
const rt = runtimeForRequest(req); const rt = runtimeForRequest(req);
const hintSingle = const hintSingle = "";
getProfiles().length < 2
? "Сейчас один инстанс: при установке не передали AWG_PROFILES или не восстановился снимок. Задайте JSON профилей и запустите install.sh — он сохранится в /root/amnezia-admin.awg-profiles.json."
: "";
res.json({ res.json({
currentId: rt.profile.id, currentId: rt.profile.id,
currentLabel: rt.profile.label, currentLabel: rt.profile.label,