keepalight 控制面
你的哪台服务器还活着,域名就自动指向哪台。
不需要人半夜爬起来手动改 DNS 解析。全程网页面板可视化操作,不用手写配置文件。
怎么买、怎么装——顺序和大多数软件正好反过来
- 先买:在购买页验证你拥有这个域名(加一条 TXT 解析记录),过人机验证,拿到一张授权码。
- 再装:把可执行文件和安装脚本放到你的服务器上,把授权码写进配置文件,装机时会自动联网激活。
- 装完打开面板,在网页上配置你的 DNS 服务商凭证 / GTM 实例 / 拨测节点。
会跳转到独立的购买页,在那边验证域名归属、过人机验证、拿到授权码。
功能总览:一眼看完这套东西有哪几块
这一节只给个地图,每一块的具体细节在它自己那一节里讲——想看细节直接点左侧目录跳过去。
- 域名解析引擎:两条并行的分流路(自研 GTM / 阿里云官方 GTM),外加更简单的内置 DDNS;共用同一套健康检查 + 故障切换 + 按时间排班的机制。
- 机器接入与管理:「配置与脚本」生成开机命令接入业务服务器,机器自动出现在「已对接服务器」;「模板」把配置好的模块存起来重复套用。
- 能在业务服务器上跑代码的几个开关:root SSH 密码托管、网页终端、Nyanpass、BBR、Agent 自动更新——全部挂在「允许下发 root 命令」这一把总闸下面,关掉总闸这几个通道一起停发。
- 凭证与测活来源:「凭证区」集中管理阿里云 / Cloudflare 密钥;「拨测节点区」统一维护自建 Agent / Globalping / HTTP 接口 / 阿里云站点监控这几种测活来源,供健康检查和拨测共用。
- 管理面:「全局设置」管账号与阈值、「授权与购买」管配额与到期、「API 令牌」给自己的程序开权限、「内置文档」是面板自带的完整说明书。
这套东西不是什么
- 不是 CDN,不做内容加速或缓存。
- 不是硬件负载均衡器,不在你的机器和用户之间转发流量——它只负责"该把域名指向谁"这一个判断,实际流量仍是用户直连你的服务器。
- 不承诺"零停机"或"100% 可用":从"机器挂了"到"域名解析切过去"之间必然有健康检查间隔 + DNS 生效的时间差。
配置与脚本
「配置」是面板里创建的一套开机配置,核心是 agentId + agentToken;复制开机命令到业务服务器执行即可接入,机器上报后自动出现在「已对接服务器」,不需要手动添加。
上线流程
- 在「配置与脚本」新建配置,按需填基础 / 服务器·系统 / 解析·故障切换三个标签。
- 点「复制开机命令」,得到一条一次性命令。
- 粘贴到目标服务器(root 或 sudo)执行;自动装好 curl / jq / openssl / ca-certificates 和 cron,文件放在 /opt/keepalight-agent/agent。
- Agent 启动时强制上报一次,之后每 1 分钟上报一次公网 IP,顺带带回 CPU / 内存 / 硬盘 / 网络速率 / 连接数 / 开机时长 / 累计流量 / IPv6 这些探针指标。
- 机器出现在「已对接服务器」,可查看状态、SSH(若托管)、网页终端(若开)。
- 三个标签随时可改;每个模块小节旁边有「存为模板」,另存供下次直接套用。
- 卸载:装机时已把卸载器写到本地,sudo bash /opt/keepalight-agent/uninstall.sh(连 Nyanpass 一起卸载加 --with-nyanpass),不再从网上现下载。
接管模式(基础标签)
- 外部补机(默认):新机器一上报直接顶掉旧的 active。
- 保守心跳:旧机器超时未上报才被接管,接管等待秒数在「全局设置」里配。
- 多活:多台在线机器同时作为 IP 池,都算「有效在线」。
root SSH 密码托管(服务器·系统标签)
- 默认关闭。开启后允许 root 登录 + 密码登录,口令由控制面在保存这份配置时生成(随机模式)或用你自己填的固定密码(固定模式);机器装机时按下发的口令设上去,机器自己不生成、不保存、也不上报回来。
- 同一份配置下的所有机器共用这一把口令,不是每台各自一把;有「换一把随机口令」按钮,换完对控制面立刻生效,但已装好的机器要重跑一次安装命令才真的换。
- 口令可在「已对接服务器」的 SSH 面板按需查看 / 复制(要重新输入一次管理员密码);关闭时完全不碰 SSH,并尽量把当初放通的改动还原。
这一标签下还有「允许下发 root 命令」「网页终端」「Agent 自动更新」「Nyanpass」「BBR」,解析·故障切换标签下有「内置 DDNS」「阿里云 GTM」「TCP 端口拨测」——这几项分量比较重,各自在下面独立成节,见左侧目录。
凭证区
- 当前支持两种:阿里云 AccessKey(AccessKey ID + Secret)、Cloudflare DNS(API Token)。旧版本"动作 / HTTP 接口"凭证类型已下线——外部测活现在统一由「拨测节点区」负责。
- Cloudflare 为什么只收 API Token:账号级的「邮箱 + Global API Key」是一把钥匙开整个 Cloudflare 账号的全部权限(DNS、账单、域名转移都在内),泄漏一次就是整个账号,Cloudflare 官方也已计划弃用它。API Token 可以只授一个站点、只授 DNS 编辑,能单独吊销、能设有效期,是更安全的一侧,不是少了个选项。
- 去哪儿建、要勾什么权限:Cloudflare 控制台 →「我的个人资料」→「API 令牌」→「创建令牌」,选「编辑区域 DNS」模板,把「区域资源」限定到你要用的域名;若还要用 Cloudflare 负载均衡(分线路),再额外勾账号级「Load Balancing: Monitors and Pools Write」和该站点的「Load Balancers Write」。
- 谁在用凭证:内置 DDNS、GTM 实例(阿里云 / Cloudflare 输出)、配置里的「阿里云 GTM」模块,都是选凭证 ID 引用,不会各自另存一份密钥。
- 安全存储:密钥加密存储,列表和摘要只显示掩码(如 AK 前后各 4 位),修改时才需要重新输入完整值。
- 删除影响:删除凭证后,已引用它的配置 / GTM 实例会失去这个引用,需要重新选择。
拨测节点区
- 用途:统一维护所有"测活"来源,供「TCP 拨测」模块和「GTM 健康模板」共同复用,改一处、两边都生效。
- 内置节点:共三个(Worker 自带节点 + 两个 Globalping 预设:国内 / 境外),默认存在,不能删除、不能修改,也不占授权的拨测节点名额。
- 四种可配置类型:自建 Agent(部署在你自己的机器上,主动拉取任务并回传结果);Globalping(第三方多地探测网络,可指定 Location / 节点数 / 每节点包数);HTTP 接口(自定义 URL + 方法 + Headers/Body,Worker 直接调用);阿里云站点监控(付费)。
- 只有自建 Agent 是实时的:它一回传结果,控制面当场重算受影响的 GTM 实例并改解析;其余几种都是由控制面在巡检那一轮里现去调用或取结果,最坏约 1 分钟才发现变化。
- 阿里云站点监控(会花真金白银):按次计费,没有免费额度,开通动作免费但第一次探测就开始算钱;单价按运营商 + 地域分档(移动端探测点比固网贵 36 倍),价格写死在程序里、阿里云调价不会自动更新;批量启用或预计月开销上涨超过阈值时,保存前会弹确认框把预计花费说清楚。
GTM(自研)
GTM 独立于开机配置,是「候选地址 → 健康检查 → 打包 → 策略 → 一条域名解析」的完整流水线,共 4 个标签:实例 / 健康模板 / 地址 / 地址池。
- 健康模板:定义一次 TCP 探测——端口、尝试次数、重试间隔、用哪些拨测节点,以及"达标比例"(默认 50%:本轮真正给出了结果的拨测节点里,测通的占比达到这个比例才算健康,分母不是"配置了几个节点"而是"这一轮真正上报了结果的节点")。一个模板可以被多个地址复用。
- 地址:候选值来源三选一——自定义 IP、自定义域名(CNAME,写出去的就是域名本身,不会先解析成 IP 再写 A 记录;同一条记录下 IP 和域名混用会丢弃其中一类并在运行历史里报出)、引用配置在线 IP(取某个开机配置当前的在线 IP)。手动状态:自动 / 强制在线 / 强制离线。权重 / 优先级是"地址在某个地址池里"的成员属性,不是地址自己的属性。
- 地址池:把若干地址打包,池内按策略(轮询 / 权重 / 顺序 / 分线路解析)选值;"最小可用数"决定池要凑够多少个健康地址才判定为整体可用。
- 实例:绑定一个域名,引用若干地址池 + 一种负载策略(轮询 / 权重 / 顺序 / 分线路解析),输出到阿里云 DNS 或 Cloudflare。
- 预览(dry-run)/ 清空(drain):预览按当前健康结果试算将写入的记录,不会真正写入;清空强制按本次计算结果覆盖 DNS(即便结果为空),用于清理陈旧记录,是唯一会主动写入"空结果"的操作。
- 兜底行为:健康模板被删除 / 禁用导致探测不到结果时,保留上次已知解析,不会误判"全部健康"写入源 IP;实例计算结果为空但之前有输出时,同样保留上次输出,不会误删已有解析。
还有另一条路:阿里云官方 GTM
「配置与脚本」的解析·故障切换标签里有一个「阿里云 GTM」模块——它和独立的「GTM」区域(自研 GTM)是两条并行的路,不是新旧关系,用哪条都可以,两个模块互不干扰,也可以并存:
- 自研 GTM(这一节讲的这一套):不用额外开通阿里云的付费产品,读写的就是普通的阿里云 DNS / Cloudflare DNS 记录;功能更全——地址池、分线路、多种健康模板、按时间自动停用都在这一条路上;健康判定和故障转移都在本程序这一侧跑。
- 阿里云 GTM(官方):解析由阿里云自己应答,本程序只负责把机器上报的 IP 写进你那个 GTM 地址;要先在阿里云开通「全球流量管理」这个产品,换来的好处是分流和故障转移由阿里云自己跑,不依赖本程序一直在线,更稳一点;另外也支持按时间自动停用 / 启用,只是只支持阿里云一家。
分线路解析
分线路解析仅阿里云 DNS 支持:按运营商 / 地域配置不同的解析结果——电信用户查到电信线路的结果、联通用户查到联通线路的结果。Cloudflare 走的是另一条路(要靠 Cloudflare 负载均衡,非 Enterprise 套餐下按地域分流还需额外加购 Traffic Steering,否则只提供"顺序兜底"和"权重"两种调度)。
一句话版本:按地址池的排列顺序、逐条线路首匹配,匹配到但不够健康就顺延到下一个,"默认"线路永远兜底。
- 地址池按序号排成一个有序列表(面板里可以用 ↑↓ 调整顺序)。
- 每个地址池在这个实例里服务哪些线路,是"实例 ↔ 地址池"这层引用关系的属性——一个池可以同时服务多条线路。
- 对每一条目标线路,系统按地址池的排列顺序从上到下找:找到第一个"配置为服务这条线路(或配置为『默认』兜底)"并且"健康成员数达到最少可用数"的地址池,就用它的输出,后面排在它之后的池哪怕更健康也不会再被看。
- 排在前面的池匹配了这条线路但健康成员不够,就跳过它,继续往后找下一个匹配这条线路的池——这就是分线路场景下的健康故障转移。
- "默认"永远作为兜底线路存在:没有被任何具体线路覆盖到的访客,查到的是"默认"这条线路的结果,强烈建议在地址池列表里放一个"默认(全部)"池垫底。
同样的"首匹配"规则在池内部也适用——如果一个地址池自己的策略被设成"分线路解析",它会对自己的成员地址做一次同样逻辑的嵌套匹配。
健康检查与故障切换
产品里有两套各自独立的探测机制,共享同一个「拨测节点区」资源池,但服务不同的下游:
- GTM 健康模板(见上方「GTM」一节):决定一个地址算不算健康,进而决定 GTM 实例最终输出的解析——策略选"顺序"时就是"主备"语义:主用的挂了,自动顶上备用的。
- 配置里的「TCP 端口拨测」:默认关闭,默认探测端口 22(可自定义);国内和国外分别选择拨测节点,连续复测确认后才触发动作,减少网络波动误判。拨测结果 → 动作:国内通 + 国外通 = 正常不动作;国内不通 + 国外通 = 可调用 Worker HTTP 动作,也可下发服务器命令(见下方「脚本执行」一节);国内通 + 国外不通 = 只记录结果,不切 IP;国内外都不通 = 判定可能死机 / 补机中,不误切 IP,并阻止本轮 DDNS / GTM 写入。
兜底:找不到健康结果时不会误判成"全部健康"写入源 IP,也不会误删已有解析——细节见「GTM」一节。
按时间自动停用(排班)
自研 GTM 的「地址」和「地址池」都能设排班;阿里云官方 GTM 的「地址」也能设(仅 GTM 3.0 / Cloud Address 支持),两处口径一致。
- 停用时段 / 启用时段,二选一:停用时段(默认)——列出来的时段关,其余时间开;启用时段——列出来的时段开,其余时间全关。同一组时间在两种模式下含义正好相反,切换模式时面板会弹确认并告诉你切换后每天会关多少小时。
- 每天重复 / 按星期几:默认每天重复;切到按星期几后,星期几是跟着每一行时段走的,不是整条规则共用一组星期,所以"周一 08:00-09:00、周二 13:00-14:00"这种写法写得出来。
- 时区必须显式设置:时区挂在 GTM 实例上,一个实例只能有一个时区;没设时区 = 这条排班完全不生效(不会拿浏览器时区或 UTC 去兜底),只能选 Asia/Shanghai 这种地区名,不收固定偏移。
- 排班和健康是两层独立的闸门:排班放行不代表健康,健康好也挡不住排班,一个地址真正进解析,两层都得过;地址池被排班停用时,分线路解析会跳过它、顺延到下一个匹配的池。
- 保存前会先演一遍:把未来 7 天按分钟演一遍,如果会让某条线路在某一刻一个可用地址都不剩,保存会被拒绝,并告诉你是哪条线路、哪个时段、被哪些资源同时停掉的。
- 不许被时区不同的实例共用:设了排班的地址 / 地址池,保存时会拦下被不同时区实例同时引用的情况,处置办法是把资源复制一份各用各的。
- 精度分钟级,同步每分钟跑一轮。
DDNS
- 默认关闭,新建配置不带任何域名;机器只负责上报公网 IP,域名解析由控制面完成。
- 单 IP 模式:更新当前 active 机器的解析。多 IP 模式:同步所有"有效在线"机器的 IPv4。
- 服务商支持阿里云 AliDNS 和 Cloudflare DNS,凭证从「凭证区」选,机器端不保存 DNS API 密钥。
- 跟 GTM 实例不是同一套东西:DDNS 完全不经过健康模板 / 地址池那套判定,只是把某条域名记录直接指向"当前判定为这个配置下活跃的那台机器"的最新公网 IP。适合只有一台 / 一组机器、不需要复杂调度策略的场景;需要多线路 / 多权重 / 多备份策略时,才需要建 GTM 实例。
- 会被 TCP 拨测"国内外都不通"的判定阻止本轮写入——见上方「健康检查与故障切换」一节。
网页终端
默认关闭。开启后,这份配置下的机器可以在面板上直接开一个 root 终端,敲什么就在机器上执行什么。
网页终端需要 systemd,而且装它必须有人真的到这台机器上、带着 SSH 凭据手动执行一条命令——开关打开之后系统绝不会自动安装(避免"控制面被攻破 = 攻击者远程给自己开一个 root 终端");这台机器上其它功能(DNS 解析、健康检查、故障切换、心跳上报)不受影响,没有 systemd 的机器上就是这一个功能装不了、用不了。
- 关掉开关 → 自动卸载(下一轮上报,≤60 秒,不需要谁登机器)。
- 打开开关 → 绝不自动安装。面板只给出一条命令,要有人真的拿着 SSH 凭据登上那台机器手动执行:sudo /opt/keepalight-agent/agent/agent.sh --install-terminal
- 那条命令里没有任何凭据(用的是机器早就有的本机凭据),抄给别人也没用——别人没有这台机器的 root。
- 控制面自己所在的那台宿主机永远不许开,任何开关都覆盖不了。
- 这个开关拨一下立刻生效,不跟随"保存"(不住在配置文档里,套模板 / 导入备份都打不开它);只能收紧不能放松——控制面服务器上的对应开关没开的话,这里开了也一样开不出终端。
脚本执行(Nyanpass / BBR / 拨测失败动作)
这三类是产品里会在业务服务器上以 root 身份跑代码的功能,分别挂在「服务器·系统」和「解析·故障切换」两个标签下:
- Nyanpass / rel_nodeclient:默认关闭。执行的就是你粘贴进来的那条完整安装命令(面板不限定安装脚本域名,也没有"线路"选项)。不只在开机阶段跑一次——以后每次改动这个模块(改命令 / 开 / 关)保存后,都会向机器下发一条同步命令,先执行卸载脚本清掉旧的,开着的话再按新命令重装一遍。
- BBR:默认关闭。机器本机执行 BBR 优化脚本,默认使用内置脚本,也可以切换为外部脚本 URL;和 DDNS / GTM 写入没有直接关系。
- 拨测失败后的服务器命令:TCP 拨测判定"国内不通 + 国外通"时,可以下发一条服务器命令(需要先开启「允许下发 root 命令」);命令随下一次上报响应发给机器,机器用 bash -lc 本地执行,结果随下一次上报带回。平行还有一个"Worker HTTP 动作"选项,不在机器上执行,是控制面自己发一个 HTTP 请求去调用你填的地址,适合"切换云厂商 IP"这类外部接口。
- 「允许下发 root 命令」关闭时,这一整组脚本执行也会一起停止下发:这个总开关不只管拨测失败后的服务器命令,Nyanpass / BBR 的配置同步命令和 Agent 自动更新的推送命令走的也是同一条通道——关掉它,这些命令全部不会再往机器发;已经改动过的配置要重新执行一次安装命令才能真正生效。
Agent 自动更新
- 默认关闭。开启后,这份配置下只要有机器上报的 Agent 脚本版本落后于控制面当前这一版,就会收到一条以 root 执行的安装命令把新版装上去。
- 下载安装脚本时先核对 sha256(期望值由控制面现算,不采信任何外部输入),对不上就不装。
- 频率限制:同一台机器两次推送之间至少隔 30 分钟,同一个目标版本最多推 8 次就停下来喊人,不会把装不上的机器每分钟 root 重跑一遍。
- 把这一项从"关"拨到"开"需要重新输入一次管理员密码(二次验证),拨回"关"不需要口令、立刻生效。它刻意不进模板系统——这种开关不该被套模板批量打开。
- 同样受「允许下发 root 命令」总开关连带——见上方「脚本执行」一节。
已对接服务器
- 怎么出现的:配置对应的机器执行开机命令后,Agent 上报即自动出现在这里,不需要手动添加。
- 状态判定:在线 → 疑似掉线 → 离线,三档时间阈值在「全局设置」里配置,只影响状态显示,不影响实际写入逻辑。
- 角色:活跃写入(当前 active,会被写进 DDNS / GTM)/备用只记录/已被替换/多活有效(多活模式下所有在线机器都算有效)。
- SSH 面板:配置里开了「root SSH 密码托管」的机器,这里能看公网 IP / SSH 用户 / 密码(可切换显隐)/ 一键复制 SSH 命令或密码。
- 清理离线:「清理离线」按钮一键清理所有非在线记录(在线的不会被删)。⚠ 这是唯一真正把机器记录从存储里删掉的动作——「全局设置 → 自动清理」里的天数只负责把超期机器从列表隐藏,不会自己消失。
模板
- 两种类型:全量模板(保存整套配置:基础 + 服务器·系统 + 解析·故障切换所有模块);单模块模板(只保存一个模块,如只存「TCP 拨测」或只存「内置 DDNS」的设置)。
- 怎么存:在配置编辑器里,每个模块小节旁边都有「存为模板」按钮,直接把当前填写内容另存;也可以在「模板」页新建 / 编辑。
- 怎么用:新建或编辑配置时,在对应标签选一个模板即可套用(全量模板套整套配置,单模块模板只覆盖那一个模块,其余模块不受影响)。
- 列表范围:只显示当前账号自己保存的模板;新建配置默认选中「自定义」,切回自定义会恢复切换模板前手填的内容,不会丢失。
全局设置
- 管理员账号与访问路径:改用户名 / 密码、改面板访问路径都在这里。改密码后其它设备上已登录的会话全部失效(当前窗口不受影响);改面板路径后旧地址立刻打不开,保存时二次确认,保存后自动跳到新地址。面板路径出厂就是安装时随机生成的一串,忘了在服务器上用 --show-panel-path 查当前真正生效的路径。
- Agent 回调基础 URL:开机 / 安装命令里 Agent 回连控制面使用的域名,留空则用面板自身域名;非 localhost 必须使用 HTTPS,否则保存会被拒绝。
- 在线判定超时(分钟)/ 离线判定(小时):控制「已对接服务器」的状态显示阈值,只影响显示不影响实际写入逻辑,取值范围分别是 1-1440 / 1-8760。
- 自动清理(天):超过该时间未上报的机器从列表隐藏,不再显示、也不再进入 DDNS / GTM 的 IP 池;⚠ 隐藏不等于删除,记录仍留在存储里,真正删除要去「已对接服务器」页点「清理离线」。
- 补机接管(秒):只给「保守心跳」接管模式用,旧 active 超过该时间未上报,新机器才接管。
- 备份与恢复:导出把凭证 / 拨测节点 / GTM 实例 / 配置 / 模板 / 全局设置整体导出为一份 JSON(机密字段以密文导出,授权本身不在导出范围内);导入时同名条目会被覆盖,需要与导出时相同的密钥才能解密机密字段;授权有数量限制时,导入还要再过一道限额检查——四类数量都不许比恢复前更多,卡住任何一类就整份备份一个字节都不会写入。
授权与购买
授权对应的是自建部署的控制面本体——你自己一台服务器上跑的那个可执行文件。
- 没有免费试用期:装完还没激活,面板从第一分钟起就是只读的;正常流程里装机时联网会自动用激活码完成激活,不需要装完再手动走一遍。
- 锁的是"改",不是"用":未授权 / 已过期 / 授权无效时,只有新增、修改、删除配置这类写操作会被拒绝;域名解析、健康检查、故障切换、Agent 上报、拨测回传、面板登录查看、导出备份都照常运行,不会中断。
- 没有宽限期:到期当天配置立刻变只读,没有"过期后还能再改几天"的缓冲;到期前 14 天面板开始提示剩余天数,续费或重新激活后立即恢复可编辑,不需要重启。
- 四类数量限额:GTM 实例 / 配置与脚本 / 凭证 / 拨测节点,各自独立计数;某一类在授权里缺失该项、填了 null 或 0,都表示这一类不限量。
- "满了"只挡新建:用量正好等于上限时,只有"再新建一个"会被拒;已建好的照常改、照常删。"超了"(比如降级套餐导致存量超过新上限)会锁住这一整类资源的编辑,直到删回额度以内;存量不会被停用、不会被删除,解析和故障切换一秒不停,删除永远放行。
- 激活方式:在线激活拿到的其实是一张有效期 45 天的"租约票",客户端会在到期前自动联网续签,正常联网使用感觉不到这条规则;连续 45 天联不上网面板才会变只读。想彻底不联网,走离线导入——拿到的是长票,有效期直接到订阅到期那天,代价是没法自动续期,需要供应商每次重新签发。
- 换机器 / 迁移:授权绑定的是"本机安装编号"(不是硬件或域名),换一台机器要在新机器上重新输入激活码完成迁移。
API 令牌
- 让自己的程序直接调用面板接口。按权限项勾选(读 / 编辑两档),可选填 IP 白名单和有效期,随时单独吊销——没有"全权"这一档,这正是 Cloudflare 弃用 Global API Key 的同一个理由。
- 明文只在创建那一屏显示一次,之后再也看不到(服务端只存哈希,自己也拿不回来)。
- 令牌调用也必须走授权绑定的那个域名,和面板同一把锁,令牌不豁免:用服务器 IP、127.0.0.1、SSH 隧道或别的域名去调,一律返回和未知路径完全相同的 404,令牌有效也没用。
- 几件事令牌一律做不了:看机器 root 密码、导入备份、保存一份会以 root 跑遍机群的配置——这几件事要求"有人坐在浏览器前",会被明确拒绝,请在面板里手工做。
- 吊销后立刻生效,用它的程序会马上收到统一的 404。
内置文档
面板左侧最后一项,静态展示、不请求接口,分两个标签:「功能说明」(逐个模块讲解,本页大部分内容就是从这里核对出来的)和「接口文档 API」(一百多条对外接口,含通用约定——鉴权失败一律回 404、二次验证一次换一张票、授权闸门放行名单)。两个标签共用一套搜索框,按标题 / 模块 / 关键词搜。折叠状态记在浏览器本地,读不到就安静退回"全部收起",不会报错。
安装教程:从拿到授权码到打开面板
拿到授权码的流程见上方「先买后装」一节;这里接着讲装机这一半,全部针对"自建 Linux 服务器"这条路径。
① 系统要求
x86_64 或 aarch64、glibc ≥ 2.28 的 Linux 发行版;安装脚本会在真正动任何文件之前自己检测,不满足会直接拒绝并说明原因。
✅ 支持
- Ubuntu 20.04 及以上
- Debian 10 及以上
- RHEL / CentOS / Rocky Linux / AlmaLinux 8 及以上
- Amazon Linux 2023 及以上
🚫 明确不支持
- CentOS 7 / RHEL 7 及更早
- Ubuntu 18.04 及更早
- Debian 9 及更早
- Amazon Linux 2(不是 2023)
- Alpine 等 musl 系发行版
不确定自己这台机器够不够?在目标机器上跑 ldd --version,看第一行最后那个版本号。
② 把授权码写进配置文件——不是命令行参数
授权码只能写进配置文件,命令行传参这种写法已经删掉了:写在命令行上的授权码会出现在 ps 的输出里、也会留在 shell 历史里,配置文件不会。
mkdir -p /etc/keepalight && chmod 0700 /etc/keepalight printf 'LICENSE_CODE=你的授权码 ' > /etc/keepalight/license.conf chmod 0600 /etc/keepalight/license.conf
文件里就这一行,不要加引号、不要在同一行写注释,键名是 LICENSE_CODE。没填码就跑安装脚本:它会在动任何文件之前停下来,把购买页地址打给你,这一次一个文件都不会落地。
③ 装机命令
sudo ./install.sh
脚本依次做这些事:检测系统要求 → 读授权码(没有就在这里停下,什么都不装)→ 放可执行文件 → 自动生成一条随机面板路径和密钥 → 建数据目录 → 联网激活(拿授权码换一张授权票,这一步不成功就不往下装,而且会把刚才生成的东西全部清掉,机器回到装之前的状态;失败会说清楚是"授权码本身用不了"还是"联系不上授权服务器")→ 装好 systemd 服务并等它真的起来 → 打印出一个地址。
- 把绑定域名的 DNS 解析指到这台服务器。
- 在这台机器上配好 HTTPS 反向代理,转到面板监听的地址(默认 127.0.0.1:8080)——反代必须透传 Host 请求头:域名锁只认这个请求头,不透传的话,就算从正确的域名访问也会得到 404。同时要加 TRUST_PROXY=true,并透传 X-Forwarded-For / X-Forwarded-Proto。
- 用浏览器打开安装完成时打印的那个首次配置地址,在页面上自己设管理员账号——安装脚本不会生成、也不会打印任何管理员口令。
用服务器 IP、127.0.0.1、SSH 隧道或别的域名访问,一律 404,这不是故障。客户机器上的 Agent 完全不受这条限制:上报、配置下发、命令回执在任意域名或 IP 上都照常工作。
④ 面板路径是随机的,忘了怎么办
面板路径是安装时生成的一串随机字符,只在安装脚本的终端输出里打印这一次(服务端日志、系统日志里都不会出现,避免被贴进工单时泄漏)。忘了地址,在服务器上跑这条只读命令查(服务跑着也能查,不影响运行):
DATA_DIR=/var/lib/keepalight /opt/keepalight/keepalight --show-panel-path
改路径要去面板里改:「全局设置 → 管理员账号与访问路径」。
⑤ 卸载
- sudo ./install.sh --uninstall(默认):数据目录和配置文件都保留,只删可安全重新生成的二进制和服务定义;之后重新装会被自动识别成"升级",账号 / 密钥 / 已存凭据全部原样接得上。
- sudo ./install.sh --uninstall --purge:连数据目录一起永久删除,这是唯一不可逆的一步;交互式终端会先列出要删的东西再要求输入 yes 确认,非交互环境必须显式加 --yes,不给就拒绝执行、不删任何文件。
价格介绍
这一页是静态站,具体价格不写在这里——后台改了价这一页不会跟着变,写死的数字迟早会变成一句骗人的旧话。这一节只讲计价模型,具体数字请到购买页看当前实时价格。
- 四类额度:GTM 实例 / 配置与脚本 / 凭证 / 拨测节点,各自独立计数;不限量是默认——套餐里没写某一类的上限,就是这一类不限量,不是锁死不让建。
- 超额只挡新建:用量到了上限,只挡"再新建一个";已经建好的东西照常改、照常用,解析和故障切换不会被停用、不会被删除,一秒都不停。
- 配额加购独立计费、独立到期日:套餐是套餐、加购是加购,每一笔加购从购买当天起算自己的有效期,续费套餐不会顺带延长加购;加购到期后额度自动降回套餐额度,已经建好的东西不会被删除或停用。
- 续期顺延,换套餐不折抵:续同一个套餐 = 续期,在原到期日上顺延,一天不损失;选了不同的套餐 = 换套餐,旧套餐立即作废,剩余期限不折抵、不退款、不叠加,新套餐从换的那天起重新计算。
- 到期即锁面板,没有宽限期;但解析与故障切换永不因此停止:到期当天就锁"改配置"这一件事,域名解析、健康检查、故障切换、Agent 上报这几件事不会因为授权状态而停一秒——细节见上方「授权与购买」一节。
- 这一节讲的额度、加购、到期规则,只管你即将购买、装在自己服务器上的这一套自建部署——本产品另有一种把源码接到自己环境里跑的形态,那条路完全不经过这里说的任何授权判断,也不是这个购买入口要卖给你的东西,这里不再展开。
如实告诉你:这几件事目前做不到
- 网页终端需要 systemd:见上方「网页终端」一节的完整说明。这台机器上其它功能不受影响,只是打不开网页终端。
- 不承诺零停机:健康检查间隔 + DNS 生效之间必然有秒到分钟级的时间差,具体多快取决于你设置的检查频率和 DNS 记录的 TTL。
- 没有免费试用期,也没有宽限期:授权到期当天就锁"改配置"这一件事(域名解析、健康检查、故障切换不受影响,永远不会停);这不是漏洞是刻意的设计。
- 没有自动迁移工具:换一台服务器重装,配置概念是通的,但没有工具帮你把数据自动搬过去,需要重新配置。
- 升级没有自动灰度/回滚编排:每台机器的升级命令都是你自己手动复制到服务器上执行的,可以自己控制节奏,但不是产品提供的分批推送功能。