feat(site): homepage 落地页 + docsify 用户手册文档站(/docs /homepage 随二进制发布)
- homepage/:品牌落地页(Hero/特性/快速开始),参考 opsxapi 站点风格,绿色品牌系 - docs/:docsify 文档站 + user-guide 十篇手册(安装/向导/采集/查询/分析/告警/授权/备份/FAQ) - 后端 serveStaticDir 挂载 /docs 与 /homepage(可执行文件相对定位,独立于前端 dist)
This commit is contained in:
1 parent
b8d08ef6d1
commit
3ea7f2dcc6
17 files changed
+605
No files matched your search
@@ -0,0 +1,58 @@
|
||||
:root {
|
||||
--brand: #059669; --brand-dark: #047857; --ink: #0f172a; --muted: #64748b;
|
||||
--bg: #f8fafc; --card: #ffffff; --line: #e2e8f0;
|
||||
--code-bg: #0f172a; --code-ink: #e2e8f0;
|
||||
}
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
html { scroll-behavior: smooth; }
|
||||
body { font-family: -apple-system, "PingFang SC", "Microsoft YaHei", "Segoe UI", sans-serif; color: var(--ink); background: var(--bg); line-height: 1.7; }
|
||||
a { color: var(--brand); text-decoration: none; }
|
||||
.container { max-width: 1080px; margin: 0 auto; padding: 0 24px; }
|
||||
|
||||
.nav { position: sticky; top: 0; z-index: 10; background: rgba(255,255,255,.92); backdrop-filter: blur(8px); border-bottom: 1px solid var(--line); }
|
||||
.nav-inner { max-width: 1080px; margin: 0 auto; padding: 14px 24px; display: flex; align-items: center; justify-content: space-between; }
|
||||
.brand { display: flex; align-items: center; gap: 10px; font-weight: 700; font-size: 20px; color: var(--ink); }
|
||||
.brand-logo { display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px; border-radius: 9px; background: linear-gradient(135deg, #10b981, #047857); color: #fff; font-weight: 800; }
|
||||
.nav-links { display: flex; gap: 26px; font-size: 15px; }
|
||||
.nav-links a { color: var(--muted); }
|
||||
.nav-links a:hover { color: var(--ink); }
|
||||
|
||||
.hero { padding: 96px 0 84px; text-align: center; background: radial-gradient(1200px 500px at 50% -100px, rgba(16,185,129,.12), transparent); }
|
||||
.hero h1 { font-size: 46px; line-height: 1.25; letter-spacing: -1px; }
|
||||
.hero h1 em { font-style: normal; color: var(--brand); }
|
||||
.hero p.tagline { margin: 18px auto 0; max-width: 640px; font-size: 19px; color: var(--muted); }
|
||||
.hero-actions { margin-top: 34px; display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; }
|
||||
.btn { display: inline-flex; align-items: center; gap: 8px; padding: 12px 26px; border-radius: 10px; font-size: 16px; font-weight: 600; border: 1px solid transparent; transition: all .15s; }
|
||||
.btn-primary { background: var(--brand); color: #fff; }
|
||||
.btn-primary:hover { background: var(--brand-dark); }
|
||||
.btn-outline { border-color: var(--line); color: var(--ink); background: var(--card); }
|
||||
.btn-outline:hover { border-color: var(--brand); color: var(--brand); }
|
||||
.hero-meta { margin-top: 26px; font-size: 14px; color: var(--muted); }
|
||||
|
||||
section.block { padding: 72px 0; }
|
||||
section.block.alt { background: var(--card); border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }
|
||||
.block h2 { font-size: 30px; text-align: center; }
|
||||
.block .sub { text-align: center; color: var(--muted); margin-top: 10px; margin-bottom: 44px; }
|
||||
|
||||
.grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
|
||||
.feature { background: var(--card); border: 1px solid var(--line); border-radius: 14px; padding: 26px; }
|
||||
.feature .icon { width: 42px; height: 42px; border-radius: 10px; display: flex; align-items: center; justify-content: center; background: rgba(16,185,129,.1); color: var(--brand); margin-bottom: 14px; }
|
||||
.feature h3 { font-size: 17px; margin-bottom: 8px; }
|
||||
.feature p { font-size: 14.5px; color: var(--muted); }
|
||||
|
||||
.steps { max-width: 760px; margin: 0 auto; }
|
||||
.step { display: flex; gap: 18px; padding: 18px 0; border-bottom: 1px dashed var(--line); }
|
||||
.step:last-child { border-bottom: none; }
|
||||
.step .no { flex-shrink: 0; width: 34px; height: 34px; border-radius: 50%; background: var(--brand); color: #fff; font-weight: 700; display: flex; align-items: center; justify-content: center; }
|
||||
.step h3 { font-size: 16px; }
|
||||
.step p { font-size: 14.5px; color: var(--muted); margin-top: 4px; }
|
||||
code.inline { background: rgba(16,185,129,.08); color: var(--brand-dark); padding: 2px 7px; border-radius: 5px; font-size: 13.5px; font-family: ui-monospace, "SF Mono", Menlo, monospace; }
|
||||
|
||||
.footer { padding: 40px 0 56px; color: var(--muted); font-size: 14px; text-align: center; }
|
||||
.footer .links { display: flex; gap: 22px; justify-content: center; margin-bottom: 14px; }
|
||||
|
||||
@media (max-width: 840px) {
|
||||
.grid { grid-template-columns: 1fr; }
|
||||
.hero h1 { font-size: 34px; }
|
||||
.nav-links { display: none; }
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>LokiStack — Loki 日志管理平台</title>
|
||||
<meta name="description" content="LokiStack:把 Grafana Loki 部署到 Kubernetes 或裸金属,内置日志查询、日志分析与告警的一体化平台。部署向导、采集策略、查询授权、飞书告警开箱即用。">
|
||||
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Crect width='64' height='64' rx='14' fill='%23059669'/%3E%3Ctext x='32' y='44' font-size='34' font-weight='800' fill='%23fff' text-anchor='middle' font-family='sans-serif'%3EL%3C/text%3E%3C/svg%3E">
|
||||
<link rel="stylesheet" href="assets/site.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="nav">
|
||||
<div class="nav-inner">
|
||||
<a class="brand" href="#">
|
||||
<span class="brand-logo">L</span>
|
||||
<span>LokiStack</span>
|
||||
</a>
|
||||
<nav class="nav-links">
|
||||
<a href="#features">特性</a>
|
||||
<a href="#quickstart">快速开始</a>
|
||||
<a href="#docs">文档</a>
|
||||
<a href="https://gitea.91ai.io/rlwj-lab/LokiStack" target="_blank" rel="noopener">源码</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<section class="hero">
|
||||
<div class="container">
|
||||
<h1>把 Loki 日志聚合<br>变成<em>五分钟</em>的事</h1>
|
||||
<p class="tagline">向导式部署 Grafana Loki 到 Kubernetes 集群或裸金属主机,内置日志查询、可视化分析与飞书告警 —— 不写 YAML、不装 kubectl/Helm。</p>
|
||||
<div class="hero-actions">
|
||||
<a class="btn btn-primary" href="#quickstart">快速开始</a>
|
||||
<a class="btn btn-outline" href="#docs">阅读文档</a>
|
||||
</div>
|
||||
<p class="hero-meta">Go + React 单二进制交付 · JSON 文件存储零依赖 · 中文/英文界面</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="block" id="features">
|
||||
<div class="container">
|
||||
<h2>为运维而生的完整日志链路</h2>
|
||||
<p class="sub">从部署、采集、查询到告警,一个平台全部覆盖</p>
|
||||
<div class="grid">
|
||||
<div class="feature">
|
||||
<div class="icon"><svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09"/><path d="m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z"/><path d="M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0"/><path d="M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5"/></svg></div>
|
||||
<h3>向导式部署</h3>
|
||||
<p>三步完成:环境与目标 → 存储 → 部署 Loki 与采集。支持 Kubernetes(YAML 直发)、裸金属二进制与 Docker 三种模式。</p>
|
||||
</div>
|
||||
<div class="feature">
|
||||
<div class="icon"><svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 10a1 1 0 0 0 1 1h2.5a1 1 0 0 1 .8.4l.9 1.2a1 1 0 0 0 .8.4H12a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-2a1 1 0 0 0-.8.4l-.9 1.2a1 1 0 0 1-.8.4H5a1 1 0 0 0-1 1z"/><path d="M3 5v13a2 2 0 0 0 2 2h3"/></svg></div>
|
||||
<h3>策略化采集</h3>
|
||||
<p>Promtail / Fluent Bit 采集策略可视化配置:命名空间多选、app 标签四级回退、敏感路径拦截、配置预览与一键下发。</p>
|
||||
</div>
|
||||
<div class="feature">
|
||||
<div class="icon"><svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg></div>
|
||||
<h3>专业日志查询</h3>
|
||||
<p>LogQL 高亮补全、快捷查询选中即执行、Live Tail 实时追踪、时间线拖选、上下文查看,细到按用户的查询授权。</p>
|
||||
</div>
|
||||
<div class="feature">
|
||||
<div class="icon"><svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 3v16a2 2 0 0 0 2 2h16"/><path d="m7 14 4-4 4 4 6-6"/></svg></div>
|
||||
<h3>日志分析大盘</h3>
|
||||
<p>统计卡、趋势折线、命名空间分布、应用流图、每日日志量、Top 10 排行与 Ingress 访问分析,自动聚合无需配置。</p>
|
||||
</div>
|
||||
<div class="feature">
|
||||
<div class="icon"><svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 8.5a2.5 2.5 0 0 0-2.5-2.5h-15A2.5 2.5 0 0 0 2 8.5v7a2.5 2.5 0 0 0 2.5 2.5h15A2.5 2.5 0 0 0 22 15.5z"/><path d="M6 9v6"/><path d="M10 9v6"/><path d="M14 9v6"/><path d="M18 9v6"/></svg></div>
|
||||
<h3>开箱告警</h3>
|
||||
<p>内置九条应用日志告警规则,默认启用并绑定默认通道;填好飞书 Webhook 即可接收,冷却与风暴抑制防刷屏。</p>
|
||||
</div>
|
||||
<div class="feature">
|
||||
<div class="icon"><svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/><path d="m9 12 2 2 4-4"/></svg></div>
|
||||
<h3>工程级可靠性</h3>
|
||||
<p>Credential 加密存储、操作审计、备份恢复、Prometheus 自监控指标、CI 门禁与测试覆盖,按生产标准构建。</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="block alt" id="quickstart">
|
||||
<div class="container">
|
||||
<h2>五分钟启动</h2>
|
||||
<p class="sub">单二进制或 Docker,一条命令拉起完整平台</p>
|
||||
<div class="steps">
|
||||
<div class="step">
|
||||
<span class="no">1</span>
|
||||
<div>
|
||||
<h3>准备密钥并启动</h3>
|
||||
<p><code class="inline">export JWT_SECRET=... ENCRYPTION_KEY=...</code> 后执行 <code class="inline">./run.sh</code>(开发)或 <code class="inline">docker compose up -d</code>(生产)。默认账号在首次启动时自动生成。</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="step">
|
||||
<span class="no">2</span>
|
||||
<div>
|
||||
<h3>走完部署向导</h3>
|
||||
<p>接入 Kubernetes 集群或 SSH 主机,选择对象存储或本地磁盘,三步部署 Loki 并下发采集策略。</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="step">
|
||||
<span class="no">3</span>
|
||||
<div>
|
||||
<h3>查询、分析、告警</h3>
|
||||
<p>日志查询页检索与实时追踪,日志分析页看聚合大盘,告警页填入飞书 Webhook 开始接收告警。</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="block" id="docs">
|
||||
<div class="container">
|
||||
<h2>文档</h2>
|
||||
<p class="sub">用户手册覆盖部署、采集、查询、分析与告警全流程</p>
|
||||
<div class="hero-actions">
|
||||
<a class="btn btn-primary" href="/docs/">打开用户手册</a>
|
||||
<a class="btn btn-outline" href="https://gitea.91ai.io/rlwj-lab/LokiStack" target="_blank" rel="noopener">查看源码</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer class="footer">
|
||||
<div class="links">
|
||||
<a href="#features">特性</a>
|
||||
<a href="#quickstart">快速开始</a>
|
||||
<a href="/docs/">文档</a>
|
||||
<a href="https://gitea.91ai.io/rlwj-lab/LokiStack" target="_blank" rel="noopener">Gitea</a>
|
||||
</div>
|
||||
<p>LokiStack — Loki 日志管理平台 · Grafana Loki 是 Grafana Labs 的商标</p>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in new issue
Block a user