import{_ as a,c as e,o as s,a4 as t}from"./chunks/framework.BmdFiWrL.js";const u=JSON.parse('{"title":"使用 Argo 隧道的哪吒服务端","description":"","frontmatter":{},"headers":[],"relativePath":"case/case5.md","filePath":"case/case5.md","lastUpdated":1721002941000}'),n={name:"case/case5.md"},r=t(`

使用 Argo 隧道的哪吒服务端

贡献者:

项目地址:Argo-Nezha-Service-Container

镜像备份(非实时更新):Argo-Nezha-Service-Container


目录


项目特点:

image

准备需要用的变量

image

面板域名加上 https:// 开头,回调地址再加上 /oauth2/callback 结尾

imageimageimageimageimage

Argo 认证的获取方式: json 或 token

Argo 隧道认证方式有 json 和 token,使用两个方式其中之一。推荐前者,理由脚本会处理好所有的 Argo 隧道参数和路径,后者需要到 Cloudflare 官网手动设置,容易出错。

(方式 1 - Json):

通过 Cloudflare Json 生成网轻松获取 Argo 隧道 json 信息: https://fscarmen.cloudflare.now.cc

image

(方式 2 - Token): 通过 Cloudflare 官网,手动生成 Argo 隧道 token 信息

到 cf 官网:https://dash.cloudflare.com/

imageimageimageimageimageimageimage

PaaS 部署实例

镜像 fscarmen/argo-nezha:latest , 支持 amd64 和 arm64 架构

用到的变量

变量名是否必须备注
GH_USERgithub 的用户名,用于面板管理授权
GH_CLIENTID在 github 上申请
GH_CLIENTSECRET在 github 上申请
GH_BACKUP_USER在 github 上备份哪吒服务端数据库的 github 用户名,不填则与面板管理授权的账户 GH_USER 一致
GH_REPO在 github 上备份哪吒服务端数据库文件的 github 库
GH_EMAILgithub 的邮箱,用于备份的 git 推送到远程库
GH_PATgithub 的 PAT
ARGO_AUTHJson: 从 https://fscarmen.cloudflare.now.cc 获取的 Argo Json
Token: 从 Cloudflare 官网获取
ARGO_DOMAINArgo 域名

Koyeb

Deploy to Koyeb

imageimageimageimageimage

VPS 部署方式 1 --- docker

docker 部署

docker run -dit \\
           --name nezha_dashboard \\
           --pull always \\
           --restart always \\
           -e GH_USER=<填 github 用户名> \\
           -e GH_EMAIL=<填 github 邮箱> \\
           -e GH_PAT=<填获取的> \\
           -e GH_REPO=<填自定义的> \\
           -e GH_CLIENTID=<填获取的>  \\
           -e GH_CLIENTSECRET=<填获取的> \\
           -e ARGO_AUTH='<填获取的 Argo json 或者 token>' \\
           -e ARGO_DOMAIN=<填自定义的> \\
           -e GH_BACKUP_USER=<如与 GH_USER 一致,可以不要该环境变量> \\
           fscarmen/argo-nezha

docker-compose 部署

version: '3.8'
services:
    argo-nezha:
        image: fscarmen/argo-nezha
        pull: always
        container_name: nezha_dashboard
        restart: always
        environment:
            - GH_USER=<填 github 用户名>
            - GH_EMAIL=<<填 github 邮箱>
            - GH_PAT=<填获取的>
            - GH_REPO=<填自定义的>
            - GH_CLIENTID=<填获取的>
            - GH_CLIENTSECRET=<填获取的>
            - ARGO_AUTH='<填获取的 Argo json 或者 token>'
            - ARGO_DOMAIN=<填自定义的>
            - GH_BACKUP_USER=<如与 GH_USER 一致,可以不要该环境变量>

VPS 部署方式 2 --- 宿主机

bash <(wget -qO- https://raw.githubusercontent.com/fscarmen2/Argo-Nezha-Service-Container/main/dashboard.sh)

客户端接入

通过gRPC传输,无需额外配置。使用面板给到的安装方式,举例

curl -L https://raw.githubusercontent.com/naiba/nezha/master/script/install.sh -o nezha.sh && chmod +x nezha.sh && sudo ./nezha.sh install_agent nezha.seales.nom.za 443 eAxO9IF519fKFODlW0 --tls

SSH 接入

<file path>/cloudflared access ssh --hostname nezha.seales.nom.za/<GH_CLIENTID>
imageimageimage

手动备份数据

方法一: 把 Github 备份库里的 README.md 文件内容改为 backup

image

方法二: ssh 进去后,容器版本运行 /dashboard/backup.sh; 非容器版本运行 /opt/nezha/dashboard/backup.sh

自动还原备份

下图为以还原文件名为 dashboard-2023-04-23-13:08:37.tar.gz 作示例

image

手动还原备份

bash /dashboard/restore.sh <文件名>
image

完美搬家

tar czvf dashboard.tar.gz /dashboard

主体目录文件及说明

/dashboard/
|-- app                  # 哪吒面板主程序
|-- argo.json            # Argo 隧道 json 文件,记录着使用隧道的信息
|-- argo.yml             # Argo 隧道 yml 文件,用于在一同隧道下,根据不同域名来分流 web, gRPC 和 ssh 协议的作用
|-- backup.sh            # 备份数据脚本
|-- restore.sh           # 还原备份脚本
|-- dbfile               # 记录最新的还原或备份文件名
|-- resource             # 面板主题、语言和旗帜等资料的文件夹
|-- data
|   |-- config.yaml      # 哪吒面板的配置,如 Github OAuth2 / gRPC 域名 / 端口 / 是否启用 TLS 等信息
|   \`-- sqlite.db        # SQLite 数据库文件,记录着面板设置的所有 severs 和 cron 等信息
|-- entrypoint.sh        # 主脚本,容器运行后执行
|-- nezha.csr            # SSL/TLS 证书签名请求
|-- nezha.key            # SSL/TLS 证书的私钥信息
|-- nezha.pem            # SSL/TLS 证书文件
|-- cloudflared          # Cloudflare Argo 隧道主程序
|-- grpcwebproxy         # gRPC 反代主程序
\`-- nezha-agent          # 哪吒客户端,用于监控本地 localhost

鸣谢下列作者的文章和项目:

免责声明:

`,89),l=[r];function i(o,c,h,p,d,g){return s(),e("div",null,l)}const m=a(n,[["render",i]]);export{u as __pageData,m as default};