Files
vpn/README.md
T
2026-07-25 22:34:22 +03:00

4.5 KiB
Raw Blame History

VpnPanel

Версия 1.0.0

Веб‑панель (сайт) для управления WireGuard, AmneziaWG 2.0 и панелями 3x-ui на VPS.

В отличие от BandjuPanel это не десктопное приложение через SSH, а обычный веб‑сайт с админкой, который крутится на сервере (Dokploy / Docker Compose) и хранит данные в PostgreSQL.

Что есть в 1.0

  • Лендинг / и админка /admin (логин из ENV)
  • Серверы WireGuard / AWG 2.0: SSH, установка VPN на VPS, синхронизация конфигов
  • Клиенты WG/AWG: создать / вкл-выкл / удалить, .conf и QR
  • Панели 3x-ui: подключение по API, VLESS / WireGuard клиенты
  • Выбор inbound’ов, доступных пользователям; клиенты, созданные через сайт
  • PostgreSQL + Alembic, Docker Compose под Dokploy

Docker Compose (Dokploy)

Проект деплоится через docker-compose.yml:

Сервис Назначение
postgres PostgreSQL 16
panel веб‑сайт + админка (FastAPI)
  1. В Dokploy создайте приложение Docker Compose из этого репозитория.
  2. Compose file: docker-compose.yml
  3. Задайте Environment Variables (минимум):
SECRET_KEY=очень-длинный-секрет
ADMIN_USERNAME=admin
ADMIN_PASSWORD=надежный-пароль
ADMIN_EMAIL=admin@example.com
PUBLIC_HOST=ваш-домен-или-ip
POSTGRES_PASSWORD=надежный-пароль-бд
  1. Deploy. Доступ через домен Dokploy (сервис panel, порт контейнера 20000).
  2. Вход: /admin/login

Не публикуйте host-порт в compose — иначе будет port is already allocated. В ENV Dokploy удалите PANEL_PORT, если он остался от старых деплоев.

Если Bad Gateway (502)

  1. В Dokploy Domain укажите сервис panel, порт 20000 (не postgres).
  2. Откройте логи сервиса panel — должны быть строки Database is ready и Starting uvicorn.
  3. Ошибка Name or service not known значит panel не видит хост БД:
    • panel и postgres связаны через внутреннюю сеть vpn_internal;
    • panel также в dokploy-network для домена;
    • если БД внешняя (Dokploy Postgres) — задайте POSTGRES_HOST на её хост.
  4. Redeploy после правок.

Админ при каждом старте синхронизируется из ENV.

Файл .env на сервере не обязателен — все переменные читаются из Compose / Dokploy UI.

Локально

cp .env.example .env
docker compose up --build -d
docker compose ps
docker compose logs -f panel

Откройте http://localhost:20000

Как связаны VPN‑демоны

Панель:

  1. Хранит ключи и пиров в Postgres
  2. Генерирует клиентские конфиги (и AWG‑параметры Jc/Jmin/Jmax/S1/S2/H1H4)
  3. Пишет серверный wg0.conf / awg0.conf в shared volume

Дальше volume монтируется в контейнер WireGuard / AmneziaWG (или на хост), и интерфейс поднимается отдельно. Это сделано специально: панель — веб‑сайт, а VPN‑ядро можно менять независимо.

Пример идеи для следующего шага (не включено в MVP):

# wireguard:
#   image: linuxserver/wireguard
#   volumes:
#     - wg_data:/config
#   ports:
#     - "51820:51820/udp"

Структура

app/
  main.py              # FastAPI
  models.py            # Admin, VpnServer, VpnClient
  routers/             # public + admin UI
  services/            # ключи, конфиги WG/AWG
  templates/           # HTML сайта и админки
docker-compose.yml
Dockerfile
alembic/               # миграции

Дальше (после 1.0)

  • Пользовательский кабинет (не только admin)
  • Статистика handshake / трафика
  • Редактирование endpoint/DNS сервера из админки