Files
orohiandCursor bac78dd3fc first commit
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-27 08:18:58 +03:00

5.2 KiB
Raw Permalink Blame History

Amnezia VPN Share Panel

Система управления гостевыми VPN-ссылками для Amnezia Web Panel.

Требования

  • PHP 8.0+
  • MySQL 8.0+
  • cURL (расширение PHP)
  • Amnezia Web Panel (установленная и настроенная)

Установка

  1. Скопируйте файлы на веб-сервер (Apache/Nginx с поддержкой PHP).

  2. Создайте базу данных MySQL и пользователя:

CREATE DATABASE amnezia_share CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  1. Скопируйте config.sample.php в config.php и заполните параметры подключения к БД.

  2. Выполните SQL-миграции из папки sql/:

mysql -u user -p amnezia_share < sql/users.sql
mysql -u user -p amnezia_share < sql/site_settings.sql
mysql -u user -p amnezia_share < sql/share_links.sql
mysql -u user -p amnezia_share < sql/share_link_creations.sql
mysql -u user -p amnezia_share < sql/panel_server_labels.sql
  1. Откройте install.php в браузере — создайте первого администратора.

  2. Войдите в админку (admin/index.php) и настройте:

    • URL панели Amnezia и API-токен (Настройки)
    • Названия серверов и флаги стран (Серверы)
    • Протоколы для каждого сервера (Серверы)

Подключение Pocket ID (OIDC)

Pocket ID — OIDC-провайдер с авторизацией через passkey (без паролей).

Настройка в Pocket ID

  1. Откройте админку Pocket ID → OIDC Clients → создайте нового клиента.

  2. Укажите Callback URL:

https://your-domain.com/oidc_callback.php
  1. Скопируйте Client ID и Client Secret.

Настройка в панели

  1. Откройте Настройки в админке.

  2. В блоке Pocket ID (OIDC) заполните:

    • URL Pocket ID — адрес вашего Pocket ID (например https://id.example.com)
    • Client ID — скопированный из Pocket ID
    • Client Secret — секрет клиента
  3. Нажмите «Сохранить Pocket ID».

  4. На странице входа появится кнопка «Войти через Pocket ID».

Логика авторизации

  • Имя пользователя из Pocket ID (preferred_username) сопоставляется с username в таблице users.
  • Если пользователей в базе нет — первый вошедший через Pocket ID автоматически становится администратором.
  • Если пользователь не найден — доступ запрещён (админ должен создать учётную запись с таким именем).

Структура проекта

├── admin/
│   ├── index.php              — Панель управления
│   ├── share_links.php        — Управление ссылками
│   ├── server_labels.php      — Серверы: названия, флаги, протоколы
│   ├── server_traffic_notices.php — Уведомления о трафике
│   ├── settings.php           — Настройки (панель + Pocket ID)
│   └── admin_layout.php       — Общий шаблон админки
├── includes/
│   ├── amnezia_settings.php   — Настройки сайта и Pocket ID
│   ├── auth.php               — Авторизация и CSRF
│   ├── bootstrap.php          — Инициализация
│   ├── db.php                 — Подключение к MySQL
│   ├── panel_http.php         — HTTP-запросы к Amnezia Panel API
│   ├── share_repo.php         — Логика ссылок и конфигов
│   └── share_downloads.php    — Генерация файлов для скачивания
├── share.php                  — Гостевая страница (создание конфигов)
├── share_servers.php          — API: список серверов для гостя
├── oidc_callback.php          — Callback для Pocket ID OIDC
├── login.php                  — Вход администратора
├── index.php                  — Редирект на admin/
└── config.php                 — Конфигурация БД (не в git)

Гостевая ссылка

Формат: share.php?k=<32-символьный токен>

Пользователь по ссылке:

  1. Выбирает сервер (с флагами стран и бейджами протоколов)
  2. Выбирает тип подключения (WireGuard / AmneziaWG 2)
  3. Получает конфигурацию (файл, QR-код, текст)
  4. Может перенести конфиг на другой сервер без потери лимита