Amnezia VPN Share Panel
Система управления гостевыми VPN-ссылками для Amnezia Web Panel.
Требования
- PHP 8.0+
- MySQL 8.0+
- cURL (расширение PHP)
- Amnezia Web Panel (установленная и настроенная)
Установка
-
Скопируйте файлы на веб-сервер (Apache/Nginx с поддержкой PHP).
-
Создайте базу данных MySQL и пользователя:
CREATE DATABASE amnezia_share CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-
Скопируйте
config.sample.phpвconfig.phpи заполните параметры подключения к БД. -
Выполните 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
-
Откройте
install.phpв браузере — создайте первого администратора. -
Войдите в админку (
admin/index.php) и настройте:- URL панели Amnezia и API-токен (Настройки)
- Названия серверов и флаги стран (Серверы)
- Протоколы для каждого сервера (Серверы)
Подключение Pocket ID (OIDC)
Pocket ID — OIDC-провайдер с авторизацией через passkey (без паролей).
Настройка в Pocket ID
-
Откройте админку Pocket ID → OIDC Clients → создайте нового клиента.
-
Укажите Callback URL:
https://your-domain.com/oidc_callback.php
- Скопируйте Client ID и Client Secret.
Настройка в панели
-
Откройте Настройки в админке.
-
В блоке Pocket ID (OIDC) заполните:
- URL Pocket ID — адрес вашего Pocket ID (например
https://id.example.com) - Client ID — скопированный из Pocket ID
- Client Secret — секрет клиента
- URL Pocket ID — адрес вашего Pocket ID (например
-
Нажмите «Сохранить Pocket ID».
-
На странице входа появится кнопка «Войти через 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-символьный токен>
Пользователь по ссылке:
- Выбирает сервер (с флагами стран и бейджами протоколов)
- Выбирает тип подключения (WireGuard / AmneziaWG 2)
- Получает конфигурацию (файл, QR-код, текст)
- Может перенести конфиг на другой сервер без потери лимита