Initial commit: VPN panel on Go, PostgreSQL 17, Docker, Xray-core

This commit is contained in:
vpn-panel
2026-05-21 18:55:14 +03:00
commit 3c2f5226d1
27 changed files with 1778 additions and 0 deletions
+71
View File
@@ -0,0 +1,71 @@
{{define "content"}}
<section class="hero">
<div class="hero-glow"></div>
<p class="hero-label">Панель управления VPN</p>
<h1>Управляйте <span class="gradient-text">Xray</span> из одного места</h1>
<p class="hero-desc">
Централизованная панель на базе
<a href="https://github.com/XTLS/Xray-core" target="_blank" rel="noopener">Xray-core</a>:
пользователи, ноды, конфигурации и мониторинг.
</p>
<div class="hero-actions">
{{if .User}}
<span class="pill pill-ok">Вы вошли как {{.User.Email}}</span>
{{else if .CanRegister}}
<a href="/register" class="btn btn-primary">Создать администратора</a>
<a href="/login" class="btn btn-ghost">Войти</a>
{{else}}
<a href="/login" class="btn btn-primary">Войти в панель</a>
{{end}}
</div>
</section>
<section class="stats">
<article class="stat-card">
<span class="stat-value">{{if .HasAdmin}}1{{else}}0{{end}}</span>
<span class="stat-label">Администратор</span>
</article>
<article class="stat-card">
<span class="stat-value">{{.UserCount}}</span>
<span class="stat-label">Пользователей</span>
</article>
<article class="stat-card">
<span class="stat-value">{{.XrayVersion}}</span>
<span class="stat-label">Ядро</span>
</article>
<article class="stat-card">
<span class="stat-value">{{if .Installed}}✓{{else}}—{{end}}</span>
<span class="stat-label">Установка</span>
</article>
</section>
<section class="features">
<h2>Возможности</h2>
<div class="feature-grid">
<div class="feature-card">
<h3>VLESS / REALITY</h3>
<p>Поддержка современных протоколов Xray: VLESS, XTLS Vision, REALITY.</p>
</div>
<div class="feature-card">
<h3>PostgreSQL 17</h3>
<p>Надёжное хранение пользователей и настроек в PostgreSQL.</p>
</div>
<div class="feature-card">
<h3>Docker</h3>
<p>Развёртывание панели и БД через Docker Compose за минуты.</p>
</div>
<div class="feature-card">
<h3>Один админ</h3>
<p>При первом запуске регистрируется единственный администратор панели.</p>
</div>
</div>
</section>
{{if not .HasAdmin}}
<section class="cta-banner">
<h2>Первый запуск</h2>
<p>Администратор ещё не создан. Зарегистрируйте единственную учётную запись администратора.</p>
<a href="/register" class="btn btn-primary">Регистрация администратора</a>
</section>
{{end}}
{{end}}