deploy: a561ca413d
This commit is contained in:
1 parent
34598694c7
commit
de82899984
296 files changed
+2466
-2578
No files matched your search
@@ -0,0 +1,19 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh-CN" dir="ltr">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||||
|
<title>404 | 哪吒监控</title>
|
||||||
|
<meta name="description" content="Not Found">
|
||||||
|
<link rel="preload stylesheet" href="/assets/style.ac216bba.css" as="style">
|
||||||
|
<script type="module" src="/assets/app.52883806.js"></script>
|
||||||
|
<link rel="preload" href="/assets/inter-roman-latin.2ed14f66.woff2" as="font" type="font/woff2" crossorigin="">
|
||||||
|
<script id="check-dark-light">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="app"><div class="Layout" data-v-b2cf3e0b><!--[--><!--]--><!--[--><span tabindex="-1" data-v-b8b11faa></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-b8b11faa> Skip to content </a><!--]--><!----><header class="VPNav" data-v-b2cf3e0b data-v-7e5bc4a5><div class="VPNavBar" data-v-7e5bc4a5 data-v-7683ced7><div class="container" data-v-7683ced7><div class="title" data-v-7683ced7><div class="VPNavBarTitle" data-v-7683ced7 data-v-4d981103><a class="title" href="/" data-v-4d981103><!--[--><!--]--><!----><!--[-->哪吒监控<!--]--><!--[--><!--]--></a></div></div><div class="content" data-v-7683ced7><div class="curtain" data-v-7683ced7></div><div class="content-body" data-v-7683ced7><!--[--><!--]--><div class="VPNavBarSearch search" style="--vp-meta-key:'Meta';" data-v-7683ced7><!--[--><div id="docsearch"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg class="DocSearch-Search-Icon" width="20" height="20" viewBox="0 0 20 20" aria-label="search icon"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-7683ced7 data-v-7f418b0f><span id="main-nav-aria-label" class="visually-hidden" data-v-7f418b0f>Main Navigation</span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink active" href="/" tabindex="0" data-v-7f418b0f data-v-5e623618 data-v-8f4dc553><!--[-->使用指南<!--]--><!----></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/case/index.html" tabindex="0" data-v-7f418b0f data-v-5e623618 data-v-8f4dc553><!--[-->社区项目<!--]--><!----></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/developer/index.html" tabindex="0" data-v-7f418b0f data-v-5e623618 data-v-8f4dc553><!--[-->开发手册<!--]--><!----></a><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-7683ced7 data-v-74abcbb9 data-v-764effdf><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-764effdf><span class="text" data-v-764effdf><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="option-icon" data-v-764effdf><path d="M0 0h24v24H0z" fill="none"></path><path d=" M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z " class="css-c4d79v"></path></svg> <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-764effdf><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-764effdf><div class="VPMenu" data-v-764effdf data-v-e7ea1737><!----><!--[--><!--[--><div class="items" data-v-74abcbb9><p class="title" data-v-74abcbb9>简体中文</p><!--[--><div class="VPMenuLink" data-v-74abcbb9 data-v-2f2cfafc><a class="VPLink link" href="/en_US/" data-v-2f2cfafc data-v-8f4dc553><!--[-->English<!--]--><!----></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-7683ced7 data-v-f6a63727><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="toggle dark mode" aria-checked="false" data-v-f6a63727 data-v-82b282f1 data-v-f3c41672><span class="check" data-v-f3c41672><span class="icon" data-v-f3c41672><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-82b282f1><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0Line truncated
|
||||||
|
<script>__VP_HASH_MAP__ = JSON.parse("{\"case_case1.md\":\"ecc14085\",\"en_us_guide_api.md\":\"23c9cbfd\",\"en_us_guide_dashboard.md\":\"d78e0670\",\"en_us_developer_theme.md\":\"71386f12\",\"en_us_guide_notifications.md\":\"f27b667a\",\"en_us_guide_loginq.md\":\"9b2c983a\",\"en_us_guide_q2.md\":\"7d419ac0\",\"en_us_guide_q3.md\":\"413034ab\",\"en_us_guide_q4.md\":\"29c73660\",\"en_us_guide_q5.md\":\"6147bc60\",\"en_us_guide_q6.md\":\"5546f36f\",\"en_us_guide_q7.md\":\"e3e49f45\",\"en_us_guide_servers.md\":\"15cdd004\",\"en_us_guide_services.md\":\"496a9331\",\"en_us_guide_settings.md\":\"a3fde31e\",\"case_case2.md\":\"6c7d5ccf\",\"case_case3.md\":\"5e4a3d1d\",\"case_case4.md\":\"9da898b3\",\"case_case5.md\":\"8d0f657b\",\"en_us_guide_agentq.md\":\"79461295\",\"en_us_guide_agent.md\":\"ec3cceee\",\"en_us_guide_tasks.md\":\"2f23de0e\",\"en_us_index.md\":\"a2928aa3\",\"guide_agent.md\":\"aa1597de\",\"guide_agentq.md\":\"58353381\",\"guide_dashboard.md\":\"2c7ebc9c\",\"guide_dashboardq.md\":\"45324b02\",\"guide_loginq.md\":\"b86b5d13\",\"guide_notifications.md\":\"c2a46afe\",\"case_index.md\":\"490516a2\",\"developer_index.md\":\"50de2d0d\",\"developer_l10n.md\":\"97d82e33\",\"developer_theme.md\":\"3f733e73\",\"en_us_case_case1.md\":\"4184634e\",\"en_us_case_case2.md\":\"a2d0c610\",\"guide_q1.md\":\"da6990ac\",\"en_us_case_case3.md\":\"6c813a79\",\"en_us_case_index.md\":\"c59e34c7\",\"en_us_developer_index.md\":\"722364da\",\"en_us_developer_l10n.md\":\"830faa6a\",\"en_us_guide_dashboardq.md\":\"f8c0f2c4\",\"guide_q2.md\":\"dc262f4e\",\"guide_q3.md\":\"5b71ea6c\",\"guide_q4.md\":\"d3d700bd\",\"guide_q5.md\":\"8c32a6a8\",\"guide_q6.md\":\"468b73f3\",\"guide_q7.md\":\"46c4299c\",\"guide_servers.md\":\"38e933fe\",\"guide_services.md\":\"8e52c9c8\",\"guide_settings.md\":\"0b01b850\",\"guide_api.md\":\"b7dd76b3\",\"guide_tasks.md\":\"9090b413\",\"index.md\":\"c741ff17\",\"en_us_case_case4.md\":\"b17c51fa\"}")
|
||||||
|
__VP_SITE_DATA__ = JSON.parse("{\"lang\":\"zh-CN\",\"dir\":\"ltr\",\"title\":\"VitePress\",\"description\":\"A VitePress site\",\"base\":\"/\",\"head\":[],\"appearance\":true,\"themeConfig\":{\"algolia\":{\"appId\":\"HP6QF6KMZD\",\"apiKey\":\"fb8bae9ed373d1057e0c07fcf32b3f1a\",\"indexName\":\"nezhahq\"},\"footer\":{\"copyright\":\"Copyright © 2022-present Nezhahq\"}},\"locales\":{\"root\":{\"lang\":\"zh-CN\",\"label\":\"简体中文\",\"title\":\"哪吒监控\",\"description\":\"哪吒监控是一个轻量化的运维工具\",\"link\":\"/\",\"themeConfig\":{\"lastUpdatedText\":\"上次更新\",\"editLink\":{\"pattern\":\"https://github.com/nezhahq/nezhahq.github.io/edit/main/docs/:path\",\"text\":\"在GitHub中编辑\"},\"nav\":[{\"text\":\"使用指南\",\"link\":\"/\",\"activeMatch\":\"^/$|^/guide/\"},{\"text\":\"社区项目\",\"link\":\"/case/index.html\",\"activeMatch\":\"^/case/\"},{\"text\":\"开发手册\",\"link\":\"/developer/index.html\",\"activeMatch\":\"^/developer/\"}],\"sidebar\":{\"/\":[{\"text\":\"安装手册\",\"items\":[{\"text\":\"安装 Dashboard\",\"link\":\"/guide/dashboard.html\"},{\"text\":\"安装 Agent\",\"link\":\"/guide/agent.html\"}]},{\"text\":\"管理面板配置\",\"items\":[{\"text\":\"主机\",\"link\":\"/guide/servers.html\"},{\"text\":\"服务\",\"link\":\"/guide/services.html\"},{\"text\":\"定时任务\",\"link\":\"/guide/tasks.html\"},{\"text\":\"报警通知\",\"link\":\"/guide/notifications.html\"},{\"text\":\"设置\",\"link\":\"/guide/settings.html\"},{\"text\":\"API\",\"link\":\"/guide/api.html\"}]},{\"text\":\"常见问题\",\"items\":[{\"text\":\"TG api 被墙\",\"link\":\"/guide/q1.html\"},{\"text\":\"Agent 无法启动/上线 查看日志并进行排错的步骤\",\"link\":\"/guide/q2.html\"},{\"text\":\"反向代理 gRPC 端口的步骤\",\"link\":\"/guide/q3.html\"},{\"text\":\"实时通道断开/在线终端连接失败\",\"link\":\"/guide/q4.html\"},{\"text\":\"进行数据迁移、备份和恢复的步骤\",\"link\":\"/guide/q5.html\"},{\"text\":\"设置每月重置流量统计的步骤\",\"link\":\"/guide/q6.html\"},{\"text\":\"自定义 Agent 监控项目的步骤\",\"link\":\"/guide/q7.html\"}]},{\"text\":\"排障指南\",\"items\":[{\"text\":\"Dashboard 相关\",\"link\":\"/guide/dashboardq.html\"},{\"text\":\"Agent 相关\",\"link\":\"/guide/agentq.html\"},{\"text\":\"登录相关\",\"link\":\"/guide/loginq.html\"}]}],\"/guide/\":[{\"text\":\"安装手册\",\"items\":[{\"text\":\"安装 Dashboard\",\"link\":\"/guide/dashboard.html\"},{\"text\":\"安装 Agent\",\"link\":\"/guide/agent.html\"}]},{\"text\":\"管理面板配置\",\"items\":[{\"text\":\"主机\",\"link\":\"/guide/servers.html\"},{\"text\":\"服务\",\"link\":\"/guide/services.html\"},{\"text\":\"定时任务\",\"link\":\"/guide/tasks.html\"},{\"text\":\"报警通知\",\"link\":\"/guide/notifications.html\"},{\"text\":\"设置\",\"link\":\"/guide/settings.html\"},{\"text\":\"API\",\"link\":\"/guide/api.html\"}]},{\"text\":\"常见问题\",\"items\":[{\"text\":\"TG api 被墙\",\"link\":\"/guide/q1.html\"},{\"text\":\"Agent 无法启动/上线 查看日志并进行排错的步骤\",\"link\":\"/guide/q2.html\"},{\"text\":\"反向代理 gRPC 端口的步骤\",\"link\":\"/guide/q3.html\"},{\"text\":\"实时通道断开/在线终端连接失败\",\"link\":\"/guide/q4.html\"},{\"text\":\"进行数据迁移、备份和恢复的步骤\",\"link\":\"/guide/q5.html\"},{\"text\":\"设置每月重置流量统计的步骤\",\"link\":\"/guide/q6.html\"},{\"text\":\"自定义 Agent 监控项目的步骤\",\"link\":\"/guide/q7.html\"}]},{\"text\":\"排障指南\",\"items\":[{\"text\":\"Dashboard 相关\",\"link\":\"/guide/dashboardq.html\"},{\"text\":\"Agent 相关\",\"link\":\"/guide/agentq.html\"},{\"text\":\"登录相关\",\"link\":\"/guide/loginq.html\"}]}],\"/case/\":[{\"text\":\"社区项目\",\"items\":[{\"text\":\"1. 搭建哪吒 Telegram 机器人\",\"link\":\"/case/case1.html\"},{\"text\":\"2. 使用Siri语音运行快捷指令查询服务器状态\",\"link\":\"/case/case2.html\"},{\"text\":\"3. 自建多用户多语言 Telegram 服务器状态查询机器人\",\"link\":\"/case/case3.html\"},{\"text\":\"4. Fake-agent,监控数据作弊器\",\"link\":\"/case/case4.html\"},{\"text\":\"5. Nezha server over Argo tunnel 白嫖利器\",\"link\":\"/case/case5.html\"}]}],\"/developer/\":[{\"text\":\"开发手册\",\"items\":[{\"text\":\"创建新主题\",\"link\":\"/developer/theme.html\"},{\"text\":\"l10n\",\"link\":\"/developer/l10n.html\"}]}]}}},\"en_US\":{\"lang\":\"en-US\",\"label\":\"English\",\"title\":\"Nezha Monitoring\",\"description\":\"Nezha Monitoring is a lightweight O&M tool\",\"link\":\"/en_US/\",\"themeConfig\":{\"lastUpdatedText\":\"Last Updated\",\"editLink\":{\"text\":\"Edit this page on GitHub\",\"pattern\":\"https://github.com/nezhahq/nezhahq.github.io/edit/main/docs/:path\"},\"nav\":[{\"text\":\"User Guide\",\"link\":\"/en_US/\",\"activeMatch\":\"^/en_US/guide/\"},{\"text\":\Line truncated
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -1 +0,0 @@
|
|||||||
var Ro=Object.defineProperty,Oo=Object.defineProperties;var Fo=Object.getOwnPropertyDescriptors;var Is=Object.getOwnPropertySymbols;var No=Object.prototype.hasOwnProperty,Ho=Object.prototype.propertyIsEnumerable;var Us=(e,t,n)=>t in e?Ro(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ms=(e,t)=>{for(var n in t||(t={}))No.call(t,n)&&Us(e,n,t[n]);if(Is)for(var n of Is(t))Ho.call(t,n)&&Us(e,n,t[n]);return e},Rs=(e,t)=>Oo(e,Fo(t));const Do="modulepreload",Os={},Bo="/",vr=function(t,n){return!n||n.length===0?t():Promise.all(n.map(s=>{if(s=`${Bo}${s}`,s in Os)return;Os[s]=!0;const r=s.endsWith(".css"),o=r?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${s}"]${o}`))return;const i=document.createElement("link");if(i.rel=r?"stylesheet":Do,r||(i.as="script",i.crossOrigin=""),i.href=s,document.head.appendChild(i),r)return new Promise((l,c)=>{i.addEventListener("load",l),i.addEventListener("error",()=>c(new Error(`Unable to preload CSS for ${s}`)))})})).then(()=>t())};function ts(e,t){const n=Object.create(null),s=e.split(",");for(let r=0;r<s.length;r++)n[s[r]]=!0;return t?r=>!!n[r.toLowerCase()]:r=>!!n[r]}const qo="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",jo=ts(qo);function br(e){return!!e||e===""}function ns(e){if(R(e)){const t={};for(let n=0;n<e.length;n++){const s=e[n],r=pe(s)?zo(s):ns(s);if(r)for(const o in r)t[o]=r[o]}return t}else{if(pe(e))return e;if(fe(e))return e}}const Ko=/;(?![^(]*\))/g,Wo=/:(.+)/;function zo(e){const t={};return e.split(Ko).forEach(n=>{if(n){const s=n.split(Wo);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function at(e){let t="";if(pe(e))t=e;else if(R(e))for(let n=0;n<e.length;n++){const s=at(e[n]);s&&(t+=s+" ")}else if(fe(e))for(const n in e)e[n]&&(t+=n+" ");return t.trim()}const xe=e=>pe(e)?e:e==null?"":R(e)||fe(e)&&(e.toString===wr||!H(e.toString))?JSON.stringify(e,xr,2):String(e),xr=(e,t)=>t&&t.__v_isRef?xr(e,t.value):bt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r])=>(n[`${s} =>`]=r,n),{})}:yr(t)?{[`Set(${t.size})`]:[...t.values()]}:fe(t)&&!R(t)&&!$r(t)?String(t):t,Q={},vt=[],Ue=()=>{},Vo=()=>!1,Jo=/^on[^a-z]/,zt=e=>Jo.test(e),ss=e=>e.startsWith("onUpdate:"),ye=Object.assign,rs=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Yo=Object.prototype.hasOwnProperty,W=(e,t)=>Yo.call(e,t),R=Array.isArray,bt=e=>bn(e)==="[object Map]",yr=e=>bn(e)==="[object Set]",H=e=>typeof e=="function",pe=e=>typeof e=="string",os=e=>typeof e=="symbol",fe=e=>e!==null&&typeof e=="object",kr=e=>fe(e)&&H(e.then)&&H(e.catch),wr=Object.prototype.toString,bn=e=>wr.call(e),Xo=e=>bn(e).slice(8,-1),$r=e=>bn(e)==="[object Object]",is=e=>pe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,It=ts(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),xn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Zo=/-(\w)/g,Ne=xn(e=>e.replace(Zo,(t,n)=>n?n.toUpperCase():"")),Qo=/\B([A-Z])/g,$t=xn(e=>e.replace(Qo,"-$1").toLowerCase()),yn=xn(e=>e.charAt(0).toUpperCase()+e.slice(1)),Mn=xn(e=>e?`on${yn(e)}`:""),Ht=(e,t)=>!Object.is(e,t),Rn=(e,t)=>{for(let n=0;n<e.length;n++)e[n](t)},on=(e,t,n)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Go=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Fs;const ei=()=>Fs||(Fs=typeof globalThis!="undefined"?globalThis:typeof self!="undefined"?self:typeof window!="undefined"?window:typeof global!="undefined"?global:{});let Oe;class ti{constructor(t=!1){this.active=!0,this.effects=[],this.cleanups=[],!t&&Oe&&(this.parent=Oe,this.index=(Oe.scopes||(Oe.scopes=[])).push(this)-1)}run(t){if(this.active){const n=Oe;try{return Oe=this,t()}finally{Oe=n}}}on(){Oe=this}off(){Oe=this.parent}stop(t){if(this.active){let n,s;for(n=0,s=this.effects.length;n<s;n++)this.effects[n].stop();for(n=0,s=this.cleanups.length;n<s;n++)this.cleanups[n]();if(this.scopes)for(n=0,s=this.scopes.length;n<s;n++)this.scopes[n].stop(!0);if(this.parent&&!t){const r=this.parent.scopes.pop();r&&r!==this&&(this.parent.scopes[this.index]=r,r.index=this.index)}this.active=!1}}}function ni(e,t=Oe){t&&t.active&&t.effects.push(e)}const ls=e=>{const t=new Set(e);return t.w=0,t.n=0,t},Cr=e=>(e.w&Ge)>0,Sr=e=>(e.n&Ge)>0,si=({deps:e})=>{if(e.length)for(let t=0;t<e.length;t++)e[t].w|=Ge},ri=e=>{const{deps:t}=e;if(t.length){let n=0;for(let s=0;s<t.length;s++){const r=t[s];Cr(r)&&!Sr(r)?r.delete(e):t[n++]=r,r.w&=~Ge,r.n&=~Ge}t.length=n}},qn=new WeakMap;let Pt=0,Ge=1;const jn=30;let Le;const rt=Symbol(""),Kn=Symbol("");class cs{constructor(t,n=null,s){this.fn=t,this.scheduler=n,this.active=!0,this.deps=[],this.parent=void 0,ni(this,s)}run(){if(!this.active)return this.fn();let t=Le,n=Ze;for(;t;){if(t===this)return;t=t.parent}try{return this.parent=Le,Le=this,Ze=!0,Ge=1<<++Pt,Pt<=jn?si(this):Ns(this),this.fn()}finally{Pt<=jn&&ri(this),Ge=1<<--Pt,Le=this.parent,Ze=n,this.parent=void 0,this.deferStop&&this.stop()}}stop(){Le===this?this.deferStop=!0:this.active&&Line truncated
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{M as s,a4 as p,a5 as i,a6 as u,a7 as c,a8 as l,a9 as d,aa as f,ab as m,ac as h,ad as A,J as g,d as P,u as v,p as y,k as C,ae as w,af as _,ag as b,ah as E}from"./chunks/framework.1625126e.js";import{t as R}from"./chunks/theme.776be62d.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(R),D=P({name:"VitePressApp",setup(){const{site:e}=v();return y(()=>{C(()=>{document.documentElement.lang=e.value.lang,document.documentElement.dir=e.value.dir})}),w(),_(),b(),n.setup&&n.setup(),()=>E(n.Layout)}});async function O(){const e=T(),a=S();a.provide(i,e);const t=u(e.route);return a.provide(c,t),a.component("Content",l),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:f}),{app:a,router:e,data:t}}function S(){return m(D)}function T(){let e=s,a;return h(t=>{let o=A(t);return e&&(a=o),(e||a===o)&&(o=o.replace(/\.js$/,".lean.js")),s&&(e=!1),g(()=>import(o),[])},n.NotFound)}s&&O().then(({app:e,router:a,data:t})=>{a.go().then(()=>{p(a.route,t.site),e.mount("#app")})});export{O as createApp};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,c as t,o as r,a}from"./app.38e99b9a.js";const b='{"title":"\u81EA\u5EFA\u4E00\u4E2ATG\u673A\u5668\u4EBA\u6765\u67E5\u8BE2\u670D\u52A1\u5668\u4FE1\u606F","description":"","frontmatter":{},"headers":[],"relativePath":"case/case1.md","lastUpdated":1682159272000}',o={},n=a('<h1 id="\u81EA\u5EFA\u4E00\u4E2Atg\u673A\u5668\u4EBA\u6765\u67E5\u8BE2\u670D\u52A1\u5668\u4FE1\u606F" tabindex="-1">\u81EA\u5EFA\u4E00\u4E2ATG\u673A\u5668\u4EBA\u6765\u67E5\u8BE2\u670D\u52A1\u5668\u4FE1\u606F <a class="header-anchor" href="#\u81EA\u5EFA\u4E00\u4E2Atg\u673A\u5668\u4EBA\u6765\u67E5\u8BE2\u670D\u52A1\u5668\u4FE1\u606F" aria-hidden="true">#</a></h1><p>\u8D21\u732E\u8005:</p><ul><li><a href="https://github.com/spiritLHLS" target="_blank" rel="noopener noreferrer">spiritLHLS</a></li><li><a href="https://github.com/Erope/" target="_blank" rel="noopener noreferrer">Erope</a></li></ul><p>\u9879\u76EE\u5730\u5740\uFF1A<a href="https://github.com/spiritLHLS/nezha_api_tgbot" target="_blank" rel="noopener noreferrer">nezha_api_tgbot</a></p><p>\u955C\u50CF\u5907\u4EFD\uFF08\u975E\u5B9E\u65F6\u66F4\u65B0\uFF09\uFF1A<a href="https://github.com/nezhahq/nezha_api_tgbot" target="_blank" rel="noopener noreferrer">nezha_api_tgbot</a><br> \u673A\u5668\u4EBA\u53EF\u4EE5\u901A\u8FC7API\u5411\u9762\u677F\u8BF7\u6C42\u670D\u52A1\u5668\u72B6\u6001\u4FE1\u606F\uFF0C\u5F97\u5230\u4FE1\u606F\u540E\u53D1\u9001\u7ED9\u7528\u6237<br> \u4F60\u53EF\u4EE5\u642D\u5EFA\u6B64\u673A\u5668\u4EBA\u6765\u65B9\u4FBF\u5730\u67E5\u770B\u6307\u5B9A\u670D\u52A1\u5668\u7684\u5F53\u524D\u72B6\u6001\u4E14\u4E0D\u9700\u8981\u6253\u5F00\u9762\u677F</p>',5),_=[n];function i(p,s,h,c,l,d){return r(),t("div",null,_)}var g=e(o,[["render",i]]);export{b as __pageData,g as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,c as t,o as r,a}from"./app.38e99b9a.js";const b='{"title":"\u81EA\u5EFA\u4E00\u4E2ATG\u673A\u5668\u4EBA\u6765\u67E5\u8BE2\u670D\u52A1\u5668\u4FE1\u606F","description":"","frontmatter":{},"headers":[],"relativePath":"case/case1.md","lastUpdated":1682159272000}',o={},n=a("",5),_=[n];function i(p,s,h,c,l,d){return r(),t("div",null,_)}var g=e(o,[["render",i]]);export{b as __pageData,g as default};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e,o as t,c as a,R as r}from"./chunks/framework.1625126e.js";const b=JSON.parse('{"title":"自建一个TG机器人来查询服务器信息","description":"","frontmatter":{},"headers":[],"relativePath":"case/case1.md","filePath":"case/case1.md","lastUpdated":1687190167000}'),o={name:"case/case1.md"},_=r('<h1 id="自建一个tg机器人来查询服务器信息" tabindex="-1">自建一个TG机器人来查询服务器信息 <a class="header-anchor" href="#自建一个tg机器人来查询服务器信息" aria-label="Permalink to "自建一个TG机器人来查询服务器信息""></a></h1><p>贡献者:</p><ul><li><a href="https://github.com/spiritLHLS" target="_blank" rel="noreferrer">spiritLHLS</a></li><li><a href="https://github.com/Erope/" target="_blank" rel="noreferrer">Erope</a></li></ul><p>项目地址:<a href="https://github.com/spiritLHLS/nezha_api_tgbot" target="_blank" rel="noreferrer">nezha_api_tgbot</a></p><p>镜像备份(非实时更新):<a href="https://github.com/nezhahq/nezha_api_tgbot" target="_blank" rel="noreferrer">nezha_api_tgbot</a><br> 机器人可以通过API向面板请求服务器状态信息,得到信息后发送给用户<br> 你可以搭建此机器人来方便地查看指定服务器的当前状态且不需要打开面板</p>',5),s=[_];function i(n,c,p,h,l,d){return t(),a("div",null,s)}const g=e(o,[["render",i]]);export{b as __pageData,g as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e,o as t,c as a,R as r}from"./chunks/framework.1625126e.js";const b=JSON.parse('{"title":"自建一个TG机器人来查询服务器信息","description":"","frontmatter":{},"headers":[],"relativePath":"case/case1.md","filePath":"case/case1.md","lastUpdated":1687190167000}'),o={name:"case/case1.md"},_=r("",5),s=[_];function i(n,c,p,h,l,d){return t(),a("div",null,s)}const g=e(o,[["render",i]]);export{b as __pageData,g as default};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e}from"./chunks/qrcode.bde14c07.js";import{_ as a,c as r,o as i,a as t}from"./app.38e99b9a.js";const b='{"title":"\u5728iOS/MacOS\u4E2D\u4F7F\u7528Siri\u8FD0\u884C\u5FEB\u6377\u6307\u4EE4\u67E5\u8BE2\u670D\u52A1\u5668\u72B6\u6001","description":"","frontmatter":{},"headers":[{"level":2,"title":"\u83B7\u53D6\u5FEB\u6377\u6307\u4EE4","slug":"\u83B7\u53D6\u5FEB\u6377\u6307\u4EE4"},{"level":2,"title":"\u4F7F\u7528\u8BF4\u660E","slug":"\u4F7F\u7528\u8BF4\u660E"}],"relativePath":"case/case2.md","lastUpdated":1682159272000}',o={},c=t('<h1 id="\u5728ios-macos\u4E2D\u4F7F\u7528siri\u8FD0\u884C\u5FEB\u6377\u6307\u4EE4\u67E5\u8BE2\u670D\u52A1\u5668\u72B6\u6001" tabindex="-1">\u5728iOS/MacOS\u4E2D\u4F7F\u7528Siri\u8FD0\u884C\u5FEB\u6377\u6307\u4EE4\u67E5\u8BE2\u670D\u52A1\u5668\u72B6\u6001 <a class="header-anchor" href="#\u5728ios-macos\u4E2D\u4F7F\u7528siri\u8FD0\u884C\u5FEB\u6377\u6307\u4EE4\u67E5\u8BE2\u670D\u52A1\u5668\u72B6\u6001" aria-hidden="true">#</a></h1><p>\u5F53\u524D\u7248\u672C\uFF1AV1.0<br> \u8D21\u732E\u8005\uFF1A</p><ul><li>\u767D\u6B4C <a href="https://github.com/hhhkkk520" target="_blank" rel="noopener noreferrer">hhhkkk520</a></li></ul><h2 id="\u83B7\u53D6\u5FEB\u6377\u6307\u4EE4" tabindex="-1">\u83B7\u53D6\u5FEB\u6377\u6307\u4EE4 <a class="header-anchor" href="#\u83B7\u53D6\u5FEB\u6377\u6307\u4EE4" aria-hidden="true">#</a></h2><p>\u4F7F\u7528iPhone\u6216iPad\u626B\u63CF\u4EE5\u4E0B\u4E8C\u7EF4\u7801\uFF0C\u83B7\u53D6\u5FEB\u6377\u6307\u4EE4<br><br><img src="'+e+'" alt=""><br><br> MacOS\u7528\u6237\u8BF7\u8BBF\u95EE<a href="https://www.icloud.com/shortcuts/312005bf5ffd4387ac92a84056db9f09" target="_blank" rel="noopener noreferrer">\u8FD9\u91CC</a>\uFF0C\u83B7\u53D6\u5FEB\u6377\u6307\u4EE4</p><h2 id="\u4F7F\u7528\u8BF4\u660E" tabindex="-1">\u4F7F\u7528\u8BF4\u660E <a class="header-anchor" href="#\u4F7F\u7528\u8BF4\u660E" aria-hidden="true">#</a></h2><ul><li>\u83B7\u53D6\u5FEB\u6377\u6307\u4EE4\u540E\uFF0C\u6253\u5F00\u5E76\u7F16\u8F91\u5FEB\u6377\u6307\u4EE4</li><li>\u5206\u522B\u5728\u4E09\u4E2A\u6587\u672C\u6846\u4E2D\u586B\u5165 <code>\u9762\u677FURL</code>\u3001<code>API Token</code>\u3001<code>\u670D\u52A1\u5668ID</code></li><li>\u4FDD\u5B58\u7F16\u8F91\u5E76\u6D4B\u8BD5\u8FD0\u884C\uFF0C\u80FD\u83B7\u53D6\u7ED3\u679C\u5219\u8868\u793A\u8BBE\u7F6E\u6B63\u786E</li><li>\u4FEE\u6539\u5FEB\u6377\u6307\u4EE4\u7684\u540D\u79F0\uFF0C\u5982\u4FEE\u6539\u4E3A\uFF1A\u201C\u4E00\u53F7\u670D\u52A1\u5668\u72B6\u6001\u201D\uFF0C\u4FDD\u5B58\u540E\u4FBF\u53EF\u4F7F\u7528Siri\u6307\u4EE4\uFF1A\u201C\u563FSiri\uFF0C\u4E00\u53F7\u670D\u52A1\u5668\u72B6\u6001\u201D\u6765\u83B7\u53D6\u670D\u52A1\u5668\u72B6\u6001</li></ul><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>\u6BCF\u4E2A\u5FEB\u6377\u6307\u4EE4\u53EA\u80FD\u76D1\u63A7\u4E00\u53F0\u670D\u52A1\u5668\uFF0C\u5982\u9700\u8981\u76D1\u63A7\u591A\u4E2A\u670D\u52A1\u5668\uFF0C\u8BF7\u591A\u6B21\u590D\u5236\u6B64\u5FEB\u6377\u6307\u4EE4\u5E76\u5206\u522B\u914D\u7F6E\uFF0C\u7136\u540E\u5206\u522B\u4FEE\u6539\u5FEB\u6377\u6307\u4EE4\u540D\u79F0\uFF0C\u5982\uFF1B\u4E00\u53F7\u670D\u52A1\u5668\u72B6\u6001\u3001\u4E8C\u53F7\u670D\u52A1\u5668\u72B6\u6001\u7B49</p></div>',8),s=[c];function l(d,n,h,_,p,f){return i(),r("div",null,s)}var k=a(o,[["render",l]]);export{b as __pageData,k as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e}from"./chunks/qrcode.bde14c07.js";import{_ as a,c as r,o as i,a as t}from"./app.38e99b9a.js";const b='{"title":"\u5728iOS/MacOS\u4E2D\u4F7F\u7528Siri\u8FD0\u884C\u5FEB\u6377\u6307\u4EE4\u67E5\u8BE2\u670D\u52A1\u5668\u72B6\u6001","description":"","frontmatter":{},"headers":[{"level":2,"title":"\u83B7\u53D6\u5FEB\u6377\u6307\u4EE4","slug":"\u83B7\u53D6\u5FEB\u6377\u6307\u4EE4"},{"level":2,"title":"\u4F7F\u7528\u8BF4\u660E","slug":"\u4F7F\u7528\u8BF4\u660E"}],"relativePath":"case/case2.md","lastUpdated":1682159272000}',o={},c=t("",8),s=[c];function l(d,n,h,_,p,f){return i(),r("div",null,s)}var k=a(o,[["render",l]]);export{b as __pageData,k as default};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as a}from"./chunks/qrcode.59c44dde.js";import{_ as e,o as r,c as i,R as t}from"./chunks/framework.1625126e.js";const b=JSON.parse('{"title":"在iOS/MacOS中使用Siri运行快捷指令查询服务器状态","description":"","frontmatter":{},"headers":[],"relativePath":"case/case2.md","filePath":"case/case2.md","lastUpdated":1687190167000}'),o={name:"case/case2.md"},c=t('<h1 id="在ios-macos中使用siri运行快捷指令查询服务器状态" tabindex="-1">在iOS/MacOS中使用Siri运行快捷指令查询服务器状态 <a class="header-anchor" href="#在ios-macos中使用siri运行快捷指令查询服务器状态" aria-label="Permalink to "在iOS/MacOS中使用Siri运行快捷指令查询服务器状态""></a></h1><p>当前版本:V1.0<br> 贡献者:</p><ul><li>白歌 <a href="https://github.com/hhhkkk520" target="_blank" rel="noreferrer">hhhkkk520</a></li></ul><h2 id="获取快捷指令" tabindex="-1">获取快捷指令 <a class="header-anchor" href="#获取快捷指令" aria-label="Permalink to "获取快捷指令""></a></h2><p>使用iPhone或iPad扫描以下二维码,获取快捷指令<br><br><img src="'+a+'" alt="coode"><br><br> MacOS用户请访问<a href="https://www.icloud.com/shortcuts/312005bf5ffd4387ac92a84056db9f09" target="_blank" rel="noreferrer">这里</a>,获取快捷指令</p><h2 id="使用说明" tabindex="-1">使用说明 <a class="header-anchor" href="#使用说明" aria-label="Permalink to "使用说明""></a></h2><ul><li>获取快捷指令后,打开并编辑快捷指令</li><li>分别在三个文本框中填入 <code>面板URL</code>、<code>API Token</code>、<code>服务器ID</code></li><li>保存编辑并测试运行,能获取结果则表示设置正确</li><li>修改快捷指令的名称,如修改为:“一号服务器状态”,保存后便可使用Siri指令:“嘿Siri,一号服务器状态”来获取服务器状态</li></ul><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>每个快捷指令只能监控一台服务器,如需要监控多个服务器,请多次复制此快捷指令并分别配置,然后分别修改快捷指令名称,如;一号服务器状态、二号服务器状态等</p></div>',8),s=[c];function l(d,n,h,_,p,m){return r(),i("div",null,s)}const S=e(o,[["render",l]]);export{b as __pageData,S as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as a}from"./chunks/qrcode.59c44dde.js";import{_ as e,o as r,c as i,R as t}from"./chunks/framework.1625126e.js";const b=JSON.parse('{"title":"在iOS/MacOS中使用Siri运行快捷指令查询服务器状态","description":"","frontmatter":{},"headers":[],"relativePath":"case/case2.md","filePath":"case/case2.md","lastUpdated":1687190167000}'),o={name:"case/case2.md"},c=t("",8),s=[c];function l(d,n,h,_,p,m){return r(),i("div",null,s)}const S=e(o,[["render",l]]);export{b as __pageData,S as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as t,o as e,c as a,R as r}from"./chunks/framework.1625126e.js";const f=JSON.parse('{"title":"自建使用 API 来进行查询,且支持多语言的 Telegram 查询机器人","description":"","frontmatter":{},"headers":[],"relativePath":"case/case3.md","filePath":"case/case3.md","lastUpdated":1687190167000}'),d={name:"case/case3.md"},l=r('<h1 id="自建使用-api-来进行查询-且支持多语言的-telegram-查询机器人" tabindex="-1">自建使用 API 来进行查询,且支持多语言的 Telegram 查询机器人 <a class="header-anchor" href="#自建使用-api-来进行查询-且支持多语言的-telegram-查询机器人" aria-label="Permalink to "自建使用 API 来进行查询,且支持多语言的 Telegram 查询机器人""></a></h1><p>贡献者:</p><ul><li><a href="https://github.com/tech-fever" target="_blank" rel="noreferrer">tech-fever</a></li></ul><p>项目地址:<a href="https://github.com/tech-fever/nezha_telegram_bot" target="_blank" rel="noreferrer">nezha_telegram_bot</a></p><p>镜像备份(非实时更新):<a href="https://github.com/nezhahq/nezha_telegram_bot" target="_blank" rel="noreferrer">nezha_telegram_bot</a></p><h2 id="项目特色" tabindex="-1">项目特色 <a class="header-anchor" href="#项目特色" aria-label="Permalink to "项目特色""></a></h2><p>开源Telegram机器人项目,可以基于API实时查询哪吒面板的服务器信息。</p><ul><li>[x] 支持中/英多语言切换</li><li>[x] 支持分组统计(CPU、磁盘、内存、上下行速度、流量统计等)</li><li>[x] 支持实时刷新单个服务器数据</li><li>[x] 支持键盘互动查询</li><li>[x] 支持命令直接查询</li><li>[x] 增加群聊判断,限制群聊可发送命令</li><li>[x] 增加群聊内5秒自动删除信息</li><li>[x] 支持docker部署</li></ul><h2 id="命令列表" tabindex="-1">命令列表 <a class="header-anchor" href="#命令列表" aria-label="Permalink to "命令列表""></a></h2><table><thead><tr><th>命令</th><th>功能</th><th>仅私聊</th></tr></thead><tbody><tr><td>start</td><td>开始使用键盘主菜单</td><td>✔️</td></tr><tr><td>help</td><td>帮助列表</td><td>❌</td></tr><tr><td>add</td><td>添加面板链接和token</td><td>✔️</td></tr><tr><td>url</td><td>添加面板链接</td><td>✔️</td></tr><tr><td>token</td><td>添加面板token</td><td>✔️</td></tr><tr><td>info</td><td>获取保存的面板链接和token</td><td>✔️</td></tr><tr><td>delete</td><td>删除保存的面板链接和token</td><td>✔️</td></tr><tr><td>id</td><td>命令后面添加整数id,来进行单个服务器信息查询(私聊带刷新按钮,群聊不带)</td><td>❌</td></tr><tr><td>all</td><td>查询所有服务器的统计信息</td><td>❌</td></tr><tr><td>search</td><td>在服务器名字中搜索关键字(支持多个,用空格分开)</td><td>❌</td></tr></tbody></table><h2 id="效果展示" tabindex="-1">效果展示 <a class="header-anchor" href="#效果展示" aria-label="Permalink to "效果展示""></a></h2><p><img src="https://user-images.githubusercontent.com/105153585/175813727-bef77a8e-ff46-4fd4-b41b-43902abf6159.png#pic_left" alt="image"><img src="https://user-images.githubusercontent.com/105153585/175813645-4df4f4c7-2591-4133-9645-21c7db2f62ab.png#pic_right" alt="image"></p>',12),i=[l];function o(h,n,c,s,_,m){return e(),a("div",null,i)}const b=t(d,[["render",o]]);export{f as __pageData,b as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as t,o as e,c as a,R as r}from"./chunks/framework.1625126e.js";const f=JSON.parse('{"title":"自建使用 API 来进行查询,且支持多语言的 Telegram 查询机器人","description":"","frontmatter":{},"headers":[],"relativePath":"case/case3.md","filePath":"case/case3.md","lastUpdated":1687190167000}'),d={name:"case/case3.md"},l=r("",12),i=[l];function o(h,n,c,s,_,m){return e(),a("div",null,i)}const b=t(d,[["render",o]]);export{f as __pageData,b as default};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as t,c as e,o as r,a as d}from"./app.38e99b9a.js";const g='{"title":"\u81EA\u5EFA\u4F7F\u7528 API \u6765\u8FDB\u884C\u67E5\u8BE2,\u4E14\u652F\u6301\u591A\u8BED\u8A00\u7684 Telegram \u67E5\u8BE2\u673A\u5668\u4EBA","description":"","frontmatter":{},"headers":[{"level":2,"title":"\u9879\u76EE\u7279\u8272","slug":"\u9879\u76EE\u7279\u8272"},{"level":2,"title":"\u547D\u4EE4\u5217\u8868","slug":"\u547D\u4EE4\u5217\u8868"},{"level":2,"title":"\u6548\u679C\u5C55\u793A","slug":"\u6548\u679C\u5C55\u793A"}],"relativePath":"case/case3.md","lastUpdated":1682159272000}',a={},l=d('<h1 id="\u81EA\u5EFA\u4F7F\u7528-api-\u6765\u8FDB\u884C\u67E5\u8BE2-\u4E14\u652F\u6301\u591A\u8BED\u8A00\u7684-telegram-\u67E5\u8BE2\u673A\u5668\u4EBA" tabindex="-1">\u81EA\u5EFA\u4F7F\u7528 API \u6765\u8FDB\u884C\u67E5\u8BE2,\u4E14\u652F\u6301\u591A\u8BED\u8A00\u7684 Telegram \u67E5\u8BE2\u673A\u5668\u4EBA <a class="header-anchor" href="#\u81EA\u5EFA\u4F7F\u7528-api-\u6765\u8FDB\u884C\u67E5\u8BE2-\u4E14\u652F\u6301\u591A\u8BED\u8A00\u7684-telegram-\u67E5\u8BE2\u673A\u5668\u4EBA" aria-hidden="true">#</a></h1><p>\u8D21\u732E\u8005:</p><ul><li><a href="https://github.com/tech-fever" target="_blank" rel="noopener noreferrer">tech-fever</a></li></ul><p>\u9879\u76EE\u5730\u5740\uFF1A<a href="https://github.com/tech-fever/nezha_telegram_bot" target="_blank" rel="noopener noreferrer">nezha_telegram_bot</a></p><p>\u955C\u50CF\u5907\u4EFD\uFF08\u975E\u5B9E\u65F6\u66F4\u65B0\uFF09\uFF1A<a href="https://github.com/nezhahq/nezha_telegram_bot" target="_blank" rel="noopener noreferrer">nezha_telegram_bot</a></p><h2 id="\u9879\u76EE\u7279\u8272" tabindex="-1">\u9879\u76EE\u7279\u8272 <a class="header-anchor" href="#\u9879\u76EE\u7279\u8272" aria-hidden="true">#</a></h2><p>\u5F00\u6E90Telegram\u673A\u5668\u4EBA\u9879\u76EE\uFF0C\u53EF\u4EE5\u57FA\u4E8EAPI\u5B9E\u65F6\u67E5\u8BE2\u54EA\u5412\u9762\u677F\u7684\u670D\u52A1\u5668\u4FE1\u606F\u3002</p><ul><li>[x] \u652F\u6301\u4E2D/\u82F1\u591A\u8BED\u8A00\u5207\u6362</li><li>[x] \u652F\u6301\u5206\u7EC4\u7EDF\u8BA1(CPU\u3001\u78C1\u76D8\u3001\u5185\u5B58\u3001\u4E0A\u4E0B\u884C\u901F\u5EA6\u3001\u6D41\u91CF\u7EDF\u8BA1\u7B49)</li><li>[x] \u652F\u6301\u5B9E\u65F6\u5237\u65B0\u5355\u4E2A\u670D\u52A1\u5668\u6570\u636E</li><li>[x] \u652F\u6301\u952E\u76D8\u4E92\u52A8\u67E5\u8BE2</li><li>[x] \u652F\u6301\u547D\u4EE4\u76F4\u63A5\u67E5\u8BE2</li><li>[x] \u589E\u52A0\u7FA4\u804A\u5224\u65AD\uFF0C\u9650\u5236\u7FA4\u804A\u53EF\u53D1\u9001\u547D\u4EE4</li><li>[x] \u589E\u52A0\u7FA4\u804A\u51855\u79D2\u81EA\u52A8\u5220\u9664\u4FE1\u606F</li><li>[x] \u652F\u6301docker\u90E8\u7F72</li></ul><h2 id="\u547D\u4EE4\u5217\u8868" tabindex="-1">\u547D\u4EE4\u5217\u8868 <a class="header-anchor" href="#\u547D\u4EE4\u5217\u8868" aria-hidden="true">#</a></h2><table><thead><tr><th>\u547D\u4EE4</th><th>\u529F\u80FD</th><th>\u4EC5\u79C1\u804A</th></tr></thead><tbody><tr><td>start</td><td>\u5F00\u59CB\u4F7F\u7528\u952E\u76D8\u4E3B\u83DC\u5355</td><td>\u2714\uFE0F</td></tr><tr><td>help</td><td>\u5E2E\u52A9\u5217\u8868</td><td>\u274C</td></tr><tr><td>add</td><td>\u6DFB\u52A0\u9762\u677F\u94FE\u63A5\u548Ctoken</td><td>\u2714\uFE0F</td></tr><tr><td>url</td><td>\u6DFB\u52A0\u9762\u677F\u94FE\u63A5</td><td>\u2714\uFE0F</td></tr><tr><td>token</td><td>\u6DFB\u52A0\u9762\u677Ftoken</td><td>\u2714\uFE0F</td></tr><tr><td>info</td><td>\u83B7\u53D6\u4FDD\u5B58\u7684\u9762\u677F\u94FE\u63A5\u548Ctoken</td><td>\u2714\uFE0F</td></tr><tr><td>delete</td><td>\u5220\u9664\u4FDD\u5B58\u7684\u9762\u677F\u94FE\u63A5\u548Ctoken</td><td>\u2714\uFE0F</td></tr><tr><td>id</td><td>\u547D\u4EE4\u540E\u9762\u6DFB\u52A0\u6574\u6570id\uFF0C\u6765\u8FDB\u884C\u5355\u4E2A\u670D\u52A1\u5668\u4FE1\u606F\u67E5\u8BE2\uFF08\u79C1\u804A\u5E26\u5237\u65B0\u6309\u94AE\uFF0C\u7FA4\u804A\u4E0D\u5E26\uFF09</td><td>\u274C</td></tr><tr><td>all</td><td>\u67E5\u8BE2\u6240\u6709\u670D\u52A1\u5668\u7684\u7EDF\u8BA1\u4FE1\u606F</td><td>\u274C</td></tr><tr><td>search</td><td>\u5728\u670D\u52A1\u5668\u540D\u5B57\u4E2D\u641C\u7D22\u5173\u952E\u5B57\uFF08\u652F\u6301\u591A\u4E2A\uFF0C\u7528\u7A7A\u683C\u5206\u5F00\uFF09</td><td>\u274C</td></tr></tbody></table><h2 id="\u6548\u679C\u5C55\u793A" tabindex="-1">\u6548\u679C\u5C55\u793A <a class="header-anchor" href="#\u6548\u679C\u5C55\u793A" aria-hidden="true">#</a></h2><p><img src="https://user-images.githubusercontent.com/105153585/175813727-bef77a8e-ff46-4fd4-b41b-43902abf6159.png#pic_left" alt=""><img src="https://user-images.githubusercontent.com/105153585/175813645-4df4f4c7-2591-4133-9645-21c7db2f62ab.png#pic_right" alt=""></p>',12),i=[l];function h(n,o,s,c,_,p){return r(),e("div",null,i)}var b=t(a,[["render",h]]);export{g as __pageData,b as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as t,c as e,o as r,a as d}from"./app.38e99b9a.js";const g='{"title":"\u81EA\u5EFA\u4F7F\u7528 API \u6765\u8FDB\u884C\u67E5\u8BE2,\u4E14\u652F\u6301\u591A\u8BED\u8A00\u7684 Telegram \u67E5\u8BE2\u673A\u5668\u4EBA","description":"","frontmatter":{},"headers":[{"level":2,"title":"\u9879\u76EE\u7279\u8272","slug":"\u9879\u76EE\u7279\u8272"},{"level":2,"title":"\u547D\u4EE4\u5217\u8868","slug":"\u547D\u4EE4\u5217\u8868"},{"level":2,"title":"\u6548\u679C\u5C55\u793A","slug":"\u6548\u679C\u5C55\u793A"}],"relativePath":"case/case3.md","lastUpdated":1682159272000}',a={},l=d("",12),i=[l];function h(n,o,s,c,_,p){return r(),e("div",null,i)}var b=t(a,[["render",h]]);export{g as __pageData,b as default};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as s,o as t,c as e,R as a}from"./chunks/framework.1625126e.js";const r="/assets/2.38c2ea56.png",n="/assets/5.23139306.png",o="/assets/6.22a61698.png",p="/assets/4.fe6a4e7a.jpg",c="/assets/1.b4b4591f.jpeg",y=JSON.parse('{"title":"重磅推荐!一秒拥有宇宙级算力!让你在人前,不!再!自!卑","description":"","frontmatter":{},"headers":[],"relativePath":"case/case4.md","filePath":"case/case4.md","lastUpdated":1687190167000}'),_={name:"case/case4.md"},i=a('<h1 id="重磅推荐-一秒拥有宇宙级算力-让你在人前-不-再-自-卑" tabindex="-1">重磅推荐!一秒拥有宇宙级算力!让你在人前,不!再!自!卑 <a class="header-anchor" href="#重磅推荐-一秒拥有宇宙级算力-让你在人前-不-再-自-卑" aria-label="Permalink to "重磅推荐!一秒拥有宇宙级算力!让你在人前,不!再!自!卑""></a></h1><br><hr><p><img src="'+r+'" alt="2"><br><br><span style="font-size:5;">还在因为自己的小鸡配置太差被朋友嘲笑吗? </span><br><span style="font-size:5;">还在想参加以针会友活动却因为小鸡不够排面而觉得羞耻吗? </span><br><span style="font-size:5;">还在因为在哪吒TG群里机器人排名太低而觉得自己低人一等吗? </span><br><br><br><span style="font-size:6;"><strong>今天开始!找回自信!</strong></span><br></p><p>来自南京的名老中医 <a href="https://github.com/dysf888" target="_blank" rel="noreferrer">dysf888</a> 独家秘方!让你<strong>找回男人本色,激情畅享!</strong><br> 安装 <a href="https://github.com/dysf888/fake-nezha-agent" target="_blank" rel="noreferrer">Fake Agent</a>,可随意修改服务器监测数据的倍数上传到 Dashboard,让你的小鸡 <strong>脱!胎!换!骨!</strong> 让你在 MJJ 面前<span style="font-size:5;">硬</span>起来!</p><p>镜像备份(非实时更新):<a href="https://github.com/nezhahq/fake-nezha-agent" target="_blank" rel="noreferrer">Fake Agent</a><br><br></p><p><span style="font-size:4;"><strong>哪吒监控创始人奶爸也在用:</strong></span><br><img src="'+n+'" alt="5"></p><br><p><span style="font-size:4;"><strong>男人用了都说好:</strong></span><br><img src="'+o+'" alt="6"><br><img src="'+p+'" alt="4"></p><br><hr><p><img src="'+c+'" alt="1"></p>',12),l=[i];function g(f,b,h,m,d,k){return t(),e("div",null,l)}const z=s(_,[["render",g]]);export{y as __pageData,z as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as s,o as t,c as e,R as a}from"./chunks/framework.1625126e.js";const r="/assets/2.38c2ea56.png",n="/assets/5.23139306.png",o="/assets/6.22a61698.png",p="/assets/4.fe6a4e7a.jpg",c="/assets/1.b4b4591f.jpeg",y=JSON.parse('{"title":"重磅推荐!一秒拥有宇宙级算力!让你在人前,不!再!自!卑","description":"","frontmatter":{},"headers":[],"relativePath":"case/case4.md","filePath":"case/case4.md","lastUpdated":1687190167000}'),_={name:"case/case4.md"},i=a("",12),l=[i];function g(f,b,h,m,d,k){return t(),e("div",null,l)}const z=s(_,[["render",g]]);export{y as __pageData,z as default};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,c as s,o as r,a as t}from"./app.38e99b9a.js";var a="/assets/2.38c2ea56.png",n="/assets/5.23139306.png",o="/assets/6.22a61698.png",p="/assets/4.fe6a4e7a.jpg",_="/assets/1.b4b4591f.jpeg";const k='{"title":"\u91CD\u78C5\u63A8\u8350\uFF01\u4E00\u79D2\u62E5\u6709\u5B87\u5B99\u7EA7\u7B97\u529B\uFF01\u8BA9\u4F60\u5728\u4EBA\u524D\uFF0C\u4E0D\uFF01\u518D\uFF01\u81EA\uFF01\u5351","description":"","frontmatter":{},"headers":[],"relativePath":"case/case4.md","lastUpdated":1682159272000}',i={},c=t('<h1 id="\u91CD\u78C5\u63A8\u8350\uFF01\u4E00\u79D2\u62E5\u6709\u5B87\u5B99\u7EA7\u7B97\u529B\uFF01\u8BA9\u4F60\u5728\u4EBA\u524D\uFF0C\u4E0D\uFF01\u518D\uFF01\u81EA\uFF01\u5351" tabindex="-1">\u91CD\u78C5\u63A8\u8350\uFF01\u4E00\u79D2\u62E5\u6709\u5B87\u5B99\u7EA7\u7B97\u529B\uFF01\u8BA9\u4F60\u5728\u4EBA\u524D\uFF0C\u4E0D\uFF01\u518D\uFF01\u81EA\uFF01\u5351 <a class="header-anchor" href="#\u91CD\u78C5\u63A8\u8350\uFF01\u4E00\u79D2\u62E5\u6709\u5B87\u5B99\u7EA7\u7B97\u529B\uFF01\u8BA9\u4F60\u5728\u4EBA\u524D\uFF0C\u4E0D\uFF01\u518D\uFF01\u81EA\uFF01\u5351" aria-hidden="true">#</a></h1><br><hr><p><img src="'+a+'" alt=""><br><br><span style="font-size:5;">\u8FD8\u5728\u56E0\u4E3A\u81EA\u5DF1\u7684\u5C0F\u9E21\u914D\u7F6E\u592A\u5DEE\u88AB\u670B\u53CB\u5632\u7B11\u5417\uFF1F </span><br><span style="font-size:5;">\u8FD8\u5728\u60F3\u53C2\u52A0\u4EE5\u9488\u4F1A\u53CB\u6D3B\u52A8\u5374\u56E0\u4E3A\u5C0F\u9E21\u4E0D\u591F\u6392\u9762\u800C\u89C9\u5F97\u7F9E\u803B\u5417\uFF1F </span><br><span style="font-size:5;">\u8FD8\u5728\u56E0\u4E3A\u5728\u54EA\u5412TG\u7FA4\u91CC\u673A\u5668\u4EBA\u6392\u540D\u592A\u4F4E\u800C\u89C9\u5F97\u81EA\u5DF1\u4F4E\u4EBA\u4E00\u7B49\u5417\uFF1F </span><br><br><br><span style="font-size:6;"><strong>\u4ECA\u5929\u5F00\u59CB\uFF01\u627E\u56DE\u81EA\u4FE1\uFF01</strong></span><br></p><p>\u6765\u81EA\u5357\u4EAC\u7684\u540D\u8001\u4E2D\u533B <a href="https://github.com/dysf888" target="_blank" rel="noopener noreferrer">dysf888</a> \u72EC\u5BB6\u79D8\u65B9\uFF01\u8BA9\u4F60<strong>\u627E\u56DE\u7537\u4EBA\u672C\u8272\uFF0C\u6FC0\u60C5\u7545\u4EAB\uFF01</strong><br> \u5B89\u88C5 <a href="https://github.com/dysf888/fake-nezha-agent" target="_blank" rel="noopener noreferrer">Fake Agent</a>\uFF0C\u53EF\u968F\u610F\u4FEE\u6539\u670D\u52A1\u5668\u76D1\u6D4B\u6570\u636E\u7684\u500D\u6570\u4E0A\u4F20\u5230 Dashboard\uFF0C\u8BA9\u4F60\u7684\u5C0F\u9E21 <strong>\u8131\uFF01\u80CE\uFF01\u6362\uFF01\u9AA8\uFF01</strong> \u8BA9\u4F60\u5728 MJJ \u9762\u524D<span style="font-size:5;">\u786C</span>\u8D77\u6765\uFF01</p><p>\u955C\u50CF\u5907\u4EFD\uFF08\u975E\u5B9E\u65F6\u66F4\u65B0\uFF09\uFF1A<a href="https://github.com/nezhahq/fake-nezha-agent" target="_blank" rel="noopener noreferrer">Fake Agent</a><br><br></p><p><span style="font-size:4;"><strong>\u54EA\u5412\u76D1\u63A7\u521B\u59CB\u4EBA\u5976\u7238\u4E5F\u5728\u7528\uFF1A</strong></span><br><img src="'+n+'" alt=""></p><br><p><span style="font-size:4;"><strong>\u7537\u4EBA\u7528\u4E86\u90FD\u8BF4\u597D\uFF1A</strong></span><br><img src="'+o+'" alt=""><br><img src="'+p+'" alt=""></p><br><hr><p><img src="'+_+'" alt=""></p>',12),g=[c];function f(l,b,h,d,m,y){return r(),s("div",null,g)}var u=e(i,[["render",f]]);export{k as __pageData,u as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,c as s,o as r,a as t}from"./app.38e99b9a.js";var a="/assets/2.38c2ea56.png",n="/assets/5.23139306.png",o="/assets/6.22a61698.png",p="/assets/4.fe6a4e7a.jpg",_="/assets/1.b4b4591f.jpeg";const k='{"title":"\u91CD\u78C5\u63A8\u8350\uFF01\u4E00\u79D2\u62E5\u6709\u5B87\u5B99\u7EA7\u7B97\u529B\uFF01\u8BA9\u4F60\u5728\u4EBA\u524D\uFF0C\u4E0D\uFF01\u518D\uFF01\u81EA\uFF01\u5351","description":"","frontmatter":{},"headers":[],"relativePath":"case/case4.md","lastUpdated":1682159272000}',i={},c=t("",12),g=[c];function f(l,b,h,d,m,y){return r(),s("div",null,g)}var u=e(i,[["render",f]]);export{k as __pageData,u as default};
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
import{_ as e,c as t,o as a,a as r}from"./app.38e99b9a.js";const m='{"title":"Nezha server over Argo tunnel","description":"","frontmatter":{},"headers":[{"level":2,"title":"\u9879\u76EE\u7279\u70B9:","slug":"\u9879\u76EE\u7279\u70B9"},{"level":2,"title":"\u51C6\u5907\u9700\u8981\u7528\u7684\u53D8\u91CF","slug":"\u51C6\u5907\u9700\u8981\u7528\u7684\u53D8\u91CF"},{"level":2,"title":"PaaS \u90E8\u7F72\u5B9E\u4F8B","slug":"paas-\u90E8\u7F72\u5B9E\u4F8B"},{"level":2,"title":"VPS \u90E8\u7F72\u5B9E\u4F8B","slug":"vps-\u90E8\u7F72\u5B9E\u4F8B"},{"level":3,"title":"docker \u90E8\u7F72","slug":"docker-\u90E8\u7F72"},{"level":3,"title":"docker-compose \u90E8\u7F72","slug":"docker-compose-\u90E8\u7F72"},{"level":2,"title":"\u5BA2\u6237\u7AEF\u63A5\u5165","slug":"\u5BA2\u6237\u7AEF\u63A5\u5165"},{"level":2,"title":"SSH \u63A5\u5165","slug":"ssh-\u63A5\u5165"},{"level":2,"title":"","slug":""},{"level":2,"title":"\u9E23\u8C22\u4E0B\u5217\u4F5C\u8005\u7684\u6587\u7AE0\u548C\u9879\u76EE:","slug":"\u9E23\u8C22\u4E0B\u5217\u4F5C\u8005\u7684\u6587\u7AE0\u548C\u9879\u76EE"},{"level":2,"title":"\u514D\u8D23\u58F0\u660E:","slug":"\u514D\u8D23\u58F0\u660E"}],"relativePath":"case/case5.md","lastUpdated":1682159272000}',n={},l=r(`<h1 id="nezha-server-over-argo-tunnel" tabindex="-1">Nezha server over Argo tunnel <a class="header-anchor" href="#nezha-server-over-argo-tunnel" aria-hidden="true">#</a></h1><p>\u4F7F\u7528 Argo \u96A7\u9053\u7684\u54EA\u5412\u670D\u52A1\u7AEF \u8D21\u732E\u8005:</p><ul><li><a href="https://github.com/fscarmen2" target="_blank" rel="noopener noreferrer">fscarmen</a></li></ul><p>\u9879\u76EE\u5730\u5740\uFF1A<a href="https://github.com/fscarmen2/Argo-Nezha-Service-Container" target="_blank" rel="noopener noreferrer">Argo-Nezha-Service-Container</a></p><p>\u955C\u50CF\u5907\u4EFD\uFF08\u975E\u5B9E\u65F6\u66F4\u65B0\uFF09\uFF1A<a href="https://github.com/nezhahq/Argo-Nezha-Service-Container" target="_blank" rel="noopener noreferrer">Argo-Nezha-Service-Container</a></p><hr><h1 id="\u76EE\u5F55" tabindex="-1">\u76EE\u5F55 <a class="header-anchor" href="#\u76EE\u5F55" aria-hidden="true">#</a></h1><ul><li><a href="./case5.html#\u9879\u76EE\u7279\u70B9">\u9879\u76EE\u7279\u70B9</a></li><li><a href="./case5.html#\u51C6\u5907\u9700\u8981\u7528\u7684\u53D8\u91CF">\u51C6\u5907\u9700\u8981\u7528\u7684\u53D8\u91CF</a></li><li><a href="./case5.html#PaaS-\u90E8\u7F72\u5B9E\u4F8B">PaaS \u90E8\u7F72\u5B9E\u4F8B</a></li><li><a href="./case5.html#VPS-\u90E8\u7F72\u5B9E\u4F8B">VPS \u90E8\u7F72\u5B9E\u4F8B</a></li><li><a href="./case5.html#\u5BA2\u6237\u7AEF\u63A5\u5165">\u5BA2\u6237\u7AEF\u63A5\u5165</a></li><li><a href="./case5.html#ssh-\u63A5\u5165">SSH \u63A5\u5165</a></li><li><a href="./case5.html#\u9E23\u8C22\u4E0B\u5217\u4F5C\u8005\u7684\u6587\u7AE0\u548C\u9879\u76EE">\u9E23\u8C22\u4E0B\u5217\u4F5C\u8005\u7684\u6587\u7AE0\u548C\u9879\u76EE</a></li><li><a href="./case5.html#\u514D\u8D23\u58F0\u660E">\u514D\u8D23\u58F0\u660E</a></li></ul><hr><h2 id="\u9879\u76EE\u7279\u70B9" tabindex="-1">\u9879\u76EE\u7279\u70B9: <a class="header-anchor" href="#\u9879\u76EE\u7279\u70B9" aria-hidden="true">#</a></h2><ul><li>\u9002\u7528\u8303\u56F4\u66F4\u5E7F --- \u53EA\u8981\u80FD\u8FDE\u901A\u7F51\u7EDC\uFF0C\u5C31\u80FD\u5B89\u88C5\u54EA\u5412\u670D\u52A1\u7AEF\uFF0C\u5982 Nas \u865A\u62DF\u673A , Container PaaS \u7B49</li><li>Argo \u96A7\u9053\u7A81\u7834\u9700\u8981\u516C\u7F51\u5165\u53E3\u7684\u9650\u5236 --- \u4F20\u7EDF\u7684\u54EA\u5412\u9700\u8981\u6709\u4E24\u4E2A\uFF0C\u4E00\u4E2A\u7528\u4E8E\u9762\u677F\u7684\u8BBF\u95EE\uFF0C\u53E6\u4E00\u4E2A\u7528\u4E8E\u5BA2\u6237\u7AEF\u4E0A\u62A5\u6570\u636E\uFF0C\u672C\u9879\u76EE\u501F\u7528 Cloudflare Argo \u96A7\u9053\uFF0C\u4F7F\u7528\u5185\u7F51\u7A7F\u900F\u7684\u529E\u6CD5</li><li>IPv4 / v6 \u5177\u5907\u66F4\u9AD8\u7684\u7075\u6D3B\u6027 --- \u4F20\u7EDF\u54EA\u5412\u9700\u8981\u5904\u7406\u670D\u52A1\u7AEF\u548C\u5BA2\u6237\u7AEF\u7684 IPv4/v6 \u517C\u5BB9\u6027\u95EE\u9898\uFF0C\u8FD8\u9700\u8981\u901A\u8FC7 warp \u7B49\u5DE5\u5177\u6765\u89E3\u51B3\u4E0D\u5BF9\u5E94\u7684\u60C5\u51B5\u3002\u7136\u800C\uFF0C\u672C\u9879\u76EE\u53EF\u4EE5\u5B8C\u5168\u4E0D\u9700\u8981\u8003\u8651\u8FD9\u4E9B\u95EE\u9898\uFF0C\u53EF\u4EE5\u4EFB\u610F\u5BF9\u63A5\uFF0C\u66F4\u52A0\u65B9\u4FBF\u548C\u7B80\u4FBF</li><li>\u4E00\u6761 Argo \u96A7\u9053\u5206\u6D41\u591A\u4E2A\u57DF\u540D\u548C\u534F\u8BAE --- \u5EFA\u7ACB\u4E00\u6761\u5185\u7F51\u7A7F\u900F\u7684 Argo \u96A7\u9053\uFF0C\u5373\u53EF\u5206\u6D41\u4E09\u4E2A\u57DF\u540D(hostname)\u548C\u534F\u8BAE(protocal)\uFF0C\u5206\u522B\u7528\u4E8E\u9762\u677F\u7684\u8BBF\u95EE(http)\uFF0C\u5BA2\u6237\u7AEF\u4E0A\u62A5\u6570\u636E(tcp)\u548C ssh\uFF08\u53EF\u9009\uFF09</li><li>Nginx \u53CD\u5411\u4EE3\u7406\u7684 gRPC \u6570\u636E\u7AEF\u53E3 --- \u914D\u4E0A\u8BC1\u4E66\u505A tls \u7EC8\u7ED3\uFF0C\u7136\u540E Argo \u7684\u96A7\u9053\u914D\u7F6E\u7528 https \u670D\u52A1\u6307\u5411\u8FD9\u4E2A\u53CD\u5411\u4EE3\u7406\uFF0C\u542F\u7528http2\u5
Line truncated
|
|
||||||
--name nezha_dashboard \\
|
|
||||||
--restart always \\
|
|
||||||
-v ./dashboard:/dashboard \\
|
|
||||||
-e GH_USER=<\u586B github \u7528\u6237\u540D> \\
|
|
||||||
-e GH_EMAIL=<\u586B github \u90AE\u7BB1> \\
|
|
||||||
-e GH_PAT=<\u586B\u83B7\u53D6\u7684> \\
|
|
||||||
-e GH_REPO=<\u586B\u81EA\u5B9A\u4E49\u7684> \\
|
|
||||||
-e GH_CLIENTID=<\u586B\u83B7\u53D6\u7684> \\
|
|
||||||
-e GH_CLIENTSECRET=<\u586B\u83B7\u53D6\u7684> \\
|
|
||||||
-e ARGO_JSON='<\u586B\u83B7\u53D6\u7684>' \\
|
|
||||||
-e WEB_DOMAIN=<\u586B\u81EA\u5B9A\u4E49\u7684> \\
|
|
||||||
-e DATA_DOMAIN=<\u586B\u81EA\u5B9A\u4E49\u7684> \\
|
|
||||||
-e SSH_DOMAIN=<\u586B\u81EA\u5B9A\u4E49\u7684> \\
|
|
||||||
-e SSH_PASSWORD=<\u586B\u81EA\u5B9A\u4E49\u7684> \\
|
|
||||||
fscarmen/argo-nezha
|
|
||||||
</code></pre></div><h3 id="docker-compose-\u90E8\u7F72" tabindex="-1">docker-compose \u90E8\u7F72 <a class="header-anchor" href="#docker-compose-\u90E8\u7F72" aria-hidden="true">#</a></h3><div class="language-"><pre><code>version: '3.8'
|
|
||||||
services:
|
|
||||||
argo-nezha:
|
|
||||||
image: fscarmen/argo-nezha
|
|
||||||
container_name: nezha_dashboard
|
|
||||||
restart: always
|
|
||||||
volumes:
|
|
||||||
- ./dashboard:/dashboard
|
|
||||||
environment:
|
|
||||||
- GH_USER=<\u586B github \u7528\u6237\u540D>
|
|
||||||
- GH_EMAIL=<<\u586B github \u90AE\u7BB1>
|
|
||||||
- GH_PAT=<\u586B\u83B7\u53D6\u7684>
|
|
||||||
- GH_REPO=<\u586B\u81EA\u5B9A\u4E49\u7684>
|
|
||||||
- GH_CLIENTID=<\u586B\u83B7\u53D6\u7684>
|
|
||||||
- GH_CLIENTSECRET=<\u586B\u83B7\u53D6\u7684>
|
|
||||||
- ARGO_JSON='<\u586B\u83B7\u53D6\u7684>'
|
|
||||||
- WEB_DOMAIN=<\u586B\u81EA\u5B9A\u4E49\u7684>
|
|
||||||
- DATA_DOMAIN=<\u586B\u81EA\u5B9A\u4E49\u7684>
|
|
||||||
- SSH_DOMAIN=<\u586B\u81EA\u5B9A\u4E49\u7684>
|
|
||||||
- SSH_PASSWORD=<\u586B\u81EA\u5B9A\u4E49\u7684>
|
|
||||||
</code></pre></div><h2 id="\u5BA2\u6237\u7AEF\u63A5\u5165" tabindex="-1">\u5BA2\u6237\u7AEF\u63A5\u5165 <a class="header-anchor" href="#\u5BA2\u6237\u7AEF\u63A5\u5165" aria-hidden="true">#</a></h2><p>\u901A\u8FC7gRPC\u4F20\u8F93\uFF0C\u65E0\u9700\u989D\u5916\u914D\u7F6E\u3002\u4F7F\u7528\u9762\u677F\u7ED9\u5230\u7684\u5B89\u88C5\u65B9\u5F0F\uFF0C\u4E3E\u4F8B</p><div class="language-"><pre><code>curl -L https://raw.githubusercontent.com/naiba/nezha/master/script/install.sh -o nezha.sh && chmod +x nezha.sh && sudo ./nezha.sh install_agent data.seales.nom.za 443 eAxO9IF519fKFODlW0 --tls
|
|
||||||
</code></pre></div><h2 id="ssh-\u63A5\u5165" tabindex="-1">SSH \u63A5\u5165 <a class="header-anchor" href="#ssh-\u63A5\u5165" aria-hidden="true">#</a></h2><ul><li>\u4EE5 macOS + WindTerm \u4E3A\u4F8B\uFF0C\u5176\u4ED6\u6839\u636E\u4F7F\u7528\u7684 SSH \u5DE5\u5177\uFF0C\u7ED3\u5408\u5B98\u65B9\u5B98\u65B9\u8BF4\u660E\u6587\u6863: <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/use_cases/ssh/#2-connect-as-a-user" target="_blank" rel="noopener noreferrer">https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/use_cases/ssh/#2-connect-as-a-user</a></li><li>\u5B98\u65B9 cloudflared \u4E0B\u8F7D: <a href="https://github.com/cloudflare/cloudflared/releases" target="_blank" rel="noopener noreferrer">https://github.com/cloudflare/cloudflared/releases</a></li><li>\u4EE5\u4E0B\u8F93\u5165\u547D\u4EE4\u4E3E\u4F8B</li></ul><div class="language-"><pre><code><file path>/cloudflared access ssh --hostname ssh.seales.nom.za
|
|
||||||
</code></pre></div><img width="834" alt="image" src="https://user-images.githubusercontent.com/92626977/233349393-cec79e11-346e-4a57-8357-8d153d75ee40.png"><img width="830" alt="image" src="https://user-images.githubusercontent.com/92626977/233350601-73de67f9-19ca-451f-b395-8721abbb3342.png"><img width="955" alt="image" src="https://user-images.githubusercontent.com/92626977/233350802-754624e0-8456-4353-8577-1f5385fb8723.png"><h2 id="" tabindex="-1"><a class="header-anchor" href="#" aria-hidden="true">#</a></h2><h2 id="\u9E23\u8C22\u4E0B\u5217\u4F5C\u8005\u7684\u6587\u7AE0\u548C\u9879\u76EE" tabindex="-1">\u9E23\u8C22\u4E0B\u5217\u4F5C\u8005\u7684\u6587\u7AE0\u548C\u9879\u76EE: <a class="header-anchor" href="#\u9E23\u8C22\u4E0B\u5217\u4F5C\u8005\u7684\u6587\u7AE0\u548C\u9879\u76EE" aria-hidden="true">#</a></h2><ul><li>\u70ED\u5FC3\u7684\u671D\u9633\u7FA4\u4F17 Robin\uFF0C\u8BA8\u8BBA\u54EA\u5412\u670D\u52A1\u7AEF\u4E0E\u5BA2\u6237\u7AEF\u7684\u5173\u7CFB\uFF0C\u4ECE\u800C\u8BDE\u751F\u4E86\u6B64\u9879\u76EE</li><li>\u54EA\u5412\u5B98\u7F51: <a href="https://nezha.wiki/" target="_blank" rel="noopener noreferrer">https://nezha.wiki/</a> , TG \u7FA4: <a href="https://t.me/nezhamonitoring" target="_blank" rel="noopener noreferrer">https://t.me/nezhamonitoring</a></li><li>\u5171\u7A77\u56FD\u9645\u8001\u4E2D\u533B: <a href="http://solitud.es/" target="_blank" rel="noopener noreferrer">http://solitud.es/</a></li><li>Akkia's Blog: <a href="https://blog.akkia.moe/" target="_blank" rel="noopener noreferrer">https://blog.akkia.moe/</a></li><li>\u7528 Cloudflare Tunnel \u8FDB\u884C\u5185\u7F51\u7A7F\u900F: <a href="https://blog.outv.im/2021/cloudflared-tunnel/" target="_blank" rel="noopener noreferrer">https://blog.outv.im/2021/cloudflared-tunnel/</a></li></ul><h2 id="\u514D\u8D23\u58F0\u660E" tabindex="-1">\u514D\u8D23\u58F0\u660E: <a class="header-anchor" href="#\u514D\u8D23\u58F0\u660E" aria-hidden="true">#</a></h2><ul><li>\u672C\u7A0B\u5E8F\u4EC5\u4F9B\u5B66\u4E60\u4E86\u89E3, \u975E\u76C8\u5229\u76EE\u7684\uFF0C\u8BF7\u4E8E\u4E0B\u8F7D\u540E 24 \u5C0F\u65F6\u5185\u5220\u9664, \u4E0D\u5F97\u7528\u4F5C\u4EFB\u4F55\u5546\u4E1A\u7528\u9014, \u6587\u5B57\u3001\u6570\u636E\u53CA\u56FE\u7247\u5747\u6709\u6240\u5C5E\u7248\u6743, \u5982\u8F6C\u8F7D\u987B\u6CE8\u660E\u6765\u6E90\u3002</li><li>\u4F7F\u7528\u672C\u7A0B\u5E8F\u5FC5\u5FAA\u9075\u5B88\u90E8\u7F72\u514D\u8D23\u58F0\u660E\u3002\u4F7F\u7528\u672C\u7A0B\u5E8F\u5FC5\u5FAA\u9075\u5B88\u90E8\u7F72\u670D\u52A1\u5668\u6240\u5728\u5730\u3001\u6240\u5728\u56FD\u5BB6\u548C\u7528\u6237\u6240\u5728\u56FD\u5BB6\u7684\u6CD5\u5F8B\u6CD5\u89C4, \u7A0B\u5E8F\u4F5C\u8005\u4E0D\u5BF9\u4F7F\u7528\u8005\u4EFB\u4F55\u4E0D\u5F53\u884C\u4E3A\u8D1F\u8D23\u3002</li></ul>`,59),s=[l];function i(o,h,c,d,g,u){return a(),t("div",null,s)}var b=e(n,[["render",i]]);export{m as __pageData,b as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,c as t,o as a,a as r}from"./app.38e99b9a.js";const m='{"title":"Nezha server over Argo tunnel","description":"","frontmatter":{},"headers":[{"level":2,"title":"\u9879\u76EE\u7279\u70B9:","slug":"\u9879\u76EE\u7279\u70B9"},{"level":2,"title":"\u51C6\u5907\u9700\u8981\u7528\u7684\u53D8\u91CF","slug":"\u51C6\u5907\u9700\u8981\u7528\u7684\u53D8\u91CF"},{"level":2,"title":"PaaS \u90E8\u7F72\u5B9E\u4F8B","slug":"paas-\u90E8\u7F72\u5B9E\u4F8B"},{"level":2,"title":"VPS \u90E8\u7F72\u5B9E\u4F8B","slug":"vps-\u90E8\u7F72\u5B9E\u4F8B"},{"level":3,"title":"docker \u90E8\u7F72","slug":"docker-\u90E8\u7F72"},{"level":3,"title":"docker-compose \u90E8\u7F72","slug":"docker-compose-\u90E8\u7F72"},{"level":2,"title":"\u5BA2\u6237\u7AEF\u63A5\u5165","slug":"\u5BA2\u6237\u7AEF\u63A5\u5165"},{"level":2,"title":"SSH \u63A5\u5165","slug":"ssh-\u63A5\u5165"},{"level":2,"title":"","slug":""},{"level":2,"title":"\u9E23\u8C22\u4E0B\u5217\u4F5C\u8005\u7684\u6587\u7AE0\u548C\u9879\u76EE:","slug":"\u9E23\u8C22\u4E0B\u5217\u4F5C\u8005\u7684\u6587\u7AE0\u548C\u9879\u76EE"},{"level":2,"title":"\u514D\u8D23\u58F0\u660E:","slug":"\u514D\u8D23\u58F0\u660E"}],"relativePath":"case/case5.md","lastUpdated":1682159272000}',n={},l=r("",59),s=[l];function i(o,h,c,d,g,u){return a(),t("div",null,s)}var b=e(n,[["render",i]]);export{m as __pageData,b as default};
|
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
import{_ as a,o as e,c as t,R as s}from"./chunks/framework.1625126e.js";const m=JSON.parse('{"title":"Nezha server over Argo tunnel","description":"","frontmatter":{},"headers":[],"relativePath":"case/case5.md","filePath":"case/case5.md","lastUpdated":1687190167000}'),n={name:"case/case5.md"},l=s(`<h1 id="nezha-server-over-argo-tunnel" tabindex="-1">Nezha server over Argo tunnel <a class="header-anchor" href="#nezha-server-over-argo-tunnel" aria-label="Permalink to "Nezha server over Argo tunnel""></a></h1><p>使用 Argo 隧道的哪吒服务端 贡献者:</p><ul><li><a href="https://github.com/fscarmen2" target="_blank" rel="noreferrer">fscarmen</a></li></ul><p>项目地址:<a href="https://github.com/fscarmen2/Argo-Nezha-Service-Container" target="_blank" rel="noreferrer">Argo-Nezha-Service-Container</a></p><p>镜像备份(非实时更新):<a href="https://github.com/nezhahq/Argo-Nezha-Service-Container" target="_blank" rel="noreferrer">Argo-Nezha-Service-Container</a></p><hr><h1 id="目录" tabindex="-1">目录 <a class="header-anchor" href="#目录" aria-label="Permalink to "目录""></a></h1><ul><li><a href="./case5.html#项目特点">项目特点</a></li><li><a href="./case5.html#准备需要用的变量">准备需要用的变量</a></li><li><a href="./case5.html#PaaS-部署实例">PaaS 部署实例</a></li><li><a href="./case5.html#VPS-部署实例">VPS 部署实例</a></li><li><a href="./case5.html#客户端接入">客户端接入</a></li><li><a href="./case5.html#ssh-接入">SSH 接入</a></li><li><a href="./case5.html#鸣谢下列作者的文章和项目">鸣谢下列作者的文章和项目</a></li><li><a href="./case5.html#免责声明">免责声明</a></li></ul><hr><h2 id="项目特点" tabindex="-1">项目特点: <a class="header-anchor" href="#项目特点" aria-label="Permalink to "项目特点:""></a></h2><ul><li>适用范围更广 --- 只要能连通网络,就能安装哪吒服务端,如 Nas 虚拟机 , Container PaaS 等</li><li>Argo 隧道突破需要公网入口的限制 --- 传统的哪吒需要有两个,一个用于面板的访问,另一个用于客户端上报数据,本项目借用 Cloudflare Argo 隧道,使用内网穿透的办法</li><li>IPv4 / v6 具备更高的灵活性 --- 传统哪吒需要处理服务端和客户端的 IPv4/v6 兼容性问题,还需要通过 warp 等工具来解决不对应的情况。然而,本项目可以完全不需要考虑这些问题,可以任意对接,更加方便和简便</li><li>一条 Argo 隧道分流多个域名和协议 --- 建立一条内网穿透的 Argo 隧道,即可分流三个域名(hostname)和协议(protocal),分别用于面板的访问(http),客户端上报数据(tcp)和 ssh(可选)</li><li>Nginx 反向代理的 gRPC 数据端口 --- 配上证书做 tls 终结,然后 Argo 的隧道配置用 https 服务指向这个反向代理,启用http2回源,grpc(nezha)->h2(nginx)->argo->cf cdn edge->agent</li><li>每天自动备份 --- 每天 0 时 0 分自动备份整个哪吒面板文件夹到指定的 github 私库,包括面板主题,面板设置,探针数据和隧道信息,备份保留近 30 天数据;鉴于内容十分重要,必须要放在私库</li><li>数据更安全 --- Argo 隧道使用TLS加密通信,可以将应用程序流量安全地传输到 Cloudflare 网络,提高了应用程序的安全性和可靠性。此外,Argo Tunnel也可以防止IP泄露和DDoS攻击等网络威胁</li></ul><img width="1298" alt="image" src="https://user-images.githubusercontent.com/92626977/233363248-e2caa687-b513-448c-a92f-c870db0e4236.png"><h2 id="准备需要用的变量" tabindex="-1">准备需要用的变量 <a class="header-anchor" href="#准备需要用的变量" aria-label="Permalink to "准备需要用的变量""></a></h2><ul><li>通过 Cloudflare Json 生成网轻松获取 Argo 隧道信息: <a href="https://fscarmen.cloudflare.now.cc" target="_blank" rel="noreferrer">https://fscarmen.cloudflare.now.cc</a></li></ul><img width="1040" alt="image" src="https://user-images.githubusercontent.com/92626977/231084930-02e3c2de-c52b-420d-b39c-9f135d040b3b.png"><ul><li>到 Cloudflare 官方,在相应的域名 <code>DNS</code> 记录里加上客户端上报数据(tcp)和 ssh(可选)的域名,打开橙色云启用 CDN</li></ul><img width="1666" alt="image" src="https://user-images.githubusercontent.com/92626977/231087110-85ddab87-076b-45c9-97d1-c8b051dcb5b0.png"><img width="1627" alt="image" src="https://user-images.githubusercontent.com/92626977/231087714-e5a45eb9-bc47-4c38-8f5b-a4a9fb492d0d.png"><ul><li>到 Cloudflare 官方,选择使用的域名,打开 <code>网络</code> 选项将 <code>gRPC</code> 开关打开</li></ul><img width="1590" alt="image" src="https://user-images.githubusercontent.com/92626977/233138703-faab8596-a64a-40bb-afe6-52711489fbcf.png"><ul><li>获取 github 认证授权: <a href="https://github.com/sett
Line truncated
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> --name nezha_dashboard \\</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> --restart always \\</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> -v ./dashboard:/dashboard \\</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> -e GH_USER=<填 github 用户名> \\</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> -e GH_EMAIL=<填 github 邮箱> \\</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> -e GH_PAT=<填获取的> \\</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> -e GH_REPO=<填自定义的> \\</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> -e GH_CLIENTID=<填获取的> \\</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> -e GH_CLIENTSECRET=<填获取的> \\</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> -e ARGO_JSON='<填获取的>' \\</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> -e WEB_DOMAIN=<填自定义的> \\</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> -e DATA_DOMAIN=<填自定义的> \\</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> -e SSH_DOMAIN=<填自定义的> \\</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> -e SSH_PASSWORD=<填自定义的> \\</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> fscarmen/argo-nezha</span></span></code></pre></div><h3 id="docker-compose-部署" tabindex="-1">docker-compose 部署 <a class="header-anchor" href="#docker-compose-部署" aria-label="Permalink to "docker-compose 部署""></a></h3><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">version: '3.8'</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;">services:</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> argo-nezha:</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> image: fscarmen/argo-nezha</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> container_name: nezha_dashboard</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> restart: always</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> volumes:</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> - ./dashboard:/dashboard</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> environment:</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> - GH_USER=<填 github 用户名></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> - GH_EMAIL=<<填 github 邮箱></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> - GH_PAT=<填获取的></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> - GH_REPO=<填自定义的></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> - GH_CLIENTID=<填获取的></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> - GH_CLIENTSECRET=<填获取的></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> - ARGO_JSON='<填获取的>'</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> - WEB_DOMAIN=<填自定义的></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> - DATA_DOMAIN=<填自定义的></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> - SSH_DOMAIN=<填自定义的></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> - SSH_PASSWORD=<填自定义的></span></span></code></pre></div><h2 id="客户端接入" tabindex="-1">客户端接入 <a class="header-anchor" href="#客户端接入" aria-label="Permalink to "客户端接入""></a></h2><p>通过gRPC传输,无需额外配置。使用面板给到的安装方式,举例</p><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">curl -L https://raw.githubusercontent.com/naiba/nezha/master/script/install.sh -o nezha.sh && chmod +x nezha.sh && sudo ./nezha.sh install_agent data.seales.nom.za 443 eAxO9IF519fKFODlW0 --tls</span></span></code></pre></div><h2 id="ssh-接入" tabindex="-1">SSH 接入 <a class="header-anchor" href="#ssh-接入" aria-label="Permalink to "SSH 接入""></a></h2><ul><li>以 macOS + WindTerm 为例,其他根据使用的 SSH 工具,结合官方官方说明文档: <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/use_cases/ssh/#2-connect-as-a-user" target="_blank" rel="noreferrer">https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/use_cases/ssh/#2-connect-as-a-user</a></li><li>官方 cloudflared 下载: <a href="https://github.com/cloudflare/cloudflared/releases" target="_blank" rel="noreferrer">https://github.com/cloudflare/cloudflared/releases</a></li><li>以下输入命令举例</li></ul><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;"><file path>/cloudflared access ssh --hostname ssh.seales.nom.za</span></span></code></pre></div><img width="834" alt="image" src="https://user-images.githubusercontent.com/92626977/233349393-cec79e11-346e-4a57-8357-8d153d75ee40.png"><img width="830" alt="image" src="https://user-images.githubusercontent.com/92626977/233350601-73de67f9-19ca-451f-b395-8721abbb3342.png"><img width="955" alt="image" src="https://user-images.githubusercontent.com/92626977/233350802-754624e0-8456-4353-8577-1f5385fb8723.png"><h2 id="" tabindex="-1"><a class="header-anchor" href="#" aria-label="Permalink to """></a></h2><h2 id="鸣谢下列作者的文章和项目" tabindex="-1">鸣谢下列作者的文章和项目: <a class="header-anchor" href="#鸣谢下列作者的文章和项目" aria-label="Permalink to "鸣谢下列作者的文章和项目:""></a></h2><ul><li>热心的朝阳群众 Robin,讨论哪吒服务端与客户端的关系,从而诞生了此项目</li><li>哪吒官网: <a href="https://nezha.wiki/" target="_blank" rel="noreferrer">https://nezha.wiki/</a> , TG 群: <a href="https://t.me/nezhamonitoring" target="_blank" rel="noreferrer">https://t.me/nezhamonitoring</a></li><li>共穷国际老中医: <a href="http://solitud.es/" target="_blank" rel="noreferrer">http://solitud.es/</a></li><li>Akkia's Blog: <a href="https://blog.akkia.moe/" target="_blank" rel="noreferrer">https://blog.akkia.moe/</a></li><li>用 Cloudflare Tunnel 进行内网穿透: <a href="https://blog.outv.im/2021/cloudflared-tunnel/" target="_blank" rel="noreferrer">https://blog.outv.im/2021/cloudflared-tunnel/</a></li></ul><h2 id="免责声明" tabindex="-1">免责声明: <a class="header-anchor" href="#免责声明" aria-label="Permalink to "免责声明:""></a></h2><ul><li>本程序仅供学习了解, 非盈利目的,请于下载后 24 小时内删除, 不得用作任何商业用途, 文字、数据及图片均有所属版权, 如转载须注明来源。</li><li>使用本程序必循遵守部署免责声明。使用本程序必循遵守部署服务器所在地、所在国家和用户所在国家的法律法规, 程序作者不对使用者任何不当行为负责。</li></ul>`,59),r=[l];function o(c,i,p,h,d,g){return e(),t("div",null,r)}const b=a(n,[["render",o]]);export{m as __pageData,b as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as a,o as e,c as t,R as s}from"./chunks/framework.1625126e.js";const m=JSON.parse('{"title":"Nezha server over Argo tunnel","description":"","frontmatter":{},"headers":[],"relativePath":"case/case5.md","filePath":"case/case5.md","lastUpdated":1687190167000}'),n={name:"case/case5.md"},l=s("",59),r=[l];function o(c,i,p,h,d,g){return e(),t("div",null,r)}const b=a(n,[["render",o]]);export{m as __pageData,b as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as a,o as s,c as n,z as e,a as t}from"./chunks/framework.1625126e.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"heroImage":"https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.svg","heroText":"哪吒监控社区项目","tagline":"哪吒监控社区贡献的相关项目,为哪吒监控提供了更多扩展","actionText":"查看项目 →","actionLink":"/case/case1","features":[{"title":"提交项目","details":"我们欢迎您提交自己的项目,请加入TG群联系管理员了解相关事宜"},{"title":"注意事项","details":"所有项目均由社区成员贡献,请您知悉哪吒监控团队无法为社区项目承担包括且不限于:保修、可用性、安全性等责任"}]},"headers":[],"relativePath":"case/index.md","filePath":"case/index.md","lastUpdated":1687190167000}'),c={name:"case/index.md"},r=e("p",null,[e("br"),t("本作品采用 "),e("a",{rel:"license",href:"http://creativecommons.org/licenses/by-nc-sa/4.0/"},"知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议"),t(" 进行许可。")],-1),o=[r];function i(d,l,p,_,m,h){return s(),n("div",null,o)}const x=a(c,[["render",i]]);export{u as __pageData,x as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as a,o as s,c as n,z as e,a as t}from"./chunks/framework.1625126e.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"heroImage":"https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.svg","heroText":"哪吒监控社区项目","tagline":"哪吒监控社区贡献的相关项目,为哪吒监控提供了更多扩展","actionText":"查看项目 →","actionLink":"/case/case1","features":[{"title":"提交项目","details":"我们欢迎您提交自己的项目,请加入TG群联系管理员了解相关事宜"},{"title":"注意事项","details":"所有项目均由社区成员贡献,请您知悉哪吒监控团队无法为社区项目承担包括且不限于:保修、可用性、安全性等责任"}]},"headers":[],"relativePath":"case/index.md","filePath":"case/index.md","lastUpdated":1687190167000}'),c={name:"case/index.md"},r=e("p",null,[e("br"),t("本作品采用 "),e("a",{rel:"license",href:"http://creativecommons.org/licenses/by-nc-sa/4.0/"},"知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议"),t(" 进行许可。")],-1),o=[r];function i(d,l,p,_,m,h){return s(),n("div",null,o)}const x=a(c,[["render",i]]);export{u as __pageData,x as default};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as a,c as s,o as r,b as e,d as t}from"./app.38e99b9a.js";const f='{"title":"Home","description":"","frontmatter":{"home":true,"heroImage":"https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.svg","heroText":"\u54EA\u5412\u76D1\u63A7\u793E\u533A\u9879\u76EE","tagline":"\u54EA\u5412\u76D1\u63A7\u793E\u533A\u8D21\u732E\u7684\u76F8\u5173\u9879\u76EE\uFF0C\u4E3A\u54EA\u5412\u76D1\u63A7\u63D0\u4F9B\u4E86\u66F4\u591A\u6269\u5C55","actionText":"\u67E5\u770B\u9879\u76EE \u2192","actionLink":"/case/case1","features":[{"title":"\u63D0\u4EA4\u9879\u76EE","details":"\u6211\u4EEC\u6B22\u8FCE\u60A8\u63D0\u4EA4\u81EA\u5DF1\u7684\u9879\u76EE\uFF0C\u8BF7\u52A0\u5165TG\u7FA4\u8054\u7CFB\u7BA1\u7406\u5458\u4E86\u89E3\u76F8\u5173\u4E8B\u5B9C"},{"title":"\u6CE8\u610F\u4E8B\u9879","details":"\u6240\u6709\u9879\u76EE\u5747\u7531\u793E\u533A\u6210\u5458\u8D21\u732E\uFF0C\u8BF7\u60A8\u77E5\u6089\u54EA\u5412\u76D1\u63A7\u56E2\u961F\u65E0\u6CD5\u4E3A\u793E\u533A\u9879\u76EE\u627F\u62C5\u5305\u62EC\u4E14\u4E0D\u9650\u4E8E\uFF1A\u4FDD\u4FEE\u3001\u53EF\u7528\u6027\u3001\u5B89\u5168\u6027\u7B49\u8D23\u4EFB"}]},"headers":[],"relativePath":"case/index.md","lastUpdated":1682159272000}',o={},c=e("p",null,[e("br"),t("\u672C\u4F5C\u54C1\u91C7\u7528 "),e("a",{rel:"license",href:"http://creativecommons.org/licenses/by-nc-sa/4.0/"},"\u77E5\u8BC6\u5171\u4EAB\u7F72\u540D-\u975E\u5546\u4E1A\u6027\u4F7F\u7528-\u76F8\u540C\u65B9\u5F0F\u5171\u4EAB 4.0 \u56FD\u9645\u8BB8\u53EF\u534F\u8BAE"),t(" \u8FDB\u884C\u8BB8\u53EF\u3002")],-1),n=[c];function i(d,l,_,p,h,m){return r(),s("div",null,n)}var x=a(o,[["render",i]]);export{f as __pageData,x as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as a,c as s,o as r,b as e,d as t}from"./app.38e99b9a.js";const f='{"title":"Home","description":"","frontmatter":{"home":true,"heroImage":"https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.svg","heroText":"\u54EA\u5412\u76D1\u63A7\u793E\u533A\u9879\u76EE","tagline":"\u54EA\u5412\u76D1\u63A7\u793E\u533A\u8D21\u732E\u7684\u76F8\u5173\u9879\u76EE\uFF0C\u4E3A\u54EA\u5412\u76D1\u63A7\u63D0\u4F9B\u4E86\u66F4\u591A\u6269\u5C55","actionText":"\u67E5\u770B\u9879\u76EE \u2192","actionLink":"/case/case1","features":[{"title":"\u63D0\u4EA4\u9879\u76EE","details":"\u6211\u4EEC\u6B22\u8FCE\u60A8\u63D0\u4EA4\u81EA\u5DF1\u7684\u9879\u76EE\uFF0C\u8BF7\u52A0\u5165TG\u7FA4\u8054\u7CFB\u7BA1\u7406\u5458\u4E86\u89E3\u76F8\u5173\u4E8B\u5B9C"},{"title":"\u6CE8\u610F\u4E8B\u9879","details":"\u6240\u6709\u9879\u76EE\u5747\u7531\u793E\u533A\u6210\u5458\u8D21\u732E\uFF0C\u8BF7\u60A8\u77E5\u6089\u54EA\u5412\u76D1\u63A7\u56E2\u961F\u65E0\u6CD5\u4E3A\u793E\u533A\u9879\u76EE\u627F\u62C5\u5305\u62EC\u4E14\u4E0D\u9650\u4E8E\uFF1A\u4FDD\u4FEE\u3001\u53EF\u7528\u6027\u3001\u5B89\u5168\u6027\u7B49\u8D23\u4EFB"}]},"headers":[],"relativePath":"case/index.md","lastUpdated":1682159272000}',o={},c=e("p",null,[e("br"),t("\u672C\u4F5C\u54C1\u91C7\u7528 "),e("a",{rel:"license",href:"http://creativecommons.org/licenses/by-nc-sa/4.0/"},"\u77E5\u8BC6\u5171\u4EAB\u7F72\u540D-\u975E\u5546\u4E1A\u6027\u4F7F\u7528-\u76F8\u540C\u65B9\u5F0F\u5171\u4EAB 4.0 \u56FD\u9645\u8BB8\u53EF\u534F\u8BAE"),t(" \u8FDB\u884C\u8BB8\u53EF\u3002")],-1),n=[c];function i(d,l,_,p,h,m){return r(),s("div",null,n)}var x=a(o,[["render",i]]);export{f as __pageData,x as default};
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
import{e as Sr,u as Er,f as wr,w as Ct,g as jr,h as Pr,o as Ir,c as kr,i as Cr}from"../app.38e99b9a.js";/*! @docsearch/js 3.0.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */function Dt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function P(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Dt(Object(n),!0).forEach(function(r){Dr(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Dt(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Oe(e){return Oe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Oe(e)}function Dr(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ut(){return ut=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ut.apply(this,arguments)}function xr(e,t){if(e==null)return{};var n,r,o=function(i,u){if(i==null)return{};var s,l,c={},d=Object.keys(i);for(l=0;l<d.length;l++)s=d[l],u.indexOf(s)>=0||(c[s]=i[s]);return c}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Fe(e,t){return function(n){if(Array.isArray(n))return n}(e)||function(n,r){var o=n==null?null:typeof Symbol!="undefined"&&n[Symbol.iterator]||n["@@iterator"];if(o!=null){var a,i,u=[],s=!0,l=!1;try{for(o=o.call(n);!(s=(a=o.next()).done)&&(u.push(a.value),!r||u.length!==r);s=!0);}catch(c){l=!0,i=c}finally{try{s||o.return==null||o.return()}finally{if(l)throw i}}return u}}(e,t)||qn(e,t)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
||||||
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Be(e){return function(t){if(Array.isArray(t))return lt(t)}(e)||function(t){if(typeof Symbol!="undefined"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}(e)||qn(e)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
|
|
||||||
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function qn(e,t){if(e){if(typeof e=="string")return lt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set"?Array.from(e):n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?lt(e,t):void 0}}function lt(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var E,_e,Mn,xt,Hn,Ve={},Ot=[],Ar=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function z(e,t){for(var n in t)e[n]=t[n];return e}function Un(e){var t=e.parentNode;t&&t.removeChild(e)}function F(e,t,n){var r,o,a,i=arguments,u={};for(a in t)a=="key"?r=t[a]:a=="ref"?o=t[a]:u[a]=t[a];if(arguments.length>3)for(n=[n],a=3;a<arguments.length;a++)n.push(i[a]);if(n!=null&&(u.children=n),typeof e=="function"&&e.defaultProps!=null)for(a in e.defaultProps)u[a]===void 0&&(u[a]=e.defaultProps[a]);return ge(e,u,r,o,null)}function ge(e,t,n,r,o){var a={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:o==null?++E.__v:o};return E.vnode!=null&&E.vnode(a),a}function Q(e){return e.children}function B(e,t){this.props=e,this.context=t}function Se(e,t){if(t==null)return e.__?Se(e.__,e.__.__k.indexOf(e)+1):null;for(var n;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null)return n.__e;return typeof e.type=="function"?Se(e):null}function Fn(e){var t,n;if((e=e.__)!=null&&e.__c!=null){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null){e.__e=e.__c.base=n.__e;break}return Fn(e)}}function st(e){(!e.__d&&(e.__d=!0)&&_e.push(e)&&!ze.__r++||xt!==E.debounceRendering)&&((xt=E.debounceRendering)||Mn)(ze)}function ze(){for(var e;ze.__r=_e.length;)e=_e.sort(function(t,n){return t.__v.__b-n.__v.__b}),_e=[],e.some(function(t){var n,r,o,a,i,u;t.__d&&(i=(a=(n=t).__v).__e,(u=n.__P)&&(r=[],(o=z({},a)).__v=a.__v+1,St(u,a,o,n.__n,u.ownerSVGElement!==void 0,a.__h!=null?[i]:null,r,i==null?Se(a):i,a.__h),Kn(r,a),a.__e!=i&&Fn(a)))})}function Bn(e,t,n,r,o,a,i,u,s,l){var c,d,m,p,v,h,y,_=r&&r.__k||Ot,g=_.length;for(n.__k=[],c=0;c<t.length;c++)if((p=n.__k[c]=(p=t[c])==null||typeof p=="boolean"?null:typeof p=="string"||typeof p=="number"?ge(null,p,null,null,p):Array.isArray(p)?ge(Q,{children:p},null,null,null):p.__b>0?ge(p.type,p.props,p.key,null,p.__v):p)!=null){if(p.__=n,p.__b=n.__b+1,(m=_[c])===null||m&&p.key==m.key&&p.type===m.type)_[c]=void 0;else for(d=0;d<g;d++){if((m=_[d])&&p.key==m.key&&p.type===m.type){_[d]=void 0;break}m=null}St(e,p,m=m||Ve,o,a,i,u,s,l),v=p.__e,(d=p.ref)&&m.ref!=d&&(y||(y=[]),m.ref&&y.push(m.ref,null,p),y.push(d,p.__c||v,p)),v!=null?(h==null&&(h=v),typeof p.type=="function"&&p.__k!=null&&p.__k===m.__k?p.__d=s=Vn(p,s,e):s=zn(e,p,m,_,v,s),l||n.type!=="option"?typeof n.type=="function"&&(n.__d=s):e.value=""):s&&m.__e==s&&s.parentNode!=e&&(s=Se(m))}for(n.__e=h,c=g;c--;)_[c]!=null&&(typeof n.type=="function"&&_[c].__e!=null&&_[c].__e==n.__d&&(n.__d=Se(r,c+1)),Jn(_[c],_[c]));if(y)for(c=0;c<y.length;c++)Wn(y[c],y[++c],y[++c])}function Vn(e,t,n){var r,o;for(r=0;r<e.__k.length;r++)(o=e.__k[r])&&(o.__=e,t=typeof o.type=="function"?Vn(o,t,n):zn(n,o,o,e.__k,o.__e,t));return t}function K(e,t){return t=t||[],e==null||typeof e=="boolean"||(Array.isArray(e)?e.some(function(n){K(n,t)}):t.push(e)),t}function zn(e,t,n,r,o,a){var i,u,s;if(t.__d!==void 0)i=t.__d,t.__d=void 0;else if(n==null||o!=a||o.parentNode==null)e:if(a==null||a.parentNode!==e)e.appendChild(o),i=null;else{for(u=a,s=0;(u=u.nextSibling)&&s<r.length;s+=2)if(u==o)break e;e.insertBefore(o,a),i=a}return i!==void 0?i:o.nextSibling}function At(e,t,n){t[0]==="-"?e.setProperty(t,n):e[t]=n==null?"":typeof n!="number"||Ar.test(t)?n:n+"px"}function ke(e,t,n,r,o){var a;e:if(t==="style")if(typeof n=="string")e.style.cssText=n;else{if(typeof r=="string"&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||At(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||At(e.style,t,n[t])}else if(t[0]==="o"&&t[1]==="n")a=t!==(t=t.replace(/Capture$/,"")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+a]=n,n?r||e.addEventListener(t,a?Rt:Nt,a):e.removeEventListener(t,a?Rt:Nt,a);else if(t!=="dangerouslySetInnerHTML"){if(o)t=t.replace(/xlink[H:h]/,"h").replace(/sName$/,"s");else if(t!=="href"&&t!=="list"&&t!=="form"&&t!=="download"&&t in e)try{e[t]=n==null?"":n;break e}catch{}typeof n=="function"||(n!=null&&(n!==!1||t[0]==="a"&&t[1]==="r")?e.setAttribute(t,n):e.removeAttribute(t))}}function Nt(e){this.l[e.type+!1](E.event?E.event(e):e)}function Rt(e){this.l[e.type+!0](E.event?E.event(e):e)}function St(e,t,n,r,o,a,i,u,s){var l,c,d,m,p,v,h,y,_,g,b,O=t.type;if(t.constructor!==void 0)return null;n.__h!=null&&(s=n.__h,u=t.__e=n.__e,t.__h=null,a=[u]),(l=E.__b)&&l(t);try{e:if(typeof O=="function"){if(y=t.props,_=(l=O.contextType)&&r[l.__c],g=l?_?_.props.value:l.__:r,n.__c?h=(c=t.__c=n.__c).__=c.__E:("prototype"i
Line truncated
|
|
||||||
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function nt(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function on(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function te(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?on(Object(n),!0).forEach(function(r){uo(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):on(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function uo(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function an(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function Ae(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?an(Object(n),!0).forEach(function(r){rr(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):an(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function rr(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function lo(e){return function(t){if(Array.isArray(t))return rt(t)}(e)||function(t){if(typeof Symbol!="undefined"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}(e)||function(t,n){if(!!t){if(typeof t=="string")return rt(t,n);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return rt(t,n)}}(e)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
|
|
||||||
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function rt(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function cn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function un(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?cn(Object(n),!0).forEach(function(r){so(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):cn(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function so(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ne(e){return Boolean(e.execute)}function fo(e,t){return n=e,Boolean(n==null?void 0:n.execute)?un(un({},e),{},{requests:e.queries.map(function(r){return{query:r,sourceId:t,transformResponse:e.transformResponse}})}):{items:e,sourceId:t};var n}function po(e){var t=e.reduce(function(n,r){if(!Ne(r))return n.push(r),n;var o=r.searchClient,a=r.execute,i=r.requests,u=n.find(function(c){return Ne(r)&&Ne(c)&&c.searchClient===o&&c.execute===a});if(u){var s;(s=u.items).push.apply(s,lo(i))}else{var l={execute:a,items:i,searchClient:o};n.push(l)}return n},[]).map(function(n){if(!Ne(n))return Promise.resolve(n);var r=n,o=r.execute,a=r.items;return o({searchClient:r.searchClient,requests:a})});return Promise.all(t).then(function(n){return je(n)})}function mo(e,t){return t.map(function(n){var r=e.filter(function(u){return u.sourceId===n.sourceId}),o=r.map(function(u){return u.items}),a=r[0].transformResponse,i=a?a(function(u){var s=u.map(function(l){var c;return De(De({},l),{},{hits:(c=l.hits)===null||c===void 0?void 0:c.map(function(d){return De(De({},d),{},{__autocomplete_indexName:l.index,__autocomplete_queryID:l.queryID})})})});return{results:s,hits:s.map(function(l){return l.hits}).filter(Boolean),facetHits:s.map(function(l){var c;return(c=l.facetHits)===null||c===void 0?void 0:c.map(function(d){return{label:d.value,count:d.count,_highlightResult:{label:{value:d.highlighted}}}})}).filter(Boolean)}}(o)):o;return i.every(Boolean),'The `getItems` function from source "'.concat(n.sourceId,'" must return an array of items but returned ').concat(JSON.stringify(void 0),`.
|
|
||||||
|
|
||||||
Did you forget to return items?
|
|
||||||
|
|
||||||
See: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems`),{source:n,items:i}})}var ho=["event","nextState","props","query","refresh","store"];function ln(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function me(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?ln(Object(n),!0).forEach(function(r){vo(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ln(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function vo(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function yo(e,t){if(e==null)return{};var n,r,o=function(i,u){if(i==null)return{};var s,l,c={},d=Object.keys(i);for(l=0;l<d.length;l++)s=d[l],u.indexOf(s)>=0||(c[s]=i[s]);return c}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var sn,ot,Re,de=null,fn=(sn=-1,ot=-1,Re=void 0,function(e){var t=++sn;return Promise.resolve(e).then(function(n){return Re&&t<ot?Re:(ot=t,Re=n,n)})});function re(e){var t=e.event,n=e.nextState,r=n===void 0?{}:n,o=e.props,a=e.query,i=e.refresh,u=e.store,s=yo(e,ho);de&&o.environment.clearTimeout(de);var l=s.setCollections,c=s.setIsOpen,d=s.setQuery,m=s.setActiveItemId,p=s.setStatus;if(d(a),m(o.defaultActiveItemId),!a&&o.openOnFocus===!1){var v,h=u.getState().collections.map(function(g){return me(me({},g),{},{items:[]})});p("idle"),l(h),c((v=r.isOpen)!==null&&v!==void 0?v:o.shouldPanelOpen({state:u.getState()}));var y=Zt(fn(h).then(function(){return Promise.resolve()}));return u.pendingRequests.add(y)}p("loading"),de=o.environment.setTimeout(function(){p("stalled")},o.stallThreshold);var _=Zt(fn(o.getSources(me({query:a,refresh:i,state:u.getState()},s)).then(function(g){return Promise.all(g.map(function(b){return Promise.resolve(b.getItems(me({query:a,refresh:i,state:u.getState()},s))).then(function(O){return fo(O,b.sourceId)})})).then(po).then(function(b){return mo(b,g)}).then(function(b){return function(O){var S=O.collections,I=O.props,D=O.state,A=S.reduce(function(k,N){return Ae(Ae({},k),{},rr({},N.source.sourceId,Ae(Ae({},N.source),{},{getItems:function(){return je(N.items)}})))},{});return je(I.reshape({sources:Object.values(A),sourcesBySourceId:A,state:D})).filter(Boolean).map(function(k){return{source:k,items:k.getItems()}})}({collections:b,props:o,state:u.getState()})})}))).then(function(g){var b;p("idle"),l(g);var O=o.shouldPanelOpen({state:u.getState()});c((b=r.isOpen)!==null&&b!==void 0?b:o.openOnFocus&&!a&&O||O);var S=ae(u.getState());if(u.getState().activeItemId!==null&&S){var I=S.item,D=S.itemInputValue,A=S.itemUrl,k=S.source;k.onActive(me({event:t,item:I,itemInputValue:D,itemUrl:A,refresh:i,source:k,state:u.getState()},s))}}).finally(function(){p("idle"),de&&o.environment.clearTimeout(de)});return u.pendingRequests.add(_)}var _o=["event","props","refresh","store"];function pn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function G(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?pn(Object(n),!0).forEach(function(r){go(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):pn(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function go(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function bo(e,t){if(e==null)return{};var n,r,o=function(i,u){if(i==null)return{};var s,l,c={},d=Object.keys(i);for(l=0;l<d.length;l++)s=d[l],u.indexOf(s)>=0||(c[s]=i[s]);return c}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Oo=["props","refresh","store"],So=["inputElement","formElement","panelElement"],Eo=["inputElement"],wo=["inputElement","maxLength"],jo=["item","source"];function mn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function T(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?mn(Object(n),!0).forEach(function(r){Po(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):mn(Object(n)).forEach(function(r){Object.definePr
Line truncated
|
|
||||||
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function at(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Qo(e,t){if(e==null)return{};var n,r,o=function(i,u){if(i==null)return{};var s,l,c={},d=Object.keys(i);for(l=0;l<d.length;l++)s=d[l],u.indexOf(s)>=0||(c[s]=i[s]);return c}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Yo(e){var t=e.translations,n=t===void 0?{}:t,r=Qo(e,Jo),o=n.noResultsText,a=o===void 0?"No results for":o,i=n.suggestedQueryText,u=i===void 0?"Try searching for":i,s=n.reportMissingResultsText,l=s===void 0?"Believe this query should return results?":s,c=n.reportMissingResultsLinkText,d=c===void 0?"Let us know.":c,m=r.state.context.searchSuggestions;return f.createElement("div",{className:"DocSearch-NoResults"},f.createElement("div",{className:"DocSearch-Screen-Icon"},f.createElement(Ko,null)),f.createElement("p",{className:"DocSearch-Title"},a,' "',f.createElement("strong",null,r.state.query),'"'),m&&m.length>0&&f.createElement("div",{className:"DocSearch-NoResults-Prefill-List"},f.createElement("p",{className:"DocSearch-Help"},u,":"),f.createElement("ul",null,m.slice(0,3).reduce(function(p,v){return[].concat($o(p),[f.createElement("li",{key:v},f.createElement("button",{className:"DocSearch-Prefill",key:v,type:"button",onClick:function(){r.setQuery(v.toLowerCase()+" "),r.refresh(),r.inputRef.current.focus()}},v))])},[]))),r.getMissingResultsUrl&&f.createElement("p",{className:"DocSearch-Help"},"".concat(l," "),f.createElement("a",{href:r.getMissingResultsUrl({query:r.state.query}),target:"_blank",rel:"noopener noreferrer"},d)))}var Go=["hit","attribute","tagName"];function gn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function bn(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?gn(Object(n),!0).forEach(function(r){Zo(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):gn(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Zo(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Xo(e,t){if(e==null)return{};var n,r,o=function(i,u){if(i==null)return{};var s,l,c={},d=Object.keys(i);for(l=0;l<d.length;l++)s=d[l],u.indexOf(s)>=0||(c[s]=i[s]);return c}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function On(e,t){return t.split(".").reduce(function(n,r){return n!=null&&n[r]?n[r]:null},e)}function ne(e){var t=e.hit,n=e.attribute,r=e.tagName;return F(r===void 0?"span":r,bn(bn({},Xo(e,Go)),{},{dangerouslySetInnerHTML:{__html:On(t,"_snippetResult.".concat(n,".value"))||On(t,n)}}))}function Sn(e,t){return function(n){if(Array.isArray(n))return n}(e)||function(n,r){var o=n==null?null:typeof Symbol!="undefined"&&n[Symbol.iterator]||n["@@iterator"];if(o!=null){var a,i,u=[],s=!0,l=!1;try{for(o=o.call(n);!(s=(a=o.next()).done)&&(u.push(a.value),!r||u.length!==r);s=!0);}catch(c){l=!0,i=c}finally{try{s||o.return==null||o.return()}finally{if(l)throw i}}return u}}(e,t)||function(n,r){if(!!n){if(typeof n=="string")return En(n,r);var o=Object.prototype.toString.call(n).slice(8,-1);if(o==="Object"&&n.constructor&&(o=n.constructor.name),o==="Map"||o==="Set")return Array.from(n);if(o==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o))return En(n,r)}}(e,t)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
||||||
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function En(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ke(){return Ke=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Ke.apply(this,arguments)}function _t(e){return e.collection&&e.collection.items.length!==0?f.createElement("section",{className:"DocSearch-Hits"},f.createElement("div",{className:"DocSearch-Hit-source"},e.title),f.createElement("ul",e.getListProps(),e.collection.items.map(function(t,n){return f.createElement(ea,Ke({key:[e.title,t.objectID].join(":"),item:t,index:n},e))}))):null}function ea(e){var t=e.item,n=e.index,r=e.renderIcon,o=e.renderAction,a=e.getItemProps,i=e.onItemClick,u=e.collection,s=e.hitComponent,l=Sn(f.useState(!1),2),c=l[0],d=l[1],m=Sn(f.useState(!1),2),p=m[0],v=m[1],h=f.useRef(null),y=s;return f.createElement("li",Ke({className:["DocSearch-Hit",t.__docsearch_parent&&"DocSearch-Hit--Child",c&&"DocSearch-Hit--deleting",p&&"DocSearch-Hit--favoriting"].filter(Boolean).join(" "),onTransitionEnd:function(){h.current&&h.current()}},a({item:t,source:u.source,onClick:function(){i(t)}})),f.createElement(y,{hit:t},f.createElement("div",{className:"DocSearch-Hit-Container"},r({item:t,index:n}),t.hierarchy[t.type]&&t.type==="lvl1"&&f.createElement("div",{className:"DocSearch-Hit-content-wrapper"},f.createElement(ne,{className:"DocSearch-Hit-title",hit:t,attribute:"hierarchy.lvl1"}),t.content&&f.createElement(ne,{className:"DocSearch-Hit-path",hit:t,attribute:"content"})),t.hierarchy[t.type]&&(t.type==="lvl2"||t.type==="lvl3"||t.type==="lvl4"||t.type==="lvl5"||t.type==="lvl6")&&f.createElement("div",{className:"DocSearch-Hit-content-wrapper"},f.createElement(ne,{className:"DocSearch-Hit-title",hit:t,attribute:"hierarchy.".concat(t.type)}),f.createElement(ne,{className:"DocSearch-Hit-path",hit:t,attribute:"hierarchy.lvl1"})),t.type==="content"&&f.createElement("div",{className:"DocSearch-Hit-content-wrapper"},f.createElement(ne,{className:"DocSearch-Hit-title",hit:t,attribute:"content"}),f.createElement(ne,{className:"DocSearch-Hit-path",hit:t,attribute:"hierarchy.lvl1"})),o({item:t,runDeleteTransition:function(_){d(!0),h.current=_},runFavoriteTransition:function(_){v(!0),h.current=_}}))))}function wn(e,t){return e.reduce(function(n,r){var o=t(r);return n.hasOwnProperty(o)||(n[o]=[]),n[o].length<5&&n[o].push(r),n},{})}function jn(e){return e}function ta(){}var ar=/(<mark>|<\/mark>)/g,na=RegExp(ar.source);function ir(e){var t,n,r,o,a,i=e;if(!i.__docsearch_parent&&!e._highlightResult)return e.hierarchy.lvl0;var u=((i.__docsearch_parent?(t=i.__docsearch_parent)===null||t===void 0||(n=t._highlightResult)===null||n===void 0||(r=n.hierarchy)===null||r===void 0?void 0:r.lvl0:(o=e._highlightResult)===null||o===void 0||(a=o.hierarchy)===null||a===void 0?void 0:a.lvl0)||{}).value;return u&&na.test(u)?u.replace(ar,""):u}function gt(){return gt=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},gt.apply(this,arguments)}function ra(e){return f.createElement("div",{className:"DocSearch-Dropdown-Container"},e.state.collections.map(function(t){if(t.items.length===0)return null;var n=ir(t.items[0]);return f.createElement(_t,gt({},e,{key:t.source.sourceId,title:n,collection:t,renderIcon:function(r){var o,a=r.item,i=r.index;return f.createElement(f.Fragment,null,a.__docsearch_parent&&f.createElement("svg",{className:"DocSearch-Hit-Tree",viewBox:"0 0 24 54"},f.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},a.__docsearch_parent!==((o=t.items[i+1])===null||o===void 0?void 0:o.__docsearch_parent)?f.createElement("path",{d:"M8 6v21M20 27H8.3"}):f.createElement("path",{d:"M8 6v42M20 27H8.3"}))),f.createElement("div",{className:"DocSearch-Hit-icon"},f.createElement(Fo,{type:a.type})))},renderAction:function(){return f.createElement("div",{className:"DocSearch-Hit-action"},f.createElement(Ho,null))}}))}),e.resultsFooterComponent&&f.createElement("section",{className:"DocSearch-HitsFooter"},f.createElement(e.resultsFooterComponent,{state:e.state})))}var oa=["translations"];function We(){return We=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},We.apply(this,arguments)}function aa(e,t){if(e==null)return{};var n,r,o=function(i,u){if(i==null)return{};var s,l,c={},d=Object.keys(i);for(l=0;l<d.length;l++)s=d[l],u.indexOf(s)>=0||(c[s]=i[s]);return c}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ia(e){var t=e.translation
Line truncated
|
|
||||||
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Rn(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Aa(e,t){if(e==null)return{};var n,r,o=function(i,u){if(i==null)return{};var s,l,c={},d=Object.keys(i);for(l=0;l<d.length;l++)s=d[l],u.indexOf(s)>=0||(c[s]=i[s]);return c}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Na(e){var t=e.appId,n=e.apiKey,r=e.indexName,o=e.placeholder,a=o===void 0?"Search docs":o,i=e.searchParameters,u=e.onClose,s=u===void 0?ta:u,l=e.transformItems,c=l===void 0?jn:l,d=e.hitComponent,m=d===void 0?Lo:d,p=e.resultsFooterComponent,v=p===void 0?function(){return null}:p,h=e.navigator,y=e.initialScrollY,_=y===void 0?0:y,g=e.transformSearchClient,b=g===void 0?jn:g,O=e.disableUserPersonalization,S=O!==void 0&&O,I=e.initialQuery,D=I===void 0?"":I,A=e.translations,k=A===void 0?{}:A,N=e.getMissingResultsUrl,R=k.footer,Ge=k.searchBox,Ze=Aa(k,Ca),Pe=xa(f.useState({query:"",collections:[],completion:null,context:{},isOpen:!1,activeItemId:null,status:"idle"}),2),W=Pe[0],yr=Pe[1],wt=f.useRef(null),Xe=f.useRef(null),jt=f.useRef(null),Ie=f.useRef(null),ue=f.useRef(null),J=f.useRef(10),Pt=f.useRef(typeof window!="undefined"?window.getSelection().toString().slice(0,64):"").current,Y=f.useRef(D||Pt).current,It=function(j,C,q){return f.useMemo(function(){var M=vr(j,C);return M.addAlgoliaAgent("docsearch","3.0.0"),/docsearch.js \(.*\)/.test(M.transporter.userAgent.value)===!1&&M.addAlgoliaAgent("docsearch-react","3.0.0"),q(M)},[j,C,q])}(t,n,b),X=f.useRef(Pn({key:"__DOCSEARCH_FAVORITE_SEARCHES__".concat(r),limit:10})).current,le=f.useRef(Pn({key:"__DOCSEARCH_RECENT_SEARCHES__".concat(r),limit:X.getAll().length===0?7:4})).current,se=f.useCallback(function(j){if(!S){var C=j.type==="content"?j.__docsearch_parent:j;C&&X.getAll().findIndex(function(q){return q.objectID===C.objectID})===-1&&le.add(C)}},[X,le,S]),fe=f.useMemo(function(){return No({id:"docsearch",defaultActiveItemId:0,placeholder:a,openOnFocus:!0,initialState:{query:Y,context:{searchSuggestions:[]}},navigator:h,onStateChange:function(j){yr(j.state)},getSources:function(j){var C=j.query,q=j.state,M=j.setContext,$=j.setStatus;return C?It.search([{query:C,indexName:r,params:ct({attributesToRetrieve:["hierarchy.lvl0","hierarchy.lvl1","hierarchy.lvl2","hierarchy.lvl3","hierarchy.lvl4","hierarchy.lvl5","hierarchy.lvl6","content","type","url"],attributesToSnippet:["hierarchy.lvl1:".concat(J.current),"hierarchy.lvl2:".concat(J.current),"hierarchy.lvl3:".concat(J.current),"hierarchy.lvl4:".concat(J.current),"hierarchy.lvl5:".concat(J.current),"hierarchy.lvl6:".concat(J.current),"content:".concat(J.current)],snippetEllipsisText:"\u2026",highlightPreTag:"<mark>",highlightPostTag:"</mark>",hitsPerPage:20},i)}]).catch(function(x){throw x.name==="RetryError"&&$("error"),x}).then(function(x){var H=x.results[0],U=H.hits,br=H.nbHits,et=wn(U,function(tt){return ir(tt)});return q.context.searchSuggestions.length<Object.keys(et).length&&M({searchSuggestions:Object.keys(et)}),M({nbHits:br}),Object.values(et).map(function(tt,Or){return{sourceId:"hits".concat(Or),onSelect:function(V){var pe=V.item,ee=V.event;se(pe),ee.shiftKey||ee.ctrlKey||ee.metaKey||s()},getItemUrl:function(V){return V.item.url},getItems:function(){return Object.values(wn(tt,function(V){return V.hierarchy.lvl1})).map(c).map(function(V){return V.map(function(pe){return ct(ct({},pe),{},{__docsearch_parent:pe.type!=="lvl1"&&V.find(function(ee){return ee.type==="lvl1"&&ee.hierarchy.lvl1===pe.hierarchy.lvl1})})})}).flat()}}})}):S?[]:[{sourceId:"recentSearches",onSelect:function(x){var H=x.item,U=x.event;se(H),U.shiftKey||U.ctrlKey||U.metaKey||s()},getItemUrl:function(x){return x.item.url},getItems:function(){return le.getAll()}},{sourceId:"favoriteSearches",onSelect:function(x){var H=x.item,U=x.event;se(H),U.shiftKey||U.ctrlKey||U.metaKey||s()},getItemUrl:function(x){return x.item.url},getItems:function(){return X.getAll()}}]}})},[r,i,It,s,le,X,se,Y,a,h,c,S]),_r=fe.getEnvironmentProps,gr=fe.getRootProps,kt=fe.refresh;return function(j){var C=j.getEnvironmentProps,q=j.panelElement,M=j.formElement,$=j.inputElement;f.useEffect(function(){if(q&&M&&$){var x=C({panelElement:q,formElement:M,inputElement:$}),H=x.onTouchStart,U=x.onTouchMove;return window.addEventListener("touchstart",H),window.addEventListener("touchmove",U),function(){window.removeEventListener("touchstart",H),window.removeEventListener("touchmove",U)}}},[C,q,M,$])}({getEnvironmentProps:_r,panelElement:Ie.current,formElement:jt.current,inputElement:ue.current}),function(j){var C=j.container;f.useEffect(function(){if(C){var q=C.querySelectorAll("a[href]:not([disabled]), button:not([disabled]), input:not([disabled])"),M=q[0],$=q[q.length-1];return C.addEventListener("keydown",x),function(){C.r
Line truncated
|
|
||||||
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Ln(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ra(e){var t,n,r=f.useRef(null),o=Tn(f.useState(!1),2),a=o[0],i=o[1],u=Tn(f.useState((e==null?void 0:e.initialQuery)||void 0),2),s=u[0],l=u[1],c=f.useCallback(function(){i(!0)},[i]),d=f.useCallback(function(){i(!1)},[i]);return function(m){var p=m.isOpen,v=m.onOpen,h=m.onClose,y=m.onInput,_=m.searchButtonRef;f.useEffect(function(){function g(b){(b.keyCode===27&&p||b.key==="k"&&(b.metaKey||b.ctrlKey)||!function(O){var S=O.target,I=S.tagName;return S.isContentEditable||I==="INPUT"||I==="SELECT"||I==="TEXTAREA"}(b)&&b.key==="/"&&!p)&&(b.preventDefault(),p?h():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||v()),_&&_.current===document.activeElement&&y&&/[a-zA-Z0-9]/.test(String.fromCharCode(b.keyCode))&&y(b)}return window.addEventListener("keydown",g),function(){window.removeEventListener("keydown",g)}},[p,v,h,y,_])}({isOpen:a,onOpen:c,onClose:d,onInput:f.useCallback(function(m){i(!0),l(m.key)},[i,l]),searchButtonRef:r}),f.createElement(f.Fragment,null,f.createElement(Gr,{ref:r,translations:e==null||(t=e.translations)===null||t===void 0?void 0:t.button,onClick:c}),a&&Zn(f.createElement(Na,bt({},e,{initialScrollY:window.scrollY,initialQuery:s,translations:e==null||(n=e.translations)===null||n===void 0?void 0:n.modal,onClose:d})),document.body))}function Ta(e){er(f.createElement(Ra,ut({},e,{transformSearchClient:function(t){return t.addAlgoliaAgent("docsearch.js","3.0.0"),e.transformSearchClient?e.transformSearchClient(t):t}})),function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:window;return typeof t=="string"?n.document.querySelector(t):t}(e.container,e.environment))}const La={class:"algolia-search-box",id:"docsearch"},Ma=Sr({props:{options:null,multilang:{type:Boolean}},setup(e){var d;const t=e,n=Cr(),r=Er(),o=wr();Ct(()=>t.options,m=>{u(m)}),jr(()=>{c(t.options)});function a(m){return m.button===1||m.altKey||m.ctrlKey||m.metaKey||m.shiftKey}function i(m){const{pathname:p,hash:v}=new URL(m);return p+v}function u(m){n&&n.vnode.el&&(n.vnode.el.innerHTML='<div class="algolia-search-box" id="docsearch"></div>',c(m))}const{lang:s}=Pr(),l=t.multilang?["lang:"+s.value]:[];(d=t.options.searchParameters)!=null&&d.facetFilters&&l.push(...t.options.searchParameters.facetFilters),Ct(s,(m,p)=>{const v=l.findIndex(h=>h==="lang:"+p);v>-1&&l.splice(v,1,"lang:"+m)});function c(m){Ta(Object.assign({},m,{container:"#docsearch",searchParameters:Object.assign({},m.searchParameters,{facetFilters:l}),navigator:{navigate:({itemUrl:p})=>{const{pathname:v}=new URL(window.location.origin+p);r.path===v?window.location.assign(window.location.origin+p):o.go(p)}},transformItems:p=>p.map(v=>Object.assign({},v,{url:i(v.url)})),hitComponent:({hit:p,children:v})=>{const h=p.url.startsWith("http")?i(p.url):p.url;return{type:"a",ref:void 0,constructor:void 0,key:void 0,props:{href:p.url,onClick:y=>{a(y)||r.path!==h&&(r.path!==h&&y.preventDefault(),o.go(h))},children:v},__v:null}}}))}return(m,p)=>(Ir(),kr("div",La))}});export{Ma as default};
|
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
import{d as fo,ai as mo,x as po,p as vo,w as ho,o as yo,c as go}from"./framework.1625126e.js";import{u as bo}from"./theme.776be62d.js";/*! @docsearch/js 3.5.1 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */function cn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable})),n.push.apply(n,r)}return n}function I(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?cn(Object(n),!0).forEach(function(r){_o(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):cn(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function Be(t){return Be=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Be(t)}function _o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function qt(){return qt=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},qt.apply(this,arguments)}function Oo(t,e){if(t==null)return{};var n,r,o=function(a,u){if(a==null)return{};var c,s,l={},m=Object.keys(a);for(s=0;s<m.length;s++)c=m[s],u.indexOf(c)>=0||(l[c]=a[c]);return l}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r<i.length;r++)n=i[r],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}function st(t,e){return function(n){if(Array.isArray(n))return n}(t)||function(n,r){var o=n==null?null:typeof Symbol<"u"&&n[Symbol.iterator]||n["@@iterator"];if(o!=null){var i,a,u=[],c=!0,s=!1;try{for(o=o.call(n);!(c=(i=o.next()).done)&&(u.push(i.value),!r||u.length!==r);c=!0);}catch(l){s=!0,a=l}finally{try{c||o.return==null||o.return()}finally{if(s)throw a}}return u}}(t,e)||yr(t,e)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
|
||||||
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function ft(t){return function(e){if(Array.isArray(e))return Lt(e)}(t)||function(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}(t)||yr(t)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
|
||||||
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function yr(t,e){if(t){if(typeof t=="string")return Lt(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set"?Array.from(t):n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Lt(t,e):void 0}}function Lt(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var w,Ee,gr,un,br,mt={},Qt=[],So=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function $(t,e){for(var n in e)t[n]=e[n];return t}function _r(t){var e=t.parentNode;e&&e.removeChild(t)}function V(t,e,n){var r,o,i,a=arguments,u={};for(i in e)i=="key"?r=e[i]:i=="ref"?o=e[i]:u[i]=e[i];if(arguments.length>3)for(n=[n],i=3;i<arguments.length;i++)n.push(a[i]);if(n!=null&&(u.children=n),typeof t=="function"&&t.defaultProps!=null)for(i in t.defaultProps)u[i]===void 0&&(u[i]=t.defaultProps[i]);return Pe(t,u,r,o,null)}function Pe(t,e,n,r,o){var i={type:t,props:e,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:o??++w.__v};return w.vnode!=null&&w.vnode(i),i}function X(t){return t.children}function W(t,e){this.props=t,this.context=e}function Ve(t,e){if(e==null)return t.__?Ve(t.__,t.__.__k.indexOf(t)+1):null;for(var n;e<t.__k.length;e++)if((n=t.__k[e])!=null&&n.__e!=null)return n.__e;return typeof t.type=="function"?Ve(t):null}function Or(t){var e,n;if((t=t.__)!=null&&t.__c!=null){for(t.__e=t.__c.base=null,e=0;e<t.__k.length;e++)if((n=t.__k[e])!=null&&n.__e!=null){t.__e=t.__c.base=n.__e;break}return Or(t)}}function Mt(t){(!t.__d&&(t.__d=!0)&&Ee.push(t)&&!pt.__r++||un!==w.debounceRendering)&&((un=w.debounceRendering)||gr)(pt)}function pt(){for(var t;pt.__r=Ee.length;)t=Ee.sort(function(e,n){return e.__v.__b-n.__v.__b}),Ee=[],t.some(function(e){var n,r,o,i,a,u;e.__d&&(a=(i=(n=e).__v).__e,(u=n.__P)&&(r=[],(o=$({},i)).__v=i.__v+1,Zt(u,i,o,n.__n,u.ownerSVGElement!==void 0,i.__h!=null?[a]:null,r,a??Ve(i),i.__h),Er(r,i),i.__e!=a&&Or(i)))})}function Sr(t,e,n,r,o,i,a,u,c,s){var l,m,p,v,d,h,y,b=r&&r.__k||Qt,_=b.length;for(n.__k=[],l=0;l<e.length;l++)if((v=n.__k[l]=(v=e[l])==null||typeof v=="boolean"?null:typeof v=="string"||typeof v=="number"?Pe(null,v,null,null,v):Array.isArray(v)?Pe(X,{children:v},null,null,null):v.__b>0?Pe(v.type,v.props,v.key,null,v.__v):v)!=null){if(v.__=n,v.__b=n.__b+1,(p=b[l])===null||p&&v.key==p.key&&v.type===p.type)b[l]=void 0;else for(m=0;m<_;m++){if((p=b[m])&&v.key==p.key&&v.type===p.type){b[m]=void 0;break}p=null}Zt(t,v,p=p||mt,o,i,a,u,c,s),d=v.__e,(m=v.ref)&&p.ref!=m&&(y||(y=[]),p.ref&&y.push(p.ref,null,v),y.push(m,v.__c||d,v)),d!=null?(h==null&&(h=d),typeof v.type=="function"&&v.__k!=null&&v.__k===p.__k?v.__d=c=wr(v,c,t):c=jr(t,v,p,b,d,c),s||n.type!=="option"?typeof n.type=="function"&&(n.__d=c):t.value=""):c&&p.__e==c&&c.parentNode!=t&&(c=Ve(p))}for(n.__e=h,l=_;l--;)b[l]!=null&&(typeof n.type=="function"&&b[l].__e!=null&&b[l].__e==n.__d&&(n.__d=Ve(r,l+1)),Ir(b[l],b[l]));if(y)for(l=0;l<y.length;l++)Pr(y[l],y[++l],y[++l])}function wr(t,e,n){var r,o;for(r=0;r<t.__k.length;r++)(o=t.__k[r])&&(o.__=t,e=typeof o.type=="function"?wr(o,e,n):jr(n,o,o,t.__k,o.__e,e));return e}function J(t,e){return e=e||[],t==null||typeof t=="boolean"||(Array.isArray(t)?t.some(function(n){J(n,e)}):e.push(t)),e}function jr(t,e,n,r,o,i){var a,u,c;if(e.__d!==void 0)a=e.__d,e.__d=void 0;else if(n==null||o!=i||o.parentNode==null)e:if(i==null||i.parentNode!==t)t.appendChild(o),a=null;else{for(u=i,c=0;(u=u.nextSibling)&&c<r.length;c+=2)if(u==o)break e;t.insertBefore(o,i),a=i}return a!==void 0?a:o.nextSibling}function ln(t,e,n){e[0]==="-"?t.setProperty(e,n):t[e]=n==null?"":typeof n!="number"||So.test(e)?n:n+"px"}function Ze(t,e,n,r,o){var i;e:if(e==="style")if(typeof n=="string")t.style.cssText=n;else{if(typeof r=="string"&&(t.style.cssText=r=""),r)for(e in r)n&&e in n||ln(t.style,e,"");if(n)for(e in n)r&&n[e]===r[e]||ln(t.style,e,n[e])}else if(e[0]==="o"&&e[1]==="n")i=e!==(e=e.replace(/Capture$/,"")),e=e.toLowerCase()in t?e.toLowerCase().slice(2):e.slice(2),t.l||(t.l={}),t.l[e+i]=n,n?r||t.addEventListener(e,i?fn:sn,i):t.removeEventListener(e,i?fn:sn,i);else if(e!=="dangerouslySetInnerHTML"){if(o)e=e.replace(/xlink[H:h]/,"h").replace(/sName$/,"s");else if(e!=="href"&&e!=="list"&&e!=="form"&&e!=="download"&&e in t)try{t[e]=n??"";break e}catch{}typeof n=="function"||(n!=null&&(n!==!1||e[0]==="a"&&e[1]==="r")?t.setAttribute(e,n):t.removeAttribute(e))}}function sn(t){this.l[t.type+!1](w.event?w.event(t):t)}function fn(t){this.l[t.type+!0](w.event?w.event(t):t)}function Zt(t,e,n,r,o,i,a,u,c){var s,l,m,p,v,d,h,y,b,_,S,O=e.type;if(e.constructor!==void 0)return null;n.__h!=null&&(c=n.__h,u=e.__e=n.__e,e.__h=null,i=[u]),(s=w.__b)&&s(e);try{e:if(typeof O=="function"){if(y=e.props,b=(s=O.contextType)&&r[s.__c],_=s?b?b.props.value:s.__:r,n.__c?h=(l=e.__c=n.__c).__=l.__E:("prototype"in O&&O.prototype.rend
Line truncated
|
||||||
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Dn(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function Fo(t,e){if(t==null)return{};var n,r,o=function(a,u){if(a==null)return{};var c,s,l={},m=Object.keys(a);for(s=0;s<m.length;s++)c=m[s],u.indexOf(c)>=0||(l[c]=a[c]);return l}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r<i.length;r++)n=i[r],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}var Bo=f.forwardRef(function(t,e){var n=t.translations,r=n===void 0?{}:n,o=Fo(t,Ho),i=r.buttonText,a=i===void 0?"Search":i,u=r.buttonAriaLabel,c=u===void 0?"Search":u,s=Uo(kr(null),2),l=s[0],m=s[1];return Cr(function(){typeof navigator<"u"&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?m("⌘"):m("Ctrl"))},[]),f.createElement("button",Vt({type:"button",className:"DocSearch DocSearch-Button","aria-label":c},o,{ref:e}),f.createElement("span",{className:"DocSearch-Button-Container"},f.createElement(Hr,null),f.createElement("span",{className:"DocSearch-Button-Placeholder"},a)),f.createElement("span",{className:"DocSearch-Button-Keys"},l!==null&&f.createElement(f.Fragment,null,f.createElement("kbd",{className:"DocSearch-Button-Key"},l==="Ctrl"?f.createElement(Mo,null):l),f.createElement("kbd",{className:"DocSearch-Button-Key"},"K"))))});function Ur(t,e){var n=void 0;return function(){for(var r=arguments.length,o=new Array(r),i=0;i<r;i++)o[i]=arguments[i];n&&clearTimeout(n),n=setTimeout(function(){return t.apply(void 0,o)},e)}}function Ke(t){return t.reduce(function(e,n){return e.concat(n)},[])}var Vo=0;function Wt(t){return t.collections.length===0?0:t.collections.reduce(function(e,n){return e+n.items.length},0)}function kn(t){return t!==Object(t)}function Fr(t,e){if(t===e)return!0;if(kn(t)||kn(e)||typeof t=="function"||typeof e=="function")return t===e;if(Object.keys(t).length!==Object.keys(e).length)return!1;for(var n=0,r=Object.keys(t);n<r.length;n++){var o=r[n];if(!(o in e)||!Fr(t[o],e[o]))return!1}return!0}var vt=function(){},Wo=[{segment:"autocomplete-core",version:"1.9.3"}];function An(t){var e=t.item,n=t.items;return{index:e.__autocomplete_indexName,items:[e],positions:[1+n.findIndex(function(r){return r.objectID===e.objectID})],queryID:e.__autocomplete_queryID,algoliaSource:["autocomplete"]}}function Ko(t,e){return function(n){if(Array.isArray(n))return n}(t)||function(n,r){var o=n==null?null:typeof Symbol<"u"&&n[Symbol.iterator]||n["@@iterator"];if(o!=null){var i,a,u,c,s=[],l=!0,m=!1;try{if(u=(o=o.call(n)).next,r===0){if(Object(o)!==o)return;l=!1}else for(;!(l=(i=u.call(o)).done)&&(s.push(i.value),s.length!==r);l=!0);}catch(p){m=!0,a=p}finally{try{if(!l&&o.return!=null&&(c=o.return(),Object(c)!==c))return}finally{if(m)throw a}}return s}}(t,e)||function(n,r){if(n){if(typeof n=="string")return Cn(n,r);var o=Object.prototype.toString.call(n).slice(8,-1);if(o==="Object"&&n.constructor&&(o=n.constructor.name),o==="Map"||o==="Set")return Array.from(n);if(o==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o))return Cn(n,r)}}(t,e)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
|
||||||
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Cn(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var zo=["items"],$o=["items"];function Ie(t){return Ie=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ie(t)}function Ye(t){return function(e){if(Array.isArray(e))return It(e)}(t)||function(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}(t)||function(e,n){if(e){if(typeof e=="string")return It(e,n);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return It(e,n)}}(t)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
|
||||||
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function It(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function Br(t,e){if(t==null)return{};var n,r,o=function(a,u){if(a==null)return{};var c,s,l={},m=Object.keys(a);for(s=0;s<m.length;s++)c=m[s],u.indexOf(c)>=0||(l[c]=a[c]);return l}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r<i.length;r++)n=i[r],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}function xn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable})),n.push.apply(n,r)}return n}function ve(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?xn(Object(n),!0).forEach(function(r){Jo(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):xn(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function Jo(t,e,n){return(e=function(r){var o=function(i,a){if(Ie(i)!=="object"||i===null)return i;var u=i[Symbol.toPrimitive];if(u!==void 0){var c=u.call(i,a||"default");if(Ie(c)!=="object")return c;throw new TypeError("@@toPrimitive must return a primitive value.")}return(a==="string"?String:Number)(i)}(r,"string");return Ie(o)==="symbol"?o:String(o)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Qo(t){for(var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:20,n=[],r=0;r<t.objectIDs.length;r+=e)n.push(ve(ve({},t),{},{objectIDs:t.objectIDs.slice(r,r+e)}));return n}function Ge(t){return t.map(function(e){var n=e.items,r=Br(e,zo);return ve(ve({},r),{},{objectIDs:(n==null?void 0:n.map(function(o){return o.objectID}))||r.objectIDs})})}function Zo(t){var e,n,r,o=(e=Ko((t.version||"").split(".").map(Number),2),n=e[0],r=e[1],n>=3||n===2&&r>=4||n===1&&r>=10);function i(a,u,c){if(o&&c!==void 0){var s=c[0].__autocomplete_algoliaCredentials,l={"X-Algolia-Application-Id":s.appId,"X-Algolia-API-Key":s.apiKey};t.apply(void 0,[a].concat(Ye(u),[{headers:l}]))}else t.apply(void 0,[a].concat(Ye(u)))}return{init:function(a,u){t("init",{appId:a,apiKey:u})},setUserToken:function(a){t("setUserToken",a)},clickedObjectIDsAfterSearch:function(){for(var a=arguments.length,u=new Array(a),c=0;c<a;c++)u[c]=arguments[c];u.length>0&&i("clickedObjectIDsAfterSearch",Ge(u),u[0].items)},clickedObjectIDs:function(){for(var a=arguments.length,u=new Array(a),c=0;c<a;c++)u[c]=arguments[c];u.length>0&&i("clickedObjectIDs",Ge(u),u[0].items)},clickedFilters:function(){for(var a=arguments.length,u=new Array(a),c=0;c<a;c++)u[c]=arguments[c];u.length>0&&t.apply(void 0,["clickedFilters"].concat(u))},convertedObjectIDsAfterSearch:function(){for(var a=arguments.length,u=new Array(a),c=0;c<a;c++)u[c]=arguments[c];u.length>0&&i("convertedObjectIDsAfterSearch",Ge(u),u[0].items)},convertedObjectIDs:function(){for(var a=arguments.length,u=new Array(a),c=0;c<a;c++)u[c]=arguments[c];u.length>0&&i("convertedObjectIDs",Ge(u),u[0].items)},convertedFilters:function(){for(var a=arguments.length,u=new Array(a),c=0;c<a;c++)u[c]=arguments[c];u.length>0&&t.apply(void 0,["convertedFilters"].concat(u))},viewedObjectIDs:function(){for(var a=arguments.length,u=new Array(a),c=0;c<a;c++)u[c]=arguments[c];u.length>0&&u.reduce(function(s,l){var m=l.items,p=Br(l,$o);return[].concat(Ye(s),Ye(Qo(ve(ve({},p),{},{objectIDs:(m==null?void 0:m.map(function(v){return v.objectID}))||p.objectIDs})).map(function(v){return{items:m,payload:v}})))},[]).forEach(function(s){var l=s.items;return i("viewedObjectIDs",[s.payload],l)})},viewedFilters:function(){for(var a=arguments.length,u=new Array(a),c=0;c<a;c++)u[c]=arguments[c];u.length>0&&t.apply(void 0,["viewedFilters"].concat(u))}}}function Yo(t){var e=t.items.reduce(function(n,r){var o;return n[r.__autocomplete_indexName]=((o=n[r.__autocomplete_indexName])!==null&&o!==void 0?o:[]).concat(r),n},{});return Object.keys(e).map(function(n){return{index:n,items:e[n],algoliaSource:["autocomplete"]}})}function Dt(t){return t.objectID&&t.__autocomplete_indexName&&t.__autocomplete_queryID}function De(t){return De=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},De(t)}function ae(t){return function(e){if(Array.isArray(e))return kt(e)}(t)||function(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}(t)||function(e,n){if(e){if(typeof e=="string")return kt(e,n);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(
Line truncated
|
||||||
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function kt(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function Nn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable})),n.push.apply(n,r)}return n}function G(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?Nn(Object(n),!0).forEach(function(r){Go(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Nn(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function Go(t,e,n){return(e=function(r){var o=function(i,a){if(De(i)!=="object"||i===null)return i;var u=i[Symbol.toPrimitive];if(u!==void 0){var c=u.call(i,a||"default");if(De(c)!=="object")return c;throw new TypeError("@@toPrimitive must return a primitive value.")}return(a==="string"?String:Number)(i)}(r,"string");return De(o)==="symbol"?o:String(o)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var Xo="https://cdn.jsdelivr.net/npm/search-insights@".concat("2.6.0","/dist/search-insights.min.js"),ei=Ur(function(t){var e=t.onItemsChange,n=t.items,r=t.insights,o=t.state;e({insights:r,insightsEvents:Yo({items:n}).map(function(i){return G({eventName:"Items Viewed"},i)}),state:o})},400);function ti(t){var e=function(l){return G({onItemsChange:function(m){var p=m.insights,v=m.insightsEvents;p.viewedObjectIDs.apply(p,ae(v.map(function(d){return G(G({},d),{},{algoliaSource:[].concat(ae(d.algoliaSource||[]),["autocomplete-internal"])})})))},onSelect:function(m){var p=m.insights,v=m.insightsEvents;p.clickedObjectIDsAfterSearch.apply(p,ae(v.map(function(d){return G(G({},d),{},{algoliaSource:[].concat(ae(d.algoliaSource||[]),["autocomplete-internal"])})})))},onActive:vt},l)}(t),n=e.insightsClient,r=e.onItemsChange,o=e.onSelect,i=e.onActive,a=n;n||function(l){typeof window<"u"&&l({window})}(function(l){var m=l.window,p=m.AlgoliaAnalyticsObject||"aa";typeof p=="string"&&(a=m[p]),a||(m.AlgoliaAnalyticsObject=p,m[p]||(m[p]=function(){m[p].queue||(m[p].queue=[]);for(var v=arguments.length,d=new Array(v),h=0;h<v;h++)d[h]=arguments[h];m[p].queue.push(d)}),m[p].version="2.6.0",a=m[p],function(v){var d="[Autocomplete]: Could not load search-insights.js. Please load it manually following https://alg.li/insights-autocomplete";try{var h=v.document.createElement("script");h.async=!0,h.src=Xo,h.onerror=function(){console.error(d)},document.body.appendChild(h)}catch{console.error(d)}}(m))});var u=Zo(a),c={current:[]},s=Ur(function(l){var m=l.state;if(m.isOpen){var p=m.collections.reduce(function(v,d){return[].concat(ae(v),ae(d.items))},[]).filter(Dt);Fr(c.current.map(function(v){return v.objectID}),p.map(function(v){return v.objectID}))||(c.current=p,p.length>0&&ei({onItemsChange:r,items:p,insights:u,state:m}))}},0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(l){var m=l.setContext,p=l.onSelect,v=l.onActive;a("addAlgoliaAgent","insights-plugin"),m({algoliaInsightsPlugin:{__algoliaSearchParameters:{clickAnalytics:!0},insights:u}}),p(function(d){var h=d.item,y=d.state,b=d.event;Dt(h)&&o({state:y,event:b,insights:u,item:h,insightsEvents:[G({eventName:"Item Selected"},An({item:h,items:c.current}))]})}),v(function(d){var h=d.item,y=d.state,b=d.event;Dt(h)&&i({state:y,event:b,insights:u,item:h,insightsEvents:[G({eventName:"Item Active"},An({item:h,items:c.current}))]})})},onStateChange:function(l){var m=l.state;s({state:m})},__autocomplete_pluginOptions:t}}function ut(t,e){var n=e;return{then:function(r,o){return ut(t.then(Xe(r,n,t),Xe(o,n,t)),n)},catch:function(r){return ut(t.catch(Xe(r,n,t)),n)},finally:function(r){return r&&n.onCancelList.push(r),ut(t.finally(Xe(r&&function(){return n.onCancelList=[],r()},n,t)),n)},cancel:function(){n.isCanceled=!0;var r=n.onCancelList;n.onCancelList=[],r.forEach(function(o){o()})},isCanceled:function(){return n.isCanceled===!0}}}function Tn(t){return ut(t,{isCanceled:!1,onCancelList:[]})}function Xe(t,e,n){return t?function(r){return e.isCanceled?r:t(r)}:n}function Rn(t,e,n,r){if(!n)return null;if(t<0&&(e===null||r!==null&&e===0))return n+t;var o=(e===null?-1:e)+t;return o<=-1||o>=n?r===null?null:0:o}function qn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable})),n.push.apply(n,r)}return n}function Ln(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?qn(Object(n),!0).forEach(function(r){ni(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):qn(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function ni(t,e,n){re
Line truncated
|
||||||
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function At(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function Un(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable})),n.push.apply(n,r)}return n}function ce(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?Un(Object(n),!0).forEach(function(r){ui(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Un(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function ui(t,e,n){return(e=function(r){var o=function(i,a){if(xe(i)!=="object"||i===null)return i;var u=i[Symbol.toPrimitive];if(u!==void 0){var c=u.call(i,a||"default");if(xe(c)!=="object")return c;throw new TypeError("@@toPrimitive must return a primitive value.")}return(a==="string"?String:Number)(i)}(r,"string");return xe(o)==="symbol"?o:String(o)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function li(t,e){var n,r=typeof window<"u"?window:{},o=t.plugins||[];return ce(ce({debug:!1,openOnFocus:!1,placeholder:"",autoFocus:!1,defaultActiveItemId:null,stallThreshold:300,insights:!1,environment:r,shouldPanelOpen:function(i){return Wt(i.state)>0},reshape:function(i){return i.sources}},t),{},{id:(n=t.id)!==null&&n!==void 0?n:"autocomplete-".concat(Vo++),plugins:o,initialState:ce({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},t.initialState),onStateChange:function(i){var a;(a=t.onStateChange)===null||a===void 0||a.call(t,i),o.forEach(function(u){var c;return(c=u.onStateChange)===null||c===void 0?void 0:c.call(u,i)})},onSubmit:function(i){var a;(a=t.onSubmit)===null||a===void 0||a.call(t,i),o.forEach(function(u){var c;return(c=u.onSubmit)===null||c===void 0?void 0:c.call(u,i)})},onReset:function(i){var a;(a=t.onReset)===null||a===void 0||a.call(t,i),o.forEach(function(u){var c;return(c=u.onReset)===null||c===void 0?void 0:c.call(u,i)})},getSources:function(i){return Promise.all([].concat(ci(o.map(function(a){return a.getSources})),[t.getSources]).filter(Boolean).map(function(a){return function(u,c){var s=[];return Promise.resolve(u(c)).then(function(l){return Promise.all(l.filter(function(m){return!!m}).map(function(m){if(m.sourceId,s.includes(m.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(m.sourceId)," is not unique."));s.push(m.sourceId);var p={getItemInputValue:function(d){return d.state.query},getItemUrl:function(){},onSelect:function(d){(0,d.setIsOpen)(!1)},onActive:vt,onResolve:vt};Object.keys(p).forEach(function(d){p[d].__default=!0});var v=Ln(Ln({},p),m);return Promise.resolve(v)}))})}(a,i)})).then(function(a){return Ke(a)}).then(function(a){return a.map(function(u){return ce(ce({},u),{},{onSelect:function(c){u.onSelect(c),e.forEach(function(s){var l;return(l=s.onSelect)===null||l===void 0?void 0:l.call(s,c)})},onActive:function(c){u.onActive(c),e.forEach(function(s){var l;return(l=s.onActive)===null||l===void 0?void 0:l.call(s,c)})},onResolve:function(c){u.onResolve(c),e.forEach(function(s){var l;return(l=s.onResolve)===null||l===void 0?void 0:l.call(s,c)})}})})})},navigator:ce({navigate:function(i){var a=i.itemUrl;r.location.assign(a)},navigateNewTab:function(i){var a=i.itemUrl,u=r.open(a,"_blank","noopener");u==null||u.focus()},navigateNewWindow:function(i){var a=i.itemUrl;r.open(a,"_blank","noopener")}},t.navigator)})}function Ne(t){return Ne=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ne(t)}function Fn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable})),n.push.apply(n,r)}return n}function tt(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?Fn(Object(n),!0).forEach(function(r){Vr(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Fn(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function Vr(t,e,n){return(e=function(r){var o=function(i,a){if(Ne(i)!=="object"||i===null)return i;var u=i[Symbol.toPrimitive];if(u!==void 0){var c=u.call(i,a||"default");if(Ne(c)!=="object")return c;throw new TypeError("@@toPrimitive must return a primitive value.")}return(a==="string"?String:Number)(i)}(r,"string");return Ne(o)==="symbol"?o:String(o)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Te(t){return Te=typeof Symbol=="function"&&typeof
Line truncated
|
||||||
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Ct(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function nt(t){return!!t.execute}function fi(t,e,n){if(o=t,!!(o!=null&&o.execute)){var r=t.requesterId==="algolia"?Object.assign.apply(Object,[{}].concat(Wr(Object.keys(n.context).map(function(i){var a;return(a=n.context[i])===null||a===void 0?void 0:a.__algoliaSearchParameters})))):{};return ue(ue({},t),{},{requests:t.queries.map(function(i){return{query:t.requesterId==="algolia"?ue(ue({},i),{},{params:ue(ue({},r),i.params)}):i,sourceId:e,transformResponse:t.transformResponse}})})}var o;return{items:t,sourceId:e}}function mi(t){var e=t.reduce(function(n,r){if(!nt(r))return n.push(r),n;var o=r.searchClient,i=r.execute,a=r.requesterId,u=r.requests,c=n.find(function(m){return nt(r)&&nt(m)&&m.searchClient===o&&!!a&&m.requesterId===a});if(c){var s;(s=c.items).push.apply(s,Wr(u))}else{var l={execute:i,requesterId:a,items:u,searchClient:o};n.push(l)}return n},[]).map(function(n){if(!nt(n))return Promise.resolve(n);var r=n,o=r.execute,i=r.items;return o({searchClient:r.searchClient,requests:i})});return Promise.all(e).then(function(n){return Ke(n)})}function pi(t,e,n){return e.map(function(r){var o,i=t.filter(function(s){return s.sourceId===r.sourceId}),a=i.map(function(s){return s.items}),u=i[0].transformResponse,c=u?u({results:o=a,hits:o.map(function(s){return s.hits}).filter(Boolean),facetHits:o.map(function(s){var l;return(l=s.facetHits)===null||l===void 0?void 0:l.map(function(m){return{label:m.value,count:m.count,_highlightResult:{label:{value:m.highlighted}}}})}).filter(Boolean)}):a;return r.onResolve({source:r,results:a,items:c,state:n.getState()}),c.every(Boolean),'The `getItems` function from source "'.concat(r.sourceId,'" must return an array of items but returned ').concat(JSON.stringify(void 0),`.
|
||||||
|
|
||||||
|
Did you forget to return items?
|
||||||
|
|
||||||
|
See: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems`),{source:r,items:c}})}function Re(t){return Re=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Re(t)}var vi=["event","nextState","props","query","refresh","store"];function Vn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable})),n.push.apply(n,r)}return n}function Oe(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?Vn(Object(n),!0).forEach(function(r){di(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Vn(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function di(t,e,n){return(e=function(r){var o=function(i,a){if(Re(i)!=="object"||i===null)return i;var u=i[Symbol.toPrimitive];if(u!==void 0){var c=u.call(i,a||"default");if(Re(c)!=="object")return c;throw new TypeError("@@toPrimitive must return a primitive value.")}return(a==="string"?String:Number)(i)}(r,"string");return Re(o)==="symbol"?o:String(o)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function hi(t,e){if(t==null)return{};var n,r,o=function(a,u){if(a==null)return{};var c,s,l={},m=Object.keys(a);for(s=0;s<m.length;s++)c=m[s],u.indexOf(c)>=0||(l[c]=a[c]);return l}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r<i.length;r++)n=i[r],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}var Wn,xt,rt,Se=null,Kn=(Wn=-1,xt=-1,rt=void 0,function(t){var e=++Wn;return Promise.resolve(t).then(function(n){return rt&&e<xt?rt:(xt=e,rt=n,n)})});function se(t){var e=t.event,n=t.nextState,r=n===void 0?{}:n,o=t.props,i=t.query,a=t.refresh,u=t.store,c=hi(t,vi);Se&&o.environment.clearTimeout(Se);var s=c.setCollections,l=c.setIsOpen,m=c.setQuery,p=c.setActiveItemId,v=c.setStatus;if(m(i),p(o.defaultActiveItemId),!i&&o.openOnFocus===!1){var d,h=u.getState().collections.map(function(_){return Oe(Oe({},_),{},{items:[]})});v("idle"),s(h),l((d=r.isOpen)!==null&&d!==void 0?d:o.shouldPanelOpen({state:u.getState()}));var y=Tn(Kn(h).then(function(){return Promise.resolve()}));return u.pendingRequests.add(y)}v("loading"),Se=o.environment.setTimeout(function(){v("stalled")},o.stallThreshold);var b=Tn(Kn(o.getSources(Oe({query:i,refresh:a,state:u.getState()},c)).then(function(_){return Promise.all(_.map(function(S){return Promise.resolve(S.getItems(Oe({query:i,refresh:a,state:u.getState()},c))).then(function(O){return fi(O,S.sourceId,u.getState())})})).then(mi).then(function(S){return pi(S,_,u)}).then(function(S){return function(O){var g=O.collections,P=O.props,C=O.state,L=g.reduce(function(k,N){return tt(tt({},k),{},Vr({},N.source.sourceId,tt(tt({},N.source),{},{getItems:function(){return Ke(N.items)}})))},{}),x=P.plugins.reduce(function(k,N){return N.reshape?N.reshape(k):k},{sourcesBySourceId:L,state:C}).sourcesBySourceId;return Ke(P.reshape({sourcesBySourceId:x,sources:Object.values(x),state:C})).filter(Boolean).map(function(k){return{source:k,items:k.getItems()}})}({collections:S,props:o,state:u.getState()})})}))).then(function(_){var S;v("idle"),s(_);var O=o.shouldPanelOpen({state:u.getState()});l((S=r.isOpen)!==null&&S!==void 0?S:o.openOnFocus&&!i&&O||O);var g=fe(u.getState());if(u.getState().activeItemId!==null&&g){var P=g.item,C=g.itemInputValue,L=g.itemUrl,x=g.source;x.onActive(Oe({event:e,item:P,itemInputValue:C,itemUrl:L,refresh:a,source:x,state:u.getState()},c))}}).finally(function(){v("idle"),Se&&o.environment.clearTimeout(Se)});return u.pendingRequests.add(b)}function qe(t){return qe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qe(t)}var yi=["event","props","refresh","store"];function zn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable})),n.push.apply(n,r)}return n}function te(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?zn(Object(n),!0).forEach(function(r){gi(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):zn(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function gi(t,e,n){return(e=function(r){var o=function(i,a){if(qe(i)!=="object"||i===null)return i;var u=i[Symbol.toPrimitive];if(u!==void 0){var c=u.call(i,a||"default");if(qe(c)!=="object")return c;throw new TypeError("@@toPrimitive m
Line truncated
|
||||||
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Nt(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function Zi(t,e){if(t==null)return{};var n,r,o=function(a,u){if(a==null)return{};var c,s,l={},m=Object.keys(a);for(s=0;s<m.length;s++)c=m[s],u.indexOf(c)>=0||(l[c]=a[c]);return l}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r<i.length;r++)n=i[r],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}function Yi(t){var e=t.translations,n=e===void 0?{}:e,r=Zi(t,Ji),o=n.noResultsText,i=o===void 0?"No results for":o,a=n.suggestedQueryText,u=a===void 0?"Try searching for":a,c=n.reportMissingResultsText,s=c===void 0?"Believe this query should return results?":c,l=n.reportMissingResultsLinkText,m=l===void 0?"Let us know.":l,p=r.state.context.searchSuggestions;return f.createElement("div",{className:"DocSearch-NoResults"},f.createElement("div",{className:"DocSearch-Screen-Icon"},f.createElement(zi,null)),f.createElement("p",{className:"DocSearch-Title"},i,' "',f.createElement("strong",null,r.state.query),'"'),p&&p.length>0&&f.createElement("div",{className:"DocSearch-NoResults-Prefill-List"},f.createElement("p",{className:"DocSearch-Help"},u,":"),f.createElement("ul",null,p.slice(0,3).reduce(function(v,d){return[].concat(Qi(v),[f.createElement("li",{key:d},f.createElement("button",{className:"DocSearch-Prefill",key:d,type:"button",onClick:function(){r.setQuery(d.toLowerCase()+" "),r.refresh(),r.inputRef.current.focus()}},d))])},[]))),r.getMissingResultsUrl&&f.createElement("p",{className:"DocSearch-Help"},"".concat(s," "),f.createElement("a",{href:r.getMissingResultsUrl({query:r.state.query}),target:"_blank",rel:"noopener noreferrer"},m)))}var Gi=["hit","attribute","tagName"];function Xn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable})),n.push.apply(n,r)}return n}function er(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?Xn(Object(n),!0).forEach(function(r){Xi(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Xn(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function Xi(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function ea(t,e){if(t==null)return{};var n,r,o=function(a,u){if(a==null)return{};var c,s,l={},m=Object.keys(a);for(s=0;s<m.length;s++)c=m[s],u.indexOf(c)>=0||(l[c]=a[c]);return l}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r<i.length;r++)n=i[r],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}function tr(t,e){return e.split(".").reduce(function(n,r){return n!=null&&n[r]?n[r]:null},t)}function le(t){var e=t.hit,n=t.attribute,r=t.tagName;return V(r===void 0?"span":r,er(er({},ea(t,Gi)),{},{dangerouslySetInnerHTML:{__html:tr(e,"_snippetResult.".concat(n,".value"))||tr(e,n)}}))}function nr(t,e){return function(n){if(Array.isArray(n))return n}(t)||function(n,r){var o=n==null?null:typeof Symbol<"u"&&n[Symbol.iterator]||n["@@iterator"];if(o!=null){var i,a,u=[],c=!0,s=!1;try{for(o=o.call(n);!(c=(i=o.next()).done)&&(u.push(i.value),!r||u.length!==r);c=!0);}catch(l){s=!0,a=l}finally{try{c||o.return==null||o.return()}finally{if(s)throw a}}return u}}(t,e)||function(n,r){if(n){if(typeof n=="string")return rr(n,r);var o=Object.prototype.toString.call(n).slice(8,-1);if(o==="Object"&&n.constructor&&(o=n.constructor.name),o==="Map"||o==="Set")return Array.from(n);if(o==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o))return rr(n,r)}}(t,e)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
|
||||||
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function rr(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function dt(){return dt=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},dt.apply(this,arguments)}function zt(t){return t.collection&&t.collection.items.length!==0?f.createElement("section",{className:"DocSearch-Hits"},f.createElement("div",{className:"DocSearch-Hit-source"},t.title),f.createElement("ul",t.getListProps(),t.collection.items.map(function(e,n){return f.createElement(ta,dt({key:[t.title,e.objectID].join(":"),item:e,index:n},t))}))):null}function ta(t){var e=t.item,n=t.index,r=t.renderIcon,o=t.renderAction,i=t.getItemProps,a=t.onItemClick,u=t.collection,c=t.hitComponent,s=nr(f.useState(!1),2),l=s[0],m=s[1],p=nr(f.useState(!1),2),v=p[0],d=p[1],h=f.useRef(null),y=c;return f.createElement("li",dt({className:["DocSearch-Hit",e.__docsearch_parent&&"DocSearch-Hit--Child",l&&"DocSearch-Hit--deleting",v&&"DocSearch-Hit--favoriting"].filter(Boolean).join(" "),onTransitionEnd:function(){h.current&&h.current()}},i({item:e,source:u.source,onClick:function(b){a(e,b)}})),f.createElement(y,{hit:e},f.createElement("div",{className:"DocSearch-Hit-Container"},r({item:e,index:n}),e.hierarchy[e.type]&&e.type==="lvl1"&&f.createElement("div",{className:"DocSearch-Hit-content-wrapper"},f.createElement(le,{className:"DocSearch-Hit-title",hit:e,attribute:"hierarchy.lvl1"}),e.content&&f.createElement(le,{className:"DocSearch-Hit-path",hit:e,attribute:"content"})),e.hierarchy[e.type]&&(e.type==="lvl2"||e.type==="lvl3"||e.type==="lvl4"||e.type==="lvl5"||e.type==="lvl6")&&f.createElement("div",{className:"DocSearch-Hit-content-wrapper"},f.createElement(le,{className:"DocSearch-Hit-title",hit:e,attribute:"hierarchy.".concat(e.type)}),f.createElement(le,{className:"DocSearch-Hit-path",hit:e,attribute:"hierarchy.lvl1"})),e.type==="content"&&f.createElement("div",{className:"DocSearch-Hit-content-wrapper"},f.createElement(le,{className:"DocSearch-Hit-title",hit:e,attribute:"content"}),f.createElement(le,{className:"DocSearch-Hit-path",hit:e,attribute:"hierarchy.lvl1"})),o({item:e,runDeleteTransition:function(b){m(!0),h.current=b},runFavoriteTransition:function(b){d(!0),h.current=b}}))))}function or(t,e,n){return t.reduce(function(r,o){var i=e(o);return r.hasOwnProperty(i)||(r[i]=[]),r[i].length<(n||5)&&r[i].push(o),r},{})}function ir(t){return t}function it(t){return t.button===1||t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}function na(){}var zr=/(<mark>|<\/mark>)/g,ra=RegExp(zr.source);function $r(t){var e,n,r,o,i,a=t;if(!a.__docsearch_parent&&!t._highlightResult)return t.hierarchy.lvl0;var u=((a.__docsearch_parent?(e=a.__docsearch_parent)===null||e===void 0||(n=e._highlightResult)===null||n===void 0||(r=n.hierarchy)===null||r===void 0?void 0:r.lvl0:(o=t._highlightResult)===null||o===void 0||(i=o.hierarchy)===null||i===void 0?void 0:i.lvl0)||{}).value;return u&&ra.test(u)?u.replace(zr,""):u}function $t(){return $t=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},$t.apply(this,arguments)}function oa(t){return f.createElement("div",{className:"DocSearch-Dropdown-Container"},t.state.collections.map(function(e){if(e.items.length===0)return null;var n=$r(e.items[0]);return f.createElement(zt,$t({},t,{key:e.source.sourceId,title:n,collection:e,renderIcon:function(r){var o,i=r.item,a=r.index;return f.createElement(f.Fragment,null,i.__docsearch_parent&&f.createElement("svg",{className:"DocSearch-Hit-Tree",viewBox:"0 0 24 54"},f.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},i.__docsearch_parent!==((o=e.items[a+1])===null||o===void 0?void 0:o.__docsearch_parent)?f.createElement("path",{d:"M8 6v21M20 27H8.3"}):f.createElement("path",{d:"M8 6v42M20 27H8.3"}))),f.createElement("div",{className:"DocSearch-Hit-icon"},f.createElement(Bi,{type:i.type})))},renderAction:function(){return f.createElement("div",{className:"DocSearch-Hit-action"},f.createElement(Ui,null))}}))}),t.resultsFooterComponent&&f.createElement("section",{className:"DocSearch-HitsFooter"},f.createElement(t.resultsFooterComponent,{state:t.state})))}var ia=["translations"];function ht(){return ht=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},ht.apply(this,arguments)}function aa(t,e){if(t==null)return{};var n,r,o=function(a,u){if(a==null)return{};var c,s,l={},m=Object.keys(a);for(s=0;s<m.length;s++)c=m[s],u.indexOf(c)>=0||(l[c]=a[c]);return l}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r<i.length;r++)n=i[r],e.indexOf(n)>=0||Object.prototyp
Line truncated
|
||||||
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function vr(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function Na(t,e){if(t==null)return{};var n,r,o=function(a,u){if(a==null)return{};var c,s,l={},m=Object.keys(a);for(s=0;s<m.length;s++)c=m[s],u.indexOf(c)>=0||(l[c]=a[c]);return l}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r<i.length;r++)n=i[r],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}function Ta(t){var e=t.appId,n=t.apiKey,r=t.indexName,o=t.placeholder,i=o===void 0?"Search docs":o,a=t.searchParameters,u=t.maxResultsPerGroup,c=t.onClose,s=c===void 0?na:c,l=t.transformItems,m=l===void 0?ir:l,p=t.hitComponent,v=p===void 0?Li:p,d=t.resultsFooterComponent,h=d===void 0?function(){return null}:d,y=t.navigator,b=t.initialScrollY,_=b===void 0?0:b,S=t.transformSearchClient,O=S===void 0?ir:S,g=t.disableUserPersonalization,P=g!==void 0&&g,C=t.initialQuery,L=C===void 0?"":C,x=t.translations,k=x===void 0?{}:x,N=t.getMissingResultsUrl,U=t.insights,F=U!==void 0&&U,M=k.footer,Ot=k.searchBox,St=Na(k,Aa),$e=xa(f.useState({query:"",collections:[],completion:null,context:{},isOpen:!1,activeItemId:null,status:"idle"}),2),B=$e[0],oo=$e[1],Gt=f.useRef(null),wt=f.useRef(null),Xt=f.useRef(null),Je=f.useRef(null),he=f.useRef(null),Q=f.useRef(10),en=f.useRef(typeof window<"u"?window.getSelection().toString().slice(0,64):"").current,ee=f.useRef(L||en).current,tn=function(j,D,T){return f.useMemo(function(){var H=ro(j,D);return H.addAlgoliaAgent("docsearch","3.5.1"),/docsearch.js \(.*\)/.test(H.transporter.userAgent.value)===!1&&H.addAlgoliaAgent("docsearch-react","3.5.1"),T(H)},[j,D,T])}(e,n,O),oe=f.useRef(ar({key:"__DOCSEARCH_FAVORITE_SEARCHES__".concat(r),limit:10})).current,ye=f.useRef(ar({key:"__DOCSEARCH_RECENT_SEARCHES__".concat(r),limit:oe.getAll().length===0?7:4})).current,ge=f.useCallback(function(j){if(!P){var D=j.type==="content"?j.__docsearch_parent:j;D&&oe.getAll().findIndex(function(T){return T.objectID===D.objectID})===-1&&ye.add(D)}},[oe,ye,P]),io=f.useCallback(function(j){if(B.context.algoliaInsightsPlugin&&j.__autocomplete_id){var D=j,T={eventName:"Item Selected",index:D.__autocomplete_indexName,items:[D],positions:[j.__autocomplete_id],queryID:D.__autocomplete_queryID};B.context.algoliaInsightsPlugin.insights.clickedObjectIDsAfterSearch(T)}},[B.context.algoliaInsightsPlugin]),be=f.useMemo(function(){return Ti({id:"docsearch",defaultActiveItemId:0,placeholder:i,openOnFocus:!0,initialState:{query:ee,context:{searchSuggestions:[]}},insights:F,navigator:y,onStateChange:function(j){oo(j.state)},getSources:function(j){var D=j.query,T=j.state,H=j.setContext,Z=j.setStatus;if(!D)return P?[]:[{sourceId:"recentSearches",onSelect:function(A){var K=A.item,ie=A.event;ge(K),it(ie)||s()},getItemUrl:function(A){return A.item.url},getItems:function(){return ye.getAll()}},{sourceId:"favoriteSearches",onSelect:function(A){var K=A.item,ie=A.event;ge(K),it(ie)||s()},getItemUrl:function(A){return A.item.url},getItems:function(){return oe.getAll()}}];var Y=!!F;return tn.search([{query:D,indexName:r,params:Rt({attributesToRetrieve:["hierarchy.lvl0","hierarchy.lvl1","hierarchy.lvl2","hierarchy.lvl3","hierarchy.lvl4","hierarchy.lvl5","hierarchy.lvl6","content","type","url"],attributesToSnippet:["hierarchy.lvl1:".concat(Q.current),"hierarchy.lvl2:".concat(Q.current),"hierarchy.lvl3:".concat(Q.current),"hierarchy.lvl4:".concat(Q.current),"hierarchy.lvl5:".concat(Q.current),"hierarchy.lvl6:".concat(Q.current),"content:".concat(Q.current)],snippetEllipsisText:"…",highlightPreTag:"<mark>",highlightPostTag:"</mark>",hitsPerPage:20,clickAnalytics:Y},a)}]).catch(function(A){throw A.name==="RetryError"&&Z("error"),A}).then(function(A){var K=A.results,ie=K[0],uo=ie.hits,lo=ie.nbHits,jt=or(uo,function(Et){return $r(Et)},u);T.context.searchSuggestions.length<Object.keys(jt).length&&H({searchSuggestions:Object.keys(jt)}),H({nbHits:lo});var rn={};return Y&&(rn={__autocomplete_indexName:r,__autocomplete_queryID:K[0].queryID,__autocomplete_algoliaCredentials:{appId:e,apiKey:n}}),Object.values(jt).map(function(Et,so){return{sourceId:"hits".concat(so),onSelect:function(z){var _e=z.item,Qe=z.event;ge(_e),it(Qe)||s()},getItemUrl:function(z){return z.item.url},getItems:function(){return Object.values(or(Et,function(z){return z.hierarchy.lvl1},u)).map(m).map(function(z){return z.map(function(_e){var Qe=null,on=z.find(function(an){return an.type==="lvl1"&&an.hierarchy.lvl1===_e.hierarchy.lvl1});return _e.type!=="lvl1"&&on&&(Qe=on),Rt(Rt({},_e),{},{__docsearch_parent:Qe},rn)})}).flat()}}})})}})},[r,a,u,tn,s,ye,oe,ge,ee,i,y,m,P,F,e,n]),ao=be.getEnvironmentProps,co=be.getRootProps,nn=be.refresh;return function(j){var D=j.getEnvironmentProps,T=j.panelElement,H=j.formElement,Z=j.inputElement;f.useEffect(function(){if(T&&H&&Z){var Y=D({panelElement:T,formElement:H,inputElement:Z}),A=Y.onTouch
Line truncated
|
||||||
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function hr(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function Ra(t){var e,n,r=f.useRef(null),o=dr(f.useState(!1),2),i=o[0],a=o[1],u=dr(f.useState((t==null?void 0:t.initialQuery)||void 0),2),c=u[0],s=u[1],l=f.useCallback(function(){a(!0)},[a]),m=f.useCallback(function(){a(!1)},[a]);return function(p){var v=p.isOpen,d=p.onOpen,h=p.onClose,y=p.onInput,b=p.searchButtonRef;f.useEffect(function(){function _(S){var O;(S.keyCode===27&&v||((O=S.key)===null||O===void 0?void 0:O.toLowerCase())==="k"&&(S.metaKey||S.ctrlKey)||!function(g){var P=g.target,C=P.tagName;return P.isContentEditable||C==="INPUT"||C==="SELECT"||C==="TEXTAREA"}(S)&&S.key==="/"&&!v)&&(S.preventDefault(),v?h():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||d()),b&&b.current===document.activeElement&&y&&/[a-zA-Z0-9]/.test(String.fromCharCode(S.keyCode))&&y(S)}return window.addEventListener("keydown",_),function(){window.removeEventListener("keydown",_)}},[v,d,h,y,b])}({isOpen:i,onOpen:l,onClose:m,onInput:f.useCallback(function(p){a(!0),s(p.key)},[a,s]),searchButtonRef:r}),f.createElement(f.Fragment,null,f.createElement(Bo,{ref:r,translations:t==null||(e=t.translations)===null||e===void 0?void 0:e.button,onClick:l}),i&&Rr(f.createElement(Ta,Jt({},t,{initialScrollY:window.scrollY,initialQuery:c,translations:t==null||(n=t.translations)===null||n===void 0?void 0:n.modal,onClose:m})),document.body))}function qa(t){Lr(f.createElement(Ra,qt({},t,{transformSearchClient:function(e){return e.addAlgoliaAgent("docsearch.js","3.5.1"),t.transformSearchClient?t.transformSearchClient(e):e}})),function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:window;return typeof e=="string"?n.document.querySelector(e):e}(t.container,t.environment))}const La={id:"docsearch"},Ua=fo({__name:"VPAlgoliaSearchBox",props:{algolia:{}},setup(t){const e=t,n=mo(),r=po(),{site:o,localeIndex:i,lang:a}=bo();vo(u),ho(i,u);function u(){var v,d;const l={...e.algolia,...(v=e.algolia.locales)==null?void 0:v[i.value]},m=((d=l.searchParameters)==null?void 0:d.facetFilters)??[],p=[...(Array.isArray(m)?m:[m]).filter(h=>!h.startsWith("lang:")),`lang:${a.value}`];c({...l,searchParameters:{...l.searchParameters,facetFilters:p}})}function c(l){const m=Object.assign({},l,{container:"#docsearch",navigator:{navigate({itemUrl:p}){const{pathname:v}=new URL(window.location.origin+p);r.path===v?window.location.assign(window.location.origin+p):n.go(p)}},transformItems(p){return p.map(v=>Object.assign({},v,{url:s(v.url)}))},hitComponent({hit:p,children:v}){return{__v:null,type:"a",ref:void 0,constructor:void 0,key:void 0,props:{href:p.url,children:v}}}});qa(m)}function s(l){const{pathname:m,hash:p}=new URL(l);return m.replace(/\.html$/,o.value.cleanUrls?"":".html")+p}return(l,m)=>(yo(),go("div",La))}});export{Ua as default};
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
function Yn(e,t){const n=Object.create(null),s=e.split(",");for(let r=0;r<s.length;r++)n[s[r]]=!0;return t?r=>!!n[r.toLowerCase()]:r=>!!n[r]}const te={},ft=[],Pe=()=>{},xi=()=>!1,Ei=/^on[^a-z]/,Ht=e=>Ei.test(e),Jn=e=>e.startsWith("onUpdate:"),oe=Object.assign,Xn=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Ti=Object.prototype.hasOwnProperty,q=(e,t)=>Ti.call(e,t),N=Array.isArray,at=e=>an(e)==="[object Map]",hr=e=>an(e)==="[object Set]",B=e=>typeof e=="function",re=e=>typeof e=="string",Zn=e=>typeof e=="symbol",ee=e=>e!==null&&typeof e=="object",pr=e=>ee(e)&&B(e.then)&&B(e.catch),gr=Object.prototype.toString,an=e=>gr.call(e),Ai=e=>an(e).slice(8,-1),mr=e=>an(e)==="[object Object]",Qn=e=>re(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,At=Yn(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),un=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Ri=/-(\w)/g,Me=un(e=>e.replace(Ri,(t,n)=>n?n.toUpperCase():"")),Pi=/\B([A-Z])/g,rt=un(e=>e.replace(Pi,"-$1").toLowerCase()),dn=un(e=>e.charAt(0).toUpperCase()+e.slice(1)),Xt=un(e=>e?`on${dn(e)}`:""),Ft=(e,t)=>!Object.is(e,t),Tn=(e,t)=>{for(let n=0;n<e.length;n++)e[n](t)},en=(e,t,n)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Ii=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Oi=e=>{const t=re(e)?Number(e):NaN;return isNaN(t)?e:t};let xs;const Nn=()=>xs||(xs=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Gn(e){if(N(e)){const t={};for(let n=0;n<e.length;n++){const s=e[n],r=re(s)?Li(s):Gn(s);if(r)for(const i in r)t[i]=r[i]}return t}else{if(re(e))return e;if(ee(e))return e}}const Fi=/;(?![^(]*\))/g,Si=/:([^]+)/,Mi=/\/\*[^]*?\*\//g;function Li(e){const t={};return e.replace(Mi,"").split(Fi).forEach(n=>{if(n){const s=n.split(Si);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function es(e){let t="";if(re(e))t=e;else if(N(e))for(let n=0;n<e.length;n++){const s=es(e[n]);s&&(t+=s+" ")}else if(ee(e))for(const n in e)e[n]&&(t+=n+" ");return t.trim()}const Ni="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Hi=Yn(Ni);function _r(e){return!!e||e===""}const Fc=e=>re(e)?e:e==null?"":N(e)||ee(e)&&(e.toString===gr||!B(e.toString))?JSON.stringify(e,br,2):String(e),br=(e,t)=>t&&t.__v_isRef?br(e,t.value):at(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r])=>(n[`${s} =>`]=r,n),{})}:hr(t)?{[`Set(${t.size})`]:[...t.values()]}:ee(t)&&!N(t)&&!mr(t)?String(t):t;let _e;class $i{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=_e,!t&&_e&&(this.index=(_e.scopes||(_e.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=_e;try{return _e=this,t()}finally{_e=n}}}on(){_e=this}off(){_e=this.parent}stop(t){if(this._active){let n,s;for(n=0,s=this.effects.length;n<s;n++)this.effects[n].stop();for(n=0,s=this.cleanups.length;n<s;n++)this.cleanups[n]();if(this.scopes)for(n=0,s=this.scopes.length;n<s;n++)this.scopes[n].stop(!0);if(!this.detached&&this.parent&&!t){const r=this.parent.scopes.pop();r&&r!==this&&(this.parent.scopes[this.index]=r,r.index=this.index)}this.parent=void 0,this._active=!1}}}function Ui(e,t=_e){t&&t.active&&t.effects.push(e)}function ji(){return _e}function Sc(e){_e&&_e.cleanups.push(e)}const ts=e=>{const t=new Set(e);return t.w=0,t.n=0,t},yr=e=>(e.w&Ve)>0,vr=e=>(e.n&Ve)>0,Bi=({deps:e})=>{if(e.length)for(let t=0;t<e.length;t++)e[t].w|=Ve},Di=e=>{const{deps:t}=e;if(t.length){let n=0;for(let s=0;s<t.length;s++){const r=t[s];yr(r)&&!vr(r)?r.delete(e):t[n++]=r,r.w&=~Ve,r.n&=~Ve}t.length=n}},tn=new WeakMap;let Et=0,Ve=1;const Hn=30;let Ae;const nt=Symbol(""),$n=Symbol("");class ns{constructor(t,n=null,s){this.fn=t,this.scheduler=n,this.active=!0,this.deps=[],this.parent=void 0,Ui(this,s)}run(){if(!this.active)return this.fn();let t=Ae,n=ke;for(;t;){if(t===this)return;t=t.parent}try{return this.parent=Ae,Ae=this,ke=!0,Ve=1<<++Et,Et<=Hn?Bi(this):Es(this),this.fn()}finally{Et<=Hn&&Di(this),Ve=1<<--Et,Ae=this.parent,ke=n,this.parent=void 0,this.deferStop&&this.stop()}}stop(){Ae===this?this.deferStop=!0:this.active&&(Es(this),this.onStop&&this.onStop(),this.active=!1)}}function Es(e){const{deps:t}=e;if(t.length){for(let n=0;n<t.length;n++)t[n].delete(e);t.length=0}}let ke=!0;const Cr=[];function vt(){Cr.push(ke),ke=!1}function Ct(){const e=Cr.pop();ke=e===void 0?!0:e}function pe(e,t,n){if(ke&&Ae){let s=tn.get(e);s||tn.set(e,s=new Map);let r=s.get(n);r||s.set(n,r=ts()),wr(r)}}function wr(e,t){let n=!1;Et<=Hn?vr(e)||(e.n|=Ve,n=!yr(e)):n=!e.has(Ae),n&&(e.add(Ae),Ae.deps.push(e))}function He(e,t,n,s,r,i){const o=tn.get(e);if(!o)return;let l=[];if(t==="clear")l=[...o.values()];else if(n==="length"&&N(e)){const c=Number(s);o.forEach((a,d)=>{(d==="length"||d>=c)&&l.push(a)})}else switch(n!==void 0&&l.push(o.get(n)),t){case"add":N(e)?Qn(n)&&l.push(o.get("length")):(l.push(o.get(nt)),at(e)&&l.pushLine truncated
|
||||||
|
`),l=l.slice(0,-1),o&&(l=l.replace(/^ *(\$|>) /gm,"").trim()),Oc(l).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const c=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,c)})}})}}async function Oc(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function uf(){Ce&&window.addEventListener("click",e=>{var n,s;const t=e.target;if(t.matches(".vp-code-group input")){const r=(n=t.parentElement)==null?void 0:n.parentElement,i=Array.from((r==null?void 0:r.querySelectorAll("input"))||[]).indexOf(t),o=r==null?void 0:r.querySelector('div[class*="language-"].active'),l=(s=r==null?void 0:r.querySelectorAll('div[class*="language-"]:not(.language-id)'))==null?void 0:s[i];o&&l&&o!==l&&(o.classList.remove("active"),l.classList.add("active"))}})}export{Jc as $,ri as A,Fo as B,zc as C,jc as D,Cl as E,he as F,se as G,Gn as H,Uc as I,Qc as J,Bc as K,pi as L,Ce as M,Dc as N,Nc as O,Gc as P,Hc as Q,qc as R,ef as S,di as T,gt as U,ll as V,zo as W,sf as X,Lr as Y,go as Z,Zc as _,li as a,kc as a0,$c as a1,Yc as a2,Wc as a3,lf as a4,Cc as a5,tf as a6,bc as a7,of as a8,ff as a9,tt as aa,Xc as ab,rf as ac,vc as ad,cf as ae,af,uf as ag,qn as ah,xc as ai,_o as b,Vc as c,us as d,Lc as e,Ir as f,Mc as g,dt as h,ji as i,Sc as j,$o as k,Ee as l,ci as m,es as n,ni as o,vn as p,dc as q,Kc as r,cr as s,Fc as t,nf as u,uc as v,Zt as w,yi as x,Cn as y,oi as z};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
const s="/assets/qrcode.0a61500e.png";export{s as _};
|
||||||
@@ -1 +0,0 @@
|
|||||||
var s="/assets/qrcode.0a61500e.png";export{s as _};
|
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
import{d as g,o as a,c as l,r as c,n as C,a as A,t as V,_ as f,u as tt,b as i,e as nt,f as He,g as st,h as L,i as ot,j as at,w as j,k as Q,l as $,m as rt,p as F,q as it,P as lt,s as he,v as K,x as ee,y as le,z as u,F as M,A as y,B as v,T as fe,C as m,D as R,E as se,G as h,H as ze,I as ct,J as ut,K as U,L as De,M as Fe,N as x,O as H,Q as z,R as dt,S as Ne,U as me,V as oe,W as _t,X as J,Y as vt,Z as ge,$ as pt,a0 as ht,a1 as ft,a2 as mt,a3 as gt}from"./framework.1625126e.js";const yt=g({__name:"VPBadge",props:{text:{},type:{}},setup(n){return(e,t)=>(a(),l("span",{class:C(["VPBadge",e.type??"tip"])},[c(e.$slots,"default",{},()=>[A(V(e.text),1)],!0)],2))}});const bt=f(yt,[["__scopeId","data-v-350d3852"]]),w=tt;function Oe(n){return ot()?(at(n),!0):!1}function Ge(n){return typeof n=="function"?n():i(n)}const $t=typeof window<"u",Re=()=>{};function kt(...n){if(n.length!==1)return nt(...n);const e=n[0];return typeof e=="function"?He(st(()=>({get:e,set:Re}))):L(e)}function Pt(n){var e;const t=Ge(n);return(e=t==null?void 0:t.$el)!=null?e:t}const ye=$t?window:void 0;function Vt(...n){let e,t,o,s;if(typeof n[0]=="string"||Array.isArray(n[0])?([t,o,s]=n,e=ye):[e,t,o,s]=n,!e)return Re;Array.isArray(t)||(t=[t]),Array.isArray(o)||(o=[o]);const r=[],d=()=>{r.forEach(T=>T()),r.length=0},p=(T,I,B,S)=>(T.addEventListener(I,B,S),()=>T.removeEventListener(I,B,S)),_=j(()=>[Pt(e),Ge(s)],([T,I])=>{d(),T&&r.push(...t.flatMap(B=>o.map(S=>p(T,B,S,I))))},{immediate:!0,flush:"post"}),k=()=>{_(),d()};return Oe(k),k}function wt(){const n=L(!1);return rt()&&F(()=>{n.value=!0}),n}function St(n){const e=wt();return $(()=>(e.value,!!n()))}function _e(n,e={}){const{window:t=ye}=e,o=St(()=>t&&"matchMedia"in t&&typeof t.matchMedia=="function");let s;const r=L(!1),d=()=>{s&&("removeEventListener"in s?s.removeEventListener("change",p):s.removeListener(p))},p=()=>{o.value&&(d(),s=t.matchMedia(kt(n).value),r.value=!!(s!=null&&s.matches),s&&("addEventListener"in s?s.addEventListener("change",p):s.addListener(p)))};return Q(p),Oe(()=>d()),r}function Ue({window:n=ye}={}){if(!n)return{x:L(0),y:L(0)};const e=L(n.scrollX),t=L(n.scrollY);return Vt(n,"scroll",()=>{e.value=n.scrollX,t.value=n.scrollY},{capture:!1,passive:!0}),{x:e,y:t}}function Lt(n,e){let t,o=!1;return()=>{t&&clearTimeout(t),o?t=setTimeout(n,e):(n(),o=!0,setTimeout(()=>{o=!1},e))}}function ve(n){return/^\//.test(n)?n:`/${n}`}function Z(n){if(it(n))return n.replace(lt,"");const{site:e}=w(),{pathname:t,search:o,hash:s}=new URL(n,"http://example.com"),r=t.endsWith("/")||t.endsWith(".html")?n:n.replace(/(?:(^\.+)\/)?.*$/,`$1${t.replace(/(\.md)?$/,e.value.cleanUrls?"":".html")}${o}${s}`);return he(r)}function qe(n,e){if(Array.isArray(n))return n;if(n==null)return[];e=ve(e);const t=Object.keys(n).sort((o,s)=>s.split("/").length-o.split("/").length).find(o=>e.startsWith(ve(o)));return t?n[t]:[]}function Mt(n){const e=[];let t=0;for(const o in n){const s=n[o];if(s.items){t=e.push(s);continue}e[t]||e.push({items:[]}),e[t].items.push(s)}return e}function Ct(n){const e=[];function t(o){for(const s of o)s.text&&s.link&&e.push({text:s.text,link:s.link}),s.items&&t(s.items)}return t(n),e}function pe(n,e){return Array.isArray(e)?e.some(t=>pe(n,t)):K(n,e.link)?!0:e.items?pe(n,e.items):!1}function D(){const n=ee(),{theme:e,frontmatter:t}=w(),o=_e("(min-width: 960px)"),s=L(!1),r=$(()=>{const P=e.value.sidebar,N=n.data.relativePath;return P?qe(P,N):[]}),d=$(()=>t.value.sidebar!==!1&&r.value.length>0&&t.value.layout!=="home"),p=$(()=>_?t.value.aside==null?e.value.aside==="left":t.value.aside==="left":!1),_=$(()=>t.value.layout==="home"?!1:t.value.aside!=null?!!t.value.aside:e.value.aside!==!1),k=$(()=>d.value&&o.value),T=$(()=>d.value?Mt(r.value):[]);function I(){s.value=!0}function B(){s.value=!1}function S(){s.value?B():I()}return{isOpen:s,sidebar:r,sidebarGroups:T,hasSidebar:d,hasAside:_,leftAside:p,isSidebarEnabled:k,open:I,close:B,toggle:S}}function It(n,e){let t;Q(()=>{t=n.value?document.activeElement:void 0}),F(()=>{window.addEventListener("keyup",o)}),le(()=>{window.removeEventListener("keyup",o)});function o(s){s.key==="Escape"&&n.value&&(e(),t==null||t.focus())}}function Bt(n){const{page:e}=w(),t=L(!1),o=$(()=>n.value.collapsed!=null),s=$(()=>!!n.value.link),r=$(()=>K(e.value.relativePath,n.value.link)),d=$(()=>r.value?!0:n.value.items?pe(e.value.relativePath,n.value.items):!1),p=$(()=>!!(n.value.items&&n.value.items.length));Q(()=>{t.value=!!(o.value&&n.value.collapsed)}),Q(()=>{(r.value||d.value)&&(t.value=!1)});function _(){o.value&&(t.value=!t.value)}return{collapsed:t,collapsible:o,isLink:s,isActiveLink:r,hasActiveLink:d,hasChildren:p,toggle:_}}const Tt=g({__name:"VPSkipLink",setup(n){const e=ee(),t=L();j(()=>e.path,()=>t.value.focus());function o({target:s}){const r=document.querySelector(decodeURIComponent(s.hash));if(r){const d=()=>{r.removeAttribute("tabindex"),r.removeEventListener("blur",d)};r.setAttribute("tabindex","-1"),r.addEventListener("blur",d),r.focus(),window.scrollTo(0,0)}}retuLine truncated
|
||||||
|
-webkit-transition: none !important;
|
||||||
|
-moz-transition: none !important;
|
||||||
|
-o-transition: none !important;
|
||||||
|
-ms-transition: none !important;
|
||||||
|
transition: none !important;
|
||||||
|
}`)),document.head.appendChild(S),o.value=B,p[B?"add":"remove"]("dark"),window.getComputedStyle(S).opacity,document.head.removeChild(S)}return T}return j(o,d=>{t.value=d}),(d,p)=>(a(),y(is,{title:"toggle dark mode",class:"VPSwitchAppearance","aria-checked":o.value,onClick:i(s)},{default:v(()=>[h(vs,{class:"sun"}),h(ys,{class:"moon"})]),_:1},8,["aria-checked","onClick"]))}});const Pe=f(bs,[["__scopeId","data-v-82b282f1"]]),$s={key:0,class:"VPNavBarAppearance"},ks=g({__name:"VPNavBarAppearance",setup(n){const{site:e}=w();return(t,o)=>i(e).appearance?(a(),l("div",$s,[h(Pe)])):m("",!0)}});const Ps=f(ks,[["__scopeId","data-v-f6a63727"]]),Vs={discord:'<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Discord</title><path d="M20.317 4.3698a19.7913 19.7913 0 00-4.8851-1.5152.0741.0741 0 00-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 00-.0785-.037 19.7363 19.7363 0 00-4.8852 1.515.0699.0699 0 00-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 00.0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 00.0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 00-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 01-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 01.0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 01.0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 01-.0066.1276 12.2986 12.2986 0 01-1.873.8914.0766.0766 0 00-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 00.0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 00.0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 00-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189Z"/></svg>',facebook:'<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Facebook</title><path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"/></svg>',github:'<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>',instagram:'<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Instagram</title><path d="M12 0C8.74 0 8.333.015 7.053.072 5.775.132 4.905.333 4.14.63c-.789.306-1.459.717-2.126 1.384S.935 3.35.63 4.14C.333 4.905.131 5.775.072 7.053.012 8.333 0 8.74 0 12s.015 3.667.072 4.947c.06 1.277.261 2.148.558 2.913.306.788.717 1.459 1.384 2.126.667.666 1.336 1.079 2.126 1.384.766.296 1.636.499 2.913.558C8.333 23.988 8.74 24 12 24s3.667-.015 4.947-.072c1.277-.06 2.148-.262 2.913-.558.788-.306 1.459-.718 2.126-1.384.666-.667 1.079-1.335 1.384-2.126.296-.765.499-1.636.558-2.913.06-1.28.072-1.687.072-4.947s-.015-3.667-.072-4.947c-.06-1.277-.262-2.149-.558-2.913-.306-.789-.718-1.459-1.384-2.126C21.319 1.347 20.651.935 19.86.63c-.765-.297-1.636-.499-2.913-.558C15.667.012 15.26 0 12 0zm0 2.16c3.203 0 3.585.016 4.85.071 1.17.055 1.805.249 2.227.415.562.217.96.477 1.382.896.419.42.679.819.896 1.381.164.422.36 1.057.413 2.227.057 1.266.07 1.646.07 4.85s-.015 3.585-.074 4.85c-.061 1.17-.256 1.805-.421 2.227-.224.562-.479.96-.899 1.382-.419.419-.824.679-1.38.896-.42.164-1.065.36-2.235.413-1.274.057-1.649.07-4.859.07-3.211 0-3.586-.015-4.859-.074-1.171-.061-1.816-.256-2.236-.421-.569-.224-.96-.479-1.379-.899-.421-.419-.69-.824-.9-1.38-.165-.42-.359-1.065-.42-2.235-.045-1.26-.061-1.649-.061-4.844 0-3.196.016-3.586.061-4.861.061-1.17.255-1.814.42-2.234.21-.57.479-.96.9-1.381.419-.419.81-.689 1.379-.898.42-.166 1.051-.361 2.221-.421 1.275-.045 1.65-.06 4.859-.06l.045.03zm0 3.678c-3.405 0-6.162 2.76-6.162 6.162 0 3.405 2.76 6.162 6.162 6.162 3.405 0 6.162-2.76 6.162-6.162 0-3.405-2.76-6.162-6.162-6.162zM12 16c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4zm7.846-10.405c0 .795-.646 1.44-1.44 1.44-.
Line truncated
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as a,c as o,o as r,b as e,d as t}from"./app.38e99b9a.js";const f='{"title":"Home","description":"","frontmatter":{"home":true,"heroImage":"https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.svg","heroText":"\u5F00\u53D1\u624B\u518C","tagline":"\u6B22\u8FCE\u4F7F\u7528\u54EA\u5412\u76D1\u63A7\u5F00\u53D1\u624B\u518C\uFF0C\u6211\u4EEC\u6B22\u8FCE\u4F60\u63D0\u51FA\u9AD8\u8D28\u91CF\u7684Pull Request\uFF0C\u5E2E\u52A9\u54EA\u5412\u76D1\u63A7\u53D8\u5F97\u66F4\u597D\uFF01","actionText":"\u5F00\u59CB\u4F7F\u7528 \u2192","actionLink":"/developer/theme","footer":"Copyright \xA9 2022-present Nezhahq"},"headers":[],"relativePath":"developer/index.md","lastUpdated":1682159272000}',s={},n=e("p",null,[e("br"),t("\u672C\u4F5C\u54C1\u91C7\u7528 "),e("a",{rel:"license",href:"http://creativecommons.org/licenses/by-nc-sa/4.0/"},"\u77E5\u8BC6\u5171\u4EAB\u7F72\u540D-\u975E\u5546\u4E1A\u6027\u4F7F\u7528-\u76F8\u540C\u65B9\u5F0F\u5171\u4EAB 4.0 \u56FD\u9645\u8BB8\u53EF\u534F\u8BAE"),t(" \u8FDB\u884C\u8BB8\u53EF\u3002")],-1),c=[n];function i(d,l,p,h,_,m){return r(),o("div",null,c)}var x=a(s,[["render",i]]);export{f as __pageData,x as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as a,c as o,o as r,b as e,d as t}from"./app.38e99b9a.js";const f='{"title":"Home","description":"","frontmatter":{"home":true,"heroImage":"https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.svg","heroText":"\u5F00\u53D1\u624B\u518C","tagline":"\u6B22\u8FCE\u4F7F\u7528\u54EA\u5412\u76D1\u63A7\u5F00\u53D1\u624B\u518C\uFF0C\u6211\u4EEC\u6B22\u8FCE\u4F60\u63D0\u51FA\u9AD8\u8D28\u91CF\u7684Pull Request\uFF0C\u5E2E\u52A9\u54EA\u5412\u76D1\u63A7\u53D8\u5F97\u66F4\u597D\uFF01","actionText":"\u5F00\u59CB\u4F7F\u7528 \u2192","actionLink":"/developer/theme","footer":"Copyright \xA9 2022-present Nezhahq"},"headers":[],"relativePath":"developer/index.md","lastUpdated":1682159272000}',s={},n=e("p",null,[e("br"),t("\u672C\u4F5C\u54C1\u91C7\u7528 "),e("a",{rel:"license",href:"http://creativecommons.org/licenses/by-nc-sa/4.0/"},"\u77E5\u8BC6\u5171\u4EAB\u7F72\u540D-\u975E\u5546\u4E1A\u6027\u4F7F\u7528-\u76F8\u540C\u65B9\u5F0F\u5171\u4EAB 4.0 \u56FD\u9645\u8BB8\u53EF\u534F\u8BAE"),t(" \u8FDB\u884C\u8BB8\u53EF\u3002")],-1),c=[n];function i(d,l,p,h,_,m){return r(),o("div",null,c)}var x=a(s,[["render",i]]);export{f as __pageData,x as default};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as a,o,c as r,z as e,a as t}from"./chunks/framework.1625126e.js";const x=JSON.parse('{"title":"","description":"","frontmatter":{"heroImage":"https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.svg","heroText":"开发手册","tagline":"欢迎使用哪吒监控开发手册,我们欢迎你提出高质量的Pull Request,帮助哪吒监控变得更好!","actionText":"开始使用 →","actionLink":"/developer/theme"},"headers":[],"relativePath":"developer/index.md","filePath":"developer/index.md","lastUpdated":1687190167000}'),n={name:"developer/index.md"},s=e("p",null,[e("br"),t("本作品采用 "),e("a",{rel:"license",href:"http://creativecommons.org/licenses/by-nc-sa/4.0/"},"知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议"),t(" 进行许可。")],-1),c=[s];function i(d,l,p,m,_,h){return o(),r("div",null,c)}const f=a(n,[["render",i]]);export{x as __pageData,f as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as a,o,c as r,z as e,a as t}from"./chunks/framework.1625126e.js";const x=JSON.parse('{"title":"","description":"","frontmatter":{"heroImage":"https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.svg","heroText":"开发手册","tagline":"欢迎使用哪吒监控开发手册,我们欢迎你提出高质量的Pull Request,帮助哪吒监控变得更好!","actionText":"开始使用 →","actionLink":"/developer/theme"},"headers":[],"relativePath":"developer/index.md","filePath":"developer/index.md","lastUpdated":1687190167000}'),n={name:"developer/index.md"},s=e("p",null,[e("br"),t("本作品采用 "),e("a",{rel:"license",href:"http://creativecommons.org/licenses/by-nc-sa/4.0/"},"知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议"),t(" 进行许可。")],-1),c=[s];function i(d,l,p,m,_,h){return o(),r("div",null,c)}const f=a(n,[["render",i]]);export{x as __pageData,f as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e,o,c as a,R as t}from"./chunks/framework.1625126e.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"developer/l10n.md","filePath":"developer/l10n.md","lastUpdated":1687190167000}'),l={name:"developer/l10n.md"},r=t('<p><strong>哪吒监控的 Dashboard 已经添加本地化,支持多个语言,你可以在开发新功能时遵循以下步骤来支持本地化</strong></p><h2 id="介绍" tabindex="-1">介绍 <a class="header-anchor" href="#介绍" aria-label="Permalink to "介绍""></a></h2><ol><li>你可以直接使用 <code>/resource/l10n/zh-CN.toml</code> 中已有的文本配置来替换新功能中的文本</li><li>如果新功能中有新增文本,请参考 <code>zh-CN.toml</code> 的配置文本,将新文本拉取到 <code>zh-CN.toml</code> 等其他语言的配置文件中,并添加翻译</li></ol><h2 id="新本地化文本的添加" tabindex="-1">新本地化文本的添加 <a class="header-anchor" href="#新本地化文本的添加" aria-label="Permalink to "新本地化文本的添加""></a></h2><ol><li>在 <code>/resource/l10n/</code> 中添加新的语言文本配置</li><li>在新的语言文本配置中拉取其他语言已有的文本配置</li><li>为新的语言文本配置添加翻译</li></ol>',5),c=[r];function d(n,i,s,_,h,p){return o(),a("div",null,c)}const f=e(l,[["render",d]]);export{u as __pageData,f as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e,o,c as a,R as t}from"./chunks/framework.1625126e.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"developer/l10n.md","filePath":"developer/l10n.md","lastUpdated":1687190167000}'),l={name:"developer/l10n.md"},r=t("",5),c=[r];function d(n,i,s,_,h,p){return o(),a("div",null,c)}const f=e(l,[["render",d]]);export{u as __pageData,f as default};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,c as t,o,a}from"./app.38e99b9a.js";const f='{"title":"\u4ECB\u7ECD","description":"","frontmatter":{},"headers":[{"level":2,"title":"\u4ECB\u7ECD","slug":"\u4ECB\u7ECD"},{"level":2,"title":"\u65B0\u672C\u5730\u5316\u6587\u672C\u7684\u6DFB\u52A0","slug":"\u65B0\u672C\u5730\u5316\u6587\u672C\u7684\u6DFB\u52A0"}],"relativePath":"developer/l10n.md","lastUpdated":1682159272000}',l={},r=a('<p><strong>\u54EA\u5412\u76D1\u63A7\u7684 Dashboard \u5DF2\u7ECF\u6DFB\u52A0\u672C\u5730\u5316\uFF0C\u652F\u6301\u591A\u4E2A\u8BED\u8A00\uFF0C\u4F60\u53EF\u4EE5\u5728\u5F00\u53D1\u65B0\u529F\u80FD\u65F6\u9075\u5FAA\u4EE5\u4E0B\u6B65\u9AA4\u6765\u652F\u6301\u672C\u5730\u5316</strong></p><h2 id="\u4ECB\u7ECD" tabindex="-1">\u4ECB\u7ECD <a class="header-anchor" href="#\u4ECB\u7ECD" aria-hidden="true">#</a></h2><ol><li>\u4F60\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528 <code>/resource/l10n/zh-CN.toml</code> \u4E2D\u5DF2\u6709\u7684\u6587\u672C\u914D\u7F6E\u6765\u66FF\u6362\u65B0\u529F\u80FD\u4E2D\u7684\u6587\u672C</li><li>\u5982\u679C\u65B0\u529F\u80FD\u4E2D\u6709\u65B0\u589E\u6587\u672C\uFF0C\u8BF7\u53C2\u8003 <code>zh-CN.toml</code> \u7684\u914D\u7F6E\u6587\u672C\uFF0C\u5C06\u65B0\u6587\u672C\u62C9\u53D6\u5230 <code>zh-CN.toml</code> \u7B49\u5176\u4ED6\u8BED\u8A00\u7684\u914D\u7F6E\u6587\u4EF6\u4E2D\uFF0C\u5E76\u6DFB\u52A0\u7FFB\u8BD1</li></ol><h2 id="\u65B0\u672C\u5730\u5316\u6587\u672C\u7684\u6DFB\u52A0" tabindex="-1">\u65B0\u672C\u5730\u5316\u6587\u672C\u7684\u6DFB\u52A0 <a class="header-anchor" href="#\u65B0\u672C\u5730\u5316\u6587\u672C\u7684\u6DFB\u52A0" aria-hidden="true">#</a></h2><ol><li>\u5728 <code>/resource/l10n/</code> \u4E2D\u6DFB\u52A0\u65B0\u7684\u8BED\u8A00\u6587\u672C\u914D\u7F6E</li><li>\u5728\u65B0\u7684\u8BED\u8A00\u6587\u672C\u914D\u7F6E\u4E2D\u62C9\u53D6\u5176\u4ED6\u8BED\u8A00\u5DF2\u6709\u7684\u6587\u672C\u914D\u7F6E</li><li>\u4E3A\u65B0\u7684\u8BED\u8A00\u6587\u672C\u914D\u7F6E\u6DFB\u52A0\u7FFB\u8BD1</li></ol>',5),d=[r];function c(i,s,n,_,h,p){return o(),t("div",null,d)}var m=e(l,[["render",c]]);export{f as __pageData,m as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,c as t,o,a}from"./app.38e99b9a.js";const f='{"title":"\u4ECB\u7ECD","description":"","frontmatter":{},"headers":[{"level":2,"title":"\u4ECB\u7ECD","slug":"\u4ECB\u7ECD"},{"level":2,"title":"\u65B0\u672C\u5730\u5316\u6587\u672C\u7684\u6DFB\u52A0","slug":"\u65B0\u672C\u5730\u5316\u6587\u672C\u7684\u6DFB\u52A0"}],"relativePath":"developer/l10n.md","lastUpdated":1682159272000}',l={},r=a("",5),d=[r];function c(i,s,n,_,h,p){return o(),t("div",null,d)}var m=e(l,[["render",c]]);export{f as __pageData,m as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,c as a,o as t,a as o}from"./app.38e99b9a.js";const u='{"title":"\u54EA\u5412\u4E3B\u9898\u5F00\u53D1\u73AF\u5883","description":"","frontmatter":{},"headers":[{"level":2,"title":"\u54EA\u5412\u4E3B\u9898\u5F00\u53D1\u73AF\u5883","slug":"\u54EA\u5412\u4E3B\u9898\u5F00\u53D1\u73AF\u5883"},{"level":2,"title":"\u4F7F\u7528\u8BF4\u660E","slug":"\u4F7F\u7528\u8BF4\u660E"},{"level":2,"title":"FAQ","slug":"faq"}],"relativePath":"developer/theme.md","lastUpdated":1682159272000}',c={},d=o('<h2 id="\u54EA\u5412\u4E3B\u9898\u5F00\u53D1\u73AF\u5883" tabindex="-1">\u54EA\u5412\u4E3B\u9898\u5F00\u53D1\u73AF\u5883 <a class="header-anchor" href="#\u54EA\u5412\u4E3B\u9898\u5F00\u53D1\u73AF\u5883" aria-hidden="true">#</a></h2><p>\u54EA\u5412\u9762\u677F\u63D0\u4F9B\u4E86\u4E3B\u9898\u5F00\u53D1\u73AF\u5883\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528\u5B83\u6765\u521B\u5EFA\u65B0\u7684\u54EA\u5412\u76D1\u63A7\u4E3B\u9898</p><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>\u8BF7\u6CE8\u610F\uFF1A \u6B64\u5F00\u53D1\u73AF\u5883\u4EC5\u652F\u6301 <code>dashboard v0.13.16</code> \u53CA\u66F4\u65B0\u7248\u672C\u3002</p></div><h2 id="\u4F7F\u7528\u8BF4\u660E" tabindex="-1">\u4F7F\u7528\u8BF4\u660E <a class="header-anchor" href="#\u4F7F\u7528\u8BF4\u660E" aria-hidden="true">#</a></h2><ol><li>\u514B\u9686<a href="https://github.com/nezhahq/skeleton-custom-theme" target="_blank" rel="noopener noreferrer">\u6B64\u4ED3\u5E93</a>\u5230\u672C\u5730</li><li>\u4FEE\u6539 <code>data/config.yaml</code> \u4E2D\u7684 Oauth2 \u914D\u7F6E\uFF08\u56DE\u8C03\u8FDE\u63A5\u53EF\u4EE5\u586B <code>http://localhost</code>\uFF09</li><li>\u8FD0\u884C <code>docker-compose up</code></li><li>\u5F00\u59CB\u5F00\u53D1</li><li>\u4E3B\u9898\u5236\u4F5C\u5B8C\u6210\u4E4B\u540E\u53EF\u4EE5\u5C06 <code>theme-custom</code> \u653E\u7F6E\u5230\u670D\u52A1\u5668\u4E0A\u7684 <code>/opt/nezha/dashboard/theme-custom</code> \u4F4D\u7F6E</li></ol><h2 id="faq" tabindex="-1">FAQ <a class="header-anchor" href="#faq" aria-hidden="true">#</a></h2><ul><li>\u5982\u679C\u4E0D\u80FD\u4F7F\u7528 <code>80</code> \u7AEF\u53E3\uFF0C\u5728 <code>docker-compose.yaml</code> \u4E2D\u4FEE\u6539\u914D\u7F6E\u3002</li></ul>',7),l=[d];function r(i,s,h,n,_,p){return t(),a("div",null,l)}var f=e(c,[["render",r]]);export{u as __pageData,f as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,c as a,o as t,a as o}from"./app.38e99b9a.js";const u='{"title":"\u54EA\u5412\u4E3B\u9898\u5F00\u53D1\u73AF\u5883","description":"","frontmatter":{},"headers":[{"level":2,"title":"\u54EA\u5412\u4E3B\u9898\u5F00\u53D1\u73AF\u5883","slug":"\u54EA\u5412\u4E3B\u9898\u5F00\u53D1\u73AF\u5883"},{"level":2,"title":"\u4F7F\u7528\u8BF4\u660E","slug":"\u4F7F\u7528\u8BF4\u660E"},{"level":2,"title":"FAQ","slug":"faq"}],"relativePath":"developer/theme.md","lastUpdated":1682159272000}',c={},d=o("",7),l=[d];function r(i,s,h,n,_,p){return t(),a("div",null,l)}var f=e(c,[["render",r]]);export{u as __pageData,f as default};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e,o,c as a,R as t}from"./chunks/framework.1625126e.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"developer/theme.md","filePath":"developer/theme.md","lastUpdated":1687190167000}'),c={name:"developer/theme.md"},l=t('<h2 id="哪吒主题开发环境" tabindex="-1">哪吒主题开发环境 <a class="header-anchor" href="#哪吒主题开发环境" aria-label="Permalink to "哪吒主题开发环境""></a></h2><p>哪吒面板提供了主题开发环境,你可以使用它来创建新的哪吒监控主题</p><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>请注意: 此开发环境仅支持 <code>dashboard v0.13.16</code> 及更新版本。</p></div><h2 id="使用说明" tabindex="-1">使用说明 <a class="header-anchor" href="#使用说明" aria-label="Permalink to "使用说明""></a></h2><ol><li>克隆<a href="https://github.com/nezhahq/skeleton-custom-theme" target="_blank" rel="noreferrer">此仓库</a>到本地</li><li>修改 <code>data/config.yaml</code> 中的 Oauth2 配置(回调连接可以填 <code>http://localhost</code>)</li><li>运行 <code>docker-compose up</code></li><li>开始开发</li><li>主题制作完成之后可以将 <code>theme-custom</code> 放置到服务器上的 <code>/opt/nezha/dashboard/theme-custom</code> 位置</li></ol><h2 id="faq" tabindex="-1">FAQ <a class="header-anchor" href="#faq" aria-label="Permalink to "FAQ""></a></h2><ul><li>如果不能使用 <code>80</code> 端口,在 <code>docker-compose.yaml</code> 中修改配置。</li></ul>',7),d=[l];function r(s,i,h,n,m,_){return o(),a("div",null,d)}const f=e(c,[["render",r]]);export{u as __pageData,f as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e,o,c as a,R as t}from"./chunks/framework.1625126e.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"developer/theme.md","filePath":"developer/theme.md","lastUpdated":1687190167000}'),c={name:"developer/theme.md"},l=t("",7),d=[l];function r(s,i,h,n,m,_){return o(),a("div",null,d)}const f=e(c,[["render",r]]);export{u as __pageData,f as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e,o as t,c as r,R as o}from"./chunks/framework.1625126e.js";const d=JSON.parse('{"title":"Build your own Telegram bot to query server information","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/case/case1.md","filePath":"en_US/case/case1.md","lastUpdated":1687190167000}'),a={name:"en_US/case/case1.md"},n=o('<h1 id="build-your-own-telegram-bot-to-query-server-information" tabindex="-1">Build your own Telegram bot to query server information <a class="header-anchor" href="#build-your-own-telegram-bot-to-query-server-information" aria-label="Permalink to "Build your own Telegram bot to query server information""></a></h1><p>Contributors:</p><ul><li><a href="https://github.com/spiritLHLS" target="_blank" rel="noreferrer">spiritLHLS</a></li><li><a href="https://github.com/Erope/" target="_blank" rel="noreferrer">Erope</a></li></ul><p><strong>Project</strong>: <a href="https://github.com/spiritLHLS/nezha_api_tgbot" target="_blank" rel="noreferrer">nezha_api_tgbot</a> (Chinese)</p><p><strong>Mirror backup, non-real-time update</strong>: <a href="https://github.com/nezhahq/nezha_api_tgbot" target="_blank" rel="noreferrer">nezha_api_tgbot</a> (Chinese)</p><p>The bot can request server status information from the Dashboard through the API, and then send the information to the user.<br> You can build this bot to easily view the current status of a given server without opening the Dashboard.</p>',6),i=[n];function s(h,_,l,u,c,p){return t(),r("div",null,i)}const m=e(a,[["render",s]]);export{d as __pageData,m as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e,o as t,c as r,R as o}from"./chunks/framework.1625126e.js";const d=JSON.parse('{"title":"Build your own Telegram bot to query server information","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/case/case1.md","filePath":"en_US/case/case1.md","lastUpdated":1687190167000}'),a={name:"en_US/case/case1.md"},n=o("",6),i=[n];function s(h,_,l,u,c,p){return t(),r("div",null,i)}const m=e(a,[["render",s]]);export{d as __pageData,m as default};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,c as r,o as t,a as o}from"./app.38e99b9a.js";const b='{"title":"Build your own Telegram bot to query server information","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/case/case1.md","lastUpdated":1682159272000}',a={},n=o('<h1 id="build-your-own-telegram-bot-to-query-server-information" tabindex="-1">Build your own Telegram bot to query server information <a class="header-anchor" href="#build-your-own-telegram-bot-to-query-server-information" aria-hidden="true">#</a></h1><p>Contributors:</p><ul><li><a href="https://github.com/spiritLHLS" target="_blank" rel="noopener noreferrer">spiritLHLS</a></li><li><a href="https://github.com/Erope/" target="_blank" rel="noopener noreferrer">Erope</a></li></ul><p><strong>Project</strong>: <a href="https://github.com/spiritLHLS/nezha_api_tgbot" target="_blank" rel="noopener noreferrer">nezha_api_tgbot</a> (Chinese)</p><p><strong>Mirror backup, non-real-time update</strong>: <a href="https://github.com/nezhahq/nezha_api_tgbot" target="_blank" rel="noopener noreferrer">nezha_api_tgbot</a> (Chinese)</p><p>The bot can request server status information from the Dashboard through the API, and then send the information to the user.<br> You can build this bot to easily view the current status of a given server without opening the Dashboard.</p>',6),i=[n];function s(h,_,p,u,l,c){return t(),r("div",null,i)}var f=e(a,[["render",s]]);export{b as __pageData,f as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,c as r,o as t,a as o}from"./app.38e99b9a.js";const b='{"title":"Build your own Telegram bot to query server information","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/case/case1.md","lastUpdated":1682159272000}',a={},n=o("",6),i=[n];function s(h,_,p,u,l,c){return t(),r("div",null,i)}var f=e(a,[["render",s]]);export{b as __pageData,f as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e}from"./chunks/qrcode.bde14c07.js";import{_ as t,c as r,o,a as s}from"./app.38e99b9a.js";const S='{"title":"Use Siri to run shortcut to check server status in iOS/MacOS","description":"","frontmatter":{},"headers":[{"level":2,"title":"Get shortcut command","slug":"get-shortcut-command"},{"level":2,"title":"How to use","slug":"how-to-use"}],"relativePath":"en_US/case/case2.md","lastUpdated":1682159272000}',a={},c=s('<h1 id="use-siri-to-run-shortcut-to-check-server-status-in-ios-macos" tabindex="-1">Use Siri to run shortcut to check server status in iOS/MacOS <a class="header-anchor" href="#use-siri-to-run-shortcut-to-check-server-status-in-ios-macos" aria-hidden="true">#</a></h1><p>Current Version\uFF1AV1.0 (Chinese)<br> Contributor:</p><ul><li>\u767D\u6B4C <a href="https://github.com/hhhkkk520" target="_blank" rel="noopener noreferrer">hhhkkk520</a></li></ul><h2 id="get-shortcut-command" tabindex="-1">Get shortcut command <a class="header-anchor" href="#get-shortcut-command" aria-hidden="true">#</a></h2><p>Scan the following QR code with your iPhone or iPad to get the shortcut<br><br><img src="'+e+'" alt=""><br><br><br> MacOS users please visit <a href="https://www.icloud.com/shortcuts/312005bf5ffd4387ac92a84056db9f09" target="_blank" rel="noopener noreferrer">here</a> to get the shortcut</p><h2 id="how-to-use" tabindex="-1">How to use <a class="header-anchor" href="#how-to-use" aria-hidden="true">#</a></h2><ul><li>After getting the shortcut, open and edit the shortcut</li><li>Fill in <code>Dashboard URL</code>, <code>API Token</code>, <code>Server ID</code> in the three text boxes</li><li>Save the edit and test run, if you can get the result, the setting is correct.</li><li>Modify the name of the shortcut, such as: Server Status, then you can use Siri command: "Hey Siri, Server Status" to get the server status.</li></ul><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>Each shortcut can only monitor one server, if you need to monitor more than one server, please copy this shortcut several times and configure them separately, then modify the shortcut name separately, such as; Server 1 Status, Server 2 Status, etc.</p></div>',8),i=[c];function h(n,u,d,l,m,_){return o(),r("div",null,i)}var v=t(a,[["render",h]]);export{S as __pageData,v as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e}from"./chunks/qrcode.bde14c07.js";import{_ as t,c as r,o,a as s}from"./app.38e99b9a.js";const S='{"title":"Use Siri to run shortcut to check server status in iOS/MacOS","description":"","frontmatter":{},"headers":[{"level":2,"title":"Get shortcut command","slug":"get-shortcut-command"},{"level":2,"title":"How to use","slug":"how-to-use"}],"relativePath":"en_US/case/case2.md","lastUpdated":1682159272000}',a={},c=s("",8),i=[c];function h(n,u,d,l,m,_){return o(),r("div",null,i)}var v=t(a,[["render",h]]);export{S as __pageData,v as default};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e}from"./chunks/qrcode.59c44dde.js";import{_ as t,o as r,c as o,R as s}from"./chunks/framework.1625126e.js";const f=JSON.parse('{"title":"Use Siri to run shortcut to check server status in iOS/MacOS","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/case/case2.md","filePath":"en_US/case/case2.md","lastUpdated":1687190167000}'),a={name:"en_US/case/case2.md"},c=s('<h1 id="use-siri-to-run-shortcut-to-check-server-status-in-ios-macos" tabindex="-1">Use Siri to run shortcut to check server status in iOS/MacOS <a class="header-anchor" href="#use-siri-to-run-shortcut-to-check-server-status-in-ios-macos" aria-label="Permalink to "Use Siri to run shortcut to check server status in iOS/MacOS""></a></h1><p>Current Version:V1.0 (Chinese)<br> Contributor:</p><ul><li>白歌 <a href="https://github.com/hhhkkk520" target="_blank" rel="noreferrer">hhhkkk520</a></li></ul><h2 id="get-shortcut-command" tabindex="-1">Get shortcut command <a class="header-anchor" href="#get-shortcut-command" aria-label="Permalink to "Get shortcut command""></a></h2><p>Scan the following QR code with your iPhone or iPad to get the shortcut<br><br><img src="'+e+'" alt="coode"><br><br><br> MacOS users please visit <a href="https://www.icloud.com/shortcuts/312005bf5ffd4387ac92a84056db9f09" target="_blank" rel="noreferrer">here</a> to get the shortcut</p><h2 id="how-to-use" tabindex="-1">How to use <a class="header-anchor" href="#how-to-use" aria-label="Permalink to "How to use""></a></h2><ul><li>After getting the shortcut, open and edit the shortcut</li><li>Fill in <code>Dashboard URL</code>, <code>API Token</code>, <code>Server ID</code> in the three text boxes</li><li>Save the edit and test run, if you can get the result, the setting is correct.</li><li>Modify the name of the shortcut, such as: Server Status, then you can use Siri command: "Hey Siri, Server Status" to get the server status.</li></ul><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>Each shortcut can only monitor one server, if you need to monitor more than one server, please copy this shortcut several times and configure them separately, then modify the shortcut name separately, such as; Server 1 Status, Server 2 Status, etc.</p></div>',8),i=[c];function h(n,u,l,d,m,_){return r(),o("div",null,i)}const b=t(a,[["render",h]]);export{f as __pageData,b as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e}from"./chunks/qrcode.59c44dde.js";import{_ as t,o as r,c as o,R as s}from"./chunks/framework.1625126e.js";const f=JSON.parse('{"title":"Use Siri to run shortcut to check server status in iOS/MacOS","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/case/case2.md","filePath":"en_US/case/case2.md","lastUpdated":1687190167000}'),a={name:"en_US/case/case2.md"},c=s("",8),i=[c];function h(n,u,l,d,m,_){return r(),o("div",null,i)}const b=t(a,[["render",h]]);export{f as __pageData,b as default};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as t,c as e,o as r,a}from"./app.38e99b9a.js";const g='{"title":"Build your own server status query Telegram bot with multi-language and multi-user support","description":"","frontmatter":{},"headers":[{"level":2,"title":"Features","slug":"features"},{"level":2,"title":"Commands list","slug":"commands-list"}],"relativePath":"en_US/case/case3.md","lastUpdated":1682159272000}',d={},i=a('<h1 id="build-your-own-server-status-query-telegram-bot-with-multi-language-and-multi-user-support" tabindex="-1">Build your own server status query Telegram bot with multi-language and multi-user support <a class="header-anchor" href="#build-your-own-server-status-query-telegram-bot-with-multi-language-and-multi-user-support" aria-hidden="true">#</a></h1><p>Contributor:</p><ul><li><a href="https://github.com/tech-fever" target="_blank" rel="noopener noreferrer">tech-fever</a></li></ul><p>GitHub project: <a href="https://github.com/tech-fever/nezha_telegram_bot" target="_blank" rel="noopener noreferrer">nezha_telegram_bot</a>\uFF08English is already supported\uFF09</p><p>Mirror backup, non-real-time update : <a href="https://github.com/nezhahq/nezha_telegram_bot" target="_blank" rel="noopener noreferrer">nezha_telegram_bot</a>\uFF08English is already supported\uFF09</p><h2 id="features" tabindex="-1">Features <a class="header-anchor" href="#features" aria-hidden="true">#</a></h2><ul><li>[x] Support Chinese/English multi-language switch</li><li>[x] Support tag statistics (CPU, disk, memory, upstream and downstream speed, traffic statistics, etc.)</li><li>[x] Support real-time refresh of single server data</li><li>[x] Support keyboard interactive query</li><li>[x] Support query by command</li><li>[x] Support adding bot to group, privacy protection of bot replies in group chat</li><li>[x] Support bot messages automatic deletion in group chat within 20 seconds</li><li>[x] Support docker deployment</li></ul><h2 id="commands-list" tabindex="-1">Commands list <a class="header-anchor" href="#commands-list" aria-hidden="true">#</a></h2><table><thead><tr><th>Command</th><th>Description</th><th>Private chat only</th></tr></thead><tbody><tr><td>start</td><td>Getting started with the keyboard main menu</td><td>\u2714\uFE0F</td></tr><tr><td>help</td><td>help message</td><td>\u274C</td></tr><tr><td>add</td><td>Add Nezha monitoring url link and token</td><td>\u2714\uFE0F</td></tr><tr><td>url</td><td>Add Nezha monitoring url link</td><td>\u2714\uFE0F</td></tr><tr><td>token</td><td>Add Nezha monitoring token</td><td>\u2714\uFE0F</td></tr><tr><td>info</td><td>Get saved Nezha monitoring url link and token</td><td>\u2714\uFE0F</td></tr><tr><td>delete</td><td>Delete saved Nezha monitoring url link and token</td><td>\u2714\uFE0F</td></tr><tr><td>id</td><td>Add an integer id after the command to query the information of a single server (refresh button only available in private chat)</td><td>\u274C</td></tr><tr><td>all</td><td>Query statistics for all servers</td><td>\u274C</td></tr><tr><td>search</td><td>Search for keywords in server names (multiple keywords supported, split by spaces)</td><td>\u274C</td></tr></tbody></table>',9),o=[i];function n(s,l,u,h,p,m){return r(),e("div",null,o)}var _=t(d,[["render",n]]);export{g as __pageData,_ as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as t,c as e,o as r,a}from"./app.38e99b9a.js";const g='{"title":"Build your own server status query Telegram bot with multi-language and multi-user support","description":"","frontmatter":{},"headers":[{"level":2,"title":"Features","slug":"features"},{"level":2,"title":"Commands list","slug":"commands-list"}],"relativePath":"en_US/case/case3.md","lastUpdated":1682159272000}',d={},i=a("",9),o=[i];function n(s,l,u,h,p,m){return r(),e("div",null,o)}var _=t(d,[["render",n]]);export{g as __pageData,_ as default};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as t,o as e,c as r,R as a}from"./chunks/framework.1625126e.js";const g=JSON.parse('{"title":"Build your own server status query Telegram bot with multi-language and multi-user support","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/case/case3.md","filePath":"en_US/case/case3.md","lastUpdated":1687190167000}'),d={name:"en_US/case/case3.md"},i=a('<h1 id="build-your-own-server-status-query-telegram-bot-with-multi-language-and-multi-user-support" tabindex="-1">Build your own server status query Telegram bot with multi-language and multi-user support <a class="header-anchor" href="#build-your-own-server-status-query-telegram-bot-with-multi-language-and-multi-user-support" aria-label="Permalink to "Build your own server status query Telegram bot with multi-language and multi-user support""></a></h1><p>Contributor:</p><ul><li><a href="https://github.com/tech-fever" target="_blank" rel="noreferrer">tech-fever</a></li></ul><p>GitHub project: <a href="https://github.com/tech-fever/nezha_telegram_bot" target="_blank" rel="noreferrer">nezha_telegram_bot</a>(English is already supported)</p><p>Mirror backup, non-real-time update : <a href="https://github.com/nezhahq/nezha_telegram_bot" target="_blank" rel="noreferrer">nezha_telegram_bot</a>(English is already supported)</p><h2 id="features" tabindex="-1">Features <a class="header-anchor" href="#features" aria-label="Permalink to "Features""></a></h2><ul><li>[x] Support Chinese/English multi-language switch</li><li>[x] Support tag statistics (CPU, disk, memory, upstream and downstream speed, traffic statistics, etc.)</li><li>[x] Support real-time refresh of single server data</li><li>[x] Support keyboard interactive query</li><li>[x] Support query by command</li><li>[x] Support adding bot to group, privacy protection of bot replies in group chat</li><li>[x] Support bot messages automatic deletion in group chat within 20 seconds</li><li>[x] Support docker deployment</li></ul><h2 id="commands-list" tabindex="-1">Commands list <a class="header-anchor" href="#commands-list" aria-label="Permalink to "Commands list""></a></h2><table><thead><tr><th>Command</th><th>Description</th><th>Private chat only</th></tr></thead><tbody><tr><td>start</td><td>Getting started with the keyboard main menu</td><td>✔️</td></tr><tr><td>help</td><td>help message</td><td>❌</td></tr><tr><td>add</td><td>Add Nezha monitoring url link and token</td><td>✔️</td></tr><tr><td>url</td><td>Add Nezha monitoring url link</td><td>✔️</td></tr><tr><td>token</td><td>Add Nezha monitoring token</td><td>✔️</td></tr><tr><td>info</td><td>Get saved Nezha monitoring url link and token</td><td>✔️</td></tr><tr><td>delete</td><td>Delete saved Nezha monitoring url link and token</td><td>✔️</td></tr><tr><td>id</td><td>Add an integer id after the command to query the information of a single server (refresh button only available in private chat)</td><td>❌</td></tr><tr><td>all</td><td>Query statistics for all servers</td><td>❌</td></tr><tr><td>search</td><td>Search for keywords in server names (multiple keywords supported, split by spaces)</td><td>❌</td></tr></tbody></table>',9),o=[i];function s(l,n,u,h,p,m){return e(),r("div",null,o)}const _=t(d,[["render",s]]);export{g as __pageData,_ as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as t,o as e,c as r,R as a}from"./chunks/framework.1625126e.js";const g=JSON.parse('{"title":"Build your own server status query Telegram bot with multi-language and multi-user support","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/case/case3.md","filePath":"en_US/case/case3.md","lastUpdated":1687190167000}'),d={name:"en_US/case/case3.md"},i=a("",9),o=[i];function s(l,n,u,h,p,m){return e(),r("div",null,o)}const _=t(d,[["render",s]]);export{g as __pageData,_ as default};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,c as a,o as t,a as r}from"./app.38e99b9a.js";const l='{"title":"Fake-agent, monitoring data cheater","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/case/case4.md","lastUpdated":1682159272000}',n={},o=r('<h1 id="fake-agent-monitoring-data-cheater" tabindex="-1">Fake-agent, monitoring data cheater <a class="header-anchor" href="#fake-agent-monitoring-data-cheater" aria-hidden="true">#</a></h1><p>Contributor:</p><ul><li><a href="https://github.com/dysf888" target="_blank" rel="noopener noreferrer">dysf888</a></li></ul><p>GitHub project: <a href="https://github.com/dysf888/fake-nezha-agent" target="_blank" rel="noopener noreferrer">fake-nezha-agent</a>\uFF08Chinese\uFF09<br> Mirror backup, non-real-time update \uFF1A<a href="https://github.com/nezhahq/fake-nezha-agent" target="_blank" rel="noopener noreferrer">fake-nezha-agent</a>\uFF08Chinese\uFF09</p><p>You can modify the monitoring data uploaded to Dashboard by the Agent<br> Use it for cheating \u{1F608}</p>',5),i=[o];function h(s,c,d,_,p,f){return t(),a("div",null,i)}var u=e(n,[["render",h]]);export{l as __pageData,u as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,c as a,o as t,a as r}from"./app.38e99b9a.js";const l='{"title":"Fake-agent, monitoring data cheater","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/case/case4.md","lastUpdated":1682159272000}',n={},o=r("",5),i=[o];function h(s,c,d,_,p,f){return t(),a("div",null,i)}var u=e(n,[["render",h]]);export{l as __pageData,u as default};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e,o as a,c as t,R as r}from"./chunks/framework.1625126e.js";const g=JSON.parse('{"title":"Fake-agent, monitoring data cheater","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/case/case4.md","filePath":"en_US/case/case4.md","lastUpdated":1687190167000}'),n={name:"en_US/case/case4.md"},o=r('<h1 id="fake-agent-monitoring-data-cheater" tabindex="-1">Fake-agent, monitoring data cheater <a class="header-anchor" href="#fake-agent-monitoring-data-cheater" aria-label="Permalink to "Fake-agent, monitoring data cheater""></a></h1><p>Contributor:</p><ul><li><a href="https://github.com/dysf888" target="_blank" rel="noreferrer">dysf888</a></li></ul><p>GitHub project: <a href="https://github.com/dysf888/fake-nezha-agent" target="_blank" rel="noreferrer">fake-nezha-agent</a>(Chinese)<br> Mirror backup, non-real-time update :<a href="https://github.com/nezhahq/fake-nezha-agent" target="_blank" rel="noreferrer">fake-nezha-agent</a>(Chinese)</p><p>You can modify the monitoring data uploaded to Dashboard by the Agent<br> Use it for cheating 😈</p>',5),i=[o];function s(c,h,_,d,f,l){return a(),t("div",null,i)}const m=e(n,[["render",s]]);export{g as __pageData,m as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e,o as a,c as t,R as r}from"./chunks/framework.1625126e.js";const g=JSON.parse('{"title":"Fake-agent, monitoring data cheater","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/case/case4.md","filePath":"en_US/case/case4.md","lastUpdated":1687190167000}'),n={name:"en_US/case/case4.md"},o=r("",5),i=[o];function s(c,h,_,d,f,l){return a(),t("div",null,i)}const m=e(n,[["render",s]]);export{g as __pageData,m as default};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as o,c as a,o as n,b as e,d as t}from"./app.38e99b9a.js";const _='{"title":"Home","description":"","frontmatter":{"home":true,"heroImage":"https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.svg","heroText":"Nezha Monitoring Community Project","tagline":"Related projects contributed by Nezha Monitoring community, provide more extensions for Nezha Monitoring","actionText":"Learn More \u2192","actionLink":"/en_US/case/case1","features":[{"title":"Submit a project","details":"We welcome you to submit your own projects, please join the Telegram group and contact the administrator for more information"},{"title":"Important Notes","details":"All projects are contributed by community members. Please be aware that Nezha monitoring team cannot be held responsible for community projects including and not limited to warranty, availability, security, etc."}]},"headers":[],"relativePath":"en_US/case/index.md","lastUpdated":1682159272000}',r={},i=e("p",null,[e("br"),t("This work is licensed under a "),e("a",{rel:"license",href:"http://creativecommons.org/licenses/by-nc-sa/4.0/"},"Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License"),t(".")],-1),s=[i];function c(m,l,d,u,p,h){return n(),a("div",null,s)}var f=o(r,[["render",c]]);export{_ as __pageData,f as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as o,c as a,o as n,b as e,d as t}from"./app.38e99b9a.js";const _='{"title":"Home","description":"","frontmatter":{"home":true,"heroImage":"https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.svg","heroText":"Nezha Monitoring Community Project","tagline":"Related projects contributed by Nezha Monitoring community, provide more extensions for Nezha Monitoring","actionText":"Learn More \u2192","actionLink":"/en_US/case/case1","features":[{"title":"Submit a project","details":"We welcome you to submit your own projects, please join the Telegram group and contact the administrator for more information"},{"title":"Important Notes","details":"All projects are contributed by community members. Please be aware that Nezha monitoring team cannot be held responsible for community projects including and not limited to warranty, availability, security, etc."}]},"headers":[],"relativePath":"en_US/case/index.md","lastUpdated":1682159272000}',r={},i=e("p",null,[e("br"),t("This work is licensed under a "),e("a",{rel:"license",href:"http://creativecommons.org/licenses/by-nc-sa/4.0/"},"Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License"),t(".")],-1),s=[i];function c(m,l,d,u,p,h){return n(),a("div",null,s)}var f=o(r,[["render",c]]);export{_ as __pageData,f as default};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as o,o as a,c as n,z as e,a as t}from"./chunks/framework.1625126e.js";const b=JSON.parse('{"title":"","description":"","frontmatter":{"heroImage":"https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.svg","heroText":"Nezha Monitoring Community Project","tagline":"Related projects contributed by Nezha Monitoring community, provide more extensions for Nezha Monitoring","actionText":"Learn More →","actionLink":"/en_US/case/case1","features":[{"title":"Submit a project","details":"We welcome you to submit your own projects, please join the Telegram group and contact the administrator for more information"},{"title":"Important Notes","details":"All projects are contributed by community members. Please be aware that Nezha monitoring team cannot be held responsible for community projects including and not limited to warranty, availability, security, etc."}]},"headers":[],"relativePath":"en_US/case/index.md","filePath":"en_US/case/index.md","lastUpdated":1687190167000}'),r={name:"en_US/case/index.md"},i=e("p",null,[e("br"),t("This work is licensed under a "),e("a",{rel:"license",href:"http://creativecommons.org/licenses/by-nc-sa/4.0/"},"Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License"),t(".")],-1),s=[i];function c(m,l,d,p,u,h){return a(),n("div",null,s)}const f=o(r,[["render",c]]);export{b as __pageData,f as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as o,o as a,c as n,z as e,a as t}from"./chunks/framework.1625126e.js";const b=JSON.parse('{"title":"","description":"","frontmatter":{"heroImage":"https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.svg","heroText":"Nezha Monitoring Community Project","tagline":"Related projects contributed by Nezha Monitoring community, provide more extensions for Nezha Monitoring","actionText":"Learn More →","actionLink":"/en_US/case/case1","features":[{"title":"Submit a project","details":"We welcome you to submit your own projects, please join the Telegram group and contact the administrator for more information"},{"title":"Important Notes","details":"All projects are contributed by community members. Please be aware that Nezha monitoring team cannot be held responsible for community projects including and not limited to warranty, availability, security, etc."}]},"headers":[],"relativePath":"en_US/case/index.md","filePath":"en_US/case/index.md","lastUpdated":1687190167000}'),r={name:"en_US/case/index.md"},i=e("p",null,[e("br"),t("This work is licensed under a "),e("a",{rel:"license",href:"http://creativecommons.org/licenses/by-nc-sa/4.0/"},"Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License"),t(".")],-1),s=[i];function c(m,l,d,p,u,h){return a(),n("div",null,s)}const f=o(r,[["render",c]]);export{b as __pageData,f as default};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as o,c as a,o as n,b as e,d as t}from"./app.38e99b9a.js";const v='{"title":"Home","description":"","frontmatter":{"home":true,"heroImage":"https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.svg","heroText":"Development Manual","tagline":"Welcome to the Nezha Monitoring Development Manual.","actionText":"Start Now \u2192","actionLink":"/en_US/developer/theme","footer":"Copyright \xA9 2022-present Nezhahq"},"headers":[],"relativePath":"en_US/developer/index.md","lastUpdated":1682159272000}',r={},s=e("p",null,[e("br"),t("This work is licensed under a "),e("a",{rel:"license",href:"http://creativecommons.org/licenses/by-nc-sa/4.0/"},"Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License"),t(".")],-1),i=[s];function c(l,d,h,m,p,_){return n(),a("div",null,i)}var f=o(r,[["render",c]]);export{v as __pageData,f as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as o,c as a,o as n,b as e,d as t}from"./app.38e99b9a.js";const v='{"title":"Home","description":"","frontmatter":{"home":true,"heroImage":"https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.svg","heroText":"Development Manual","tagline":"Welcome to the Nezha Monitoring Development Manual.","actionText":"Start Now \u2192","actionLink":"/en_US/developer/theme","footer":"Copyright \xA9 2022-present Nezhahq"},"headers":[],"relativePath":"en_US/developer/index.md","lastUpdated":1682159272000}',r={},s=e("p",null,[e("br"),t("This work is licensed under a "),e("a",{rel:"license",href:"http://creativecommons.org/licenses/by-nc-sa/4.0/"},"Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License"),t(".")],-1),i=[s];function c(l,d,h,m,p,_){return n(),a("div",null,i)}var f=o(r,[["render",c]]);export{v as __pageData,f as default};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as n,o as a,c as o,z as e,a as t}from"./chunks/framework.1625126e.js";const v=JSON.parse('{"title":"","description":"","frontmatter":{"heroImage":"https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.svg","heroText":"Development Manual","tagline":"Welcome to the Nezha Monitoring Development Manual.","actionText":"Start Now →","actionLink":"/en_US/developer/theme"},"headers":[],"relativePath":"en_US/developer/index.md","filePath":"en_US/developer/index.md","lastUpdated":1687190167000}'),r={name:"en_US/developer/index.md"},s=e("p",null,[e("br"),t("This work is licensed under a "),e("a",{rel:"license",href:"http://creativecommons.org/licenses/by-nc-sa/4.0/"},"Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License"),t(".")],-1),i=[s];function c(l,d,m,p,_,h){return a(),o("div",null,i)}const x=n(r,[["render",c]]);export{v as __pageData,x as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as n,o as a,c as o,z as e,a as t}from"./chunks/framework.1625126e.js";const v=JSON.parse('{"title":"","description":"","frontmatter":{"heroImage":"https://raw.githubusercontent.com/naiba/nezha/master/resource/static/brand.svg","heroText":"Development Manual","tagline":"Welcome to the Nezha Monitoring Development Manual.","actionText":"Start Now →","actionLink":"/en_US/developer/theme"},"headers":[],"relativePath":"en_US/developer/index.md","filePath":"en_US/developer/index.md","lastUpdated":1687190167000}'),r={name:"en_US/developer/index.md"},s=e("p",null,[e("br"),t("This work is licensed under a "),e("a",{rel:"license",href:"http://creativecommons.org/licenses/by-nc-sa/4.0/"},"Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License"),t(".")],-1),i=[s];function c(l,d,m,p,_,h){return a(),o("div",null,i)}const x=n(r,[["render",c]]);export{v as __pageData,x as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e,o as t,c as a,R as n}from"./chunks/framework.1625126e.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/developer/l10n.md","filePath":"en_US/developer/l10n.md","lastUpdated":1687190167000}'),o={name:"en_US/developer/l10n.md"},i=n('<p><strong>Nezha Monitoring's Dashboard has added localization to support multiple languages, and you can follow these steps to support localization when developing new features</strong></p><h2 id="introduction" tabindex="-1">Introduction <a class="header-anchor" href="#introduction" aria-label="Permalink to "Introduction""></a></h2><ol><li>You can directly use the text configuration already available in <code>/resource/l10n/en-US.toml</code> to replace the text in the new feature.</li><li>If there is new text in the new feature, please refer to the configuration text in <code>en-US.toml</code>, pull the new text into the configuration files of other languages such as <code>en-US.toml</code>, and add translations.</li></ol><h2 id="adding-a-new-localized-text-file" tabindex="-1">Adding a new localized text file <a class="header-anchor" href="#adding-a-new-localized-text-file" aria-label="Permalink to "Adding a new localized text file""></a></h2><ol><li>Add a new language text configuration in <code>/resource/l10n/</code>.</li><li>Pull existing text configurations from other languages in the new language text configuration.</li><li>Add translations for the new language text configuration.</li></ol>',5),l=[i];function r(d,c,s,u,h,f){return t(),a("div",null,l)}const p=e(o,[["render",r]]);export{g as __pageData,p as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e,o as t,c as a,R as n}from"./chunks/framework.1625126e.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/developer/l10n.md","filePath":"en_US/developer/l10n.md","lastUpdated":1687190167000}'),o={name:"en_US/developer/l10n.md"},i=n("",5),l=[i];function r(d,c,s,u,h,f){return t(),a("div",null,l)}const p=e(o,[["render",r]]);export{g as __pageData,p as default};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,c as t,o as n,a}from"./app.38e99b9a.js";const _='{"title":"Introduction","description":"","frontmatter":{},"headers":[{"level":2,"title":"Introduction","slug":"introduction"},{"level":2,"title":"Adding a new localized text file","slug":"adding-a-new-localized-text-file"}],"relativePath":"en_US/developer/l10n.md","lastUpdated":1682159272000}',o={},i=a('<p><strong>Nezha Monitoring's Dashboard has added localization to support multiple languages, and you can follow these steps to support localization when developing new features</strong></p><h2 id="introduction" tabindex="-1">Introduction <a class="header-anchor" href="#introduction" aria-hidden="true">#</a></h2><ol><li>You can directly use the text configuration already available in <code>/resource/l10n/en-US.toml</code> to replace the text in the new feature.</li><li>If there is new text in the new feature, please refer to the configuration text in <code>en-US.toml</code>, pull the new text into the configuration files of other languages such as <code>en-US.toml</code>, and add translations.</li></ol><h2 id="adding-a-new-localized-text-file" tabindex="-1">Adding a new localized text file <a class="header-anchor" href="#adding-a-new-localized-text-file" aria-hidden="true">#</a></h2><ol><li>Add a new language text configuration in <code>/resource/l10n/</code>.</li><li>Pull existing text configurations from other languages in the new language text configuration.</li><li>Add translations for the new language text configuration.</li></ol>',5),l=[i];function d(r,c,s,u,h,g){return n(),t("div",null,l)}var p=e(o,[["render",d]]);export{_ as __pageData,p as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,c as t,o as n,a}from"./app.38e99b9a.js";const _='{"title":"Introduction","description":"","frontmatter":{},"headers":[{"level":2,"title":"Introduction","slug":"introduction"},{"level":2,"title":"Adding a new localized text file","slug":"adding-a-new-localized-text-file"}],"relativePath":"en_US/developer/l10n.md","lastUpdated":1682159272000}',o={},i=a("",5),l=[i];function d(r,c,s,u,h,g){return n(),t("div",null,l)}var p=e(o,[["render",d]]);export{_ as __pageData,p as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,c as o,o as t,a as n}from"./app.38e99b9a.js";const v='{"title":"Nezha Theme Development Environment","description":"","frontmatter":{},"headers":[{"level":2,"title":"Nezha Theme Development Environment","slug":"nezha-theme-development-environment"},{"level":2,"title":"How to use","slug":"how-to-use"},{"level":2,"title":"FAQ","slug":"faq"}],"relativePath":"en_US/developer/theme.md","lastUpdated":1682159272000}',a={},i=n('<h2 id="nezha-theme-development-environment" tabindex="-1">Nezha Theme Development Environment <a class="header-anchor" href="#nezha-theme-development-environment" aria-hidden="true">#</a></h2><p>Nezha Monitoring provides a theme development environment that you can use to create new Nezha Monitoring themes</p><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>Please note: This development environment only supports <code>dashboard v0.13.16</code> and newer versions.</p></div><h2 id="how-to-use" tabindex="-1">How to use <a class="header-anchor" href="#how-to-use" aria-hidden="true">#</a></h2><ol><li>Clone <a href="https://github.com/nezhahq/skeleton-custom-theme" target="_blank" rel="noopener noreferrer">this repository</a> to local</li><li>Modify the Oauth2 configuration in <code>data/config.yaml</code>\uFF08The callback connection can be filled with <code>http://localhost</code>\uFF09</li><li>Run <code>docker-compose up</code></li><li>Start development</li><li>Once the theme has been created, you can place <code>theme-custom</code> in <code>/opt/nezha/dashboard/theme-custom</code> on the server</li></ol><h2 id="faq" tabindex="-1">FAQ <a class="header-anchor" href="#faq" aria-hidden="true">#</a></h2><ul><li>If you can't use port <code>80</code>, change the configuration in <code>docker-compose.yaml</code>.</li></ul>',7),c=[i];function l(r,h,d,s,m,p){return t(),o("div",null,c)}var _=e(a,[["render",l]]);export{v as __pageData,_ as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,c as o,o as t,a as n}from"./app.38e99b9a.js";const v='{"title":"Nezha Theme Development Environment","description":"","frontmatter":{},"headers":[{"level":2,"title":"Nezha Theme Development Environment","slug":"nezha-theme-development-environment"},{"level":2,"title":"How to use","slug":"how-to-use"},{"level":2,"title":"FAQ","slug":"faq"}],"relativePath":"en_US/developer/theme.md","lastUpdated":1682159272000}',a={},i=n("",7),c=[i];function l(r,h,d,s,m,p){return t(),o("div",null,c)}var _=e(a,[["render",l]]);export{v as __pageData,_ as default};
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e,o,c as t,R as a}from"./chunks/framework.1625126e.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/developer/theme.md","filePath":"en_US/developer/theme.md","lastUpdated":1687190167000}'),n={name:"en_US/developer/theme.md"},c=a('<h2 id="nezha-theme-development-environment" tabindex="-1">Nezha Theme Development Environment <a class="header-anchor" href="#nezha-theme-development-environment" aria-label="Permalink to "Nezha Theme Development Environment""></a></h2><p>Nezha Monitoring provides a theme development environment that you can use to create new Nezha Monitoring themes</p><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>Please note: This development environment only supports <code>dashboard v0.13.16</code> and newer versions.</p></div><h2 id="how-to-use" tabindex="-1">How to use <a class="header-anchor" href="#how-to-use" aria-label="Permalink to "How to use""></a></h2><ol><li>Clone <a href="https://github.com/nezhahq/skeleton-custom-theme" target="_blank" rel="noreferrer">this repository</a> to local</li><li>Modify the Oauth2 configuration in <code>data/config.yaml</code>(The callback connection can be filled with <code>http://localhost</code>)</li><li>Run <code>docker-compose up</code></li><li>Start development</li><li>Once the theme has been created, you can place <code>theme-custom</code> in <code>/opt/nezha/dashboard/theme-custom</code> on the server</li></ol><h2 id="faq" tabindex="-1">FAQ <a class="header-anchor" href="#faq" aria-label="Permalink to "FAQ""></a></h2><ul><li>If you can't use port <code>80</code>, change the configuration in <code>docker-compose.yaml</code>.</li></ul>',7),r=[c];function l(i,h,d,s,m,p){return o(),t("div",null,r)}const v=e(n,[["render",l]]);export{_ as __pageData,v as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e,o,c as t,R as a}from"./chunks/framework.1625126e.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/developer/theme.md","filePath":"en_US/developer/theme.md","lastUpdated":1687190167000}'),n={name:"en_US/developer/theme.md"},c=a("",7),r=[c];function l(i,h,d,s,m,p){return o(),t("div",null,r)}const v=e(n,[["render",l]]);export{_ as __pageData,v as default};
|
||||||
@@ -1,147 +0,0 @@
|
|||||||
import{_ as n,c as a,o as t,a as s}from"./app.38e99b9a.js";const k='{"title":"Install Agent using one-click script","description":"","frontmatter":{},"headers":[{"level":2,"title":"Install Agent using one-click script","slug":"install-agent-using-one-click-script"},{"level":3,"title":"Preparation","slug":"preparation"},{"level":3,"title":"One-click installation on Linux (Ubuntu, Debian, CentOS)","slug":"one-click-installation-on-linux-ubuntu-debian-centos"},{"level":3,"title":"One-click installation on Windows","slug":"one-click-installation-on-windows"},{"level":2,"title":"Other ways to install Agent","slug":"other-ways-to-install-agent"},{"level":3,"title":"Installing Agent on Linux (Ubuntu, Debian, CentOS)","slug":"installing-agent-on-linux-ubuntu-debian-centos"},{"level":3,"title":"Installing Agent on other Linux (such as alpine use oprec not systemd)","slug":"installing-agent-on-other-linux-such-as-alpine-use-oprec-not-systemd"},{"level":3,"title":"Installing Agent on Windows","slug":"installing-agent-on-windows"},{"level":3,"title":"Installing Agent on Synology DSM","slug":"installing-agent-on-synology-dsm"},{"level":3,"title":"Installing Agent on MacOS","slug":"installing-agent-on-macos"},{"level":3,"title":"Installing Agent on OpenWRT","slug":"installing-agent-on-openwrt"},{"level":2,"title":"FAQ","slug":"faq"},{"level":3,"title":"Is there a Docker image for Agent?","slug":"is-there-a-docker-image-for-agent"}],"relativePath":"en_US/guide/agent.md","lastUpdated":1682159272000}',e={},o=s(`<p><strong>The service in the monitored server is called Agent. This document will describe how to install the Agent on the monitored server and connect it with Dashboard</strong><br><br></p><h2 id="install-agent-using-one-click-script" tabindex="-1">Install Agent using one-click script <a class="header-anchor" href="#install-agent-using-one-click-script" aria-hidden="true">#</a></h2><p>Nezha Monitoring now supports one-click installation of the Agent on Windows and Linux. Follow the steps in this document and you can easily deploy it on your server<br><br></p><h3 id="preparation" tabindex="-1">Preparation <a class="header-anchor" href="#preparation" aria-hidden="true">#</a></h3><p>First of all, you need to set up the communication domain name in the settings page of the admin panel, this domain name can not connect to the CDN, here is the sample communication domain name "<a href="http://data.example.com" target="_blank" rel="noopener noreferrer">data.example.com</a>" mentioned earlier for demonstration<br> Enter the administration panel, go to the "Settings" page, in the item "CDN Bypassed Domain/IP ", fill in the communication domain name, and then click "Save"<br><br></p><h3 id="one-click-installation-on-linux-ubuntu-debian-centos" tabindex="-1">One-click installation on Linux (Ubuntu, Debian, CentOS) <a class="header-anchor" href="#one-click-installation-on-linux-ubuntu-debian-centos" aria-hidden="true">#</a></h3><ul><li>First add a server in the admin panel</li><li>Click on the green Linux icon button next to the newly added server and copy the one-click installation command</li><li>Run the copied one-click installation command on the monitored server, wait for the installation to complete, and then return to the Dashboard home page to see if the server is online.<br><br></li></ul><h3 id="one-click-installation-on-windows" tabindex="-1">One-click installation on Windows <a class="header-anchor" href="#one-click-installation-on-windows" aria-hidden="true">#</a></h3><ul><li>First add a server in the admin panel</li><li>Click on the green Linux icon button next to the newly added server and copy the one-click installation command</li><li>Login to Windows Server, open PowerShell, and run the copied installation command in PowerShell</li><li>If you encounter the prompt "Implement Policy Change" please select Y</li><li>Wait for the installation to complete and return to the Dashboard home page to see if the server is online<br><br><br><br></li></ul><h2 id="other-ways-to-install-agent" tabindex="-1">Other ways to install Agent <a class="header-anchor" href="#other-ways-to-install-agent" aria-hidden="true">#</a></h2><br><h3 id="installing-agent-on-linux-ubuntu-debian-centos" tabindex="-1">Installing Agent on Linux (Ubuntu, Debian, CentOS) <a class="header-anchor" href="#installing-agent-on-linux-ubuntu-debian-centos" aria-hidden="true">#</a></h3><ul><li>First add a server in the admin panel</li><li>In the monitored server, run the script:</li></ul><div class="language-bash"><pre><code><span class="token function">curl</span> -L https://raw.githubusercontent.com/naiba/nezha/master/script/install_en.sh -o nezha.sh <span class="token operator">&&</span> <span class="token function">chmod</span> +x nezha.sh <span class="token operator">&&</span> <span class="token function">sudo</span> ./nezha.sh
|
|
||||||
</code></pre></div><ul><li><p>Select \u201CInstall_agent\u201D</p></li><li><p>Input the communication domain name, e.g. "<a href="http://data.example.com" target="_blank" rel="noopener noreferrer">data.example.com</a>"</p></li><li><p>Input RPC port, default is 5555</p></li><li><p>Input the Agent Secret, which is generated when adding a server in the administration panel and can be found in the " Servers " page of the administration panel</p></li><li><p>Wait for the installation to complete and return to the Dashboard home page to see if the server is online<br><br></p></li></ul><h3 id="installing-agent-on-other-linux-such-as-alpine-use-oprec-not-systemd" tabindex="-1">Installing Agent on other Linux (such as alpine use oprec not systemd) <a class="header-anchor" href="#installing-agent-on-other-linux-such-as-alpine-use-oprec-not-systemd" aria-hidden="true">#</a></h3><p>Contributed by <a href="https://github.com/unknwon0054" target="_blank" rel="noopener noreferrer">unknown0054</a></p><ul><li>Edit SERVER,SECRET,TLS then run it in Shell</li></ul><div class="language-shell"><pre><code><span class="token function">cat</span> <span class="token operator">></span>/etc/init.d/nezha-agent<span class="token operator"><<</span> <span class="token string">EOF
|
|
||||||
#!/sbin/openrc-run
|
|
||||||
SERVER="" #Dashboard address ip:port
|
|
||||||
SECRET="" #SECRET
|
|
||||||
TLS="" # Enable tls? yes:"--tls" no:""
|
|
||||||
NZ_BASE_PATH="/opt/nezha"
|
|
||||||
NZ_AGENT_PATH="<span class="token variable">\${NZ_BASE_PATH}</span>/agent"
|
|
||||||
pidfile="/run/<span class="token variable">\${RC_SVCNAME}</span>.pid"
|
|
||||||
command="/opt/nezha/agent/nezha-agent"
|
|
||||||
command_args="-s <span class="token variable">\${SERVER}</span> -p <span class="token variable">\${SECRET}</span> <span class="token variable">\${TLS}</span>"
|
|
||||||
command_background=true
|
|
||||||
depend() {
|
|
||||||
need net
|
|
||||||
}
|
|
||||||
checkconfig() {
|
|
||||||
GITHUB_URL="github.com"
|
|
||||||
if [ ! -f "<span class="token variable">\${NZ_AGENT_PATH}</span>/nezha-agent" ]; then
|
|
||||||
if [[ <span class="token variable"><span class="token variable">$(</span><span class="token function">uname</span> -m <span class="token operator">|</span> <span class="token function">grep</span> <span class="token string">'x86_64'</span><span class="token variable">)</span></span> != "" ]]; then
|
|
||||||
os_arch="amd64"
|
|
||||||
elif [[ <span class="token variable"><span class="token variable">$(</span><span class="token function">uname</span> -m <span class="token operator">|</span> <span class="token function">grep</span> <span class="token string">'i386\\|i686'</span><span class="token variable">)</span></span> != "" ]]; then
|
|
||||||
os_arch="386"
|
|
||||||
elif [[ <span class="token variable"><span class="token variable">$(</span><span class="token function">uname</span> -m <span class="token operator">|</span> <span class="token function">grep</span> <span class="token string">'aarch64\\|armv8b\\|armv8l'</span><span class="token variable">)</span></span> != "" ]]; then
|
|
||||||
os_arch="arm64"
|
|
||||||
elif [[ <span class="token variable"><span class="token variable">$(</span><span class="token function">uname</span> -m <span class="token operator">|</span> <span class="token function">grep</span> <span class="token string">'arm'</span><span class="token variable">)</span></span> != "" ]]; then
|
|
||||||
os_arch="arm"
|
|
||||||
elif [[ <span class="token variable"><span class="token variable">$(</span><span class="token function">uname</span> -m <span class="token operator">|</span> <span class="token function">grep</span> <span class="token string">'s390x'</span><span class="token variable">)</span></span> != "" ]]; then
|
|
||||||
os_arch="s390x"
|
|
||||||
elif [[ <span class="token variable"><span class="token variable">$(</span><span class="token function">uname</span> -m <span class="token operator">|</span> <span class="token function">grep</span> <span class="token string">'riscv64'</span><span class="token variable">)</span></span> != "" ]]; then
|
|
||||||
os_arch="riscv64"
|
|
||||||
fi
|
|
||||||
local version=<span class="token variable"><span class="token variable">$(</span><span class="token function">curl</span> -m <span class="token number">10</span> -sL <span class="token string">"https://api.github.com/repos/naiba/nezha/releases/latest"</span> <span class="token operator">|</span> <span class="token function">grep</span> <span class="token string">"tag_name"</span> <span class="token operator">|</span> <span class="token function">head</span> -n <span class="token number">1</span> <span class="token operator">|</span> <span class="token function">awk</span> -F <span class="token string">":"</span> <span class="token string">'{print $2}'</span> <span class="token operator">|</span> <span class="token function">sed</span> <span class="token string">'s/\\"//g;s/,//g;s/ //g'</span><span class="token variable">)</span></span>
|
|
||||||
if [ ! -n "<span class="token variable">$version</span>" ]; then
|
|
||||||
version=<span class="token variable"><span class="token variable">$(</span><span class="token function">curl</span> -m <span class="token number">10</span> -sL <span class="token string">"https://fastly.jsdelivr.net/gh/naiba/nezha/"</span> <span class="token operator">|</span> <span class="token function">grep</span> <span class="token string">"option\\.value"</span> <span class="token operator">|</span> <span class="token function">awk</span> -F <span class="token string">"'"</span> <span class="token string">'{print $2}'</span> <span class="token operator">|</span> <span class="token function">sed</span> <span class="token string">'s/naiba\\/nezha@/v/g'</span><span class="token variable">)</span></span>
|
|
||||||
fi
|
|
||||||
if [ ! -n "<span class="token variable">$version</span>" ]; then
|
|
||||||
version=<span class="token variable"><span class="token variable">$(</span><span class="token function">curl</span> -m <span class="token number">10</span> -sL <span class="token string">"https://gcore.jsdelivr.net/gh/naiba/nezha/"</span> <span class="token operator">|</span> <span class="token function">grep</span> <span class="token string">"option\\.value"</span> <span class="token operator">|</span> <span class="token function">awk</span> -F <span class="token string">"'"</span> <span class="token string">'{print $2}'</span> <span class="token operator">|</span> <span class="token function">sed</span> <span class="token string">'s/naiba\\/nezha@/v/g'</span><span class="token variable">)</span></span>
|
|
||||||
fi
|
|
||||||
if [ ! -n "<span class="token variable">$version</span>" ]; then
|
|
||||||
echo -e "Failed to get the version number, please check if the network can connect to https://api.github.com/repos/naiba/nezha/releases/latest"
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
echo -e "The current latest version is: <span class="token variable">\${version}</span>"
|
|
||||||
fi
|
|
||||||
wget -t 2 -T 10 -O nezha-agent_linux_<span class="token variable">\${os_arch}</span>.zip https://<span class="token variable">\${GITHUB_URL}</span>/naiba/nezha/releases/download/<span class="token variable">\${version}</span>/nezha-agent_linux_<span class="token variable">\${os_arch}</span>.zip >/dev/null 2>&1
|
|
||||||
if [[ <span class="token variable">$?</span> != 0 ]]; then
|
|
||||||
echo -e "Release download failed, please check if the network can connect to <span class="token variable">\${GITHUB_URL}</span><span class="token variable">\${plain}</span>"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
mkdir -p <span class="token variable">$NZ_AGENT_PATH</span>
|
|
||||||
chmod 755 -R <span class="token variable">$NZ_AGENT_PATH</span>
|
|
||||||
unzip -qo nezha-agent_linux_<span class="token variable">\${os_arch}</span>.zip && mv nezha-agent <span class="token variable">$NZ_AGENT_PATH</span> && rm -rf nezha-agent_linux_<span class="token variable">\${os_arch}</span>.zip README.md
|
|
||||||
fi
|
|
||||||
if [ ! -x "<span class="token variable">\${NZ_AGENT_PATH}</span>/nezha-agent" ]; then
|
|
||||||
chmod +x <span class="token variable">\${NZ_AGENT_PATH}</span>/nezha-agent
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
start_pre() {
|
|
||||||
if [ "<span class="token variable">\${RC_CMD}</span>" != "restart" ]; then
|
|
||||||
checkconfig || return <span class="token variable">$?</span>
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
EOF</span>
|
|
||||||
</code></pre></div><ul><li><p>Add execute permission</p><div class="language-shell"><pre><code><span class="token function">chmod</span> +x /etc/init.d/nezha-agent
|
|
||||||
</code></pre></div></li><li><p>Run Nezha-Agent</p><div class="language-shell"><pre><code>rc-service nezha-agent-hy start
|
|
||||||
</code></pre></div></li><li><p>Set self-start after boot</p><div class="language-shell"><pre><code>rc-update <span class="token function">add</span> nezha-agent
|
|
||||||
</code></pre></div></li></ul><h3 id="installing-agent-on-windows" tabindex="-1">Installing Agent on Windows <a class="header-anchor" href="#installing-agent-on-windows" aria-hidden="true">#</a></h3><ul><li>Please refer to the community article:<br><a href="https://nyko.me/2020/12/13/nezha-windows-client.html" target="_blank" rel="noopener noreferrer">\u54EA\u5412\u63A2\u9488 - Windows \u5BA2\u6237\u7AEF\u5B89\u88C5</a> (Chinese)<br><br></li></ul><h3 id="installing-agent-on-synology-dsm" tabindex="-1">Installing Agent on Synology DSM <a class="header-anchor" href="#installing-agent-on-synology-dsm" aria-hidden="true">#</a></h3><ul><li><p>Please refer to the community article:<br><a href="https://blog.mitsea.com/3929551d08bd4bb0a8baa453e2d92b0c/" target="_blank" rel="noopener noreferrer">\u7FA4\u6656 DSM 7.x \u5B89\u88C5 \u54EA\u5412\u76D1\u63A7 Agent</a> (Chinese)<br><a href="https://wl.gta5pdx.cn/archives/546/" target="_blank" rel="noopener noreferrer">\u54EA\u5412\u63A2\u9488\u2014\u2014\u7FA4\u6656\u5BA2\u6237\u7AEF\uFF08\u88AB\u63A7\u7AEF\uFF09\u5B89\u88C5\u6559\u7A0B</a> (Chinese)</p></li><li><p>Using Systemd <em>Only available on DSM7</em>:</p><div class="language-sh"><pre><code># Path of the agent binary file.
|
|
||||||
EXEC="/PATH/TO/nezha-agent"
|
|
||||||
# Path of the agent's log.
|
|
||||||
LOG="\${EXEC}.log"
|
|
||||||
# Extend arguments, can be blank.
|
|
||||||
ARGS="--disable-command-execute"
|
|
||||||
# The address of nezha server's GRPC.
|
|
||||||
SERVER="HOST_OR_IP:GRPC_PORT"
|
|
||||||
# The token of host.
|
|
||||||
SECRET="APP_SECRET"
|
|
||||||
# Specify \`run_as\` user. * Strongly suggest NOT use \`root\`! *
|
|
||||||
RUN_USER="nezha"
|
|
||||||
# Create the service file.
|
|
||||||
cat << EOF > /usr/lib/systemd/system/nezha.service
|
|
||||||
[Unit]
|
|
||||||
Description=Nezha Agent Service
|
|
||||||
After=network.target
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
ExecStart=/bin/nohup \${EXEC} \${ARGS} -s \${SERVER} -p \${SECRET} &>> \${LOG} &
|
|
||||||
ExecStop=ps -fe |grep nezha-agent|awk '{print \\$2}'|xargs kill
|
|
||||||
User=\${RUN_USER}
|
|
||||||
Restart=on-abort
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
# Reload services
|
|
||||||
systemctl daemon-reload
|
|
||||||
# Start the agent service
|
|
||||||
systemctl start nezha
|
|
||||||
# Enable auto-start
|
|
||||||
systemctl enable nezha
|
|
||||||
</code></pre></div><p>\u203C\uFE0FDO IT WHEN YOU HAVE MODIFIED THE ENVS\u203C\uFE0F</p><p>Using <code>root</code> to execute command above, that's all.</p></li></ul><br><h3 id="installing-agent-on-macos" tabindex="-1">Installing Agent on MacOS <a class="header-anchor" href="#installing-agent-on-macos" aria-hidden="true">#</a></h3><p><em><strong>This section is adapted from <a href="https://blog.mitsea.com/e796f93db38d49e4b18df234c6ee75f5" target="_blank" rel="noopener noreferrer">Mitsea Blog</a>, with permission from the original author</strong></em><br><br></p><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>If you are prompted with "macOS cannot verify this app" during installation, please go to system settings to allow the app to run.</p></div><ul><li>First add a server in the admin panel</li><li>Go to the <a href="https://github.com/naiba/nezha/releases" target="_blank" rel="noopener noreferrer">Release</a> page to download the Agent binary and choose whether to download the darwin amd64 or arm64 Agent depending on the CPU architecture<br> For example, download the amd64 version for Intel CPU and the arm64 version for Apple Silicon. After downloading, extract the Agent binary file, e.g. to the Download folder</li><li>Create a new file named <code>nezha_agent.plist</code> and save it, edit the contents of the file:</li></ul><div class="language-xml"><pre><code><span class="token prolog"><?xml version="1.0" encoding="UTF-8"?></span>
|
|
||||||
<span class="token doctype"><span class="token punctuation"><!</span><span class="token doctype-tag">DOCTYPE</span> <span class="token name">plist</span> <span class="token name">PUBLIC</span> <span class="token string">"-//Apple//DTD PLIST 1.0//EN"</span> <span class="token string">"http://www.apple.com/DTDs/PropertyList-1.0.dtd"</span><span class="token punctuation">></span></span>
|
|
||||||
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>plist</span> <span class="token attr-name">version</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>1.0<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
|
|
||||||
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dict</span><span class="token punctuation">></span></span>
|
|
||||||
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>key</span><span class="token punctuation">></span></span>KeepAlive<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>key</span><span class="token punctuation">></span></span>
|
|
||||||
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>true</span><span class="token punctuation">/></span></span>
|
|
||||||
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>key</span><span class="token punctuation">></span></span>Label<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>key</span><span class="token punctuation">></span></span>
|
|
||||||
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>string</span><span class="token punctuation">></span></span>nezha_agent<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>string</span><span class="token punctuation">></span></span>
|
|
||||||
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>key</span><span class="token punctuation">></span></span>Program<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>key</span><span class="token punctuation">></span></span>
|
|
||||||
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>string</span><span class="token punctuation">></span></span>Change the path of the Agent binary here, e.g. /Users/123/Downloads/nezha-agent<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>string</span><span class="token punctuation">></span></span>
|
|
||||||
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>key</span><span class="token punctuation">></span></span>ProgramArguments<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>key</span><span class="token punctuation">></span></span>
|
|
||||||
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>array</span><span class="token punctuation">></span></span>
|
|
||||||
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>string</span><span class="token punctuation">></span></span>Change the path of the Agent binary here, e.g. /Users/123/Downloads/nezha-agent<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>string</span><span class="token punctuation">></span></span>
|
|
||||||
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>string</span><span class="token punctuation">></span></span>--password<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>string</span><span class="token punctuation">></span></span>
|
|
||||||
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>string</span><span class="token punctuation">></span></span>Communication Secret, eg: 529664783eeb23cc25<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>string</span><span class="token punctuation">></span></span>
|
|
||||||
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>string</span><span class="token punctuation">></span></span>--server<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>string</span><span class="token punctuation">></span></span>
|
|
||||||
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>string</span><span class="token punctuation">></span></span>Communication URL and RPC port, eg:data.example.com:5555<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>string</span><span class="token punctuation">></span></span>
|
|
||||||
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>array</span><span class="token punctuation">></span></span>
|
|
||||||
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>key</span><span class="token punctuation">></span></span>RunAtLoad<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>key</span><span class="token punctuation">></span></span>
|
|
||||||
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>true</span><span class="token punctuation">/></span></span>
|
|
||||||
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dict</span><span class="token punctuation">></span></span>
|
|
||||||
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>plist</span><span class="token punctuation">></span></span>
|
|
||||||
</code></pre></div><ul><li>Use the following command in Terminal to load the plist file into launchd<br><strong>Be sure to change the file path</strong></li></ul><div class="language-shell"><pre><code>launchctl load /Users/123/Desktop/nezha_agent.plist
|
|
||||||
</code></pre></div><ul><li>Start Service</li></ul><div class="language-shell"><pre><code>launchctl start nezha_agent
|
|
||||||
</code></pre></div><ul><li>Check if the service is running</li></ul><div class="language-shell"><pre><code>launchctl list <span class="token operator">|</span> <span class="token function">grep</span> nezha_agent
|
|
||||||
</code></pre></div><ul><li>Stop service and remove</li></ul><div class="language-shell"><pre><code>launchctl stop nezha_agent
|
|
||||||
</code></pre></div><div class="language-shell"><pre><code>launchctl remove nezha_agent
|
|
||||||
</code></pre></div><br><h3 id="installing-agent-on-openwrt" tabindex="-1">Installing Agent on OpenWRT <a class="header-anchor" href="#installing-agent-on-openwrt" aria-hidden="true">#</a></h3><p><strong>How to solve various problems during the installation process in one step</strong></p><ul><li>Please refer to the project:<br><a href="https://github.com/dysf888/NZ-OpenWrt" target="_blank" rel="noopener noreferrer">NZ-OpenWrt</a> (Chinese) <br></li></ul><p><strong>How to make the old version of OpenWRT/LEDE self-boot?</strong></p><ul><li>Please refer to the project:<br><a href="https://github.com/Erope/openwrt_nezha" target="_blank" rel="noopener noreferrer">\u54EA\u5412\u76D1\u63A7 For OpenWRT</a> (Chinese) <br></li></ul><p><strong>How to make the new version of OpenWRT self-boot? By @\u827E\u65AF\u5FB7\u65AF</strong></p><ul><li>First download the corresponding binary from the release, unzip the zip package and place it in <code>/root</code></li><li>Then run <code>chmod +x /root/nezha-agent</code> to give it execute access, create file <code>/etc/init.d/nezha-service</code>\uFF1A</li></ul><div class="language-shell"><pre><code><span class="token shebang important">#!/bin/sh /etc/rc.common</span>
|
|
||||||
|
|
||||||
<span class="token assign-left variable">START</span><span class="token operator">=</span><span class="token number">99</span>
|
|
||||||
<span class="token assign-left variable">USE_PROCD</span><span class="token operator">=</span><span class="token number">1</span>
|
|
||||||
|
|
||||||
<span class="token function-name function">start_service</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
||||||
procd_open_instance
|
|
||||||
procd_set_param <span class="token builtin class-name">command</span> /root/nezha-agent -s data.example.com:5555 -p secreat -d
|
|
||||||
procd_set_param respawn
|
|
||||||
procd_close_instance
|
|
||||||
<span class="token punctuation">}</span>
|
|
||||||
|
|
||||||
<span class="token function-name function">stop_service</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
||||||
<span class="token function">killall</span> nezha-agent
|
|
||||||
<span class="token punctuation">}</span>
|
|
||||||
|
|
||||||
<span class="token function-name function">restart</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
|
||||||
stop
|
|
||||||
<span class="token function">sleep</span> <span class="token number">2</span>
|
|
||||||
start
|
|
||||||
<span class="token punctuation">}</span>
|
|
||||||
</code></pre></div><ul><li>Give it permission to execute: <code>chmod +x /etc/init.d/nezha-service</code></li><li>Start the service <code>/etc/init.d/nezha-service enable && /etc/init.d/nezha-service start</code><br><br></li></ul><h2 id="faq" tabindex="-1">FAQ <a class="header-anchor" href="#faq" aria-hidden="true">#</a></h2><h3 id="is-there-a-docker-image-for-agent" tabindex="-1">Is there a Docker image for Agent? <a class="header-anchor" href="#is-there-a-docker-image-for-agent" aria-hidden="true">#</a></h3><p><strong>There is currently no Docker image for Agent.</strong><br> The Agent is designed to be the opposite of the Dashboard, in that the Dashboard is designed to work without affecting the server as much as possible, while the Agent needs to execute monitoring services and run commands in the server.<br> Putting the Agent in a container does continue to execute monitoring services, but features such as WebShell do not work, so we do not provide Docker image of the Agent.</p>`,52),p=[o];function l(i,c,r,u,g,h){return t(),a("div",null,p)}var m=n(e,[["render",l]]);export{k as __pageData,m as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as n,c as a,o as t,a as s}from"./app.38e99b9a.js";const k='{"title":"Install Agent using one-click script","description":"","frontmatter":{},"headers":[{"level":2,"title":"Install Agent using one-click script","slug":"install-agent-using-one-click-script"},{"level":3,"title":"Preparation","slug":"preparation"},{"level":3,"title":"One-click installation on Linux (Ubuntu, Debian, CentOS)","slug":"one-click-installation-on-linux-ubuntu-debian-centos"},{"level":3,"title":"One-click installation on Windows","slug":"one-click-installation-on-windows"},{"level":2,"title":"Other ways to install Agent","slug":"other-ways-to-install-agent"},{"level":3,"title":"Installing Agent on Linux (Ubuntu, Debian, CentOS)","slug":"installing-agent-on-linux-ubuntu-debian-centos"},{"level":3,"title":"Installing Agent on other Linux (such as alpine use oprec not systemd)","slug":"installing-agent-on-other-linux-such-as-alpine-use-oprec-not-systemd"},{"level":3,"title":"Installing Agent on Windows","slug":"installing-agent-on-windows"},{"level":3,"title":"Installing Agent on Synology DSM","slug":"installing-agent-on-synology-dsm"},{"level":3,"title":"Installing Agent on MacOS","slug":"installing-agent-on-macos"},{"level":3,"title":"Installing Agent on OpenWRT","slug":"installing-agent-on-openwrt"},{"level":2,"title":"FAQ","slug":"faq"},{"level":3,"title":"Is there a Docker image for Agent?","slug":"is-there-a-docker-image-for-agent"}],"relativePath":"en_US/guide/agent.md","lastUpdated":1682159272000}',e={},o=s("",52),p=[o];function l(i,c,r,u,g,h){return t(),a("div",null,p)}var m=n(e,[["render",l]]);export{k as __pageData,m as default};
|
|
||||||
@@ -0,0 +1,134 @@
|
|||||||
|
import{_ as s,o as n,c as a,R as l}from"./chunks/framework.1625126e.js";const h=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/agent.md","filePath":"en_US/guide/agent.md","lastUpdated":1687190167000}'),o={name:"en_US/guide/agent.md"},e=l(`<p><strong>The service in the monitored server is called Agent. This document will describe how to install the Agent on the monitored server and connect it with Dashboard</strong><br><br></p><h2 id="install-agent-using-one-click-script" tabindex="-1">Install Agent using one-click script <a class="header-anchor" href="#install-agent-using-one-click-script" aria-label="Permalink to "Install Agent using one-click script""></a></h2><p>Nezha Monitoring now supports one-click installation of the Agent on Windows and Linux. Follow the steps in this document and you can easily deploy it on your server<br><br></p><h3 id="preparation" tabindex="-1">Preparation <a class="header-anchor" href="#preparation" aria-label="Permalink to "Preparation""></a></h3><p>First of all, you need to set up the communication domain name in the settings page of the admin panel, this domain name can not connect to the CDN, here is the sample communication domain name "data.example.com" mentioned earlier for demonstration<br> Enter the administration panel, go to the "Settings" page, in the item "CDN Bypassed Domain/IP ", fill in the communication domain name, and then click "Save"<br><br></p><h3 id="one-click-installation-on-linux-ubuntu-debian-centos" tabindex="-1">One-click installation on Linux (Ubuntu, Debian, CentOS) <a class="header-anchor" href="#one-click-installation-on-linux-ubuntu-debian-centos" aria-label="Permalink to "One-click installation on Linux (Ubuntu, Debian, CentOS)""></a></h3><ul><li>First add a server in the admin panel</li><li>Click on the green Linux icon button next to the newly added server and copy the one-click installation command</li><li>Run the copied one-click installation command on the monitored server, wait for the installation to complete, and then return to the Dashboard home page to see if the server is online.<br><br></li></ul><h3 id="one-click-installation-on-windows" tabindex="-1">One-click installation on Windows <a class="header-anchor" href="#one-click-installation-on-windows" aria-label="Permalink to "One-click installation on Windows""></a></h3><ul><li>First add a server in the admin panel</li><li>Click on the green Linux icon button next to the newly added server and copy the one-click installation command</li><li>Login to Windows Server, open PowerShell, and run the copied installation command in PowerShell</li><li>If you encounter the prompt "Implement Policy Change" please select Y</li><li>Wait for the installation to complete and return to the Dashboard home page to see if the server is online<br><br><br><br></li></ul><h2 id="other-ways-to-install-agent" tabindex="-1">Other ways to install Agent <a class="header-anchor" href="#other-ways-to-install-agent" aria-label="Permalink to "Other ways to install Agent""></a></h2><br><h3 id="installing-agent-on-linux-ubuntu-debian-centos" tabindex="-1">Installing Agent on Linux (Ubuntu, Debian, CentOS) <a class="header-anchor" href="#installing-agent-on-linux-ubuntu-debian-centos" aria-label="Permalink to "Installing Agent on Linux (Ubuntu, Debian, CentOS)""></a></h3><ul><li>First add a server in the admin panel</li><li>In the monitored server, run the script:</li></ul><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">curl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-L</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">https://raw.githubusercontent.com/naiba/nezha/master/script/install_en.sh</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-o</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">nezha.sh</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&&</span><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">chmod</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">+x</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">nezha.sh</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&&</span><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">sudo</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">./nezha.sh</span></span></code></pre></div><ul><li><p>Select “Install_agent”</p></li><li><p>Input the communication domain name, e.g. "data.example.com"</p></li><li><p>Input RPC port, default is 5555</p></li><li><p>Input the Agent Secret, which
Line truncated
|
||||||
|
<span class="line"><span style="color:#C3E88D;">#!/sbin/openrc-run</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">SERVER="" #Dashboard address ip:port</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">SECRET="" #SECRET</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">TLS="" # Enable tls? yes:"--tls" no:""</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">NZ_BASE_PATH="/opt/nezha"</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">NZ_AGENT_PATH="</span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">NZ_BASE_PATH</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;">/agent"</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">pidfile="/run/</span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">RC_SVCNAME</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;">.pid"</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">command="/opt/nezha/agent/nezha-agent"</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">command_args="-s </span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">SERVER</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;"> -p </span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">SECRET</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">TLS</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;">"</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">command_background=true</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">depend() {</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> need net</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">}</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">checkconfig() {</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> GITHUB_URL="github.com"</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> if [ ! -f "</span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">NZ_AGENT_PATH</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;">/nezha-agent" ]; then</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> if [[ </span><span style="color:#89DDFF;">$(</span><span style="color:#FFCB6B;">uname</span><span style="color:#C3E88D;"> -m </span><span style="color:#89DDFF;">|</span><span style="color:#C3E88D;"> </span><span style="color:#FFCB6B;">grep</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">'</span><span style="color:#C3E88D;">x86_64</span><span style="color:#89DDFF;">')</span><span style="color:#C3E88D;"> != "" ]]; then</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> os_arch="amd64"</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> elif [[ </span><span style="color:#89DDFF;">$(</span><span style="color:#FFCB6B;">uname</span><span style="color:#C3E88D;"> -m </span><span style="color:#89DDFF;">|</span><span style="color:#C3E88D;"> </span><span style="color:#FFCB6B;">grep</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">'</span><span style="color:#C3E88D;">i386\\|i686</span><span style="color:#89DDFF;">')</span><span style="color:#C3E88D;"> != "" ]]; then</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> os_arch="386"</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> elif [[ </span><span style="color:#89DDFF;">$(</span><span style="color:#FFCB6B;">uname</span><span style="color:#C3E88D;"> -m </span><span style="color:#89DDFF;">|</span><span style="color:#C3E88D;"> </span><span style="color:#FFCB6B;">grep</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">'</span><span style="color:#C3E88D;">aarch64\\|armv8b\\|armv8l</span><span style="color:#89DDFF;">')</span><span style="color:#C3E88D;"> != "" ]]; then</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> os_arch="arm64"</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> elif [[ </span><span style="color:#89DDFF;">$(</span><span style="color:#FFCB6B;">uname</span><span style="color:#C3E88D;"> -m </span><span style="color:#89DDFF;">|</span><span style="color:#C3E88D;"> </span><span style="color:#FFCB6B;">grep</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">'</span><span style="color:#C3E88D;">arm</span><span style="color:#89DDFF;">')</span><span style="color:#C3E88D;"> != "" ]]; then</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> os_arch="arm"</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> elif [[ </span><span style="color:#89DDFF;">$(</span><span style="color:#FFCB6B;">uname</span><span style="color:#C3E88D;"> -m </span><span style="color:#89DDFF;">|</span><span style="color:#C3E88D;"> </span><span style="color:#FFCB6B;">grep</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">'</span><span style="color:#C3E88D;">s390x</span><span style="color:#89DDFF;">')</span><span style="color:#C3E88D;"> != "" ]]; then</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> os_arch="s390x"</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> elif [[ </span><span style="color:#89DDFF;">$(</span><span style="color:#FFCB6B;">uname</span><span style="color:#C3E88D;"> -m </span><span style="color:#89DDFF;">|</span><span style="color:#C3E88D;"> </span><span style="color:#FFCB6B;">grep</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">'</span><span style="color:#C3E88D;">riscv64</span><span style="color:#89DDFF;">')</span><span style="color:#C3E88D;"> != "" ]]; then</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> os_arch="riscv64"</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> fi</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> local version=</span><span style="color:#89DDFF;">$(</span><span style="color:#FFCB6B;">curl</span><span style="color:#C3E88D;"> -m </span><span style="color:#F78C6C;">10</span><span style="color:#C3E88D;"> -sL </span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">https://api.github.com/repos/naiba/nezha/releases/latest</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">|</span><span style="color:#C3E88D;"> </span><span style="color:#FFCB6B;">grep</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">tag_name</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">|</span><span style="color:#C3E88D;"> </span><span style="color:#FFCB6B;">head</span><span style="color:#C3E88D;"> -n </span><span style="color:#F78C6C;">1</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">|</span><span style="color:#C3E88D;"> </span><span style="color:#FFCB6B;">awk</span><span style="color:#C3E88D;"> -F </span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">:</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">'</span><span style="color:#C3E88D;">{print $2}</span><span style="color:#89DDFF;">'</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">|</span><span style="color:#C3E88D;"> </span><span style="color:#FFCB6B;">sed</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">'</span><span style="color:#C3E88D;">s/\\"//g;s/,//g;s/ //g</span><span style="color:#89DDFF;">')</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> if [ ! -n "</span><span style="color:#A6ACCD;">$version</span><span style="color:#C3E88D;">" ]; then</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> version=</span><span style="color:#89DDFF;">$(</span><span style="color:#FFCB6B;">curl</span><span style="color:#C3E88D;"> -m </span><span style="color:#F78C6C;">10</span><span style="color:#C3E88D;"> -sL </span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">https://fastly.jsdelivr.net/gh/naiba/nezha/</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">|</span><span style="color:#C3E88D;"> </span><span style="color:#FFCB6B;">grep</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">option\\.value</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">|</span><span style="color:#C3E88D;"> </span><span style="color:#FFCB6B;">awk</span><span style="color:#C3E88D;"> -F </span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">'</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">'</span><span style="color:#C3E88D;">{print $2}</span><span style="color:#89DDFF;">'</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">|</span><span style="color:#C3E88D;"> </span><span style="color:#FFCB6B;">sed</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">'</span><span style="color:#C3E88D;">s/naiba\\/nezha@/v/g</span><span style="color:#89DDFF;">')</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> fi</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> if [ ! -n "</span><span style="color:#A6ACCD;">$version</span><span style="color:#C3E88D;">" ]; then</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> version=</span><span style="color:#89DDFF;">$(</span><span style="color:#FFCB6B;">curl</span><span style="color:#C3E88D;"> -m </span><span style="color:#F78C6C;">10</span><span style="color:#C3E88D;"> -sL </span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">https://gcore.jsdelivr.net/gh/naiba/nezha/</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">|</span><span style="color:#C3E88D;"> </span><span style="color:#FFCB6B;">grep</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">option\\.value</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">|</span><span style="color:#C3E88D;"> </span><span style="color:#FFCB6B;">awk</span><span style="color:#C3E88D;"> -F </span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">'</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">'</span><span style="color:#C3E88D;">{print $2}</span><span style="color:#89DDFF;">'</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">|</span><span style="color:#C3E88D;"> </span><span style="color:#FFCB6B;">sed</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">'</span><span style="color:#C3E88D;">s/naiba\\/nezha@/v/g</span><span style="color:#89DDFF;">')</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> fi</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> if [ ! -n "</span><span style="color:#A6ACCD;">$version</span><span style="color:#C3E88D;">" ]; then</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> echo -e "Failed to get the version number, please check if the network can connect to https://api.github.com/repos/naiba/nezha/releases/latest"</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> return 0</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> else</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> echo -e "The current latest version is: </span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">version</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;">"</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> fi</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> wget -t 2 -T 10 -O nezha-agent_linux_</span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">os_arch</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;">.zip https://</span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">GITHUB_URL</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;">/naiba/nezha/releases/download/</span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">version</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;">/nezha-agent_linux_</span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">os_arch</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;">.zip >/dev/null 2>&1</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> if [[ </span><span style="color:#A6ACCD;">$?</span><span style="color:#C3E88D;"> != 0 ]]; then</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> echo -e "Release download failed, please check if the network can connect to </span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">GITHUB_URL</span><span style="color:#89DDFF;">}\${</span><span style="color:#A6ACCD;">plain</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;">"</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> return 0</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> fi</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> mkdir -p </span><span style="color:#A6ACCD;">$NZ_AGENT_PATH</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> chmod 755 -R </span><span style="color:#A6ACCD;">$NZ_AGENT_PATH</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> unzip -qo nezha-agent_linux_</span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">os_arch</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;">.zip && mv nezha-agent </span><span style="color:#A6ACCD;">$NZ_AGENT_PATH</span><span style="color:#C3E88D;"> && rm -rf nezha-agent_linux_</span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">os_arch</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;">.zip README.md</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> fi</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> if [ ! -x "</span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">NZ_AGENT_PATH</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;">/nezha-agent" ]; then</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> chmod +x </span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">NZ_AGENT_PATH</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;">/nezha-agent</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> fi</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">}</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">start_pre() {</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> if [ "</span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">RC_CMD</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;">" != "restart" ]; then</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> checkconfig || return </span><span style="color:#A6ACCD;">$?</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;"> fi</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">}</span></span>
|
||||||
|
<span class="line"><span style="color:#89DDFF;">EOF</span></span></code></pre></div><ul><li><p>Add execute permission</p><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">chmod</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">+x</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">/etc/init.d/nezha-agent</span></span></code></pre></div></li><li><p>Run Nezha-Agent</p><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">rc-service</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">nezha-agent-hy</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">start</span></span></code></pre></div></li><li><p>Set self-start after boot</p><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">rc-update</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">add</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">nezha-agent</span></span></code></pre></div></li></ul><h3 id="installing-agent-on-windows" tabindex="-1">Installing Agent on Windows <a class="header-anchor" href="#installing-agent-on-windows" aria-label="Permalink to "Installing Agent on Windows""></a></h3><ul><li>Please refer to the community article:<br><a href="https://nyko.me/2020/12/13/nezha-windows-client.html" target="_blank" rel="noreferrer">哪吒探针 - Windows 客户端安装</a> (Chinese)<br><br></li></ul><h3 id="installing-agent-on-synology-dsm" tabindex="-1">Installing Agent on Synology DSM <a class="header-anchor" href="#installing-agent-on-synology-dsm" aria-label="Permalink to "Installing Agent on Synology DSM""></a></h3><ul><li><p>Please refer to the community article:<br><a href="https://blog.mitsea.com/3929551d08bd4bb0a8baa453e2d92b0c/" target="_blank" rel="noreferrer">群晖 DSM 7.x 安装 哪吒监控 Agent</a> (Chinese)<br><a href="https://wl.gta5pdx.cn/archives/546/" target="_blank" rel="noreferrer">哪吒探针——群晖客户端(被控端)安装教程</a> (Chinese)</p></li><li><p>Using Systemd <em>Only available on DSM7</em>:</p><div class="language-sh"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;"># Path of the agent binary file.</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;">EXEC</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">/PATH/TO/nezha-agent</span><span style="color:#89DDFF;">"</span></span>
|
||||||
|
<span class="line"><span style="color:#676E95;font-style:italic;"># Path of the agent's log.</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;">LOG</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">"\${</span><span style="color:#A6ACCD;">EXEC</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;">.log</span><span style="color:#89DDFF;">"</span></span>
|
||||||
|
<span class="line"><span style="color:#676E95;font-style:italic;"># Extend arguments, can be blank.</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;">ARGS</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">--disable-command-execute</span><span style="color:#89DDFF;">"</span></span>
|
||||||
|
<span class="line"><span style="color:#676E95;font-style:italic;"># The address of nezha server's GRPC.</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;">SERVER</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">HOST_OR_IP:GRPC_PORT</span><span style="color:#89DDFF;">"</span></span>
|
||||||
|
<span class="line"><span style="color:#676E95;font-style:italic;"># The token of host.</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;">SECRET</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">APP_SECRET</span><span style="color:#89DDFF;">"</span></span>
|
||||||
|
<span class="line"><span style="color:#676E95;font-style:italic;"># Specify \`run_as\` user. * Strongly suggest NOT use \`root\`! *</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;">RUN_USER</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">nezha</span><span style="color:#89DDFF;">"</span></span>
|
||||||
|
<span class="line"><span style="color:#676E95;font-style:italic;"># Create the service file.</span></span>
|
||||||
|
<span class="line"><span style="color:#FFCB6B;">cat</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"><<</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">EOF</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">></span><span style="color:#A6ACCD;"> /usr/lib/systemd/system/nezha.service</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">[Unit]</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">Description=Nezha Agent Service</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">After=network.target</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">[Service]</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">Type=simple</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">ExecStart=/bin/nohup </span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">EXEC</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;"> </span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">ARGS</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;"> -s </span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">SERVER</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;"> -p </span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">SECRET</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;"> &>> </span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">LOG</span><span style="color:#89DDFF;">}</span><span style="color:#C3E88D;"> &</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">ExecStop=ps -fe |grep nezha-agent|awk '{print </span><span style="color:#A6ACCD;">\\$</span><span style="color:#C3E88D;">2}'|xargs kill</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">User=</span><span style="color:#89DDFF;">\${</span><span style="color:#A6ACCD;">RUN_USER</span><span style="color:#89DDFF;">}</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">Restart=on-abort</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">[Install]</span></span>
|
||||||
|
<span class="line"><span style="color:#C3E88D;">WantedBy=multi-user.target</span></span>
|
||||||
|
<span class="line"><span style="color:#89DDFF;">EOF</span></span>
|
||||||
|
<span class="line"><span style="color:#676E95;font-style:italic;"># Reload services</span></span>
|
||||||
|
<span class="line"><span style="color:#FFCB6B;">systemctl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">daemon-reload</span></span>
|
||||||
|
<span class="line"><span style="color:#676E95;font-style:italic;"># Start the agent service</span></span>
|
||||||
|
<span class="line"><span style="color:#FFCB6B;">systemctl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">start</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">nezha</span></span>
|
||||||
|
<span class="line"><span style="color:#676E95;font-style:italic;"># Enable auto-start</span></span>
|
||||||
|
<span class="line"><span style="color:#FFCB6B;">systemctl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">enable</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">nezha</span></span></code></pre></div><p>‼️DO IT WHEN YOU HAVE MODIFIED THE ENVS‼️</p><p>Using <code>root</code> to execute command above, that's all.</p></li></ul><br><h3 id="installing-agent-on-macos" tabindex="-1">Installing Agent on MacOS <a class="header-anchor" href="#installing-agent-on-macos" aria-label="Permalink to "Installing Agent on MacOS""></a></h3><p><em><strong>This section is adapted from <a href="https://blog.mitsea.com/e796f93db38d49e4b18df234c6ee75f5" target="_blank" rel="noreferrer">Mitsea Blog</a>, with permission from the original author</strong></em><br><br></p><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>If you are prompted with "macOS cannot verify this app" during installation, please go to system settings to allow the app to run.</p></div><ul><li>First add a server in the admin panel</li><li>Go to the <a href="https://github.com/naiba/nezha/releases" target="_blank" rel="noreferrer">Release</a> page to download the Agent binary and choose whether to download the darwin amd64 or arm64 Agent depending on the CPU architecture<br> For example, download the amd64 version for Intel CPU and the arm64 version for Apple Silicon. After downloading, extract the Agent binary file, e.g. to the Download folder</li><li>Create a new file named <code>nezha_agent.plist</code> and save it, edit the contents of the file:</li></ul><div class="language-xml"><button title="Copy Code" class="copy"></button><span class="lang">xml</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#89DDFF;"><?</span><span style="color:#F07178;">xml</span><span style="color:#C792EA;"> version</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">1.0</span><span style="color:#89DDFF;">"</span><span style="color:#C792EA;"> encoding</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">UTF-8</span><span style="color:#89DDFF;">"</span><span style="color:#89DDFF;">?></span></span>
|
||||||
|
<span class="line"><span style="color:#89DDFF;"><!</span><span style="color:#F78C6C;">DOCTYPE</span><span style="color:#89DDFF;"> </span><span style="color:#A6ACCD;">plist</span><span style="color:#89DDFF;"> PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"></span></span>
|
||||||
|
<span class="line"><span style="color:#89DDFF;"><</span><span style="color:#F07178;">plist</span><span style="color:#89DDFF;"> </span><span style="color:#C792EA;">version</span><span style="color:#89DDFF;">=</span><span style="color:#89DDFF;">"</span><span style="color:#C3E88D;">1.0</span><span style="color:#89DDFF;">"</span><span style="color:#89DDFF;">></span></span>
|
||||||
|
<span class="line"><span style="color:#89DDFF;"><</span><span style="color:#F07178;">dict</span><span style="color:#89DDFF;">></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"><</span><span style="color:#F07178;">key</span><span style="color:#89DDFF;">></span><span style="color:#A6ACCD;">KeepAlive</span><span style="color:#89DDFF;"></</span><span style="color:#F07178;">key</span><span style="color:#89DDFF;">></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"><</span><span style="color:#F07178;">true</span><span style="color:#89DDFF;">/></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"><</span><span style="color:#F07178;">key</span><span style="color:#89DDFF;">></span><span style="color:#A6ACCD;">Label</span><span style="color:#89DDFF;"></</span><span style="color:#F07178;">key</span><span style="color:#89DDFF;">></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"><</span><span style="color:#F07178;">string</span><span style="color:#89DDFF;">></span><span style="color:#A6ACCD;">nezha_agent</span><span style="color:#89DDFF;"></</span><span style="color:#F07178;">string</span><span style="color:#89DDFF;">></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"><</span><span style="color:#F07178;">key</span><span style="color:#89DDFF;">></span><span style="color:#A6ACCD;">Program</span><span style="color:#89DDFF;"></</span><span style="color:#F07178;">key</span><span style="color:#89DDFF;">></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"><</span><span style="color:#F07178;">string</span><span style="color:#89DDFF;">></span><span style="color:#A6ACCD;">Change the path of the Agent binary here, e.g. /Users/123/Downloads/nezha-agent</span><span style="color:#89DDFF;"></</span><span style="color:#F07178;">string</span><span style="color:#89DDFF;">></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"><</span><span style="color:#F07178;">key</span><span style="color:#89DDFF;">></span><span style="color:#A6ACCD;">ProgramArguments</span><span style="color:#89DDFF;"></</span><span style="color:#F07178;">key</span><span style="color:#89DDFF;">></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"><</span><span style="color:#F07178;">array</span><span style="color:#89DDFF;">></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"><</span><span style="color:#F07178;">string</span><span style="color:#89DDFF;">></span><span style="color:#A6ACCD;">Change the path of the Agent binary here, e.g. /Users/123/Downloads/nezha-agent</span><span style="color:#89DDFF;"></</span><span style="color:#F07178;">string</span><span style="color:#89DDFF;">></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"><</span><span style="color:#F07178;">string</span><span style="color:#89DDFF;">></span><span style="color:#A6ACCD;">--password</span><span style="color:#89DDFF;"></</span><span style="color:#F07178;">string</span><span style="color:#89DDFF;">></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"><</span><span style="color:#F07178;">string</span><span style="color:#89DDFF;">></span><span style="color:#A6ACCD;">Communication Secret, eg: 529664783eeb23cc25</span><span style="color:#89DDFF;"></</span><span style="color:#F07178;">string</span><span style="color:#89DDFF;">></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"><</span><span style="color:#F07178;">string</span><span style="color:#89DDFF;">></span><span style="color:#A6ACCD;">--server</span><span style="color:#89DDFF;"></</span><span style="color:#F07178;">string</span><span style="color:#89DDFF;">></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"><</span><span style="color:#F07178;">string</span><span style="color:#89DDFF;">></span><span style="color:#A6ACCD;">Communication URL and RPC port, eg:data.example.com:5555</span><span style="color:#89DDFF;"></</span><span style="color:#F07178;">string</span><span style="color:#89DDFF;">></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"></</span><span style="color:#F07178;">array</span><span style="color:#89DDFF;">></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"><</span><span style="color:#F07178;">key</span><span style="color:#89DDFF;">></span><span style="color:#A6ACCD;">RunAtLoad</span><span style="color:#89DDFF;"></</span><span style="color:#F07178;">key</span><span style="color:#89DDFF;">></span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"><</span><span style="color:#F07178;">true</span><span style="color:#89DDFF;">/></span></span>
|
||||||
|
<span class="line"><span style="color:#89DDFF;"></</span><span style="color:#F07178;">dict</span><span style="color:#89DDFF;">></span></span>
|
||||||
|
<span class="line"><span style="color:#89DDFF;"></</span><span style="color:#F07178;">plist</span><span style="color:#89DDFF;">></span></span></code></pre></div><ul><li>Use the following command in Terminal to load the plist file into launchd<br><strong>Be sure to change the file path</strong></li></ul><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">launchctl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">load</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">/Users/123/Desktop/nezha_agent.plist</span></span></code></pre></div><ul><li>Start Service</li></ul><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">launchctl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">start</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">nezha_agent</span></span></code></pre></div><ul><li>Check if the service is running</li></ul><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">launchctl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">list</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">|</span><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">grep</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">nezha_agent</span></span></code></pre></div><ul><li>Stop service and remove</li></ul><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">launchctl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">stop</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">nezha_agent</span></span></code></pre></div><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">launchctl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">remove</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">nezha_agent</span></span></code></pre></div><br><h3 id="installing-agent-on-openwrt" tabindex="-1">Installing Agent on OpenWRT <a class="header-anchor" href="#installing-agent-on-openwrt" aria-label="Permalink to "Installing Agent on OpenWRT""></a></h3><p><strong>How to solve various problems during the installation process in one step</strong></p><ul><li>Please refer to the project:<br><a href="https://github.com/dysf888/NZ-OpenWrt" target="_blank" rel="noreferrer">NZ-OpenWrt</a> (Chinese) <br></li></ul><p><strong>How to make the old version of OpenWRT/LEDE self-boot?</strong></p><ul><li>Please refer to the project:<br><a href="https://github.com/Erope/openwrt_nezha" target="_blank" rel="noreferrer">哪吒监控 For OpenWRT</a> (Chinese) <br></li></ul><p><strong>How to make the new version of OpenWRT self-boot? By @艾斯德斯</strong></p><ul><li>First download the corresponding binary from the release, unzip the zip package and place it in <code>/root</code></li><li>Then run <code>chmod +x /root/nezha-agent</code> to give it execute access, create file <code>/etc/init.d/nezha-service</code>:</li></ul><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;">#!/bin/sh /etc/rc.common</span></span>
|
||||||
|
<span class="line"></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;">START</span><span style="color:#89DDFF;">=</span><span style="color:#F78C6C;">99</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;">USE_PROCD</span><span style="color:#89DDFF;">=</span><span style="color:#F78C6C;">1</span></span>
|
||||||
|
<span class="line"></span>
|
||||||
|
<span class="line"><span style="color:#82AAFF;">start_service</span><span style="color:#89DDFF;">()</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">procd_open_instance</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">procd_set_param</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">command</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">/root/nezha-agent</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-s</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">data.example.com:5555</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-p</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">secreat</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-d</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">procd_set_param</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">respawn</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">procd_close_instance</span></span>
|
||||||
|
<span class="line"><span style="color:#89DDFF;">}</span></span>
|
||||||
|
<span class="line"></span>
|
||||||
|
<span class="line"><span style="color:#82AAFF;">stop_service</span><span style="color:#89DDFF;">()</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">killall</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">nezha-agent</span></span>
|
||||||
|
<span class="line"><span style="color:#89DDFF;">}</span></span>
|
||||||
|
<span class="line"></span>
|
||||||
|
<span class="line"><span style="color:#82AAFF;">restart</span><span style="color:#89DDFF;">()</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">stop</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">sleep</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">2</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">start</span></span>
|
||||||
|
<span class="line"><span style="color:#89DDFF;">}</span></span></code></pre></div><ul><li>Give it permission to execute: <code>chmod +x /etc/init.d/nezha-service</code></li><li>Start the service <code>/etc/init.d/nezha-service enable && /etc/init.d/nezha-service start</code><br><br></li></ul><h2 id="faq" tabindex="-1">FAQ <a class="header-anchor" href="#faq" aria-label="Permalink to "FAQ""></a></h2><h3 id="is-there-a-docker-image-for-agent" tabindex="-1">Is there a Docker image for Agent? <a class="header-anchor" href="#is-there-a-docker-image-for-agent" aria-label="Permalink to "Is there a Docker image for Agent?""></a></h3><p><strong>There is currently no Docker image for Agent.</strong><br> The Agent is designed to be the opposite of the Dashboard, in that the Dashboard is designed to work without affecting the server as much as possible, while the Agent needs to execute monitoring services and run commands in the server.<br> Putting the Agent in a container does continue to execute monitoring services, but features such as WebShell do not work, so we do not provide Docker image of the Agent.</p>`,52),p=[e];function t(r,c,i,D,y,C){return n(),a("div",null,p)}const u=s(o,[["render",t]]);export{h as __pageData,u as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as s,o as n,c as a,R as l}from"./chunks/framework.1625126e.js";const h=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/agent.md","filePath":"en_US/guide/agent.md","lastUpdated":1687190167000}'),o={name:"en_US/guide/agent.md"},e=l("",52),p=[e];function t(r,c,i,D,y,C){return n(),a("div",null,p)}const u=s(o,[["render",t]]);export{h as __pageData,u as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e,o as a,c as t,R as n}from"./chunks/framework.1625126e.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/agentq.md","filePath":"en_US/guide/agentq.md","lastUpdated":1687190167000}'),o={name:"en_US/guide/agentq.md"},i=n('<h2 id="why-the-ip-displayed-in-the-admin-panel-and-the-actual-ip-of-the-agent-are-not-the-same" tabindex="-1">Why the IP displayed in the admin panel and the actual IP of the Agent are not the same? <a class="header-anchor" href="#why-the-ip-displayed-in-the-admin-panel-and-the-actual-ip-of-the-agent-are-not-the-same" aria-label="Permalink to "Why the IP displayed in the admin panel and the actual IP of the Agent are not the same?""></a></h2><p>Please check <a href="/en_US/guide/dashboardq.html#why-the-ip-displayed-in-the-admin-panel-and-the-actual-ip-of-the-agent-are-not-the-same">Dashboard - Why the IP displayed in the admin panel and the actual IP of the Agent are not the same?</a></p><h2 id="error-on-one-click-script-installation" tabindex="-1">Error on one-click script installation <a class="header-anchor" href="#error-on-one-click-script-installation" aria-label="Permalink to "Error on one-click script installation""></a></h2><h3 id="curl-failed-to-connect-to-raw-githubusercontent-com" tabindex="-1">curl: Failed to connect to raw.githubusercontent.com... <a class="header-anchor" href="#curl-failed-to-connect-to-raw-githubusercontent-com" aria-label="Permalink to "curl: Failed to connect to raw.githubusercontent.com...""></a></h3><p>Please check if your server can connect to Github, try again, or check <a href="/en_US/guide/agent.html#other-ways-to-install-agent">Other ways to install Agent</a></p><h3 id="sudo-command-not-found" tabindex="-1">sudo: command not found <a class="header-anchor" href="#sudo-command-not-found" aria-label="Permalink to "sudo: command not found""></a></h3><p>Please install sudo first</p>',7),r=[i];function c(h,d,l,s,u,p){return a(),t("div",null,r)}const f=e(o,[["render",c]]);export{_ as __pageData,f as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e,o as a,c as t,R as n}from"./chunks/framework.1625126e.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/agentq.md","filePath":"en_US/guide/agentq.md","lastUpdated":1687190167000}'),o={name:"en_US/guide/agentq.md"},i=n("",7),r=[i];function c(h,d,l,s,u,p){return a(),t("div",null,r)}const f=e(o,[["render",c]]);export{_ as __pageData,f as default};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,c as t,o as a,a as n}from"./app.38e99b9a.js";const f='{"title":"Why the IP displayed in the admin panel and the actual IP of the Agent are not the same?","description":"","frontmatter":{},"headers":[{"level":2,"title":"Why the IP displayed in the admin panel and the actual IP of the Agent are not the same?","slug":"why-the-ip-displayed-in-the-admin-panel-and-the-actual-ip-of-the-agent-are-not-the-same"},{"level":2,"title":"Error on one-click script installation","slug":"error-on-one-click-script-installation"},{"level":3,"title":"curl: Failed to connect to raw.githubusercontent.com...","slug":"curl-failed-to-connect-to-raw-githubusercontent-com"},{"level":3,"title":"sudo: command not found","slug":"sudo-command-not-found"}],"relativePath":"en_US/guide/agentq.md","lastUpdated":1682159272000}',o={},i=n('<h2 id="why-the-ip-displayed-in-the-admin-panel-and-the-actual-ip-of-the-agent-are-not-the-same" tabindex="-1">Why the IP displayed in the admin panel and the actual IP of the Agent are not the same? <a class="header-anchor" href="#why-the-ip-displayed-in-the-admin-panel-and-the-actual-ip-of-the-agent-are-not-the-same" aria-hidden="true">#</a></h2><p>Please check <a href="/en_US/guide/dashboardq.html#why-the-ip-displayed-in-the-admin-panel-and-the-actual-ip-of-the-agent-are-not-the-same">Dashboard - Why the IP displayed in the admin panel and the actual IP of the Agent are not the same?</a></p><h2 id="error-on-one-click-script-installation" tabindex="-1">Error on one-click script installation <a class="header-anchor" href="#error-on-one-click-script-installation" aria-hidden="true">#</a></h2><h3 id="curl-failed-to-connect-to-raw-githubusercontent-com" tabindex="-1">curl: Failed to connect to <a href="http://raw.githubusercontent.com" target="_blank" rel="noopener noreferrer">raw.githubusercontent.com</a>... <a class="header-anchor" href="#curl-failed-to-connect-to-raw-githubusercontent-com" aria-hidden="true">#</a></h3><p>Please check if your server can connect to Github, try again, or check <a href="/en_US/guide/agent.html#other-ways-to-install-agent">Other ways to install Agent</a></p><h3 id="sudo-command-not-found" tabindex="-1">sudo: command not found <a class="header-anchor" href="#sudo-command-not-found" aria-hidden="true">#</a></h3><p>Please install sudo first</p>',7),r=[i];function h(d,l,c,s,u,p){return a(),t("div",null,r)}var _=e(o,[["render",h]]);export{f as __pageData,_ as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,c as t,o as a,a as n}from"./app.38e99b9a.js";const f='{"title":"Why the IP displayed in the admin panel and the actual IP of the Agent are not the same?","description":"","frontmatter":{},"headers":[{"level":2,"title":"Why the IP displayed in the admin panel and the actual IP of the Agent are not the same?","slug":"why-the-ip-displayed-in-the-admin-panel-and-the-actual-ip-of-the-agent-are-not-the-same"},{"level":2,"title":"Error on one-click script installation","slug":"error-on-one-click-script-installation"},{"level":3,"title":"curl: Failed to connect to raw.githubusercontent.com...","slug":"curl-failed-to-connect-to-raw-githubusercontent-com"},{"level":3,"title":"sudo: command not found","slug":"sudo-command-not-found"}],"relativePath":"en_US/guide/agentq.md","lastUpdated":1682159272000}',o={},i=n("",7),r=[i];function h(d,l,c,s,u,p){return a(),t("div",null,r)}var _=e(o,[["render",h]]);export{f as __pageData,_ as default};
|
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
import{_ as s,o as n,c as a,R as o}from"./chunks/framework.1625126e.js";const y=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/api.md","filePath":"en_US/guide/api.md","lastUpdated":1687190167000}'),t={name:"en_US/guide/api.md"},e=o(`<p><strong>Nezha Monitoring now supports querying the status information of the Agent in the Dashboard using the API</strong></p><h2 id="create-token" tabindex="-1">Create Token <a class="header-anchor" href="#create-token" aria-label="Permalink to "Create Token""></a></h2><p>API allows Token authentication method and Cookies authentication method<br> To create a new Token, after entering the admin panel, click on the avatar in the upper right corner and select "API Token" to enter the Token management page<br> Click "Add Token" and after customizing the notes, click "Add"<br> To delete a Token, please select the corresponding Token and click the delete icon on the right</p><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>Token is the authentication tool of API, it is very important for your Dashboard's information security, please don't leak your Token to others</p></div><h2 id="authentication-method" tabindex="-1">Authentication method <a class="header-anchor" href="#authentication-method" aria-label="Permalink to "Authentication method""></a></h2><p>Token authentication method:</p><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">Request Headers: </span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;">Authorization: Token</span></span></code></pre></div><h2 id="how-to-use" tabindex="-1">How to use <a class="header-anchor" href="#how-to-use" aria-label="Permalink to "How to use""></a></h2><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>The negative timestamp in the example below is (0000-00-00)<br> It is currently used to indicate that the Agent has never reported since the Dashboard went live<br> However, it is not recommended to use positivity or negativity to determine the status</p></div><div class="tip custom-block"><p class="custom-block-title">TIP</p><p><strong>The request method is <code>Get</code> and the return format is <code>JSON</code>.</strong></p></div><ul><li>Get a list of servers: <code>GET /api/v1/server/list?tag=</code><br> query: tag (ServerTag means the group of servers, if this value is provided, only the servers in this group are queried)</li></ul><p>JSON Return Example:</p><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">{</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "code": 0,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "message": "success",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "result": [</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> {</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "id": 1,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "name": "Server1",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "tag": "Tag1",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "last_active": 1653014667,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "ipv4": "1.1.1.1",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "ipv6": "",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "valid_ip": "1.1.1.1"</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> },</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> {</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "id": 2,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "name": "Server2",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "tag": "Tag2",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "last_active": -62135596800,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "ipv4": "",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "ipv6": "",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "valid_ip": ""</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> }</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> ]</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;">}</span></span></code></pre></div><ul><li>Get server details: <code>GET /api/v1/server/details?id=&tag=</code><br> query: id (ServerID. Multiple IDs are separated by commas, provide this value to query the server corresponding to the ID, while ignoring the tag value)<br> query: tag (ServerTag, if this value is provided, only the servers in this group are queried)</li></ul><p>JSON Return Example:</p><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">{</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "code": 0,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "message": "success",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "result": [</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> {</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "id": 1,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "name": "Server1",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "tag": "Tag1",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "last_active": 1653015042,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "ipv4": "1.1.1.1",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "ipv6": "",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "valid_ip": "1.1.1.1",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "host": {</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "Platform": "darwin",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "PlatformVersion": "12.3.1",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "CPU": [</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "Apple M1 Pro 1 Physical Core"</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> ],</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "MemTotal": 17179869184,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "DiskTotal": 2473496842240,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "SwapTotal": 0,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "Arch": "arm64",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "Virtualization": "",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "BootTime": 1652683962,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "CountryCode": "hk",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "Version": ""</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> },</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "status": {</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "CPU": 17.330210772540017,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "MemUsed": 14013841408,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "SwapUsed": 0,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "DiskUsed": 2335048912896,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "NetInTransfer": 2710273234,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "NetOutTransfer": 695454765,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "NetInSpeed": 10806,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "NetOutSpeed": 5303,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "Uptime": 331080,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "Load1": 5.23486328125,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "Load5": 4.873046875,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "Load15": 3.99267578125,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "TcpConnCount": 195,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "UdpConnCount": 70,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "ProcessCount": 437</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> }</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> },</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> {</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "id": 2,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "name": "Server2",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "tag": "Tag2",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "last_active": -62135596800,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "ipv4": "",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "ipv6": "",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "valid_ip": "",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "host": {</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "Platform": "",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "PlatformVersion": "",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "CPU": null,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "MemTotal": 0,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "DiskTotal": 0,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "SwapTotal": 0,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "Arch": "",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "Virtualization": "",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "BootTime": 0,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "CountryCode": "",</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "Version": ""</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> },</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "status": {</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "CPU": 0,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "MemUsed": 0,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "SwapUsed": 0,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "DiskUsed": 0,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "NetInTransfer": 0,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "NetOutTransfer": 0,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "NetInSpeed": 0,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "NetOutSpeed": 0,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "Uptime": 0,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "Load1": 0,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "Load5": 0,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "Load15": 0,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "TcpConnCount": 0,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "UdpConnCount": 0,</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> "ProcessCount": 0</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> }</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> }</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> ]</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;">}</span></span></code></pre></div>`,16),l=[e];function p(u,c,i,r,q,C){return n(),a("div",null,l)}const d=s(t,[["render",p]]);export{y as __pageData,d as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as s,o as n,c as a,R as o}from"./chunks/framework.1625126e.js";const y=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/api.md","filePath":"en_US/guide/api.md","lastUpdated":1687190167000}'),t={name:"en_US/guide/api.md"},e=o("",16),l=[e];function p(u,c,i,r,q,C){return n(),a("div",null,l)}const d=s(t,[["render",p]]);export{y as __pageData,d as default};
|
||||||
@@ -1,113 +0,0 @@
|
|||||||
import{_ as t,c as o,o as e,a as u}from"./app.38e99b9a.js";const v='{"title":"Create Token","description":"","frontmatter":{},"headers":[{"level":2,"title":"Create Token","slug":"create-token"},{"level":2,"title":"Authentication method","slug":"authentication-method"},{"level":2,"title":"How to use","slug":"how-to-use"}],"relativePath":"en_US/guide/api.md","lastUpdated":1682159272000}',n={},q=u(`<p><strong>Nezha Monitoring now supports querying the status information of the Agent in the Dashboard using the API</strong></p><h2 id="create-token" tabindex="-1">Create Token <a class="header-anchor" href="#create-token" aria-hidden="true">#</a></h2><p>API allows Token authentication method and Cookies authentication method<br> To create a new Token, after entering the admin panel, click on the avatar in the upper right corner and select "API Token" to enter the Token management page<br> Click "Add Token" and after customizing the notes, click "Add"<br> To delete a Token, please select the corresponding Token and click the delete icon on the right</p><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>Token is the authentication tool of API, it is very important for your Dashboard's information security, please don't leak your Token to others</p></div><h2 id="authentication-method" tabindex="-1">Authentication method <a class="header-anchor" href="#authentication-method" aria-hidden="true">#</a></h2><p>Token authentication method:</p><div class="language-"><pre><code>Request Headers:
|
|
||||||
Authorization: Token
|
|
||||||
</code></pre></div><h2 id="how-to-use" tabindex="-1">How to use <a class="header-anchor" href="#how-to-use" aria-hidden="true">#</a></h2><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>The negative timestamp in the example below is (0000-00-00)<br> It is currently used to indicate that the Agent has never reported since the Dashboard went live<br> However, it is not recommended to use positivity or negativity to determine the status</p></div><div class="tip custom-block"><p class="custom-block-title">TIP</p><p><strong>The request method is <code>Get</code> and the return format is <code>JSON</code>.</strong></p></div><ul><li>Get a list of servers: <code>GET /api/v1/server/list?tag=</code><br> query: tag (ServerTag means the group of servers, if this value is provided, only the servers in this group are queried)</li></ul><p>JSON Return Example:</p><div class="language-"><pre><code>{
|
|
||||||
"code": 0,
|
|
||||||
"message": "success",
|
|
||||||
"result": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"name": "Server1",
|
|
||||||
"tag": "Tag1",
|
|
||||||
"last_active": 1653014667,
|
|
||||||
"ipv4": "1.1.1.1",
|
|
||||||
"ipv6": "",
|
|
||||||
"valid_ip": "1.1.1.1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"name": "Server2",
|
|
||||||
"tag": "Tag2",
|
|
||||||
"last_active": -62135596800,
|
|
||||||
"ipv4": "",
|
|
||||||
"ipv6": "",
|
|
||||||
"valid_ip": ""
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
</code></pre></div><ul><li>Get server details: <code>GET /api/v1/server/details?id=&tag=</code><br> query: id (ServerID. Multiple IDs are separated by commas, provide this value to query the server corresponding to the ID, while ignoring the tag value)<br> query: tag (ServerTag, if this value is provided, only the servers in this group are queried)</li></ul><p>JSON Return Example:</p><div class="language-"><pre><code>{
|
|
||||||
"code": 0,
|
|
||||||
"message": "success",
|
|
||||||
"result": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"name": "Server1",
|
|
||||||
"tag": "Tag1",
|
|
||||||
"last_active": 1653015042,
|
|
||||||
"ipv4": "1.1.1.1",
|
|
||||||
"ipv6": "",
|
|
||||||
"valid_ip": "1.1.1.1",
|
|
||||||
"host": {
|
|
||||||
"Platform": "darwin",
|
|
||||||
"PlatformVersion": "12.3.1",
|
|
||||||
"CPU": [
|
|
||||||
"Apple M1 Pro 1 Physical Core"
|
|
||||||
],
|
|
||||||
"MemTotal": 17179869184,
|
|
||||||
"DiskTotal": 2473496842240,
|
|
||||||
"SwapTotal": 0,
|
|
||||||
"Arch": "arm64",
|
|
||||||
"Virtualization": "",
|
|
||||||
"BootTime": 1652683962,
|
|
||||||
"CountryCode": "hk",
|
|
||||||
"Version": ""
|
|
||||||
},
|
|
||||||
"status": {
|
|
||||||
"CPU": 17.330210772540017,
|
|
||||||
"MemUsed": 14013841408,
|
|
||||||
"SwapUsed": 0,
|
|
||||||
"DiskUsed": 2335048912896,
|
|
||||||
"NetInTransfer": 2710273234,
|
|
||||||
"NetOutTransfer": 695454765,
|
|
||||||
"NetInSpeed": 10806,
|
|
||||||
"NetOutSpeed": 5303,
|
|
||||||
"Uptime": 331080,
|
|
||||||
"Load1": 5.23486328125,
|
|
||||||
"Load5": 4.873046875,
|
|
||||||
"Load15": 3.99267578125,
|
|
||||||
"TcpConnCount": 195,
|
|
||||||
"UdpConnCount": 70,
|
|
||||||
"ProcessCount": 437
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"name": "Server2",
|
|
||||||
"tag": "Tag2",
|
|
||||||
"last_active": -62135596800,
|
|
||||||
"ipv4": "",
|
|
||||||
"ipv6": "",
|
|
||||||
"valid_ip": "",
|
|
||||||
"host": {
|
|
||||||
"Platform": "",
|
|
||||||
"PlatformVersion": "",
|
|
||||||
"CPU": null,
|
|
||||||
"MemTotal": 0,
|
|
||||||
"DiskTotal": 0,
|
|
||||||
"SwapTotal": 0,
|
|
||||||
"Arch": "",
|
|
||||||
"Virtualization": "",
|
|
||||||
"BootTime": 0,
|
|
||||||
"CountryCode": "",
|
|
||||||
"Version": ""
|
|
||||||
},
|
|
||||||
"status": {
|
|
||||||
"CPU": 0,
|
|
||||||
"MemUsed": 0,
|
|
||||||
"SwapUsed": 0,
|
|
||||||
"DiskUsed": 0,
|
|
||||||
"NetInTransfer": 0,
|
|
||||||
"NetOutTransfer": 0,
|
|
||||||
"NetInSpeed": 0,
|
|
||||||
"NetOutSpeed": 0,
|
|
||||||
"Uptime": 0,
|
|
||||||
"Load1": 0,
|
|
||||||
"Load5": 0,
|
|
||||||
"Load15": 0,
|
|
||||||
"TcpConnCount": 0,
|
|
||||||
"UdpConnCount": 0,
|
|
||||||
"ProcessCount": 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
</code></pre></div>`,16),a=[q];function i(r,s,d,l,c,p){return e(),o("div",null,a)}var m=t(n,[["render",i]]);export{v as __pageData,m as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as t,c as o,o as e,a as u}from"./app.38e99b9a.js";const v='{"title":"Create Token","description":"","frontmatter":{},"headers":[{"level":2,"title":"Create Token","slug":"create-token"},{"level":2,"title":"Authentication method","slug":"authentication-method"},{"level":2,"title":"How to use","slug":"how-to-use"}],"relativePath":"en_US/guide/api.md","lastUpdated":1682159272000}',n={},q=u("",16),a=[q];function i(r,s,d,l,c,p){return e(),o("div",null,a)}var m=t(n,[["render",i]]);export{v as __pageData,m as default};
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
import{_ as e,c as a,o as t,a as o}from"./app.38e99b9a.js";const m='{"title":"Preparations","description":"","frontmatter":{},"headers":[{"level":2,"title":"Preparations","slug":"preparations"},{"level":2,"title":"Get the Client ID and Client Secret on Github/Gitlab","slug":"get-the-client-id-and-client-secret-on-github-gitlab"},{"level":2,"title":"Installing Dashboard on the server","slug":"installing-dashboard-on-the-server"},{"level":2,"title":"Configure reverse proxy","slug":"configure-reverse-proxy"},{"level":2,"title":"Configuring SSL in the aaPanel","slug":"configuring-ssl-in-the-aapanel"},{"level":2,"title":"FAQ","slug":"faq"},{"level":3,"title":"What should I do if /terminal or /ws cannot be connected after HTTPS is enabled?","slug":"what-should-i-do-if-terminal-or-ws-cannot-be-connected-after-https-is-enabled"},{"level":3,"title":"I am not satisfied with the data modification or addition function provided by the Dashboard, what if I want to modify or add data myself?","slug":"i-am-not-satisfied-with-the-data-modification-or-addition-function-provided-by-the-dashboard-what-if-i-want-to-modify-or-add-data-myself"},{"level":3,"title":"What are each table or column in the database?","slug":"what-are-each-table-or-column-in-the-database"},{"level":3,"title":"Does Dashboard update automatically?","slug":"does-dashboard-update-automatically"},{"level":3,"title":"How do I update the Dashboard?","slug":"how-do-i-update-the-dashboard"}],"relativePath":"en_US/guide/dashboard.md","lastUpdated":1682159272000}',n={},s=o(`<h2 id="preparations" tabindex="-1">Preparations <a class="header-anchor" href="#preparations" aria-hidden="true">#</a></h2><p>To setup a Nezha monitorning Dashboard, you need these things:</p><ol><li>A VPS that can connect to the Internet, firewall and security policies need to open ports 8008 and 5555, otherwise it will be inaccessible and unable to receive data. A 1 core 512MB RAM server is sufficient for most usage scenarios</li><li>A domain name that has been set up with an A record that resolves to the Dashboard server IP</li></ol><div class="tip custom-block"><p class="custom-block-title">TIP</p><p>If you want to use CDN, please prepare two domains, one connect to CDN for public access, CDN needs to support WebSocket protocol; the other domain should not connect to CDN, use it as Agent to send data to Dashboard.<br> This document uses "<a href="http://cdn.example.com" target="_blank" rel="noopener noreferrer">cdn.example.com</a>" and "<a href="http://data.example.com" target="_blank" rel="noopener noreferrer">data.example.com</a>" domains to demonstrate respectively</p></div><ol start="3"><li>A Github or Gitlab account</li></ol><p><strong>This document will use the aaPanel as an example, with future versions of the changes, some of the features may change, this document is for reference only</strong></p><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>This project does not rely on aaPanel, you can choose to use any server panel you like, and if you are capable enough, you can manually install NginX or Caddy to configure SSL and reverse proxy.<br> If you don't think it's necessary to use port 80 or 443 to access Dashboard, you don't even need to install NginX and you can just use the install script.</p></div><br><br><h2 id="get-the-client-id-and-client-secret-on-github-gitlab" tabindex="-1">Get the Client ID and Client Secret on Github/Gitlab <a class="header-anchor" href="#get-the-client-id-and-client-secret-on-github-gitlab" aria-hidden="true">#</a></h2><p>Nezha Monitor uses a Github account as the login account for the admin panel</p><ul><li>First we need to create a new authentication application, after logging into Github, open <a href="https://github.com/settings/developers" target="_blank" rel="noopener noreferrer">https://github.com/settings/developers</a> and select "OAuth Apps" - "New OAuth App "<br><code>Application name</code> - Fill in as you like<br><code>Homepage URL</code> - Fill in the panel's access domain name, such as: "<a href="http://cdn.example.com" target="_blank" rel="noopener noreferrer">http://cdn.example.com</a>"<br><code>Authorization callback URL</code> - Fill in the callback address, e.g., "<a href="http://cdn.example.com/oauth2/callback" target="_blank" rel="noopener noreferrer">http://cdn.example.com/oauth2/callback</a>"</li><li>Click on "Registration Application"</li><li>Remember the Client ID in the page, then click "Generate a new client secret" to create a new Client Secret, the new secret will be displayed only once, please save it properly <br><br></li><li>If you're using Gitlab, you'll need to go to <a href="https://gitlab.com/-/profile/applications" target="_blank" rel="noopener noreferrer">https://gitlab.com/-/profile/applications</a> to create a new application</li><li>Fill in <code>Redirect URL</code> with the cal
Line truncated
|
|
||||||
</code></pre></div><ul><li><p>After waiting for the Docker installation to complete, input the following settings:<br><code>OAuth2 provider</code> - Github or Gitlab<br><code>Client ID</code> - Previously saved Client ID<br><code>Client Secret</code> - Previously saved secret<br><code>GitHub/Gitee login name</code> - Github o Gitlab username<br><code>Site title</code> - Custom site title<br><code>Site access port</code> - Public access port, customizable, default 8008<br><code>RPC port</code> - The communication port between Agent and Dashboard, default 5555</p></li><li><p>After the input is complete, wait to pull the mirror<br> After the installation, if everything is fine, you can visit the domain + port number, such as "<a href="http://cdn.example.com:8008" target="_blank" rel="noopener noreferrer">http://cdn.example.com:8008</a>" to view the Dashboard</p></li><li><p>In the future, if you need to run the script again, you can run:</p></li></ul><div class="language-bash"><pre><code>./nezha.sh
|
|
||||||
</code></pre></div><p>to open the management script<br><br><br></p><h2 id="configure-reverse-proxy" tabindex="-1">Configure reverse proxy <a class="header-anchor" href="#configure-reverse-proxy" aria-hidden="true">#</a></h2><ul><li><p>Create a new site in the aaPanel, fill in the public access domain name, such as "<a href="http://cdn.example.com" target="_blank" rel="noopener noreferrer">http://cdn.example.com</a>", then click "Settings" to enter the site settings option, select " Reverse proxy" - "New reverse proxy"</p></li><li><p>Customize a proxy name, fill in <code>http://127.0.0.1</code> in the "Target URL" and click "Save"</p></li><li><p>Open the " configuration" to the right of the new reverse proxy you just created and replace the configuration file with the following:</p></li></ul><div class="language-nginx"><pre><code><span class="token comment">#PROXY-START/</span>
|
|
||||||
<span class="token directive"><span class="token keyword">location</span> /</span> <span class="token punctuation">{</span>
|
|
||||||
<span class="token directive"><span class="token keyword">proxy_pass</span> http://127.0.0.1:8008</span><span class="token punctuation">;</span>
|
|
||||||
<span class="token directive"><span class="token keyword">proxy_set_header</span> Host <span class="token variable">$http_host</span></span><span class="token punctuation">;</span>
|
|
||||||
<span class="token directive"><span class="token keyword">proxy_set_header</span> Upgrade <span class="token variable">$http_upgrade</span></span><span class="token punctuation">;</span>
|
|
||||||
<span class="token punctuation">}</span>
|
|
||||||
<span class="token directive"><span class="token keyword">location</span> ~ ^/(ws|terminal/.+)$</span> <span class="token punctuation">{</span>
|
|
||||||
<span class="token directive"><span class="token keyword">proxy_pass</span> http://127.0.0.1:8008</span><span class="token punctuation">;</span>
|
|
||||||
<span class="token directive"><span class="token keyword">proxy_http_version</span> 1.1</span><span class="token punctuation">;</span>
|
|
||||||
<span class="token directive"><span class="token keyword">proxy_set_header</span> Upgrade <span class="token variable">$http_upgrade</span></span><span class="token punctuation">;</span>
|
|
||||||
<span class="token directive"><span class="token keyword">proxy_set_header</span> Connection <span class="token string">"Upgrade"</span></span><span class="token punctuation">;</span>
|
|
||||||
<span class="token directive"><span class="token keyword">proxy_set_header</span> Host <span class="token variable">$http_host</span></span><span class="token punctuation">;</span>
|
|
||||||
<span class="token punctuation">}</span>
|
|
||||||
<span class="token comment">#PROXY-END/</span>
|
|
||||||
</code></pre></div><ul><li>Click "Save"<br> Now, you should be able to access the panel directly using a domain name such as: "<a href="http://cdn.example.com" target="_blank" rel="noopener noreferrer">http://cdn.example.com</a>"<br><br></li></ul><h4 id="other" tabindex="-1">Other: <a class="header-anchor" href="#other" aria-hidden="true">#</a></h4><ul><li><p>CaddyServer v1\uFF08v2 no special configuration required\uFF09</p><div class="language-"><pre><code>proxy /ws http://ip:8008 {
|
|
||||||
websocket
|
|
||||||
header_upstream -Origin
|
|
||||||
}
|
|
||||||
proxy /terminal/* http://ip:8008 {
|
|
||||||
websocket
|
|
||||||
header_upstream -Origin
|
|
||||||
}
|
|
||||||
</code></pre></div></li></ul><br><br><h2 id="configuring-ssl-in-the-aapanel" tabindex="-1">Configuring SSL in the aaPanel <a class="header-anchor" href="#configuring-ssl-in-the-aapanel" aria-hidden="true">#</a></h2><p>First, temporarily disable the reverse proxy<br> As with other websites, you can choose to automatically apply for a Let\xB4s Encrypt certificate or manually configure an existing certificate by going to "SSL" in the site settings<br> After you finish setting up SSL, you need to go back to <a href="https://github.com/settings/developers" target="_blank" rel="noopener noreferrer">https://github.com/settings/developers</a> and edit the authentication application you created before, change all the domain names in the "Homepage URL" and "Authorization callback URL" you filled in before from <code>http</code> to <code>https</code>, such as: "<a href="https://cdn.example.com" target="_blank" rel="noopener noreferrer">https://cdn.example.com</a>" and "<a href="https://cdn.example.com/oauth2/callback" target="_blank" rel="noopener noreferrer">https://cdn.example.com/oauth2/callback</a>", <strong>If you don't change these links, you may not be able to log into the admin panel</strong></p><h2 id="faq" tabindex="-1">FAQ <a class="header-anchor" href="#faq" aria-hidden="true">#</a></h2><h3 id="what-should-i-do-if-terminal-or-ws-cannot-be-connected-after-https-is-enabled" tabindex="-1">What should I do if /terminal or /ws cannot be connected after HTTPS is enabled? <a class="header-anchor" href="#what-should-i-do-if-terminal-or-ws-cannot-be-connected-after-https-is-enabled" aria-hidden="true">#</a></h3><p>It is often caused by incomplete certificates. Please add -d to the agent running parameters. If there is x509: certificate signed by unknown authority in the log, replacing the complete certificate can solve the problem 100%.</p><h3 id="i-am-not-satisfied-with-the-data-modification-or-addition-function-provided-by-the-dashboard-what-if-i-want-to-modify-or-add-data-myself" tabindex="-1">I am not satisfied with the data modification or addition function provided by the Dashboard, what if I want to modify or add data myself? <a class="header-anchor" href="#i-am-not-satisfied-with-the-data-modification-or-addition-function-provided-by-the-dashboard-what-if-i-want-to-modify-or-add-data-myself" aria-hidden="true">#</a></h3><p>Commonly used in requirements such as batch installation of Agents, where you can modify the database directly.<br> Please note that not everything can be modified in the database, wrong modification will lead to data confusion and failure to start Dashboard, <strong>please do not modify the database at will!</strong></p><div class="danger custom-block"><p class="custom-block-title">WARNING</p><p>Again, <strong>please do not modify the database at will!</strong></p></div><p>If you need to modify the data in the database, please <strong>stop</strong> the Dashboard container before modifying it.<br> The database type is sqlite3, located in <code>/opt/nezha/dashboard/data/sqlite.db</code>, please backup before modifying the data</p><h3 id="what-are-each-table-or-column-in-the-database" tabindex="-1">What are each table or column in the database? <a class="header-anchor" href="#what-are-each-table-or-column-in-the-database" aria-hidden="true">#</a></h3><p>The documentation does not provide an explanation of the database. If you have the ability to modify the database, you should be able to read it with a little thinking.</p><h3 id="does-dashboard-update-automatically" tabindex="-1">Does Dashboard update automatically? <a class="header-anchor" href="#does-dashboard-update-automatically" aria-hidden="true">#</a></h3><p>The Agent normally updates automatically, but the Dashboard does not and needs to be updated manually.</p><h3 id="how-do-i-update-the-dashboard" tabindex="-1">How do I update the Dashboard? <a class="header-anchor" href="#how-do-i-update-the-dashboard" aria-hidden="true">#</a></h3><p>Run the script <code>. /nezha.sh</code> and select restart Dashboard and update</p>`,41),i=[s];function r(l,d,c,p,h,u){return t(),a("div",null,i)}var f=e(n,[["render",r]]);export{m as __pageData,f as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,c as a,o as t,a as o}from"./app.38e99b9a.js";const m='{"title":"Preparations","description":"","frontmatter":{},"headers":[{"level":2,"title":"Preparations","slug":"preparations"},{"level":2,"title":"Get the Client ID and Client Secret on Github/Gitlab","slug":"get-the-client-id-and-client-secret-on-github-gitlab"},{"level":2,"title":"Installing Dashboard on the server","slug":"installing-dashboard-on-the-server"},{"level":2,"title":"Configure reverse proxy","slug":"configure-reverse-proxy"},{"level":2,"title":"Configuring SSL in the aaPanel","slug":"configuring-ssl-in-the-aapanel"},{"level":2,"title":"FAQ","slug":"faq"},{"level":3,"title":"What should I do if /terminal or /ws cannot be connected after HTTPS is enabled?","slug":"what-should-i-do-if-terminal-or-ws-cannot-be-connected-after-https-is-enabled"},{"level":3,"title":"I am not satisfied with the data modification or addition function provided by the Dashboard, what if I want to modify or add data myself?","slug":"i-am-not-satisfied-with-the-data-modification-or-addition-function-provided-by-the-dashboard-what-if-i-want-to-modify-or-add-data-myself"},{"level":3,"title":"What are each table or column in the database?","slug":"what-are-each-table-or-column-in-the-database"},{"level":3,"title":"Does Dashboard update automatically?","slug":"does-dashboard-update-automatically"},{"level":3,"title":"How do I update the Dashboard?","slug":"how-do-i-update-the-dashboard"}],"relativePath":"en_US/guide/dashboard.md","lastUpdated":1682159272000}',n={},s=o("",41),i=[s];function r(l,d,c,p,h,u){return t(),a("div",null,i)}var f=e(n,[["render",r]]);export{m as __pageData,f as default};
|
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
import{_ as e,o as a,c as t,R as o}from"./chunks/framework.1625126e.js";const y=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/dashboard.md","filePath":"en_US/guide/dashboard.md","lastUpdated":1687190167000}'),s={name:"en_US/guide/dashboard.md"},n=o(`<h2 id="preparations" tabindex="-1">Preparations <a class="header-anchor" href="#preparations" aria-label="Permalink to "Preparations""></a></h2><p>To setup a Nezha monitorning Dashboard, you need these things:</p><ol><li>A VPS that can connect to the Internet, firewall and security policies need to open ports 8008 and 5555, otherwise it will be inaccessible and unable to receive data. A 1 core 512MB RAM server is sufficient for most usage scenarios</li><li>A domain name that has been set up with an A record that resolves to the Dashboard server IP</li></ol><div class="tip custom-block"><p class="custom-block-title">TIP</p><p>If you want to use CDN, please prepare two domains, one connect to CDN for public access, CDN needs to support WebSocket protocol; the other domain should not connect to CDN, use it as Agent to send data to Dashboard.<br> This document uses "cdn.example.com" and "data.example.com" domains to demonstrate respectively</p></div><ol start="3"><li>A Github or Gitlab account</li></ol><p><strong>This document will use the aaPanel as an example, with future versions of the changes, some of the features may change, this document is for reference only</strong></p><div class="warning custom-block"><p class="custom-block-title">WARNING</p><p>This project does not rely on aaPanel, you can choose to use any server panel you like, and if you are capable enough, you can manually install NginX or Caddy to configure SSL and reverse proxy.<br> If you don't think it's necessary to use port 80 or 443 to access Dashboard, you don't even need to install NginX and you can just use the install script.</p></div><br><br><h2 id="get-the-client-id-and-client-secret-on-github-gitlab" tabindex="-1">Get the Client ID and Client Secret on Github/Gitlab <a class="header-anchor" href="#get-the-client-id-and-client-secret-on-github-gitlab" aria-label="Permalink to "Get the Client ID and Client Secret on Github/Gitlab""></a></h2><p>Nezha Monitor uses a Github account as the login account for the admin panel</p><ul><li>First we need to create a new authentication application, after logging into Github, open <a href="https://github.com/settings/developers" target="_blank" rel="noreferrer">https://github.com/settings/developers</a> and select "OAuth Apps" - "New OAuth App "<br><code>Application name</code> - Fill in as you like<br><code>Homepage URL</code> - Fill in the panel's access domain name, such as: "<a href="http://cdn.example.com" target="_blank" rel="noreferrer">http://cdn.example.com</a>"<br><code>Authorization callback URL</code> - Fill in the callback address, e.g., "<a href="http://cdn.example.com/oauth2/callback" target="_blank" rel="noreferrer">http://cdn.example.com/oauth2/callback</a>"</li><li>Click on "Registration Application"</li><li>Remember the Client ID in the page, then click "Generate a new client secret" to create a new Client Secret, the new secret will be displayed only once, please save it properly <br><br></li><li>If you're using Gitlab, you'll need to go to <a href="https://gitlab.com/-/profile/applications" target="_blank" rel="noreferrer">https://gitlab.com/-/profile/applications</a> to create a new application</li><li>Fill in <code>Redirect URL</code> with the callback address</li><li>In <code>Scopes</code>, select <code>read_user</code> and <code>read_api</code></li><li>Once created, save the Application ID and Secret</li></ul><h2 id="installing-dashboard-on-the-server" tabindex="-1">Installing Dashboard on the server <a class="header-anchor" href="#installing-dashboard-on-the-server" aria-label="Permalink to "Installing Dashboard on the server""></a></h2><ul><li>In the panel server, run the installation script:</li></ul><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">curl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-L</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">https://raw.githubusercontent.com/naiba/nezha/master/script/install_en.sh</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-o</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">nezha.sh</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&&</span><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">chmod</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">+x</span><span style="color
Line truncated
|
||||||
|
<span class="line"><span style="color:#C792EA;">location</span><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">/ </span><span style="color:#A6ACCD;">{</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"> proxy_pass </span><span style="color:#A6ACCD;">http://127.0.0.1:8008</span><span style="color:#89DDFF;">;</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"> proxy_set_header </span><span style="color:#A6ACCD;">Host </span><span style="color:#89DDFF;">$</span><span style="color:#A6ACCD;">http_host</span><span style="color:#89DDFF;">;</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"> proxy_set_header </span><span style="color:#A6ACCD;"> Upgrade </span><span style="color:#89DDFF;">$</span><span style="color:#A6ACCD;">http_upgrade</span><span style="color:#89DDFF;">;</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;">}</span></span>
|
||||||
|
<span class="line"><span style="color:#C792EA;">location</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">~</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">^/(ws|terminal/.+)$ </span><span style="color:#A6ACCD;">{</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"> proxy_pass </span><span style="color:#A6ACCD;">http://127.0.0.1:8008</span><span style="color:#89DDFF;">;</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"> proxy_http_version </span><span style="color:#A6ACCD;">1.1</span><span style="color:#89DDFF;">;</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"> proxy_set_header </span><span style="color:#A6ACCD;">Upgrade </span><span style="color:#89DDFF;">$</span><span style="color:#A6ACCD;">http_upgrade</span><span style="color:#89DDFF;">;</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"> proxy_set_header </span><span style="color:#A6ACCD;">Connection </span><span style="color:#C3E88D;">"Upgrade"</span><span style="color:#89DDFF;">;</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;"> proxy_set_header </span><span style="color:#A6ACCD;">Host </span><span style="color:#89DDFF;">$</span><span style="color:#A6ACCD;">http_host</span><span style="color:#89DDFF;">;</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;">}</span></span>
|
||||||
|
<span class="line"><span style="color:#676E95;font-style:italic;">#PROXY-END/</span></span></code></pre></div><ul><li>Click "Save"<br> Now, you should be able to access the panel directly using a domain name such as: "<a href="http://cdn.example.com" target="_blank" rel="noreferrer">http://cdn.example.com</a>"<br><br></li></ul><h4 id="other" tabindex="-1">Other: <a class="header-anchor" href="#other" aria-label="Permalink to "Other:""></a></h4><ul><li><p>CaddyServer v1(v2 no special configuration required)</p><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">proxy /ws http://ip:8008 {</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> websocket</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> header_upstream -Origin</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;">}</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;">proxy /terminal/* http://ip:8008 {</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> websocket</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> header_upstream -Origin</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;">}</span></span></code></pre></div></li></ul><br><br><h2 id="configuring-ssl-in-the-aapanel" tabindex="-1">Configuring SSL in the aaPanel <a class="header-anchor" href="#configuring-ssl-in-the-aapanel" aria-label="Permalink to "Configuring SSL in the aaPanel""></a></h2><p>First, temporarily disable the reverse proxy<br> As with other websites, you can choose to automatically apply for a Let´s Encrypt certificate or manually configure an existing certificate by going to "SSL" in the site settings<br> After you finish setting up SSL, you need to go back to <a href="https://github.com/settings/developers" target="_blank" rel="noreferrer">https://github.com/settings/developers</a> and edit the authentication application you created before, change all the domain names in the "Homepage URL" and "Authorization callback URL" you filled in before from <code>http</code> to <code>https</code>, such as: "<a href="https://cdn.example.com" target="_blank" rel="noreferrer">https://cdn.example.com</a>" and "<a href="https://cdn.example.com/oauth2/callback" target="_blank" rel="noreferrer">https://cdn.example.com/oauth2/callback</a>", <strong>If you don't change these links, you may not be able to log into the admin panel</strong></p><h2 id="faq" tabindex="-1">FAQ <a class="header-anchor" href="#faq" aria-label="Permalink to "FAQ""></a></h2><h3 id="what-should-i-do-if-terminal-or-ws-cannot-be-connected-after-https-is-enabled" tabindex="-1">What should I do if /terminal or /ws cannot be connected after HTTPS is enabled? <a class="header-anchor" href="#what-should-i-do-if-terminal-or-ws-cannot-be-connected-after-https-is-enabled" aria-label="Permalink to "What should I do if /terminal or /ws cannot be connected after HTTPS is enabled?""></a></h3><p>It is often caused by incomplete certificates. Please add -d to the agent running parameters. If there is x509: certificate signed by unknown authority in the log, replacing the complete certificate can solve the problem 100%.</p><h3 id="i-am-not-satisfied-with-the-data-modification-or-addition-function-provided-by-the-dashboard-what-if-i-want-to-modify-or-add-data-myself" tabindex="-1">I am not satisfied with the data modification or addition function provided by the Dashboard, what if I want to modify or add data myself? <a class="header-anchor" href="#i-am-not-satisfied-with-the-data-modification-or-addition-function-provided-by-the-dashboard-what-if-i-want-to-modify-or-add-data-myself" aria-label="Permalink to "I am not satisfied with the data modification or addition function provided by the Dashboard, what if I want to modify or add data myself?""></a></h3><p>Commonly used in requirements such as batch installation of Agents, where you can modify the database directly.<br> Please note that not everything can be modified in the database, wrong modification will lead to data confusion and failure to start Dashboard, <strong>please do not modify the database at will!</strong></p><div class="danger custom-block"><p class="custom-block-title">DANGER</p><p>Again, <strong>please do not modify the database at will!</strong></p></div><p>If you need to modify the data in the database, please <strong>stop</strong> the Dashboard container before modifying it.<br> The database type is sqlite3, located in <code>/opt/nezha/dashboard/data/sqlite.db</code>, please backup before modifying the data</p><h3 id="what-are-each-table-or-column-in-the-database" tabindex="-1">What are each table or column in the database? <a class="header-anchor" href="#what-are-each-table-or-column-in-the-database" aria-label="Permalink to "What are each table or column in the database?""></a></h3><p>The documentation does not provide an explanation of the database. If you have the ability to modify the database, you should be able to read it with a little thinking.</p><h3 id="does-dashboard-update-automatically" tabindex="-1">Does Dashboard update automatically? <a class="header-anchor" href="#does-dashboard-update-automatically" aria-label="Permalink to "Does Dashboard update automatically?""></a></h3><p>The Agent normally updates automatically, but the Dashboard does not and needs to be updated manually.</p><h3 id="how-do-i-update-the-dashboard" tabindex="-1">How do I update the Dashboard? <a class="header-anchor" href="#how-do-i-update-the-dashboard" aria-label="Permalink to "How do I update the Dashboard?""></a></h3><p>Run the script <code>. /nezha.sh</code> and select restart Dashboard and update</p>`,41),l=[n];function r(i,p,c,d,h,u){return a(),t("div",null,l)}const m=e(s,[["render",r]]);export{y as __pageData,m as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e,o as a,c as t,R as o}from"./chunks/framework.1625126e.js";const y=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/dashboard.md","filePath":"en_US/guide/dashboard.md","lastUpdated":1687190167000}'),s={name:"en_US/guide/dashboard.md"},n=o("",41),l=[n];function r(i,p,c,d,h,u){return a(),t("div",null,l)}const m=e(s,[["render",r]]);export{y as __pageData,m as default};
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
import{_ as e,c as a,o as t,a as s}from"./app.38e99b9a.js";const g='{"title":"Why the IP displayed in the admin panel and the actual IP of the Agent are not the same?","description":"","frontmatter":{},"headers":[{"level":2,"title":"Why the IP displayed in the admin panel and the actual IP of the Agent are not the same?","slug":"why-the-ip-displayed-in-the-admin-panel-and-the-actual-ip-of-the-agent-are-not-the-same"},{"level":2,"title":"Forgot your access password or deleted your access password","slug":"forgot-your-access-password-or-deleted-your-access-password"},{"level":2,"title":"Dashboard install/restart/update failed: iptables ......","slug":"dashboard-install-restart-update-failed-iptables"},{"level":2,"title":"Dashboard reboot failed: Invalid hostPort: nzsiteport etc.","slug":"dashboard-reboot-failed-invalid-hostport-nz-site-port-etc"},{"level":2,"title":"Wrong Dashboard layout, CSS resources cannot be loaded","slug":"wrong-dashboard-layout-css-resources-cannot-be-loaded"}],"relativePath":"en_US/guide/dashboardq.md","lastUpdated":1682159272000}',o={},n=s(`<h2 id="why-the-ip-displayed-in-the-admin-panel-and-the-actual-ip-of-the-agent-are-not-the-same" tabindex="-1">Why the IP displayed in the admin panel and the actual IP of the Agent are not the same? <a class="header-anchor" href="#why-the-ip-displayed-in-the-admin-panel-and-the-actual-ip-of-the-agent-are-not-the-same" aria-hidden="true">#</a></h2><p>First of all, explain how the IP displayed in the admin panel is gotten: the Agent will request the IP-API every once in a while, get the IP information and report it to the Dashboard, the IP-API currently used can be viewed here: <a href="https://github.com/naiba/nezha/blob/master/cmd/agent/monitor/myip.go" target="_blank" rel="noopener noreferrer">myip.go</a><br> If you find that the IP displayed in the admin panel is not the same as the IP provided to you by the service provider, the biggest possibility is that the service provider gave you the <strong>entry IP</strong>, but the Agent tested out your <strong>exit IP</strong>. This problem may also occur in BGP servers and Leased line.</p><div class="tip custom-block"><p class="custom-block-title">TIP</p><p>To take a simple and very common example, the service provider to provide you a anti-DDoS server, in order to meet the goals of both DDoS protection and low network disruption rate, the IP provided to you may be the mapped anti-DDoS IP and not the real exit IP of your server</p></div><p>You can also test the exit IP by running the following command in the Agent server:</p><div class="language-shell"><pre><code><span class="token function">curl</span> api.myip.la
|
|
||||||
<span class="token function">curl</span> ip.sb
|
|
||||||
<span class="token function">curl</span> ip-api.com
|
|
||||||
</code></pre></div><h2 id="forgot-your-access-password-or-deleted-your-access-password" tabindex="-1">Forgot your access password or deleted your access password <a class="header-anchor" href="#forgot-your-access-password-or-deleted-your-access-password" aria-hidden="true">#</a></h2><p>Please view or edit the <code>/opt/nezha/dashboard/data/config.yaml</code> file.<br> The password is located in the site-viewpassword item.</p><h2 id="dashboard-install-restart-update-failed-iptables" tabindex="-1">Dashboard install/restart/update failed: iptables ...... <a class="header-anchor" href="#dashboard-install-restart-update-failed-iptables" aria-hidden="true">#</a></h2><p>First, try restarting docker and retrying again</p><div class="language-shell"><pre><code>systemctl status <span class="token function">docker</span>
|
|
||||||
systemctl restart <span class="token function">docker</span>
|
|
||||||
systemctl status <span class="token function">docker</span>
|
|
||||||
</code></pre></div><p>Restart and try to reinstall the Dashboard.<br> If you still get iptables... etc. errors, then consider simply closing iptables or even removing it.<br> This issue may also be kernel related, try replacing the official kernel as well.</p><h2 id="dashboard-reboot-failed-invalid-hostport-nz-site-port-etc" tabindex="-1">Dashboard reboot failed: Invalid hostPort: nz_site_port etc. <a class="header-anchor" href="#dashboard-reboot-failed-invalid-hostport-nz-site-port-etc" aria-hidden="true">#</a></h2><p>Usually this does not occur, if it does, you can modify the configuration through the installation script.</p><h2 id="wrong-dashboard-layout-css-resources-cannot-be-loaded" tabindex="-1">Wrong Dashboard layout, CSS resources cannot be loaded <a class="header-anchor" href="#wrong-dashboard-layout-css-resources-cannot-be-loaded" aria-hidden="true">#</a></h2><p>If the Dashboard page has an incorrect layout, the usual reason is that the CSS file is missing or cannot be loaded.<br> When such an issue occurs, you can first try <code>Reboot and update the Dashboard</code>. If the problem is not resolved after updating the Dashboard, then there may be an unsuitable configuration within your vhost configuration file. You can edit the vhost file or within the Aapanel to:</p><ol><li>Find the site you configured when installing Dashboard in <code>Website</code> and click <code>Conf</code> on the right side</li><li>Select <code>Config</code> and delete the following from the config file:</li></ol><div class="language-nginx"><pre><code><span class="token directive"><span class="token keyword">location</span> ~ .*\\.(js|css)?$</span>
|
|
||||||
<span class="token punctuation">{</span>
|
|
||||||
<span class="token directive"><span class="token keyword">expires</span> <span class="token number">12h</span></span><span class="token punctuation">;</span>
|
|
||||||
<span class="token directive"><span class="token keyword">error_log</span> /dev/null</span><span class="token punctuation">;</span>
|
|
||||||
<span class="token directive"><span class="token keyword">access_log</span> /dev/null</span><span class="token punctuation">;</span>
|
|
||||||
<span class="token punctuation">}</span>
|
|
||||||
</code></pre></div><ol start="3"><li>Save the configuration and clear the cache in the browser, NginX, and CDN, then refresh the page and it should return to normal.</li></ol>`,18),r=[n];function i(d,l,c,h,p,u){return t(),a("div",null,r)}var f=e(o,[["render",i]]);export{g as __pageData,f as default};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,c as a,o as t,a as s}from"./app.38e99b9a.js";const g='{"title":"Why the IP displayed in the admin panel and the actual IP of the Agent are not the same?","description":"","frontmatter":{},"headers":[{"level":2,"title":"Why the IP displayed in the admin panel and the actual IP of the Agent are not the same?","slug":"why-the-ip-displayed-in-the-admin-panel-and-the-actual-ip-of-the-agent-are-not-the-same"},{"level":2,"title":"Forgot your access password or deleted your access password","slug":"forgot-your-access-password-or-deleted-your-access-password"},{"level":2,"title":"Dashboard install/restart/update failed: iptables ......","slug":"dashboard-install-restart-update-failed-iptables"},{"level":2,"title":"Dashboard reboot failed: Invalid hostPort: nzsiteport etc.","slug":"dashboard-reboot-failed-invalid-hostport-nz-site-port-etc"},{"level":2,"title":"Wrong Dashboard layout, CSS resources cannot be loaded","slug":"wrong-dashboard-layout-css-resources-cannot-be-loaded"}],"relativePath":"en_US/guide/dashboardq.md","lastUpdated":1682159272000}',o={},n=s("",18),r=[n];function i(d,l,c,h,p,u){return t(),a("div",null,r)}var f=e(o,[["render",i]]);export{g as __pageData,f as default};
|
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
import{_ as e,o as a,c as s,R as t}from"./chunks/framework.1625126e.js";const b=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/dashboardq.md","filePath":"en_US/guide/dashboardq.md","lastUpdated":1687190167000}'),o={name:"en_US/guide/dashboardq.md"},n=t(`<h2 id="why-the-ip-displayed-in-the-admin-panel-and-the-actual-ip-of-the-agent-are-not-the-same" tabindex="-1">Why the IP displayed in the admin panel and the actual IP of the Agent are not the same? <a class="header-anchor" href="#why-the-ip-displayed-in-the-admin-panel-and-the-actual-ip-of-the-agent-are-not-the-same" aria-label="Permalink to "Why the IP displayed in the admin panel and the actual IP of the Agent are not the same?""></a></h2><p>First of all, explain how the IP displayed in the admin panel is gotten: the Agent will request the IP-API every once in a while, get the IP information and report it to the Dashboard, the IP-API currently used can be viewed here: <a href="https://github.com/naiba/nezha/blob/master/cmd/agent/monitor/myip.go" target="_blank" rel="noreferrer">myip.go</a><br> If you find that the IP displayed in the admin panel is not the same as the IP provided to you by the service provider, the biggest possibility is that the service provider gave you the <strong>entry IP</strong>, but the Agent tested out your <strong>exit IP</strong>. This problem may also occur in BGP servers and Leased line.</p><div class="tip custom-block"><p class="custom-block-title">TIP</p><p>To take a simple and very common example, the service provider to provide you a anti-DDoS server, in order to meet the goals of both DDoS protection and low network disruption rate, the IP provided to you may be the mapped anti-DDoS IP and not the real exit IP of your server</p></div><p>You can also test the exit IP by running the following command in the Agent server:</p><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">curl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">api.myip.la</span></span>
|
||||||
|
<span class="line"><span style="color:#FFCB6B;">curl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">ip.sb</span></span>
|
||||||
|
<span class="line"><span style="color:#FFCB6B;">curl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">ip-api.com</span></span></code></pre></div><h2 id="forgot-your-access-password-or-deleted-your-access-password" tabindex="-1">Forgot your access password or deleted your access password <a class="header-anchor" href="#forgot-your-access-password-or-deleted-your-access-password" aria-label="Permalink to "Forgot your access password or deleted your access password""></a></h2><p>Please view or edit the <code>/opt/nezha/dashboard/data/config.yaml</code> file.<br> The password is located in the site-viewpassword item.</p><h2 id="dashboard-install-restart-update-failed-iptables" tabindex="-1">Dashboard install/restart/update failed: iptables ...... <a class="header-anchor" href="#dashboard-install-restart-update-failed-iptables" aria-label="Permalink to "Dashboard install/restart/update failed: iptables ......""></a></h2><p>First, try restarting docker and retrying again</p><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">systemctl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">status</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">docker</span></span>
|
||||||
|
<span class="line"><span style="color:#FFCB6B;">systemctl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">restart</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">docker</span></span>
|
||||||
|
<span class="line"><span style="color:#FFCB6B;">systemctl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">status</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">docker</span></span></code></pre></div><p>Restart and try to reinstall the Dashboard.<br> If you still get iptables... etc. errors, then consider simply closing iptables or even removing it.<br> This issue may also be kernel related, try replacing the official kernel as well.</p><h2 id="dashboard-reboot-failed-invalid-hostport-nz-site-port-etc" tabindex="-1">Dashboard reboot failed: Invalid hostPort: nz_site_port etc. <a class="header-anchor" href="#dashboard-reboot-failed-invalid-hostport-nz-site-port-etc" aria-label="Permalink to "Dashboard reboot failed: Invalid hostPort: nz_site_port etc.""></a></h2><p>Usually this does not occur, if it does, you can modify the configuration through the installation script.</p><h2 id="wrong-dashboard-layout-css-resources-cannot-be-loaded" tabindex="-1">Wrong Dashboard layout, CSS resources cannot be loaded <a class="header-anchor" href="#wrong-dashboard-layout-css-resources-cannot-be-loaded" aria-label="Permalink to "Wrong Dashboard layout, CSS resources cannot be loaded""></a></h2><p>If the Dashboard page has an incorrect layout, the usual reason is that the CSS file is missing or cannot be loaded.<br> When such an issue occurs, you can first try <code>Reboot and update the Dashboard</code>. If the problem is not resolved after updating the Dashboard, then there may be an unsuitable configuration within your vhost configuration file. You can edit the vhost file or within the Aapanel to:</p><ol><li>Find the site you configured when installing Dashboard in <code>Website</code> and click <code>Conf</code> on the right side</li><li>Select <code>Config</code> and delete the following from the config file:</li></ol><div class="language-nginx"><button title="Copy Code" class="copy"></button><span class="lang">nginx</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#89DDFF;">location</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">~</span><span style="color:#A6ACCD;"> .*\\.(js|css)?$</span></span>
|
||||||
|
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#F07178;">{</span></span>
|
||||||
|
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;"> expires </span><span style="color:#F07178;"> </span><span style="color:#F78C6C;">12h</span><span style="color:#89DDFF;">;</span></span>
|
||||||
|
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;"> error_log </span><span style="color:#F07178;">/dev/null</span><span style="color:#89DDFF;">;</span></span>
|
||||||
|
<span class="line"><span style="color:#F07178;"> </span><span style="color:#89DDFF;"> access_log </span><span style="color:#F07178;">/dev/null</span><span style="color:#89DDFF;">;</span></span>
|
||||||
|
<span class="line"><span style="color:#F07178;"> }</span></span></code></pre></div><ol start="3"><li>Save the configuration and clear the cache in the browser, NginX, and CDN, then refresh the page and it should return to normal.</li></ol>`,18),l=[n];function r(i,p,c,d,h,y){return a(),s("div",null,l)}const g=e(o,[["render",r]]);export{b as __pageData,g as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e,o as a,c as s,R as t}from"./chunks/framework.1625126e.js";const b=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/dashboardq.md","filePath":"en_US/guide/dashboardq.md","lastUpdated":1687190167000}'),o={name:"en_US/guide/dashboardq.md"},n=t("",18),l=[n];function r(i,p,c,d,h,y){return a(),s("div",null,l)}const g=e(o,[["render",r]]);export{b as __pageData,g as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e,o,c as t,R as a}from"./chunks/framework.1625126e.js";const b=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/loginq.md","filePath":"en_US/guide/loginq.md","lastUpdated":1687190167000}'),r={name:"en_US/guide/loginq.md"},i=a('<h2 id="page-refuses-to-connect-or-timeout-after-login-callback" tabindex="-1">Page refuses to connect or timeout after login callback <a class="header-anchor" href="#page-refuses-to-connect-or-timeout-after-login-callback" aria-label="Permalink to "Page refuses to connect or timeout after login callback""></a></h2><ol><li>Your server cannot connect to Github, consider trying several times or switching to Gitlab.</li><li>You have configured the wrong callback URL, make sure your callback URL is correct and <strong>port and protocol</strong> are correct!</li><li>An unknown error occurred in Dashboard, you can use the script to check the logs.</li></ol><div class="tip custom-block"><p class="custom-block-title">TIP</p><p>What is a protocol?<br> In the browser, your domain name ending with <code>://</code> is the protocol, usually <code>http</code> and <code>https</code>. Since the Dashboard may be accessible by multiple protocols + domain + port combinations under normal deployment, please make sure to choose the most appropriate one as the callback.</p></div><h3 id="how-do-i-check-if-my-callback-url-is-wrong" tabindex="-1">How do I check if my callback URL is wrong? <a class="header-anchor" href="#how-do-i-check-if-my-callback-url-is-wrong" aria-label="Permalink to "How do I check if my callback URL is wrong?""></a></h3><p>Please make sure the protocol+domain+port displayed by your browser before login and the protocol+domain+port you jump to after login are the same.<br> Please make sure your path is <code>/oauth2/callback</code>, <strong>all lowercase</strong>.</p><h2 id="dashboard-errors-after-login" tabindex="-1">Dashboard errors after login <a class="header-anchor" href="#dashboard-errors-after-login" aria-label="Permalink to "Dashboard errors after login""></a></h2><h3 id="http-named-cookie-not-present" tabindex="-1">http: named cookie not present <a class="header-anchor" href="#http-named-cookie-not-present" aria-label="Permalink to "http: named cookie not present""></a></h3><p>Clear your browser cookies and log in again, or change your browser.</p><h3 id="lookup-xxx" tabindex="-1">lookup xxx <a class="header-anchor" href="#lookup-xxx" aria-label="Permalink to "lookup xxx""></a></h3><p>DNS resolution failure, in most cases, is due to iptables-related configuration changes.<br> It is recommended to restart docker first, <code>sudo systemctl restart docker</code>, and then use the script to restart the Dashboard.<br> If the lookup error still occurs, it is recommended to check whether there are other tools to control iptables, such as Aapanel Firewall.<br> This problem may also be related to the kernel, please try to change the official kernel.</p><h3 id="the-authorization-method-is-invalid-or-the-login-callback-url-is-invalid-expired-or-has-been-revoked" tabindex="-1">The authorization method is invalid, or the login callback URL is invalid, expired, or has been revoked <a class="header-anchor" href="#the-authorization-method-is-invalid-or-the-login-callback-url-is-invalid-expired-or-has-been-revoked" aria-label="Permalink to "The authorization method is invalid, or the login callback URL is invalid, expired, or has been revoked""></a></h3><p>Suggest changing the authentication method to Github/Gitlab.</p><h3 id="oauth2-server-response-missing-access-token" tabindex="-1">oauth2: server response missing access_token <a class="header-anchor" href="#oauth2-server-response-missing-access-token" aria-label="Permalink to "oauth2: server response missing access_token""></a></h3><p>It may be caused by a number of factors, the most likely is a network problem, we suggest to check the network and retry.<br> If you can't solve it, we suggest changing the authentication method to Github/Gitlab.</p><h3 id="this-user-is-not-the-administrator-or-cannot-login" tabindex="-1">This user is not the administrator or cannot login <a class="header-anchor" href="#this-user-is-not-the-administrator-or-cannot-login" aria-label="Permalink to "This user is not the administrator or cannot login""></a></h3><p>You have logged into the wrong account or configured the wrong username, note that <strong>username is not email</strong>, you can use a script to modify it.</p><h3 id="dial-tcp-xxx-443-i-o-timeout" tabindex="-1">dial tcp xxx:443 i/o timeout <a class="header-anchor" href="#dial-tcp-xxx-443-i-o-timeout" aria-label="Permalink to "dial tcp xxx:443 i/o timeout""></a></h3><p>If the server has network problems, you can restart docker first, <code>sudo systemctl restart docker</code>, and then use the script to restart the DashboaLine truncated
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as e,o,c as t,R as a}from"./chunks/framework.1625126e.js";const b=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"en_US/guide/loginq.md","filePath":"en_US/guide/loginq.md","lastUpdated":1687190167000}'),r={name:"en_US/guide/loginq.md"},i=a("",20),n=[i];function s(l,c,h,d,u,p){return o(),t("div",null,n)}const k=e(r,[["render",s]]);export{b as __pageData,k as default};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as e,c as t,o,a}from"./app.38e99b9a.js";const g='{"title":"Page refuses to connect or timeout after login callback","description":"","frontmatter":{},"headers":[{"level":2,"title":"Page refuses to connect or timeout after login callback","slug":"page-refuses-to-connect-or-timeout-after-login-callback"},{"level":3,"title":"How do I check if my callback URL is wrong?","slug":"how-do-i-check-if-my-callback-url-is-wrong"},{"level":2,"title":"Dashboard errors after login","slug":"dashboard-errors-after-login"},{"level":3,"title":"http: named cookie not present","slug":"http-named-cookie-not-present"},{"level":3,"title":"lookup xxx","slug":"lookup-xxx"},{"level":3,"title":"The authorization method is invalid, or the login callback URL is invalid, expired, or has been revoked","slug":"the-authorization-method-is-invalid-or-the-login-callback-url-is-invalid-expired-or-has-been-revoked"},{"level":3,"title":"oauth2: server response missing access_token","slug":"oauth2-server-response-missing-access-token"},{"level":3,"title":"This user is not the administrator or cannot login","slug":"this-user-is-not-the-administrator-or-cannot-login"},{"level":3,"title":"dial tcp xxx:443 i/o timeout","slug":"dial-tcp-xxx-443-i-o-timeout"},{"level":3,"title":"net/http: TLS handshake timeout","slug":"net-http-tls-handshake-timeout"}],"relativePath":"en_US/guide/loginq.md","lastUpdated":1682159272000}',r={},i=a('<h2 id="page-refuses-to-connect-or-timeout-after-login-callback" tabindex="-1">Page refuses to connect or timeout after login callback <a class="header-anchor" href="#page-refuses-to-connect-or-timeout-after-login-callback" aria-hidden="true">#</a></h2><ol><li>Your server cannot connect to Github, consider trying several times or switching to Gitlab.</li><li>You have configured the wrong callback URL, make sure your callback URL is correct and <strong>port and protocol</strong> are correct!</li><li>An unknown error occurred in Dashboard, you can use the script to check the logs.</li></ol><div class="tip custom-block"><p class="custom-block-title">TIP</p><p>What is a protocol?<br> In the browser, your domain name ending with <code>://</code> is the protocol, usually <code>http</code> and <code>https</code>. Since the Dashboard may be accessible by multiple protocols + domain + port combinations under normal deployment, please make sure to choose the most appropriate one as the callback.</p></div><h3 id="how-do-i-check-if-my-callback-url-is-wrong" tabindex="-1">How do I check if my callback URL is wrong? <a class="header-anchor" href="#how-do-i-check-if-my-callback-url-is-wrong" aria-hidden="true">#</a></h3><p>Please make sure the protocol+domain+port displayed by your browser before login and the protocol+domain+port you jump to after login are the same.<br> Please make sure your path is <code>/oauth2/callback</code>, <strong>all lowercase</strong>.</p><h2 id="dashboard-errors-after-login" tabindex="-1">Dashboard errors after login <a class="header-anchor" href="#dashboard-errors-after-login" aria-hidden="true">#</a></h2><h3 id="http-named-cookie-not-present" tabindex="-1">http: named cookie not present <a class="header-anchor" href="#http-named-cookie-not-present" aria-hidden="true">#</a></h3><p>Clear your browser cookies and log in again, or change your browser.</p><h3 id="lookup-xxx" tabindex="-1">lookup xxx <a class="header-anchor" href="#lookup-xxx" aria-hidden="true">#</a></h3><p>DNS resolution failure, in most cases, is due to iptables-related configuration changes.<br> It is recommended to restart docker first, <code>sudo systemctl restart docker</code>, and then use the script to restart the Dashboard.<br> If the lookup error still occurs, it is recommended to check whether there are other tools to control iptables, such as Aapanel Firewall.<br> This problem may also be related to the kernel, please try to change the official kernel.</p><h3 id="the-authorization-method-is-invalid-or-the-login-callback-url-is-invalid-expired-or-has-been-revoked" tabindex="-1">The authorization method is invalid, or the login callback URL is invalid, expired, or has been revoked <a class="header-anchor" href="#the-authorization-method-is-invalid-or-the-login-callback-url-is-invalid-expired-or-has-been-revoked" aria-hidden="true">#</a></h3><p>Suggest changing the authentication method to Github/Gitlab.</p><h3 id="oauth2-server-response-missing-access-token" tabindex="-1">oauth2: server response missing access_token <a class="header-anchor" href="#oauth2-server-response-missing-access-token" aria-hidden="true">#</a></h3><p>It may be caused by a number of factors, the most likely is a network problem, we suggest to check the network and retry.<br> If you can't solve it, we suggest changing the authentication method to Github/Gitlab.</p><h3 id="this-user-is-not-the-administrator-or-cannot-login" tabindex="-1">This user is not the administrator or cannot login <a class="header-anchor" href="#this-user-is-not-the-administrator-orLine truncated
|
|
||||||
Loaded 100 of 296 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user