Files
vpn/README.md
T

4.2 KiB
Raw Blame History

VpnPanel

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

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

Что уже есть

  • Лендинг /
  • Админка /admin (логин из ENV)
  • Серверы WireGuard и AWG 2.0 (создаются при старте)
  • Клиенты: создать / вкл-выкл / удалить
  • Скачивание .conf и QR‑код
  • Запись серверных конфигов в volumes /data/wireguard и /data/amneziawg
  • 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. Панель: порт 8000 (или домен через Traefik в Dokploy).
  2. Вход: /admin/login

Если Bad Gateway (502)

  1. В Dokploy Domain укажите сервис panel, порт 8000 (не postgres).
  2. Откройте логи сервиса panel — должны быть строки Database is ready и Starting uvicorn.
  3. Ошибка Name or service not known значит panel не видит хост БД:
    • оба сервиса должны быть в сети dokploy-network (уже в compose);
    • на сервере один раз: docker network create dokploy-network (Dokploy обычно создаёт сам);
    • если сервис БД называется иначе — задайте 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:8000

Как связаны 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/               # миграции

Дальше

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