feat(homepage): 新增独立授权与激活页 /license + 补齐定价页样式基础类
CI / Lint & TypeCheck (push) Canceled after 0s
CI / Test (push) Canceled after 0s
CI / Tauri Foundation Acceptance (push) Canceled after 0s
CI / Build (macos-latest) (push) Canceled after 0s
CI / Build (ubuntu-latest) (push) Canceled after 0s
CI / Build (windows-latest) (push) Canceled after 0s
CI / Lint & TypeCheck (push) Canceled after 0s
CI / Test (push) Canceled after 0s
CI / Tauri Foundation Acceptance (push) Canceled after 0s
CI / Build (macos-latest) (push) Canceled after 0s
CI / Build (ubuntu-latest) (push) Canceled after 0s
CI / Build (windows-latest) (push) Canceled after 0s
- 新增 homepage/license.html → dist/license.html + dist/license/index.html: 交付与激活四步(邮件交付授权码)、LIC- 在线 与 LICOFF- 离线 对比、 授权服务器 licence.rlwj.cn 通信范围说明、授权类型与价格、10 条授权 FAQ - 补 style.css 缺失的定价/授权页共享基础类(wrap/section/sec-title/price-card/ plan-tag/deal-note 等,暗色主题版)—— 修复 /pricing 页此前内容贴左、 价格卡无卡片样式的线上缺陷(仅新增规则,未改动既有样式) - tools/homepage-build 支持可选单页,产出 <name>.html 与 <name>/index.html - 导航/页脚接入 /license,子页跨页锚点补 / 前缀、品牌 logo 回首页
This commit is contained in:
1 parent
fcd244637c
commit
e3962a6334
13 files changed
+1242
-30
No files matched your search
@@ -755,6 +755,129 @@ footer a:hover {
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
/* ── 定价 / 授权页共享基础类 ─────────────────────── */
|
||||
/* Opsx 系列三站的 pricing.html / license.html 使用同一套标记(wrap / section /
|
||||
sec-title / price-card / plan-tag / deal-note)。opsxdb、opsxapi 的 site.css
|
||||
原生带这些规则;本站 style.css 缺这一段,导致 /pricing 页内容贴左、价格卡
|
||||
无卡片样式(2026-10-16 补齐,仅新增、不改动既有规则)。 // Logan.Li */
|
||||
.wrap {
|
||||
max-width: 1080px;
|
||||
margin: 0 auto;
|
||||
padding: 0 24px;
|
||||
}
|
||||
.section {
|
||||
padding: 74px 0;
|
||||
}
|
||||
.section.alt {
|
||||
background: var(--bg-soft);
|
||||
border-top: 1px solid var(--border);
|
||||
border-bottom: 1px solid var(--border);
|
||||
}
|
||||
.sec-title {
|
||||
font-size: 28px;
|
||||
font-weight: 800;
|
||||
text-align: center;
|
||||
margin: 0 0 8px;
|
||||
}
|
||||
.sec-sub {
|
||||
text-align: center;
|
||||
color: var(--text-2);
|
||||
font-size: 14.5px;
|
||||
margin: 0 0 34px;
|
||||
}
|
||||
/* 价格卡(暗色主题版:--panel + --border,与本站整体一致) */
|
||||
.pricing.three {
|
||||
max-width: 1080px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.price-card {
|
||||
position: relative;
|
||||
background: var(--panel);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 16px;
|
||||
padding: 28px 26px 24px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.price-card.featured {
|
||||
border-color: rgba(85, 174, 242, 0.55);
|
||||
background: linear-gradient(180deg, rgba(85, 174, 242, 0.08), var(--panel) 45%);
|
||||
}
|
||||
.price-card .plan {
|
||||
background: none;
|
||||
border: 0;
|
||||
border-radius: 0;
|
||||
padding: 0;
|
||||
font-size: 15px;
|
||||
font-weight: 700;
|
||||
color: var(--text-2);
|
||||
}
|
||||
.price-card .plan-sub {
|
||||
font-size: 12.5px;
|
||||
color: var(--text-3);
|
||||
margin: 2px 0 16px;
|
||||
}
|
||||
.price-card .price,
|
||||
.price-card .price b {
|
||||
font-size: 32px;
|
||||
font-weight: 800;
|
||||
}
|
||||
.price-card .price {
|
||||
margin: 8px 0 0;
|
||||
}
|
||||
.price-card .price span {
|
||||
font-size: 13.5px;
|
||||
font-weight: 400;
|
||||
color: var(--text-3);
|
||||
margin-left: 4px;
|
||||
}
|
||||
.price-card ul {
|
||||
list-style: none;
|
||||
display: grid;
|
||||
gap: 8px;
|
||||
margin: 6px 0 22px;
|
||||
padding: 0;
|
||||
flex: 1;
|
||||
}
|
||||
.price-card ul li {
|
||||
font-size: 13.6px;
|
||||
color: var(--text-2);
|
||||
display: flex;
|
||||
gap: 9px;
|
||||
}
|
||||
.price-card ul li::before {
|
||||
content: '✓';
|
||||
color: var(--green);
|
||||
font-weight: 700;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.price-card .btn {
|
||||
width: 100%;
|
||||
}
|
||||
.plan-tag {
|
||||
position: absolute;
|
||||
top: -12px;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
background: var(--accent);
|
||||
color: #06121c;
|
||||
font-size: 11.5px;
|
||||
font-weight: 700;
|
||||
padding: 3px 12px;
|
||||
border-radius: 999px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.deal-note {
|
||||
font-size: 13px;
|
||||
line-height: 1.9;
|
||||
color: var(--text-3);
|
||||
margin-top: 18px;
|
||||
}
|
||||
.footnote {
|
||||
font-size: 13px;
|
||||
color: var(--text-3);
|
||||
}
|
||||
|
||||
/* ── Responsive ──────────────────────────────────── */
|
||||
@media (max-width: 960px) {
|
||||
.hero-grid {
|
||||
|
||||
+1
-1
@@ -87,7 +87,7 @@
|
||||
<h1>使用指南</h1>
|
||||
<p>OpsXShell 主打简单好用:常用远程操作走短路径,高级选项默认收起。不做堡垒审计。</p>
|
||||
<h2 id="sec-1">安装(macOS)</h2>
|
||||
<p>从 <code>release/v*/macos-arm64/</code> 打开 <code>.dmg</code>,把 OpsXShell 拖到「应用程序」。Finder 里应是 Tauri 那套大图标布局(应用在左、Applications 在右)。<strong>已经 staple 的正式包</strong>一般可直接打开。</p>
|
||||
<p>从官网下载,或打开本机构建产物 <code>src-tauri/target/<triple>/release/bundle/dmg/</code> 里的 <code>.dmg</code>,把 OpsXShell 拖到「应用程序」。Finder 里应是 Tauri 那套大图标布局(应用在左、Applications 在右)。<strong>已经 staple 的正式包</strong>一般可直接打开。</p>
|
||||
<p>自己改代码后重新打包:先 <code>./scripts/build.sh mac-arm64 --quick</code>(本机有签名配置就会签 Developer ID),再 <code>./scripts/macos-notarize.sh</code>(会要 App 专用密码)。新打的 DMG 在公证完成前仍会被 Gatekeeper 拦截。你现在要做的步骤见 <a href="./release.md#macos-next-steps">发布指南</a>。</p>
|
||||
<h2 id="sec-2">快速连接</h2>
|
||||
<p>按 <code>Cmd/Ctrl + K</code>,输入 <code>user@host</code> 或 <code>user@host:port</code> 后连接。默认端口为 <code>22</code>。快速连接适合临时使用,不会自动保存会话。</p>
|
||||
|
||||
Vendored
+1
-1
@@ -1 +1 @@
|
||||
[{"Slug":"overview","Title":"概述","Group":"开始使用","Text":"OpsXShell 是什么 OpsXShell 是基于 Tauri 2 与 Rust 的 原生桌面 运维终端:SSH 多标签分屏、SFTP、端口转发、RDP/VNC、串口与可选终端 AI。 操作入口 :桌面客户端( ) 本站 :产品官网与文档( → Gin) 不做 :堡垒机、审计审批、浏览器里的终端工作台 下载与校验和见 。"},{"Slug":"quickstart","Title":"快速上手","Group":"开始使用","Text":"使用指南 OpsXShell 主打简单好用:常用远程操作走短路径,高级选项默认收起。不做堡垒审计。 安装(macOS) 从 打开 ,把 OpsXShell 拖到「应用程序」。Finder 里应是 Tauri 那套大图标布局(应用在左、Applications 在右)。 已经 staple 的正式包 一般可直接打开。 自己改代码后重新打包:先 (本机有签名配置就会签 Developer ID),再 (会要 App 专用密码)。新打的 DMG 在公证完成前仍会被 Gatekeeper 拦截。你现在要做的步骤见 。 快速连接 按 ,输入 或 后连接。默认端口为 。快速连接适合临时使用,不会自动保存会话。 需要长期使用时新建保存会话,选择密码或私钥认证,并按需设置分组、标签和启动命令。未填写密码或私钥的导入会话会尝试本机 SSH Agent 和常见默认密钥。 侧边栏分组内可上下拖拽主机调整顺序。拖到另一分组的标题上会放到该组末尾;分组展开后也可以直接拖到组内某一主机的上方或下方插入。在分组标题右键可选择「按名称排序」一次性重排。顺序会保存,新建的主机排在组末尾;搜索过滤和批量多选模式下暂不可拖拽。 安装版支持系统链接,例如: 点击后会唤起 OpsXShell,并打开已填好目标的快速连接窗口。为了避免网页静默连接陌生服务器,仍需用户确认连接;链接中禁止携带密码、远程路径、查询参数或片段。 代理与跳板 会话的高级选项支持: HTTP CONNECT 代理 SOCKS5 代理 可选代理用户名和密码 选择一个已保存会话作为跳板机 代理和跳板互斥,选择其中一个会清除另一个,避免连接路径含糊。界面保持单跳操作;Rust 连接层可处理已有配置中的最多 8 跳链。 端口转发与 SOCKS5 SSH 连接后,可在状态栏点击「转发」打开右侧抽屉,管理本地转发、远程转发和动态 SOCKS5。动态转发使本机成为 SOCKS5 代理,流量经当前 SSH 服务器出口 IP 访问外网。默认地址: 动态转发每台 SSH 主机仅一条,端口固定 ;在抽屉中直接启停。 状态栏「转发」右键可复制 。需要远程 DNS 解析的命令行工具应使用 ,例如 。 本地转发:本机监听默认只需填端口(绑定 / localhost,等同 );需要局域网访问时再展开高级项改为内网 IP 或 。目标主机相对当前 SSH 服务器(常用 或内网 IP),不是会话页主机名,且不能填 。 本地 / 远程规则在抽屉列表中添加、启停和删除;“停止”会关闭 Rust Listener,不是只改界面图标。 远程转发( ):远端监听填 (仅 SSH 服务器本机可访问)或 (远端内网其它主机也可访问,需 sshd 或 )。目标为本机或内网 (不能填 )。服务器还需 或 ;监听端口不能已被占用; 通常需要 root。可用 对照。 “复制规则”会创建独立的新规则,便于只修改端口或目标;不会复制原规则的运行状态。 运行中的规则选��©“编辑”时,会先提示停止真实监听,再允许保存新配置。 保存的是规则,不是“运行中”状态;应用重启后需要用户再次启动。同一窗口内只要没点「停止」,SSH 断线、保活失败、空闲挂起或重连都会继续监听(本地 / SOCKS 端口不拆,远程转发会自动重听)。点停止、关闭标签、连接面板手动断开,或退出应用,才会关闭真实 Listener。关闭标签后再开同一会话不会自动拉起转发。 SOCKS5 默认仅监听本机,当前不提供局域网开放和客户端密码认证。 连接保活与重连 默认对齐常见 SSH / RDP 客户端,分三层,不要把「窗口还开着」理解成无视服务器超时: 链路心跳 :空闲时发 SSH 协议 keep alive(不写入 Shell)。挡的是 NAT/防火墙丢掉空闲 TCP,挡不住 Bash 或 Windows 空闲 GPO。 意外断线 :终端、SFTP 或远程桌面标签还开着时,有限次自动重连。SSH 重连后是新 Shell(长任务请在服务器上用 / );SFTP 会回到断线前的远程目录;RDP/VNC 重连是新会话,不会发假鼠标。 会话策略 :远端 / 只关掉那一格 Shell,点「重新打开 Shell」即可。关标签、空闲挂起不会硬续连接。 设置里的「保持心跳」和「自动重连」对应前两层;第三层尊重服务器,客户端不Line truncated
|
||||
[{"Slug":"overview","Title":"概述","Group":"开始使用","Text":"OpsXShell 是什么 OpsXShell 是基于 Tauri 2 与 Rust 的 原生桌面 运维终端:SSH 多标签分屏、SFTP、端口转发、RDP/VNC、串口与可选终端 AI。 操作入口 :桌面客户端( ) 本站 :产品官网与文档( → Gin) 不做 :堡垒机、审计审批、浏览器里的终端工作台 下载与校验和见 。"},{"Slug":"quickstart","Title":"快速上手","Group":"开始使用","Text":"使用指南 OpsXShell 主打简单好用:常用远程操作走短路径,高级选项默认收起。不做堡垒审计。 安装(macOS) 从官网下载,或打开本机构建产物 里的 ,把 OpsXShell 拖到「应用程序」。Finder 里应是 Tauri 那套大图标布局(应用在左、Applications 在右)。 已经 staple 的正式包 一般可直接打开。 自己改代码后重新打包:先 (本机有签名配置就会签 Developer ID),再 (会要 App 专用密码)。新打的 DMG 在公证完成前仍会被 Gatekeeper 拦截。你现在要做的步骤见 。 快速连接 按 ,输入 或 后连接。默认端口为 。快速连接适合临时使用,不会自动保存会话。 需要长期使用时新建保存会话,选择密码或私钥认证,并按需设置分组、标签和启动命令。未填写密码或私钥的导入会话会尝试本机 SSH Agent 和常见默认密钥。 侧边栏分组内可上下拖拽主机调整顺序。拖到另一分组的标题上会放到该组末尾;分组展开后也可以直接拖到组内某一主机的上方或下方插入。在分组标题右键可选择「按名称排序」一次性重排。顺序会保存,新建的主机排在组末尾;搜索过滤和批量多选模式下暂不可拖拽。 安装版支持系统链接,例如: 点击后会唤起 OpsXShell,并打开已填好目标的快速连接窗口。为了避免网页静默连接陌生服务器,仍需用户确认连接;链接中禁止携带密码、远程路径、查询参数或片段。 代理与跳板 会话的高级选项支持: HTTP CONNECT 代理 SOCKS5 代理 可选代理用户名和密码 选择一个已保存会话作为跳板机 代理和跳板互斥,选择其中一个会清除另一个,避免连接路径含糊。界面保持单跳操作;Rust 连接层可处理已有配置中的最多 8 跳链。 端口转发与 SOCKS5 SSH 连接后,可在状态栏点击「转发」打开右侧抽屉,管理本地转发、远程转发和动态 SOCKS5。动态转发使本机成为 SOCKS5 代理,流量经当前 SSH 服务器出口 IP 访问外网。默认地址: 动态转发每台 SSH 主机仅一条,端口固定 ;在抽屉中直接启停。 状态栏「转发」右键可复制 。需要远程 DNS 解析的命令行工具应使用 ,例如 。 本地转发:本机监听默认只需填端口(绑定 / localhost,等同 );需要局域网访问时再展开高级项改为内网 IP 或 。目标主机相对当前 SSH 服务器(常用 或内网 IP),不是会话页主机名,且不能填 。 本地 / 远程规则在抽屉列表中添加、启停和删除;“停止”会关闭 Rust Listener,不是只改界面图标。 远程转发( ):远端监听填 (仅 SSH 服务器本机可访问)或 (远端内网其它主机也可访问,需 sshd 或 )。目标为本机或内网 (不能填 )。服务器还需 或 ;监听端口不能已被占用; 通常需要 root。可用 对照。 “复制规则”会创建独立的新规则,便于只修改端口或目标;不会复制原规��™的运行状态。 运行中的规则选择“编辑”时,会先提示停止真实监听,再允许保存新配置。 保存的是规则,不是“运行中”状态;应用重启后需要用户再次启动。同一窗口内只要没点「停止」,SSH 断线、保活失败、空闲挂起或重连都会继续监听(本地 / SOCKS 端口不拆,远程转发会自动重听)。点停止、关闭标签、连接面板手动断开,或退出应用,才会关闭真实 Listener。关闭标签后再开同一会话不会自动拉起转发。 SOCKS5 默认仅监听本机,当前不提供局域网开放和客户端密码认证。 连接保活与重连 默认对齐常见 SSH / RDP 客户端,分三层,不要把「窗口还开着」理解成无视服务器超时: 链路心跳 :空闲时发 SSH 协议 keep alive(不写入 Shell)。挡的是 NAT/防火墙丢掉空闲 TCP,挡不住 Bash 或 Windows 空闲 GPO。 意外断线 :终端、SFTP 或远程桌面标签还开着时,有限次自动重连。SSH 重连后是新 Shell(长任务请在服务器上用 / );SFTP 会回到断线前的远程目录;RDP/VNC 重连是新会话,不会发假鼠标。 会话策略 :远端 / 只关掉那一格 Shell,点「重新打开 Shell」即可。关标签、空闲挂起不会硬续连接。 设置里的「保持心跳」和「自动重连」对应前两层Line truncated
|
||||
Vendored
+1
@@ -22,6 +22,7 @@
|
||||
<a href="#features">功能</a>
|
||||
<a href="#ai">终端 AI</a>
|
||||
<a href="/pricing">价格</a>
|
||||
<a href="/license">授权</a>
|
||||
<a href="#security">安全</a>
|
||||
<a href="#download">下载</a>
|
||||
<a href="/docs">文档</a>
|
||||
|
||||
Vendored
+204
@@ -0,0 +1,204 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>授权与激活 · OpsXShell</title>
|
||||
<meta name="description" content="OpsXShell 授权与激活说明:付款后邮件交付授权码(LIC-),在「设置 → 授权」粘贴即完成激活;生产内网可用 LICOFF- 离线许可证,一机一码、支持自助解绑换机。">
|
||||
<link rel="icon" type="image/svg+xml" href="/site/assets/icon.svg" />
|
||||
<link rel="stylesheet" href="/site/assets/style.css">
|
||||
<style>
|
||||
/* 授权页专用样式(lic- 前缀,避免与站点既有类冲突) // Logan.Li */
|
||||
.lic-hero{padding:72px 0 30px;text-align:center;}
|
||||
.lic-hero h1{font-size:clamp(28px,4.5vw,42px);margin:12px 0 10px;}
|
||||
.lic-hero .lead{max-width:780px;margin:0 auto;font-size:15px;line-height:1.9;opacity:.75;}
|
||||
.lic-chip{display:inline-flex;align-items:center;gap:8px;padding:7px 16px;border-radius:999px;border:1px solid var(--accent,var(--blue,#2563eb));color:var(--accent,var(--blue,#2563eb));font-size:13px;font-weight:600;}
|
||||
.lic-steps{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px 16px;margin:22px 0 0;}
|
||||
@media (max-width:720px){.lic-steps{grid-template-columns:1fr;}}
|
||||
.lic-step{position:relative;border:1px solid var(--border);border-radius:calc(var(--radius,14px) + 2px);padding:22px 18px 18px;}
|
||||
.lic-step .n{position:absolute;top:-11px;left:18px;background:var(--accent,var(--blue,#2563eb));color:#fff;font-size:11.5px;font-weight:700;padding:2px 10px;border-radius:999px;letter-spacing:.03em;}
|
||||
.lic-step h3{margin:4px 0 8px;font-size:15.5px;}
|
||||
.lic-step p{margin:0;font-size:13.5px;line-height:1.9;opacity:.78;}
|
||||
.lic-cmp-wrap{overflow-x:auto;margin-top:20px;}
|
||||
.lic-cmp{width:100%;min-width:640px;border-collapse:collapse;font-size:14px;}
|
||||
.lic-cmp th,.lic-cmp td{border-bottom:1px solid var(--border);padding:12px;text-align:left;vertical-align:top;}
|
||||
.lic-cmp thead th{font-size:13.5px;letter-spacing:.02em;}
|
||||
.lic-cmp tbody th{width:132px;font-weight:600;color:var(--text-3,#98a2b3);}
|
||||
.lic-cmp code{font-family:var(--mono,monospace);font-size:12.5px;background:rgba(127,127,127,.14);padding:1px 5px;border-radius:4px;}
|
||||
.lic-faq{max-width:880px;margin:0 auto;}
|
||||
.lic-faq details{border-bottom:1px solid var(--border);padding:15px 4px;}
|
||||
.lic-faq summary{cursor:pointer;font-weight:600;font-size:15px;list-style:none;display:flex;justify-content:space-between;gap:12px;align-items:center;}
|
||||
.lic-faq summary::after{content:"+";opacity:.5;font-size:18px;line-height:1;}
|
||||
.lic-faq details[open] summary::after{content:"–";}
|
||||
.lic-faq details p{margin:10px 0 2px;font-size:14px;line-height:1.9;opacity:.78;}
|
||||
.lic-note{max-width:880px;margin:16px auto 0;font-size:13px;line-height:1.9;opacity:.68;}
|
||||
.lic-cta{text-align:center;max-width:660px;margin:0 auto;}
|
||||
.lic-cta .btns{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin-top:20px;}
|
||||
.lic-scope{max-width:880px;margin:24px auto 0;font-size:13.5px;line-height:1.95;opacity:.78;}
|
||||
.lic-scope li{margin:6px 0;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header class="nav">
|
||||
<div class="container nav-inner">
|
||||
<a class="brand" href="/">
|
||||
<img src="/site/assets/icon.svg" alt="OpsXShell 图标" />
|
||||
OpsXShell<span class="tm">v2.1.1</span>
|
||||
</a>
|
||||
<button class="nav-toggle" aria-label="打开菜单">☰</button>
|
||||
<nav class="nav-links">
|
||||
<a href="/#features">功能</a>
|
||||
<a href="/#ai">终端 AI</a>
|
||||
<a href="/pricing">价格</a>
|
||||
<a href="/license">授权</a>
|
||||
<a href="/#security">安全</a>
|
||||
<a href="/#download">下载</a>
|
||||
<a href="/docs">文档</a>
|
||||
<a href="/#faq">FAQ</a>
|
||||
<a class="nav-cta" href="/#download">免费下载</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<section class="lic-hero">
|
||||
<span class="lic-chip">30 天免费试用 · 首次启动自动开始 · 无需注册</span>
|
||||
<h1>授权与激活</h1>
|
||||
<p class="lead">一次说清四件事:怎么买、授权码怎么交付、程序里怎么激活、换机与断网怎么办。授权绑定设备而非账号,全流程不需要注册。</p>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">交付与激活:四步</h2>
|
||||
<p class="sec-sub">从下单到激活通常当天完成,最短几分钟。</p>
|
||||
<div class="lic-steps">
|
||||
<div class="lic-step">
|
||||
<span class="n">STEP 1</span>
|
||||
<h3>下单确认</h3>
|
||||
<p>邮件说明产品、授权类型(包年 / 永久)与设备数量。支持对公转账与开具发票,工作日当天回复。</p>
|
||||
</div>
|
||||
<div class="lic-step">
|
||||
<span class="n">STEP 2</span>
|
||||
<h3>邮件交付授权码</h3>
|
||||
<p>付款确认后即刻签发,授权码以邮件送达你的邮箱:联网用 <code>LIC-</code> 前缀的在线授权码,隔离内网用 <code>LICOFF-</code> 前缀的离线许可证。</p>
|
||||
</div>
|
||||
<div class="lic-step">
|
||||
<span class="n">STEP 3</span>
|
||||
<h3>应用内激活</h3>
|
||||
<p>打开「设置 → 授权」,粘贴授权码点击激活。程序连接授权服务器 <code>licence.rlwj.cn</code> 登记本机设备并回写一次性激活令牌,此后每 7 天自动校验一次。</p>
|
||||
</div>
|
||||
<div class="lic-step">
|
||||
<span class="n">STEP 4</span>
|
||||
<h3>换机与续期</h3>
|
||||
<p>在本机自助解绑即可把席位迁到新机器,每年免费换绑 2 次;到期前 30 天邮件提醒,续期后签发新授权码替换即可。</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section alt">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">两种激活方式</h2>
|
||||
<p class="sec-sub">能联网就用在线授权码,完全不出网就用离线许可证——功能与有效期一致。</p>
|
||||
<div class="lic-cmp-wrap">
|
||||
<table class="lic-cmp">
|
||||
<thead>
|
||||
<tr><th>对比项</th><th>在线授权码 <code>LIC-</code></th><th>离线许可证 <code>LICOFF-</code></th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><th>是否联网</th><td>激活时联网一次,之后每 7 天校验一次</td><td>全程无需联网,本地验签</td></tr>
|
||||
<tr><th>设备绑定</th><td>绑定设备 ID,一机一码</td><td>绑定设备 ID,一机一码</td></tr>
|
||||
<tr><th>断网可用</th><td>激活后可连续离线使用 30 天</td><td>始终有效,与网络无关</td></tr>
|
||||
<tr><th>有效期</th><td>包年 365 天;永久授权长期有效</td><td>单张最长 365 天,可续签</td></tr>
|
||||
<tr><th>换绑</th><td>应用内自助解绑,每年免费换绑 2 次</td><td>邮件换取新证并解绑旧设备</td></tr>
|
||||
<tr><th>适合场景</th><td>办公网、云主机、个人电脑</td><td>生产内网、专有云、隔离环境</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="lic-scope">
|
||||
<p><b>授权服务器会收到什么?</b>客户端只与 <code>licence.rlwj.cn</code>(443)通信,用于设备登记与周期校验,只发送授权码与设备标识(设备 ID、设备名称)——不发送主机地址、账号、命令与会话内容等任何业务数据。服务端返回 Ed25519 签名,客户端本地验签,验签失败按未授权处理。</p>
|
||||
<ul>
|
||||
<li>内网只放行白名单出网:把 <code>licence.rlwj.cn</code> 加入白名单,或直接使用离线许可证。</li>
|
||||
<li>授权服务器不可达:按宽限期继续可用,业务不会当场中断;恢复网络后自动补校验。</li>
|
||||
<li>不想让客户端出网:一律选离线许可证,客户端永不发起网络请求。</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">授权类型与价格</h2>
|
||||
<p class="sec-sub">免费层永久免费;专业功能按包年或一次性买断授权。</p>
|
||||
<div class="lic-cmp-wrap">
|
||||
<table class="lic-cmp">
|
||||
<thead>
|
||||
<tr><th>授权</th><th>价格</th><th>设备数</th><th>包含</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><th>免费层</th><td>¥0</td><td>不涉及授权</td><td>SSH 终端、SFTP、本地终端、会话管理与配置导入</td></tr>
|
||||
<tr><th>专业版 · 包年</th><td>¥99 / 年</td><td>2 台</td><td>端口转发、终端 AI、批量执行、RDP / VNC、串口、应用内升级</td></tr>
|
||||
<tr><th>专业版 · 永久</th><td>¥199 一次性</td><td>5 台</td><td>包年全部功能,一次买断、无续费,支持离线许可证</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p class="lic-note">完整功能对比、让利与组合报价见 <a href="/pricing">定价页</a>。表中为标价,实际成交可按场景议价;教育与非营利用途可申请优惠。</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section alt">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">授权常见问题</h2>
|
||||
<div class="lic-faq">
|
||||
<details><summary>授权码多久能收到?</summary><p>付款确认后即刻签发并邮件发出,工作日通常当天完成(含开票需求)。邮件里就是完整授权码,无需注册账号或登录任何后台。</p></details>
|
||||
<details><summary>授权绑定设备还是账号?</summary><p>绑定设备。每台机器有唯一设备 ID,一个授权码按授权的设备数占座,与账号无关——换人使用不影响,重装系统前建议先解绑。</p></details>
|
||||
<details><summary>换电脑 / 重装系统后设备 ID 变了怎么办?</summary><p>旧机还在:在「设置 → 授权」点解绑,腾出席位后在新机激活。旧机已不在手:邮件与我们说明(附授权码后四位与新设备 ID),由我们在授权后台释放旧设备。每年免费换绑 2 次。</p></details>
|
||||
<details><summary>断网了授权会失效吗?</summary><p>不会。离线许可证本地自验,永不联网也有效;在线授权码激活后可连续离线使用 30 天,超时后联网校验一次即可继续。授权服务器不可达时按宽限期放行,不会中断正在做的工作。</p></details>
|
||||
<details><summary>生产内网完全不出网,怎么激活?</summary><p>改用离线许可证(<code>LICOFF-</code>):在应用内导出本机机器码,邮件发我们换取离线证,本地导入即完成激活,全程不需要客户端联网。</p></details>
|
||||
<details><summary>续期怎么操作?</summary><p>到期前 30 天我们会邮件提醒。付款后签发新的授权码,在「设置 → 授权」里替换旧码即可,同一台设备无需先解绑;永久授权无需续期。</p></details>
|
||||
<details><summary>试用期结束后我的配置和数据还在吗?</summary><p>都在。授权只控制专业功能是否可用,本机会话、配置、日志等数据不做任何改动;试用结束后免费层继续可用,购买授权后专业功能立即恢复。</p></details>
|
||||
<details><summary>激活失败怎么排查?</summary><p>先在「设置 → 授权」看当前状态与到期时间。若提示无效或不匹配,请把授权码后四位、设备 ID 与报错截图一并发邮件,我们核对授权服务器上的记录后处理(常见原因是设备数已占满或授权码输漏字符)。</p></details>
|
||||
<details><summary>能开发票、走对公转账吗?</summary><p>可以。个人与企业均可开具发票,支持对公转账、多产品捆绑与批量授权;邮件说明抬头与税号即可。</p></details>
|
||||
<details><summary>三个产品(OpsXShell / OpsxDB / OpsxAPI)要分别买吗?</summary><p>三个产品独立授权、独立计价;它们共用同一套授权体系(同一个设备 ID 规则与同一个授权服务器)。多产品组合、团队或教育用途可邮件说明需求,给捆绑价。</p></details>
|
||||
</div>
|
||||
<p class="lic-note">本页更新于 2026-10-16,授权口径与授权服务器 <code>licence.rlwj.cn</code> 实际配置一致。</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<div class="wrap lic-cta">
|
||||
<h2 class="sec-title">准备好购买授权</h2>
|
||||
<p class="sec-sub">邮件说明产品、授权类型与设备数,当天回复并开票。</p>
|
||||
<div class="btns">
|
||||
<a class="btn btn-primary" href="mailto:hello@opsxapi.dev?subject=OpsXShell%20%E6%8E%88%E6%9D%83%E4%B8%8E%E6%BF%80%E6%B4%BB%E5%92%A8%E8%AF%A2">邮件咨询购买</a>
|
||||
<a class="btn btn-ghost" href="/#download">还没装?立即下载</a>
|
||||
</div>
|
||||
<p class="lic-note">付款后当场发放授权码(LIC-),粘贴到「设置 → 授权」即完成激活——整个流程无需注册账号。</p>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<div class="container footer-inner">
|
||||
<div>
|
||||
<div class="footer-brand">
|
||||
<img src="/site/assets/icon.svg" alt="" />
|
||||
OpsXShell
|
||||
</div>
|
||||
<p style="margin-top:8px">轻量运维终端 · 便捷、人性化、操作简单实用</p>
|
||||
</div>
|
||||
<nav>
|
||||
<a href="/#features">功能</a>
|
||||
<a href="/#ai">终端 AI</a>
|
||||
<a href="/pricing">价格</a>
|
||||
<a href="/license">授权与激活</a>
|
||||
<a href="/docs">文档</a>
|
||||
<a href="/#faq">FAQ</a>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="container" style="margin-top:22px">
|
||||
<p>© 2026 OpsXShell · 不做审计、审批与堡垒机——宁可少而顺。</p>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
+204
@@ -0,0 +1,204 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>授权与激活 · OpsXShell</title>
|
||||
<meta name="description" content="OpsXShell 授权与激活说明:付款后邮件交付授权码(LIC-),在「设置 → 授权」粘贴即完成激活;生产内网可用 LICOFF- 离线许可证,一机一码、支持自助解绑换机。">
|
||||
<link rel="icon" type="image/svg+xml" href="/site/assets/icon.svg" />
|
||||
<link rel="stylesheet" href="/site/assets/style.css">
|
||||
<style>
|
||||
/* 授权页专用样式(lic- 前缀,避免与站点既有类冲突) // Logan.Li */
|
||||
.lic-hero{padding:72px 0 30px;text-align:center;}
|
||||
.lic-hero h1{font-size:clamp(28px,4.5vw,42px);margin:12px 0 10px;}
|
||||
.lic-hero .lead{max-width:780px;margin:0 auto;font-size:15px;line-height:1.9;opacity:.75;}
|
||||
.lic-chip{display:inline-flex;align-items:center;gap:8px;padding:7px 16px;border-radius:999px;border:1px solid var(--accent,var(--blue,#2563eb));color:var(--accent,var(--blue,#2563eb));font-size:13px;font-weight:600;}
|
||||
.lic-steps{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px 16px;margin:22px 0 0;}
|
||||
@media (max-width:720px){.lic-steps{grid-template-columns:1fr;}}
|
||||
.lic-step{position:relative;border:1px solid var(--border);border-radius:calc(var(--radius,14px) + 2px);padding:22px 18px 18px;}
|
||||
.lic-step .n{position:absolute;top:-11px;left:18px;background:var(--accent,var(--blue,#2563eb));color:#fff;font-size:11.5px;font-weight:700;padding:2px 10px;border-radius:999px;letter-spacing:.03em;}
|
||||
.lic-step h3{margin:4px 0 8px;font-size:15.5px;}
|
||||
.lic-step p{margin:0;font-size:13.5px;line-height:1.9;opacity:.78;}
|
||||
.lic-cmp-wrap{overflow-x:auto;margin-top:20px;}
|
||||
.lic-cmp{width:100%;min-width:640px;border-collapse:collapse;font-size:14px;}
|
||||
.lic-cmp th,.lic-cmp td{border-bottom:1px solid var(--border);padding:12px;text-align:left;vertical-align:top;}
|
||||
.lic-cmp thead th{font-size:13.5px;letter-spacing:.02em;}
|
||||
.lic-cmp tbody th{width:132px;font-weight:600;color:var(--text-3,#98a2b3);}
|
||||
.lic-cmp code{font-family:var(--mono,monospace);font-size:12.5px;background:rgba(127,127,127,.14);padding:1px 5px;border-radius:4px;}
|
||||
.lic-faq{max-width:880px;margin:0 auto;}
|
||||
.lic-faq details{border-bottom:1px solid var(--border);padding:15px 4px;}
|
||||
.lic-faq summary{cursor:pointer;font-weight:600;font-size:15px;list-style:none;display:flex;justify-content:space-between;gap:12px;align-items:center;}
|
||||
.lic-faq summary::after{content:"+";opacity:.5;font-size:18px;line-height:1;}
|
||||
.lic-faq details[open] summary::after{content:"–";}
|
||||
.lic-faq details p{margin:10px 0 2px;font-size:14px;line-height:1.9;opacity:.78;}
|
||||
.lic-note{max-width:880px;margin:16px auto 0;font-size:13px;line-height:1.9;opacity:.68;}
|
||||
.lic-cta{text-align:center;max-width:660px;margin:0 auto;}
|
||||
.lic-cta .btns{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin-top:20px;}
|
||||
.lic-scope{max-width:880px;margin:24px auto 0;font-size:13.5px;line-height:1.95;opacity:.78;}
|
||||
.lic-scope li{margin:6px 0;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header class="nav">
|
||||
<div class="container nav-inner">
|
||||
<a class="brand" href="/">
|
||||
<img src="/site/assets/icon.svg" alt="OpsXShell 图标" />
|
||||
OpsXShell<span class="tm">v2.1.1</span>
|
||||
</a>
|
||||
<button class="nav-toggle" aria-label="打开菜单">☰</button>
|
||||
<nav class="nav-links">
|
||||
<a href="/#features">功能</a>
|
||||
<a href="/#ai">终端 AI</a>
|
||||
<a href="/pricing">价格</a>
|
||||
<a href="/license">授权</a>
|
||||
<a href="/#security">安全</a>
|
||||
<a href="/#download">下载</a>
|
||||
<a href="/docs">文档</a>
|
||||
<a href="/#faq">FAQ</a>
|
||||
<a class="nav-cta" href="/#download">免费下载</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<section class="lic-hero">
|
||||
<span class="lic-chip">30 天免费试用 · 首次启动自动开始 · 无需注册</span>
|
||||
<h1>授权与激活</h1>
|
||||
<p class="lead">一次说清四件事:怎么买、授权码怎么交付、程序里怎么激活、换机与断网怎么办。授权绑定设备而非账号,全流程不需要注册。</p>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">交付与激活:四步</h2>
|
||||
<p class="sec-sub">从下单到激活通常当天完成,最短几分钟。</p>
|
||||
<div class="lic-steps">
|
||||
<div class="lic-step">
|
||||
<span class="n">STEP 1</span>
|
||||
<h3>下单确认</h3>
|
||||
<p>邮件说明产品、授权类型(包年 / 永久)与设备数量。支持对公转账与开具发票,工作日当天回复。</p>
|
||||
</div>
|
||||
<div class="lic-step">
|
||||
<span class="n">STEP 2</span>
|
||||
<h3>邮件交付授权码</h3>
|
||||
<p>付款确认后即刻签发,授权码以邮件送达你的邮箱:联网用 <code>LIC-</code> 前缀的在线授权码,隔离内网用 <code>LICOFF-</code> 前缀的离线许可证。</p>
|
||||
</div>
|
||||
<div class="lic-step">
|
||||
<span class="n">STEP 3</span>
|
||||
<h3>应用内激活</h3>
|
||||
<p>打开「设置 → 授权」,粘贴授权码点击激活。程序连接授权服务器 <code>licence.rlwj.cn</code> 登记本机设备并回写一次性激活令牌,此后每 7 天自动校验一次。</p>
|
||||
</div>
|
||||
<div class="lic-step">
|
||||
<span class="n">STEP 4</span>
|
||||
<h3>换机与续期</h3>
|
||||
<p>在本机自助解绑即可把席位迁到新机器,每年免费换绑 2 次;到期前 30 天邮件提醒,续期后签发新授权码替换即可。</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section alt">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">两种激活方式</h2>
|
||||
<p class="sec-sub">能联网就用在线授权码,完全不出网就用离线许可证——功能与有效期一致。</p>
|
||||
<div class="lic-cmp-wrap">
|
||||
<table class="lic-cmp">
|
||||
<thead>
|
||||
<tr><th>对比项</th><th>在线授权码 <code>LIC-</code></th><th>离线许可证 <code>LICOFF-</code></th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><th>是否联网</th><td>激活时联网一次,之后每 7 天校验一次</td><td>全程无需联网,本地验签</td></tr>
|
||||
<tr><th>设备绑定</th><td>绑定设备 ID,一机一码</td><td>绑定设备 ID,一机一码</td></tr>
|
||||
<tr><th>断网可用</th><td>激活后可连续离线使用 30 天</td><td>始终有效,与网络无关</td></tr>
|
||||
<tr><th>有效期</th><td>包年 365 天;永久授权长期有效</td><td>单张最长 365 天,可续签</td></tr>
|
||||
<tr><th>换绑</th><td>应用内自助解绑,每年免费换绑 2 次</td><td>邮件换取新证并解绑旧设备</td></tr>
|
||||
<tr><th>适合场景</th><td>办公网、云主机、个人电脑</td><td>生产内网、专有云、隔离环境</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="lic-scope">
|
||||
<p><b>授权服务器会收到什么?</b>客户端只与 <code>licence.rlwj.cn</code>(443)通信,用于设备登记与周期校验,只发送授权码与设备标识(设备 ID、设备名称)——不发送主机地址、账号、命令与会话内容等任何业务数据。服务端返回 Ed25519 签名,客户端本地验签,验签失败按未授权处理。</p>
|
||||
<ul>
|
||||
<li>内网只放行白名单出网:把 <code>licence.rlwj.cn</code> 加入白名单,或直接使用离线许可证。</li>
|
||||
<li>授权服务器不可达:按宽限期继续可用,业务不会当场中断;恢复网络后自动补校验。</li>
|
||||
<li>不想让客户端出网:一律选离线许可证,客户端永不发起网络请求。</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">授权类型与价格</h2>
|
||||
<p class="sec-sub">免费层永久免费;专业功能按包年或一次性买断授权。</p>
|
||||
<div class="lic-cmp-wrap">
|
||||
<table class="lic-cmp">
|
||||
<thead>
|
||||
<tr><th>授权</th><th>价格</th><th>设备数</th><th>包含</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><th>免费层</th><td>¥0</td><td>不涉及授权</td><td>SSH 终端、SFTP、本地终端、会话管理与配置导入</td></tr>
|
||||
<tr><th>专业版 · 包年</th><td>¥99 / 年</td><td>2 台</td><td>端口转发、终端 AI、批量执行、RDP / VNC、串口、应用内升级</td></tr>
|
||||
<tr><th>专业版 · 永久</th><td>¥199 一次性</td><td>5 台</td><td>包年全部功能,一次买断、无续费,支持离线许可证</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p class="lic-note">完整功能对比、让利与组合报价见 <a href="/pricing">定价页</a>。表中为标价,实际成交可按场景议价;教育与非营利用途可申请优惠。</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section alt">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">授权常见问题</h2>
|
||||
<div class="lic-faq">
|
||||
<details><summary>授权码多久能收到?</summary><p>付款确认后即刻签发并邮件发出,工作日通常当天完成(含开票需求)。邮件里就是完整授权码,无需注册账号或登录任何后台。</p></details>
|
||||
<details><summary>授权绑定设备还是账号?</summary><p>绑定设备。每台机器有唯一设备 ID,一个授权码按授权的设备数占座,与账号无关——换人使用不影响,重装系统前建议先解绑。</p></details>
|
||||
<details><summary>换电脑 / 重装系统后设备 ID 变了怎么办?</summary><p>旧机还在:在「设置 → 授权」点解绑,腾出席位后在新机激活。旧机已不在手:邮件与我们说明(附授权码后四位与新设备 ID),由我们在授权后台释放旧设备。每年免费换绑 2 次。</p></details>
|
||||
<details><summary>断网了授权会失效吗?</summary><p>不会。离线许可证本地自验,永不联网也有效;在线授权码激活后可连续离线使用 30 天,超时后联网校验一次即可继续。授权服务器不可达时按宽限期放行,不会中断正在做的工作。</p></details>
|
||||
<details><summary>生产内网完全不出网,怎么激活?</summary><p>改用离线许可证(<code>LICOFF-</code>):在应用内导出本机机器码,邮件发我们换取离线证,本地导入即完成激活,全程不需要客户端联网。</p></details>
|
||||
<details><summary>续期怎么操作?</summary><p>到期前 30 天我们会邮件提醒。付款后签发新的授权码,在「设置 → 授权」里替换旧码即可,同一台设备无需先解绑;永久授权无需续期。</p></details>
|
||||
<details><summary>试用期结束后我的配置和数据还在吗?</summary><p>都在。授权只控制专业功能是否可用,本机会话、配置、日志等数据不做任何改动;试用结束后免费层继续可用,购买授权后专业功能立即恢复。</p></details>
|
||||
<details><summary>激活失败怎么排查?</summary><p>先在「设置 → 授权」看当前状态与到期时间。若提示无效或不匹配,请把授权码后四位、设备 ID 与报错截图一并发邮件,我们核对授权服务器上的记录后处理(常见原因是设备数已占满或授权码输漏字符)。</p></details>
|
||||
<details><summary>能开发票、走对公转账吗?</summary><p>可以。个人与企业均可开具发票,支持对公转账、多产品捆绑与批量授权;邮件说明抬头与税号即可。</p></details>
|
||||
<details><summary>三个产品(OpsXShell / OpsxDB / OpsxAPI)要分别买吗?</summary><p>三个产品独立授权、独立计价;它们共用同一套授权体系(同一个设备 ID 规则与同一个授权服务器)。多产品组合、团队或教育用途可邮件说明需求,给捆绑价。</p></details>
|
||||
</div>
|
||||
<p class="lic-note">本页更新于 2026-10-16,授权口径与授权服务器 <code>licence.rlwj.cn</code> 实际配置一致。</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<div class="wrap lic-cta">
|
||||
<h2 class="sec-title">准备好购买授权</h2>
|
||||
<p class="sec-sub">邮件说明产品、授权类型与设备数,当天回复并开票。</p>
|
||||
<div class="btns">
|
||||
<a class="btn btn-primary" href="mailto:hello@opsxapi.dev?subject=OpsXShell%20%E6%8E%88%E6%9D%83%E4%B8%8E%E6%BF%80%E6%B4%BB%E5%92%A8%E8%AF%A2">邮件咨询购买</a>
|
||||
<a class="btn btn-ghost" href="/#download">还没装?立即下载</a>
|
||||
</div>
|
||||
<p class="lic-note">付款后当场发放授权码(LIC-),粘贴到「设置 → 授权」即完成激活——整个流程无需注册账号。</p>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<div class="container footer-inner">
|
||||
<div>
|
||||
<div class="footer-brand">
|
||||
<img src="/site/assets/icon.svg" alt="" />
|
||||
OpsXShell
|
||||
</div>
|
||||
<p style="margin-top:8px">轻量运维终端 · 便捷、人性化、操作简单实用</p>
|
||||
</div>
|
||||
<nav>
|
||||
<a href="/#features">功能</a>
|
||||
<a href="/#ai">终端 AI</a>
|
||||
<a href="/pricing">价格</a>
|
||||
<a href="/license">授权与激活</a>
|
||||
<a href="/docs">文档</a>
|
||||
<a href="/#faq">FAQ</a>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="container" style="margin-top:22px">
|
||||
<p>© 2026 OpsXShell · 不做审计、审批与堡垒机——宁可少而顺。</p>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
+15
-13
@@ -28,20 +28,21 @@
|
||||
<body>
|
||||
<header class="nav">
|
||||
<div class="container nav-inner">
|
||||
<a class="brand" href="#top">
|
||||
<a class="brand" href="/">
|
||||
<img src="/site/assets/icon.svg" alt="OpsXShell 图标" />
|
||||
OpsXShell<span class="tm">v2.1.1</span>
|
||||
</a>
|
||||
<button class="nav-toggle" aria-label="打开菜单">☰</button>
|
||||
<nav class="nav-links">
|
||||
<a href="#features">功能</a>
|
||||
<a href="#ai">终端 AI</a>
|
||||
<a href="/#features">功能</a>
|
||||
<a href="/#ai">终端 AI</a>
|
||||
<a href="/pricing">价格</a>
|
||||
<a href="#security">安全</a>
|
||||
<a href="#download">下载</a>
|
||||
<a href="/license">授权</a>
|
||||
<a href="/#security">安全</a>
|
||||
<a href="/#download">下载</a>
|
||||
<a href="/docs">文档</a>
|
||||
<a href="#faq">FAQ</a>
|
||||
<a class="nav-cta" href="#download">免费下载</a>
|
||||
<a href="/#faq">FAQ</a>
|
||||
<a class="nav-cta" href="/#download">免费下载</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
@@ -148,13 +149,14 @@
|
||||
<p style="margin-top:8px">轻量运维终端 · 便捷、人性化、操作简单实用</p>
|
||||
</div>
|
||||
<nav>
|
||||
<a href="#features">功能</a>
|
||||
<a href="#ai">终端 AI</a>
|
||||
<a href="#pricing">价格</a>
|
||||
<a href="#security">安全</a>
|
||||
<a href="#download">下载</a>
|
||||
<a href="/#features">功能</a>
|
||||
<a href="/#ai">终端 AI</a>
|
||||
<a href="/pricing">价格</a>
|
||||
<a href="/license">授权与激活</a>
|
||||
<a href="/#security">安全</a>
|
||||
<a href="/#download">下载</a>
|
||||
<a href="/docs">文档</a>
|
||||
<a href="#faq">FAQ</a>
|
||||
<a href="/#faq">FAQ</a>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="container" style="margin-top:22px">
|
||||
|
||||
Vendored
+167
@@ -0,0 +1,167 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>授权与定价 · OpsXShell</title>
|
||||
<meta name="description" content="OpsXShell 定价:免费层含 SSH/SFTP/本地终端;专业版 ¥99/年(2 台设备)或 ¥199 永久(5 台)。支持在线授权与 LICOFF 离线激活。">
|
||||
<link rel="icon" type="image/svg+xml" href="/site/assets/icon.svg" />
|
||||
<link rel="stylesheet" href="/site/assets/style.css">
|
||||
<style>
|
||||
.trial-hero{padding:72px 0 28px;text-align:center;}
|
||||
.trial-hero h1{font-size:clamp(28px,4.5vw,44px);margin:14px 0 10px;}
|
||||
.trial-hero .lead{max-width:720px;margin:0 auto;opacity:.75;line-height:1.8;}
|
||||
.trial-strip{display:inline-flex;gap:8px;align-items:center;padding:7px 16px;border-radius:999px;border:1px solid #3b82f6;color:#3b82f6;font-size:13px;font-weight:600;}
|
||||
.price-num b{font-size:34px;}
|
||||
.faq{max-width:820px;margin:0 auto;}
|
||||
.faq details{border-bottom:1px solid rgba(128,140,160,.25);padding:16px 4px;}
|
||||
.faq summary{cursor:pointer;font-weight:600;font-size:15px;list-style:none;display:flex;justify-content:space-between;align-items:center;}
|
||||
.faq summary::after{content:"+";font-size:18px;opacity:.5;}
|
||||
.faq details[open] summary::after{content:"–";}
|
||||
.faq details p{margin:10px 0 2px;opacity:.72;line-height:1.85;font-size:14px;}
|
||||
.indie{text-align:center;opacity:.75;font-size:14px;line-height:1.9;max-width:560px;margin:0 auto;}
|
||||
.act-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;margin-top:22px;text-align:left;}
|
||||
.act-grid .card h3{display:flex;align-items:center;gap:8px;margin:0 0 6px;font-size:15px;}
|
||||
.act-grid .card p{margin:0;opacity:.7;font-size:13px;line-height:1.8;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header class="nav">
|
||||
<div class="container nav-inner">
|
||||
<a class="brand" href="/">
|
||||
<img src="/site/assets/icon.svg" alt="OpsXShell 图标" />
|
||||
OpsXShell<span class="tm">v2.1.1</span>
|
||||
</a>
|
||||
<button class="nav-toggle" aria-label="打开菜单">☰</button>
|
||||
<nav class="nav-links">
|
||||
<a href="/#features">功能</a>
|
||||
<a href="/#ai">终端 AI</a>
|
||||
<a href="/pricing">价格</a>
|
||||
<a href="/license">授权</a>
|
||||
<a href="/#security">安全</a>
|
||||
<a href="/#download">下载</a>
|
||||
<a href="/docs">文档</a>
|
||||
<a href="/#faq">FAQ</a>
|
||||
<a class="nav-cta" href="/#download">免费下载</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
<main>
|
||||
<section class="trial-hero">
|
||||
<span class="trial-strip">🚀 30 天免费试用 · 首次启动自动开始 · 无需注册</span>
|
||||
<h1>授权与定价</h1>
|
||||
<p class="lead">OpsXShell 免费层长期可用;专业功能(转发 / AI / 远程桌面 / 串口)需要授权。许可证绑定设备而非订阅账号,离线许可证支持完全离线激活。</p>
|
||||
</section>
|
||||
|
||||
<section class="section" style="padding-top:26px">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">先试用,再决定</h2>
|
||||
<p class="sec-sub">下载即含 30 天专业版试用;激活支持在线与离线两种方式。</p>
|
||||
<div class="act-grid">
|
||||
<div class="card"><h3><span style="font-size:20px">🚀</span> 30 天全功能试用</h3><p>首次启动自动开始;无需注册、无需信用卡。试用期覆盖专业版全部功能。</p></div>
|
||||
<div class="card"><h3><span style="font-size:20px">🌐</span> 在线授权 LIC-</h3><p>联网激活并绑定设备;支持自助解绑换机;激活后可连续离线使用 30 天。</p></div>
|
||||
<div class="card"><h3><span style="font-size:20px">🛡️</span> 离线许可证 LICOFF-</h3><p>Ed25519 自包含签名,绑定设备;完全无网络也能激活,适合隔离内网环境。</p></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section alt">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">选择适合的授权</h2>
|
||||
<p class="sec-sub">免费层永久免费;专业版可选包年或一次性买断。</p>
|
||||
<div class="pricing three">
|
||||
<div class="price-card">
|
||||
<div class="plan">免费</div>
|
||||
<div class="price price-num"><b>¥0</b></div>
|
||||
<div class="plan-sub">日常 SSH 运维完全够用</div>
|
||||
<ul>
|
||||
<li>SSH 终端(密码 / 私钥 / Agent)</li>
|
||||
<li>SFTP 双栏文件管理</li>
|
||||
<li>本地终端(zsh / bash / sh)</li>
|
||||
<li>会话管理与 ~/.ssh/config 导入</li>
|
||||
<li>7 语种界面</li>
|
||||
</ul>
|
||||
<a class="btn btn-primary" href="/#download">免费下载</a>
|
||||
</div>
|
||||
<div class="price-card featured">
|
||||
<div class="plan-tag">推荐</div>
|
||||
<div class="plan">专业版 · 包年</div>
|
||||
<div class="price price-num"><b>¥99</b><span>/ 年</span></div>
|
||||
<div class="plan-sub">2 台设备</div>
|
||||
<ul>
|
||||
<li>端口转发(本地 / 远程 / SOCKS5)</li>
|
||||
<li>终端 AI 助手</li>
|
||||
<li>批量执行 / 广播同步</li>
|
||||
<li>远程桌面 RDP / VNC</li>
|
||||
<li>串口终端与连接代理</li>
|
||||
<li>应用内升级</li>
|
||||
</ul>
|
||||
<a class="btn btn-primary" href="mailto:hello@opsxapi.dev?subject=OpsXShell%20%E4%B8%93%E4%B8%9A%E7%89%88%E8%B4%AD%E4%B9%B0">购买咨询</a>
|
||||
</div>
|
||||
<div class="price-card">
|
||||
<div class="plan">专业版 · 永久</div>
|
||||
<div class="price price-num"><b>¥199</b><span>一次性</span></div>
|
||||
<div class="plan-sub">5 台设备 · 终身授权</div>
|
||||
<ul>
|
||||
<li>包含包年全部功能</li>
|
||||
<li>一次买断,无续费</li>
|
||||
<li>离线许可证(LICOFF-)支持</li>
|
||||
<li>后续版本持续可用</li>
|
||||
<li>应用内升级</li>
|
||||
</ul>
|
||||
<a class="btn btn-primary" href="mailto:hello@opsxapi.dev?subject=OpsXShell%20%E6%B0%B8%E4%B9%85%E7%89%88%E8%B4%AD%E4%B9%B0">购买咨询</a>
|
||||
</div>
|
||||
</div>
|
||||
<p class="deal-note" style="text-align:center">支付后当场发放授权码(LIC-),粘贴到「设置 → 授权」即完成激活——整个流程无需注册账号;许可证一机一码绑定设备,每年可免费换绑 2 次。<br>购买咨询邮件请注明「OpsXShell」——Opsx 系列同一位开发者,多产品捆绑可议价。</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">常见问题</h2>
|
||||
<div class="faq">
|
||||
<details><summary>试用是怎么计算的?</summary><p>30 天全功能试用,从应用首次启动那一刻自动开始——无需注册账号,无需信用卡。试用期覆盖专业版全部功能;结束后免费层继续可用。</p></details>
|
||||
<details><summary>在线授权和离线激活有什么区别?</summary><p>在线授权码(LIC- 前缀):联网激活,绑定设备,支持在设置中自助解绑换机;激活后可连续离线使用最长 30 天。离线许可证(LICOFF- 前缀):同样绑定设备,但采用 Ed25519 自包含签名,在完全无网络的环境也能激活——适合隔离内网。两种方式在「设置 → 授权」中粘贴即用。</p></details>
|
||||
<details><summary>一个授权能用几台设备?</summary><p>授权绑定设备而非订阅账号。专业版包年 2 台、永久 5 台;设备可以在「设置 → 授权」中解绑后迁移到新机器。</p></details>
|
||||
<details><summary>断网了授权会失效吗?</summary><p>离线许可证(LICOFF-)本地自验,永不联网也有效。在线授权(LIC-)容忍连续 30 天离线,超过后需联网重新验证一次。</p></details>
|
||||
<details><summary>退款政策是怎样的?</summary><p>自付款之日起 30 天内无理由全额退款——先用起来,不满意直接退。</p></details>
|
||||
<details><summary>怎么购买?</summary><p>邮件咨询购买(请注明 OpsXShell),当天回复;支持对公转账与开票。</p></details>
|
||||
<details><summary>三个产品(OpsxAPI / OpsxDB / OpsXShell)要分别买吗?</summary><p>三个产品独立授权、独立计价。多产品组合或学生优惠可直接邮件说明需求,给捆绑价。</p></details>
|
||||
<details><summary>授权包含哪些升级?</summary><p>年付授权含 1 年免费升级;永久授权包含后续版本更新。</p></details>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section alt">
|
||||
<div class="wrap indie">
|
||||
<p><b>独立开发,认真长跑。</b><br>Opsx 系列工具由独立开发者打造,每一份授权的收入都直接投入产品迭代——没有投资人,也没有广告。</p>
|
||||
<p style="margin-top:14px"><a class="btn btn-primary" href="/#download">还没装?立即下载</a></p>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
<footer>
|
||||
<div class="container footer-inner">
|
||||
<div>
|
||||
<div class="footer-brand">
|
||||
<img src="/site/assets/icon.svg" alt="" />
|
||||
OpsXShell
|
||||
</div>
|
||||
<p style="margin-top:8px">轻量运维终端 · 便捷、人性化、操作简单实用</p>
|
||||
</div>
|
||||
<nav>
|
||||
<a href="/#features">功能</a>
|
||||
<a href="/#ai">终端 AI</a>
|
||||
<a href="/pricing">价格</a>
|
||||
<a href="/license">授权与激活</a>
|
||||
<a href="/#security">安全</a>
|
||||
<a href="/#download">下载</a>
|
||||
<a href="/docs">文档</a>
|
||||
<a href="/#faq">FAQ</a>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="container" style="margin-top:22px">
|
||||
<p>© 2026 OpsXShell · 不做审计、审批与堡垒机——宁可少而顺。</p>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
+123
@@ -755,6 +755,129 @@ footer a:hover {
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
/* ── 定价 / 授权页共享基础类 ─────────────────────── */
|
||||
/* Opsx 系列三站的 pricing.html / license.html 使用同一套标记(wrap / section /
|
||||
sec-title / price-card / plan-tag / deal-note)。opsxdb、opsxapi 的 site.css
|
||||
原生带这些规则;本站 style.css 缺这一段,导致 /pricing 页内容贴左、价格卡
|
||||
无卡片样式(2026-10-16 补齐,仅新增、不改动既有规则)。 // Logan.Li */
|
||||
.wrap {
|
||||
max-width: 1080px;
|
||||
margin: 0 auto;
|
||||
padding: 0 24px;
|
||||
}
|
||||
.section {
|
||||
padding: 74px 0;
|
||||
}
|
||||
.section.alt {
|
||||
background: var(--bg-soft);
|
||||
border-top: 1px solid var(--border);
|
||||
border-bottom: 1px solid var(--border);
|
||||
}
|
||||
.sec-title {
|
||||
font-size: 28px;
|
||||
font-weight: 800;
|
||||
text-align: center;
|
||||
margin: 0 0 8px;
|
||||
}
|
||||
.sec-sub {
|
||||
text-align: center;
|
||||
color: var(--text-2);
|
||||
font-size: 14.5px;
|
||||
margin: 0 0 34px;
|
||||
}
|
||||
/* 价格卡(暗色主题版:--panel + --border,与本站整体一致) */
|
||||
.pricing.three {
|
||||
max-width: 1080px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.price-card {
|
||||
position: relative;
|
||||
background: var(--panel);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 16px;
|
||||
padding: 28px 26px 24px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.price-card.featured {
|
||||
border-color: rgba(85, 174, 242, 0.55);
|
||||
background: linear-gradient(180deg, rgba(85, 174, 242, 0.08), var(--panel) 45%);
|
||||
}
|
||||
.price-card .plan {
|
||||
background: none;
|
||||
border: 0;
|
||||
border-radius: 0;
|
||||
padding: 0;
|
||||
font-size: 15px;
|
||||
font-weight: 700;
|
||||
color: var(--text-2);
|
||||
}
|
||||
.price-card .plan-sub {
|
||||
font-size: 12.5px;
|
||||
color: var(--text-3);
|
||||
margin: 2px 0 16px;
|
||||
}
|
||||
.price-card .price,
|
||||
.price-card .price b {
|
||||
font-size: 32px;
|
||||
font-weight: 800;
|
||||
}
|
||||
.price-card .price {
|
||||
margin: 8px 0 0;
|
||||
}
|
||||
.price-card .price span {
|
||||
font-size: 13.5px;
|
||||
font-weight: 400;
|
||||
color: var(--text-3);
|
||||
margin-left: 4px;
|
||||
}
|
||||
.price-card ul {
|
||||
list-style: none;
|
||||
display: grid;
|
||||
gap: 8px;
|
||||
margin: 6px 0 22px;
|
||||
padding: 0;
|
||||
flex: 1;
|
||||
}
|
||||
.price-card ul li {
|
||||
font-size: 13.6px;
|
||||
color: var(--text-2);
|
||||
display: flex;
|
||||
gap: 9px;
|
||||
}
|
||||
.price-card ul li::before {
|
||||
content: '✓';
|
||||
color: var(--green);
|
||||
font-weight: 700;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.price-card .btn {
|
||||
width: 100%;
|
||||
}
|
||||
.plan-tag {
|
||||
position: absolute;
|
||||
top: -12px;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
background: var(--accent);
|
||||
color: #06121c;
|
||||
font-size: 11.5px;
|
||||
font-weight: 700;
|
||||
padding: 3px 12px;
|
||||
border-radius: 999px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.deal-note {
|
||||
font-size: 13px;
|
||||
line-height: 1.9;
|
||||
color: var(--text-3);
|
||||
margin-top: 18px;
|
||||
}
|
||||
.footnote {
|
||||
font-size: 13px;
|
||||
color: var(--text-3);
|
||||
}
|
||||
|
||||
/* ── Responsive ──────────────────────────────────── */
|
||||
@media (max-width: 960px) {
|
||||
.hero-grid {
|
||||
|
||||
+2
-1
@@ -21,7 +21,8 @@
|
||||
<nav class="nav-links">
|
||||
<a href="#features">功能</a>
|
||||
<a href="#ai">终端 AI</a>
|
||||
<a href="#pricing">价格</a>
|
||||
<a href="/pricing">价格</a>
|
||||
<a href="/license">授权</a>
|
||||
<a href="#security">安全</a>
|
||||
<a href="#download">下载</a>
|
||||
<a href="/docs">文档</a>
|
||||
|
||||
@@ -0,0 +1,204 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>授权与激活 · OpsXShell</title>
|
||||
<meta name="description" content="OpsXShell 授权与激活说明:付款后邮件交付授权码(LIC-),在「设置 → 授权」粘贴即完成激活;生产内网可用 LICOFF- 离线许可证,一机一码、支持自助解绑换机。">
|
||||
<link rel="icon" type="image/svg+xml" href="/site/assets/icon.svg" />
|
||||
<link rel="stylesheet" href="/site/assets/style.css">
|
||||
<style>
|
||||
/* 授权页专用样式(lic- 前缀,避免与站点既有类冲突) // Logan.Li */
|
||||
.lic-hero{padding:72px 0 30px;text-align:center;}
|
||||
.lic-hero h1{font-size:clamp(28px,4.5vw,42px);margin:12px 0 10px;}
|
||||
.lic-hero .lead{max-width:780px;margin:0 auto;font-size:15px;line-height:1.9;opacity:.75;}
|
||||
.lic-chip{display:inline-flex;align-items:center;gap:8px;padding:7px 16px;border-radius:999px;border:1px solid var(--accent,var(--blue,#2563eb));color:var(--accent,var(--blue,#2563eb));font-size:13px;font-weight:600;}
|
||||
.lic-steps{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px 16px;margin:22px 0 0;}
|
||||
@media (max-width:720px){.lic-steps{grid-template-columns:1fr;}}
|
||||
.lic-step{position:relative;border:1px solid var(--border);border-radius:calc(var(--radius,14px) + 2px);padding:22px 18px 18px;}
|
||||
.lic-step .n{position:absolute;top:-11px;left:18px;background:var(--accent,var(--blue,#2563eb));color:#fff;font-size:11.5px;font-weight:700;padding:2px 10px;border-radius:999px;letter-spacing:.03em;}
|
||||
.lic-step h3{margin:4px 0 8px;font-size:15.5px;}
|
||||
.lic-step p{margin:0;font-size:13.5px;line-height:1.9;opacity:.78;}
|
||||
.lic-cmp-wrap{overflow-x:auto;margin-top:20px;}
|
||||
.lic-cmp{width:100%;min-width:640px;border-collapse:collapse;font-size:14px;}
|
||||
.lic-cmp th,.lic-cmp td{border-bottom:1px solid var(--border);padding:12px;text-align:left;vertical-align:top;}
|
||||
.lic-cmp thead th{font-size:13.5px;letter-spacing:.02em;}
|
||||
.lic-cmp tbody th{width:132px;font-weight:600;color:var(--text-3,#98a2b3);}
|
||||
.lic-cmp code{font-family:var(--mono,monospace);font-size:12.5px;background:rgba(127,127,127,.14);padding:1px 5px;border-radius:4px;}
|
||||
.lic-faq{max-width:880px;margin:0 auto;}
|
||||
.lic-faq details{border-bottom:1px solid var(--border);padding:15px 4px;}
|
||||
.lic-faq summary{cursor:pointer;font-weight:600;font-size:15px;list-style:none;display:flex;justify-content:space-between;gap:12px;align-items:center;}
|
||||
.lic-faq summary::after{content:"+";opacity:.5;font-size:18px;line-height:1;}
|
||||
.lic-faq details[open] summary::after{content:"–";}
|
||||
.lic-faq details p{margin:10px 0 2px;font-size:14px;line-height:1.9;opacity:.78;}
|
||||
.lic-note{max-width:880px;margin:16px auto 0;font-size:13px;line-height:1.9;opacity:.68;}
|
||||
.lic-cta{text-align:center;max-width:660px;margin:0 auto;}
|
||||
.lic-cta .btns{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin-top:20px;}
|
||||
.lic-scope{max-width:880px;margin:24px auto 0;font-size:13.5px;line-height:1.95;opacity:.78;}
|
||||
.lic-scope li{margin:6px 0;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header class="nav">
|
||||
<div class="container nav-inner">
|
||||
<a class="brand" href="/">
|
||||
<img src="/site/assets/icon.svg" alt="OpsXShell 图标" />
|
||||
OpsXShell<span class="tm">v2.1.1</span>
|
||||
</a>
|
||||
<button class="nav-toggle" aria-label="打开菜单">☰</button>
|
||||
<nav class="nav-links">
|
||||
<a href="/#features">功能</a>
|
||||
<a href="/#ai">终端 AI</a>
|
||||
<a href="/pricing">价格</a>
|
||||
<a href="/license">授权</a>
|
||||
<a href="/#security">安全</a>
|
||||
<a href="/#download">下载</a>
|
||||
<a href="/docs">文档</a>
|
||||
<a href="/#faq">FAQ</a>
|
||||
<a class="nav-cta" href="/#download">免费下载</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<section class="lic-hero">
|
||||
<span class="lic-chip">30 天免费试用 · 首次启动自动开始 · 无需注册</span>
|
||||
<h1>授权与激活</h1>
|
||||
<p class="lead">一次说清四件事:怎么买、授权码怎么交付、程序里怎么激活、换机与断网怎么办。授权绑定设备而非账号,全流程不需要注册。</p>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">交付与激活:四步</h2>
|
||||
<p class="sec-sub">从下单到激活通常当天完成,最短几分钟。</p>
|
||||
<div class="lic-steps">
|
||||
<div class="lic-step">
|
||||
<span class="n">STEP 1</span>
|
||||
<h3>下单确认</h3>
|
||||
<p>邮件说明产品、授权类型(包年 / 永久)与设备数量。支持对公转账与开具发票,工作日当天回复。</p>
|
||||
</div>
|
||||
<div class="lic-step">
|
||||
<span class="n">STEP 2</span>
|
||||
<h3>邮件交付授权码</h3>
|
||||
<p>付款确认后即刻签发,授权码以邮件送达你的邮箱:联网用 <code>LIC-</code> 前缀的在线授权码,隔离内网用 <code>LICOFF-</code> 前缀的离线许可证。</p>
|
||||
</div>
|
||||
<div class="lic-step">
|
||||
<span class="n">STEP 3</span>
|
||||
<h3>应用内激活</h3>
|
||||
<p>打开「设置 → 授权」,粘贴授权码点击激活。程序连接授权服务器 <code>licence.rlwj.cn</code> 登记本机设备并回写一次性激活令牌,此后每 7 天自动校验一次。</p>
|
||||
</div>
|
||||
<div class="lic-step">
|
||||
<span class="n">STEP 4</span>
|
||||
<h3>换机与续期</h3>
|
||||
<p>在本机自助解绑即可把席位迁到新机器,每年免费换绑 2 次;到期前 30 天邮件提醒,续期后签发新授权码替换即可。</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section alt">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">两种激活方式</h2>
|
||||
<p class="sec-sub">能联网就用在线授权码,完全不出网就用离线许可证——功能与有效期一致。</p>
|
||||
<div class="lic-cmp-wrap">
|
||||
<table class="lic-cmp">
|
||||
<thead>
|
||||
<tr><th>对比项</th><th>在线授权码 <code>LIC-</code></th><th>离线许可证 <code>LICOFF-</code></th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><th>是否联网</th><td>激活时联网一次,之后每 7 天校验一次</td><td>全程无需联网,本地验签</td></tr>
|
||||
<tr><th>设备绑定</th><td>绑定设备 ID,一机一码</td><td>绑定设备 ID,一机一码</td></tr>
|
||||
<tr><th>断网可用</th><td>激活后可连续离线使用 30 天</td><td>始终有效,与网络无关</td></tr>
|
||||
<tr><th>有效期</th><td>包年 365 天;永久授权长期有效</td><td>单张最长 365 天,可续签</td></tr>
|
||||
<tr><th>换绑</th><td>应用内自助解绑,每年免费换绑 2 次</td><td>邮件换取新证并解绑旧设备</td></tr>
|
||||
<tr><th>适合场景</th><td>办公网、云主机、个人电脑</td><td>生产内网、专有云、隔离环境</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="lic-scope">
|
||||
<p><b>授权服务器会收到什么?</b>客户端只与 <code>licence.rlwj.cn</code>(443)通信,用于设备登记与周期校验,只发送授权码与设备标识(设备 ID、设备名称)——不发送主机地址、账号、命令与会话内容等任何业务数据。服务端返回 Ed25519 签名,客户端本地验签,验签失败按未授权处理。</p>
|
||||
<ul>
|
||||
<li>内网只放行白名单出网:把 <code>licence.rlwj.cn</code> 加入白名单,或直接使用离线许可证。</li>
|
||||
<li>授权服务器不可达:按宽限期继续可用,业务不会当场中断;恢复网络后自动补校验。</li>
|
||||
<li>不想让客户端出网:一律选离线许可证,客户端永不发起网络请求。</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">授权类型与价格</h2>
|
||||
<p class="sec-sub">免费层永久免费;专业功能按包年或一次性买断授权。</p>
|
||||
<div class="lic-cmp-wrap">
|
||||
<table class="lic-cmp">
|
||||
<thead>
|
||||
<tr><th>授权</th><th>价格</th><th>设备数</th><th>包含</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><th>免费层</th><td>¥0</td><td>不涉及授权</td><td>SSH 终端、SFTP、本地终端、会话管理与配置导入</td></tr>
|
||||
<tr><th>专业版 · 包年</th><td>¥99 / 年</td><td>2 台</td><td>端口转发、终端 AI、批量执行、RDP / VNC、串口、应用内升级</td></tr>
|
||||
<tr><th>专业版 · 永久</th><td>¥199 一次性</td><td>5 台</td><td>包年全部功能,一次买断、无续费,支持离线许可证</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p class="lic-note">完整功能对比、让利与组合报价见 <a href="/pricing">定价页</a>。表中为标价,实际成交可按场景议价;教育与非营利用途可申请优惠。</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section alt">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">授权常见问题</h2>
|
||||
<div class="lic-faq">
|
||||
<details><summary>授权码多久能收到?</summary><p>付款确认后即刻签发并邮件发出,工作日通常当天完成(含开票需求)。邮件里就是完整授权码,无需注册账号或登录任何后台。</p></details>
|
||||
<details><summary>授权绑定设备还是账号?</summary><p>绑定设备。每台机器有唯一设备 ID,一个授权码按授权的设备数占座,与账号无关——换人使用不影响,重装系统前建议先解绑。</p></details>
|
||||
<details><summary>换电脑 / 重装系统后设备 ID 变了怎么办?</summary><p>旧机还在:在「设置 → 授权」点解绑,腾出席位后在新机激活。旧机已不在手:邮件与我们说明(附授权码后四位与新设备 ID),由我们在授权后台释放旧设备。每年免费换绑 2 次。</p></details>
|
||||
<details><summary>断网了授权会失效吗?</summary><p>不会。离线许可证本地自验,永不联网也有效;在线授权码激活后可连续离线使用 30 天,超时后联网校验一次即可继续。授权服务器不可达时按宽限期放行,不会中断正在做的工作。</p></details>
|
||||
<details><summary>生产内网完全不出网,怎么激活?</summary><p>改用离线许可证(<code>LICOFF-</code>):在应用内导出本机机器码,邮件发我们换取离线证,本地导入即完成激活,全程不需要客户端联网。</p></details>
|
||||
<details><summary>续期怎么操作?</summary><p>到期前 30 天我们会邮件提醒。付款后签发新的授权码,在「设置 → 授权」里替换旧码即可,同一台设备无需先解绑;永久授权无需续期。</p></details>
|
||||
<details><summary>试用期结束后我的配置和数据还在吗?</summary><p>都在。授权只控制专业功能是否可用,本机会话、配置、日志等数据不做任何改动;试用结束后免费层继续可用,购买授权后专业功能立即恢复。</p></details>
|
||||
<details><summary>激活失败怎么排查?</summary><p>先在「设置 → 授权」看当前状态与到期时间。若提示无效或不匹配,请把授权码后四位、设备 ID 与报错截图一并发邮件,我们核对授权服务器上的记录后处理(常见原因是设备数已占满或授权码输漏字符)。</p></details>
|
||||
<details><summary>能开发票、走对公转账吗?</summary><p>可以。个人与企业均可开具发票,支持对公转账、多产品捆绑与批量授权;邮件说明抬头与税号即可。</p></details>
|
||||
<details><summary>三个产品(OpsXShell / OpsxDB / OpsxAPI)要分别买吗?</summary><p>三个产品独立授权、独立计价;它们共用同一套授权体系(同一个设备 ID 规则与同一个授权服务器)。多产品组合、团队或教育用途可邮件说明需求,给捆绑价。</p></details>
|
||||
</div>
|
||||
<p class="lic-note">本页更新于 2026-10-16,授权口径与授权服务器 <code>licence.rlwj.cn</code> 实际配置一致。</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<div class="wrap lic-cta">
|
||||
<h2 class="sec-title">准备好购买授权</h2>
|
||||
<p class="sec-sub">邮件说明产品、授权类型与设备数,当天回复并开票。</p>
|
||||
<div class="btns">
|
||||
<a class="btn btn-primary" href="mailto:hello@opsxapi.dev?subject=OpsXShell%20%E6%8E%88%E6%9D%83%E4%B8%8E%E6%BF%80%E6%B4%BB%E5%92%A8%E8%AF%A2">邮件咨询购买</a>
|
||||
<a class="btn btn-ghost" href="/#download">还没装?立即下载</a>
|
||||
</div>
|
||||
<p class="lic-note">付款后当场发放授权码(LIC-),粘贴到「设置 → 授权」即完成激活——整个流程无需注册账号。</p>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<div class="container footer-inner">
|
||||
<div>
|
||||
<div class="footer-brand">
|
||||
<img src="/site/assets/icon.svg" alt="" />
|
||||
OpsXShell
|
||||
</div>
|
||||
<p style="margin-top:8px">轻量运维终端 · 便捷、人性化、操作简单实用</p>
|
||||
</div>
|
||||
<nav>
|
||||
<a href="/#features">功能</a>
|
||||
<a href="/#ai">终端 AI</a>
|
||||
<a href="/pricing">价格</a>
|
||||
<a href="/license">授权与激活</a>
|
||||
<a href="/docs">文档</a>
|
||||
<a href="/#faq">FAQ</a>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="container" style="margin-top:22px">
|
||||
<p>© 2026 OpsXShell · 不做审计、审批与堡垒机——宁可少而顺。</p>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,167 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>授权与定价 · OpsXShell</title>
|
||||
<meta name="description" content="OpsXShell 定价:免费层含 SSH/SFTP/本地终端;专业版 ¥99/年(2 台设备)或 ¥199 永久(5 台)。支持在线授权与 LICOFF 离线激活。">
|
||||
<link rel="icon" type="image/svg+xml" href="/site/assets/icon.svg" />
|
||||
<link rel="stylesheet" href="/site/assets/style.css">
|
||||
<style>
|
||||
.trial-hero{padding:72px 0 28px;text-align:center;}
|
||||
.trial-hero h1{font-size:clamp(28px,4.5vw,44px);margin:14px 0 10px;}
|
||||
.trial-hero .lead{max-width:720px;margin:0 auto;opacity:.75;line-height:1.8;}
|
||||
.trial-strip{display:inline-flex;gap:8px;align-items:center;padding:7px 16px;border-radius:999px;border:1px solid #3b82f6;color:#3b82f6;font-size:13px;font-weight:600;}
|
||||
.price-num b{font-size:34px;}
|
||||
.faq{max-width:820px;margin:0 auto;}
|
||||
.faq details{border-bottom:1px solid rgba(128,140,160,.25);padding:16px 4px;}
|
||||
.faq summary{cursor:pointer;font-weight:600;font-size:15px;list-style:none;display:flex;justify-content:space-between;align-items:center;}
|
||||
.faq summary::after{content:"+";font-size:18px;opacity:.5;}
|
||||
.faq details[open] summary::after{content:"–";}
|
||||
.faq details p{margin:10px 0 2px;opacity:.72;line-height:1.85;font-size:14px;}
|
||||
.indie{text-align:center;opacity:.75;font-size:14px;line-height:1.9;max-width:560px;margin:0 auto;}
|
||||
.act-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;margin-top:22px;text-align:left;}
|
||||
.act-grid .card h3{display:flex;align-items:center;gap:8px;margin:0 0 6px;font-size:15px;}
|
||||
.act-grid .card p{margin:0;opacity:.7;font-size:13px;line-height:1.8;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header class="nav">
|
||||
<div class="container nav-inner">
|
||||
<a class="brand" href="/">
|
||||
<img src="/site/assets/icon.svg" alt="OpsXShell 图标" />
|
||||
OpsXShell<span class="tm">v2.1.1</span>
|
||||
</a>
|
||||
<button class="nav-toggle" aria-label="打开菜单">☰</button>
|
||||
<nav class="nav-links">
|
||||
<a href="/#features">功能</a>
|
||||
<a href="/#ai">终端 AI</a>
|
||||
<a href="/pricing">价格</a>
|
||||
<a href="/license">授权</a>
|
||||
<a href="/#security">安全</a>
|
||||
<a href="/#download">下载</a>
|
||||
<a href="/docs">文档</a>
|
||||
<a href="/#faq">FAQ</a>
|
||||
<a class="nav-cta" href="/#download">免费下载</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
<main>
|
||||
<section class="trial-hero">
|
||||
<span class="trial-strip">🚀 30 天免费试用 · 首次启动自动开始 · 无需注册</span>
|
||||
<h1>授权与定价</h1>
|
||||
<p class="lead">OpsXShell 免费层长期可用;专业功能(转发 / AI / 远程桌面 / 串口)需要授权。许可证绑定设备而非订阅账号,离线许可证支持完全离线激活。</p>
|
||||
</section>
|
||||
|
||||
<section class="section" style="padding-top:26px">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">先试用,再决定</h2>
|
||||
<p class="sec-sub">下载即含 30 天专业版试用;激活支持在线与离线两种方式。</p>
|
||||
<div class="act-grid">
|
||||
<div class="card"><h3><span style="font-size:20px">🚀</span> 30 天全功能试用</h3><p>首次启动自动开始;无需注册、无需信用卡。试用期覆盖专业版全部功能。</p></div>
|
||||
<div class="card"><h3><span style="font-size:20px">🌐</span> 在线授权 LIC-</h3><p>联网激活并绑定设备;支持自助解绑换机;激活后可连续离线使用 30 天。</p></div>
|
||||
<div class="card"><h3><span style="font-size:20px">🛡️</span> 离线许可证 LICOFF-</h3><p>Ed25519 自包含签名,绑定设备;完全无网络也能激活,适合隔离内网环境。</p></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section alt">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">选择适合的授权</h2>
|
||||
<p class="sec-sub">免费层永久免费;专业版可选包年或一次性买断。</p>
|
||||
<div class="pricing three">
|
||||
<div class="price-card">
|
||||
<div class="plan">免费</div>
|
||||
<div class="price price-num"><b>¥0</b></div>
|
||||
<div class="plan-sub">日常 SSH 运维完全够用</div>
|
||||
<ul>
|
||||
<li>SSH 终端(密码 / 私钥 / Agent)</li>
|
||||
<li>SFTP 双栏文件管理</li>
|
||||
<li>本地终端(zsh / bash / sh)</li>
|
||||
<li>会话管理与 ~/.ssh/config 导入</li>
|
||||
<li>7 语种界面</li>
|
||||
</ul>
|
||||
<a class="btn btn-primary" href="/#download">免费下载</a>
|
||||
</div>
|
||||
<div class="price-card featured">
|
||||
<div class="plan-tag">推荐</div>
|
||||
<div class="plan">专业版 · 包年</div>
|
||||
<div class="price price-num"><b>¥99</b><span>/ 年</span></div>
|
||||
<div class="plan-sub">2 台设备</div>
|
||||
<ul>
|
||||
<li>端口转发(本地 / 远程 / SOCKS5)</li>
|
||||
<li>终端 AI 助手</li>
|
||||
<li>批量执行 / 广播同步</li>
|
||||
<li>远程桌面 RDP / VNC</li>
|
||||
<li>串口终端与连接代理</li>
|
||||
<li>应用内升级</li>
|
||||
</ul>
|
||||
<a class="btn btn-primary" href="mailto:hello@opsxapi.dev?subject=OpsXShell%20%E4%B8%93%E4%B8%9A%E7%89%88%E8%B4%AD%E4%B9%B0">购买咨询</a>
|
||||
</div>
|
||||
<div class="price-card">
|
||||
<div class="plan">专业版 · 永久</div>
|
||||
<div class="price price-num"><b>¥199</b><span>一次性</span></div>
|
||||
<div class="plan-sub">5 台设备 · 终身授权</div>
|
||||
<ul>
|
||||
<li>包含包年全部功能</li>
|
||||
<li>一次买断,无续费</li>
|
||||
<li>离线许可证(LICOFF-)支持</li>
|
||||
<li>后续版本持续可用</li>
|
||||
<li>应用内升级</li>
|
||||
</ul>
|
||||
<a class="btn btn-primary" href="mailto:hello@opsxapi.dev?subject=OpsXShell%20%E6%B0%B8%E4%B9%85%E7%89%88%E8%B4%AD%E4%B9%B0">购买咨询</a>
|
||||
</div>
|
||||
</div>
|
||||
<p class="deal-note" style="text-align:center">支付后当场发放授权码(LIC-),粘贴到「设置 → 授权」即完成激活——整个流程无需注册账号;许可证一机一码绑定设备,每年可免费换绑 2 次。<br>购买咨询邮件请注明「OpsXShell」——Opsx 系列同一位开发者,多产品捆绑可议价。</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">常见问题</h2>
|
||||
<div class="faq">
|
||||
<details><summary>试用是怎么计算的?</summary><p>30 天全功能试用,从应用首次启动那一刻自动开始——无需注册账号,无需信用卡。试用期覆盖专业版全部功能;结束后免费层继续可用。</p></details>
|
||||
<details><summary>在线授权和离线激活有什么区别?</summary><p>在线授权码(LIC- 前缀):联网激活,绑定设备,支持在设置中自助解绑换机;激活后可连续离线使用最长 30 天。离线许可证(LICOFF- 前缀):同样绑定设备,但采用 Ed25519 自包含签名,在完全无网络的环境也能激活——适合隔离内网。两种方式在「设置 → 授权」中粘贴即用。</p></details>
|
||||
<details><summary>一个授权能用几台设备?</summary><p>授权绑定设备而非订阅账号。专业版包年 2 台、永久 5 台;设备可以在「设置 → 授权」中解绑后迁移到新机器。</p></details>
|
||||
<details><summary>断网了授权会失效吗?</summary><p>离线许可证(LICOFF-)本地自验,永不联网也有效。在线授权(LIC-)容忍连续 30 天离线,超过后需联网重新验证一次。</p></details>
|
||||
<details><summary>退款政策是怎样的?</summary><p>自付款之日起 30 天内无理由全额退款——先用起来,不满意直接退。</p></details>
|
||||
<details><summary>怎么购买?</summary><p>邮件咨询购买(请注明 OpsXShell),当天回复;支持对公转账与开票。</p></details>
|
||||
<details><summary>三个产品(OpsxAPI / OpsxDB / OpsXShell)要分别买吗?</summary><p>三个产品独立授权、独立计价。多产品组合或学生优惠可直接邮件说明需求,给捆绑价。</p></details>
|
||||
<details><summary>授权包含哪些升级?</summary><p>年付授权含 1 年免费升级;永久授权包含后续版本更新。</p></details>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section alt">
|
||||
<div class="wrap indie">
|
||||
<p><b>独立开发,认真长跑。</b><br>Opsx 系列工具由独立开发者打造,每一份授权的收入都直接投入产品迭代——没有投资人,也没有广告。</p>
|
||||
<p style="margin-top:14px"><a class="btn btn-primary" href="/#download">还没装?立即下载</a></p>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
<footer>
|
||||
<div class="container footer-inner">
|
||||
<div>
|
||||
<div class="footer-brand">
|
||||
<img src="/site/assets/icon.svg" alt="" />
|
||||
OpsXShell
|
||||
</div>
|
||||
<p style="margin-top:8px">轻量运维终端 · 便捷、人性化、操作简单实用</p>
|
||||
</div>
|
||||
<nav>
|
||||
<a href="/#features">功能</a>
|
||||
<a href="/#ai">终端 AI</a>
|
||||
<a href="/pricing">价格</a>
|
||||
<a href="/license">授权与激活</a>
|
||||
<a href="/#security">安全</a>
|
||||
<a href="/#download">下载</a>
|
||||
<a href="/docs">文档</a>
|
||||
<a href="/#faq">FAQ</a>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="container" style="margin-top:22px">
|
||||
<p>© 2026 OpsXShell · 不做审计、审批与堡垒机——宁可少而顺。</p>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,6 +1,6 @@
|
||||
// homepage-build:把 homepage/ 源(落地页+文档 md)构建为纯静态站点 homepage/dist/。
|
||||
// 产物可直接部署到任意静态托管(nginx/Pages)——官网与桌面二进制彻底解耦。
|
||||
// 用法: go run ./tools/homepage-build [-src homepage] [-out homepage/dist]
|
||||
// 用法(独立 Go 模块,须在其目录内运行): cd tools/homepage-build && go run . -src ../../homepage -out ../../homepage/dist
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -51,8 +51,8 @@ type Page struct {
|
||||
}
|
||||
|
||||
var (
|
||||
hRe = regexp.MustCompile(`(?s)<(h[23])>(.*?)</h[23]>`)
|
||||
tagRe = regexp.MustCompile(`<[^>]+>`)
|
||||
hRe = regexp.MustCompile(`(?s)<(h[23])>(.*?)</h[23]>`)
|
||||
tagRe = regexp.MustCompile(`<[^>]+>`)
|
||||
mdNoise = regexp.MustCompile("(?s)```.*?```|`[^`]*`|!\\[[^\\]]*\\]\\([^)]*\\)|\\[[^\\]]*\\]\\([^)]*\\)|[#>*_\\-|]+")
|
||||
)
|
||||
|
||||
@@ -97,22 +97,39 @@ func writeFile(path, content string) {
|
||||
fmt.Println("[OK]", path)
|
||||
}
|
||||
|
||||
// copyTree 幂等地把 src 目录整棵拷到 dst:先清空 dst 再 CopyFS。
|
||||
// os.CopyFS 在目标文件已存在时会报错,故重建 dist 前必须先清空对应子目录。
|
||||
func copyTree(dst, src string) {
|
||||
must(os.RemoveAll(dst), "清理 "+dst)
|
||||
must(os.CopyFS(dst, os.DirFS(src)), "拷 "+dst)
|
||||
fmt.Println("[OK]", dst)
|
||||
}
|
||||
|
||||
func main() {
|
||||
src := flag.String("src", "homepage", "源目录")
|
||||
out := flag.String("out", "homepage/dist", "产物目录")
|
||||
flag.Parse()
|
||||
|
||||
// 1) 落地页: 纯 HTML 直接拷 + site assets
|
||||
raw, err := os.ReadFile(filepath.Join(*src, "index.html"))
|
||||
must(err, "读 index.html")
|
||||
writeFile(filepath.Join(*out, "index.html"), string(raw))
|
||||
if raw2, err2 := os.ReadFile(filepath.Join(*src, "terms.html")); err2 == nil {
|
||||
writeFile(filepath.Join(*out, "terms.html"), string(raw2))
|
||||
// 1) 落地页与附加单页: 纯 HTML 直接拷 + site assets
|
||||
// index.html 必需;pricing/terms/license 为可选页,源存在即产出。
|
||||
// 附加页同时产出 <name>.html 与 <name>/index.html:兼容 nginx 的干净
|
||||
// URL(location = /license) 与纯静态服务器(python -m http.server)。
|
||||
for _, page := range []string{"index.html", "pricing.html", "terms.html", "license.html"} {
|
||||
raw, err := os.ReadFile(filepath.Join(*src, page))
|
||||
if err != nil {
|
||||
if page == "index.html" {
|
||||
must(err, "读 index.html")
|
||||
}
|
||||
continue
|
||||
}
|
||||
writeFile(filepath.Join(*out, page), string(raw))
|
||||
if page != "index.html" {
|
||||
writeFile(filepath.Join(*out, strings.TrimSuffix(page, ".html"), "index.html"), string(raw))
|
||||
}
|
||||
}
|
||||
siteAssets := filepath.Join(*src, "assets")
|
||||
if st, _ := os.Stat(siteAssets); st != nil {
|
||||
must(os.CopyFS(filepath.Join(*out, "site", "assets"), os.DirFS(siteAssets)), "拷 site assets")
|
||||
fmt.Println("[OK]", filepath.Join(*out, "site", "assets"))
|
||||
copyTree(filepath.Join(*out, "site", "assets"), siteAssets)
|
||||
}
|
||||
|
||||
// 2) 文档: manifest → goldmark 渲染 → docs.html 模板
|
||||
@@ -135,7 +152,7 @@ func main() {
|
||||
srcb, err := os.ReadFile(filepath.Join(*src, "content", def.File))
|
||||
must(err, "读文档 "+def.File)
|
||||
var buf strings.Builder
|
||||
must(md.Convert(srcb, &buf), "渲染 "+def.File)
|
||||
must(md.Convert(srcb, &buf), "渲染 "+def.File)
|
||||
body, toc := injectHeadingIDs(buf.String())
|
||||
p := &Page{Slug: def.Slug, Title: def.Title, Group: g.Name, Updated: def.Updated, HTML: body, TOC: toc, Prev: prev}
|
||||
pages[def.Slug] = p
|
||||
@@ -165,8 +182,7 @@ func main() {
|
||||
// docs assets(模板引用 /docs/assets/*)
|
||||
da := filepath.Join(*src, "docs-assets")
|
||||
if st, _ := os.Stat(da); st != nil {
|
||||
must(os.CopyFS(filepath.Join(*out, "docs", "assets"), os.DirFS(da)), "拷 docs assets")
|
||||
fmt.Println("[OK]", filepath.Join(*out, "docs", "assets"))
|
||||
copyTree(filepath.Join(*out, "docs", "assets"), da)
|
||||
}
|
||||
fmt.Printf("[DONE] %d 页文档 + 落地页 → %s(纯静态,可部署任意域名)\n", len(order), *out)
|
||||
}
|
||||
Reference in new issue
Block a user