mirror of
https://github.com/andrey271192/amnezia_web-PRO.git
synced 2026-09-20 14:42:00 +00:00
feat: nginx landing on :80 with Kaskad support footer; sync admin footer text
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
3
landing/Dockerfile
Normal file
3
landing/Dockerfile
Normal file
@@ -0,0 +1,3 @@
|
||||
FROM nginx:1.27-alpine
|
||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||
COPY index.html styles.css admin-port.js /usr/share/nginx/html/
|
||||
1
landing/admin-port.js
Normal file
1
landing/admin-port.js
Normal file
@@ -0,0 +1 @@
|
||||
window.__AMNEZIA_ADMIN_PORT__ = "8080";
|
||||
59
landing/index.html
Normal file
59
landing/index.html
Normal file
@@ -0,0 +1,59 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Сервер · AmneziaWG</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;600;700&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="styles.css">
|
||||
</head>
|
||||
<body class="page">
|
||||
<main class="landing-main">
|
||||
<p class="eyebrow">Этот сервер</p>
|
||||
<h1>Управление AmneziaWG</h1>
|
||||
<p class="lead">
|
||||
Здесь установлена админ-панель для клиентов VPN. Перейдите по ссылке ниже (порт задаётся при установке, по умолчанию <strong>8080</strong>).
|
||||
</p>
|
||||
<p class="admin-row" id="admin-row"></p>
|
||||
</main>
|
||||
|
||||
<footer class="support-footer">
|
||||
<div class="support-line">
|
||||
<strong class="support-title">Kaskad WebUI</strong>
|
||||
<span class="support-sep" aria-hidden="true">·</span>
|
||||
<a href="https://github.com/andrey271192/Amnezia_web" target="_blank" rel="noopener noreferrer">⭐ GitHub</a>
|
||||
<span class="support-sep" aria-hidden="true">·</span>
|
||||
<a href="https://boosty.to/andrey27/donate" target="_blank" rel="noopener noreferrer">💖 Boosty</a>
|
||||
<span class="support-sep" aria-hidden="true">·</span>
|
||||
<a href="https://finance.ozon.ru/apps/sbp/ozonbankpay/019dc200-2a5d-7931-a619-782d285f6798" target="_blank" rel="noopener noreferrer">💳 Ozon СБП</a>
|
||||
<span class="support-sep" aria-hidden="true">·</span>
|
||||
<a href="https://t.me/lot_andrey" target="_blank" rel="noopener noreferrer">✉️ Telegram @lot_andrey</a>
|
||||
</div>
|
||||
<p class="support-blurb">
|
||||
Поддержать проект — поставь звезду на GitHub И донат. Связаться с автором — Telegram.
|
||||
</p>
|
||||
</footer>
|
||||
|
||||
<script src="admin-port.js"></script>
|
||||
<script>
|
||||
(function () {
|
||||
var port =
|
||||
(typeof window.__AMNEZIA_ADMIN_PORT__ !== "undefined" && window.__AMNEZIA_ADMIN_PORT__) || "8080";
|
||||
var h = location.hostname || "";
|
||||
var proto = location.protocol || "http:";
|
||||
var url = proto + "//" + h + ":" + port + "/";
|
||||
var el = document.getElementById("admin-row");
|
||||
if (el) {
|
||||
el.innerHTML =
|
||||
'<a class="admin-btn" href="' +
|
||||
url +
|
||||
'">Открыть админ-панель</a> <span class="muted-inline">' +
|
||||
url +
|
||||
"</span>";
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
20
landing/nginx.conf
Normal file
20
landing/nginx.conf
Normal file
@@ -0,0 +1,20 @@
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
root /usr/share/nginx/html;
|
||||
index index.html;
|
||||
|
||||
gzip on;
|
||||
gzip_types text/css text/plain application/json application/javascript;
|
||||
|
||||
add_header X-Content-Type-Options nosniff always;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
|
||||
location ~* \.css$ {
|
||||
expires 1h;
|
||||
add_header Cache-Control "public, max-age=3600";
|
||||
}
|
||||
}
|
||||
124
landing/styles.css
Normal file
124
landing/styles.css
Normal file
@@ -0,0 +1,124 @@
|
||||
:root {
|
||||
--bg: #070b10;
|
||||
--card: #111722;
|
||||
--line: rgba(255, 255, 255, 0.08);
|
||||
--text: #f4f7ff;
|
||||
--muted: #94a3b8;
|
||||
--accent: #7dd3fc;
|
||||
font-family: "DM Sans", system-ui, sans-serif;
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body.page {
|
||||
margin: 0;
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: radial-gradient(circle at 20% 20%, rgba(125, 211, 252, 0.08), transparent 35%),
|
||||
radial-gradient(circle at 80% 0%, rgba(94, 234, 212, 0.06), transparent 40%),
|
||||
var(--bg);
|
||||
color: var(--text);
|
||||
}
|
||||
|
||||
.landing-main {
|
||||
flex: 1;
|
||||
max-width: 560px;
|
||||
margin: 0 auto;
|
||||
padding: clamp(2rem, 6vw, 4rem) 1.25rem;
|
||||
}
|
||||
|
||||
.eyebrow {
|
||||
letter-spacing: 0.18em;
|
||||
text-transform: uppercase;
|
||||
font-size: 0.72rem;
|
||||
color: var(--accent);
|
||||
margin: 0 0 0.5rem;
|
||||
}
|
||||
|
||||
.landing-main h1 {
|
||||
margin: 0 0 1rem;
|
||||
font-size: clamp(1.5rem, 4vw, 1.85rem);
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.lead {
|
||||
margin: 0 0 1.25rem;
|
||||
line-height: 1.6;
|
||||
color: var(--muted);
|
||||
}
|
||||
|
||||
.admin-row {
|
||||
margin: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.admin-btn {
|
||||
display: inline-block;
|
||||
padding: 0.55rem 1rem;
|
||||
border-radius: 11px;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
background: linear-gradient(135deg, #38bdf8, #22d3ee);
|
||||
color: #041018;
|
||||
}
|
||||
|
||||
.admin-btn:hover {
|
||||
filter: brightness(1.05);
|
||||
}
|
||||
|
||||
.muted-inline {
|
||||
font-size: 0.82rem;
|
||||
color: var(--muted);
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.support-footer {
|
||||
flex-shrink: 0;
|
||||
margin-top: auto;
|
||||
padding: 1.25rem clamp(1rem, 3vw, 1.5rem) 1.5rem;
|
||||
border-top: 1px solid var(--line);
|
||||
background: rgba(10, 15, 22, 0.92);
|
||||
}
|
||||
|
||||
.support-line {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
gap: 0.35rem 0.5rem;
|
||||
font-size: 0.92rem;
|
||||
color: var(--muted);
|
||||
}
|
||||
|
||||
.support-title {
|
||||
color: var(--text);
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.support-sep {
|
||||
opacity: 0.55;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.support-line a {
|
||||
color: var(--accent);
|
||||
text-decoration: none;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.support-line a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.support-blurb {
|
||||
margin: 0.65rem 0 0;
|
||||
font-size: 0.82rem;
|
||||
line-height: 1.45;
|
||||
color: var(--muted);
|
||||
max-width: 62rem;
|
||||
}
|
||||
Reference in New Issue
Block a user