准备材料

  • GitHub 账户
  • CloudFlare 账户,并准备一个域名
  • PaaS 容器云账户(以下使用Koyeb为演示平台)

部署步骤

1.打开F佬的CF Argo Tunnel生成网:https://fscarmen.cloudflare.now.cc ,按照下图步骤获取隧道信息

img

2.进入CloudFlare控制台,在相应的域名 DNS 记录里加上客户端上报数据(tcp)和 ssh(可选)的域名,打开小云朵以启用 CDN

img
img

3.转到 网络 选项,将 gRPC 开关打开

img

4.设置新的OAuth授权应用,打开:https://github.com/settings/applications/new ,设置应用程序。面板域名加上 https:// 开头,回调地址再加上 /oauth2/callback 结尾

img

img

5.获取 GitHub 的 PAT (Personal Access Token): https://github.com/settings/tokens/new

img

img

6.创建 GitHub 用于备份的私库: https://github.com/new

img

7.打开Koyeb,创建一个新的APP。类型选择Docker

img

8.输入镜像名称:fscarmen/argo-nezha:latest

img

9.按照下图设置,下表为参考变量

变量名 是否必须 备注
GH_USER github 的用户名,用于面板管理授权
GH_CLIENTID 在 github 上申请
GH_CLIENTSECRET 在 github 上申请
GH_REPO 在 github 上备份哪吒服务端数据库文件的库
GH_EMAIL github 的邮箱,用于备份的 git 推送到远程库
GH_PAT github 的 PAT
ARGO_JSON https://fscarmen.cloudflare.now.cc 获取的 Argo Json
DATA_DOMAIN 客户端与服务端的通信 argo 域名
WEB_DOMAIN 面板 argo 域名
SSH_DOMAIN ssh 用的 argo 域名
SSH_PASSWORD ssh 的密码,只有在设置 SSH_JSON 后才生效,默认值 password

img

10.等待1-2分钟,待出现Healthy即为成功部署。这时可以使用Argo的域名或者是PaaS平台的域名访问探针面板

img

img

VPS 部署实例

  • 注意: ARGO_JSON= 后面需要有单引号,不能去掉
  • 如果 VPS 是 IPv6 only 的,请先安装 WARP IPv4 或者双栈: https://github.com/fscarmen/warp
  • 备份目录为当前路径的 dashboard 文件夹

docker 部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
docker run -dit \
--name nezha_dashboard \
--restart always \
-e GH_USER=<填 github 用户名> \
-e GH_EMAIL=<填 github 邮箱> \
-e GH_PAT=<填获取的> \
-e GH_REPO=<填自定义的> \
-e GH_CLIENTID=<填获取的> \
-e GH_CLIENTSECRET=<填获取的> \
-e ARGO_JSON='<填获取的>' \
-e WEB_DOMAIN=<填自定义的> \
-e DATA_DOMAIN=<填自定义的> \
-e SSH_DOMAIN=<填自定义的> \
-e SSH_PASSWORD=<填自定义的> \
fscarmen/argo-nezha

docker-compose 部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
version: '3.8'
services:
argo-nezha:
image: fscarmen/argo-nezha
container_name: nezha_dashboard
restart: always
environment:
- GH_USER=<填 github 用户名>
- GH_EMAIL=<<填 github 邮箱>
- GH_PAT=<填获取的>
- GH_REPO=<填自定义的>
- GH_CLIENTID=<填获取的>
- GH_CLIENTSECRET=<填获取的>
- ARGO_JSON='<填获取的>'
- WEB_DOMAIN=<填自定义的>
- DATA_DOMAIN=<填自定义的>
- SSH_DOMAIN=<填自定义的>
- SSH_PASSWORD=<填自定义的>

客户端接入

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

1
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

SSH 接入

1
<file path>/cloudflared access ssh --hostname ssh.seales.nom.za

img

img

img

自动还原备份

  • 把需要还原的文件名改到 github 备份库里的 README.md,定时服务会每分钟检测更新,并把上次同步的文件名记录在本地 /dbfile 处以与在线的文件内容作比对

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

img

手动还原备份

  • ssh 进入容器后运行,github 备份库里的 tar.gz 文件名,格式: dashboard-2023-04-22-21:42:10.tar.gz
1
bash /dashboard/restore.sh <文件名>

img

完美搬家

  • 备份原哪吒的 /dashboard 文件夹,压缩备份为 dashboard.tar.gz 文件
1
tar czvf dashboard.tar.gz /dashboard
  • 下载文件并放入私库,这个私库名要与新哪吒 完全一致,并把该库的 README.md 的内容编辑为 dashboard.tar.gz
  • 部署本项目新哪吒,完整填入变量即可。部署完成后,自动还原脚本会每分钟作检测,发现有新的内容即会自动还原,全程约 3 分钟

主体目录文件及说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
.
|-- dashboard
| |-- app # 哪吒面板主程序
| |-- argo.json # Argo 隧道 json 文件,记录着使用隧道的信息
| |-- argo.yml # Argo 隧道 yml 文件,用于在一同隧道下,根据不同域名来分流 web, gRPC 和 ssh 协议的作用
| |-- backup.sh # 备份数据脚本
| |-- data
| | |-- config.yaml # 哪吒面板的配置,如 Github OAuth2 / gRPC 域名 / 端口 / 是否启用 TLS 等信息
| | `-- sqlite.db # SQLite 数据库文件,记录着面板设置的所有 severs 和 cron 等信息
| |-- entrypoint.sh # 主脚本,容器运行后执行
| |-- nezha-agent # 哪吒客户端,用于监控本地 localhost
| |-- nezha.csr # SSL/TLS 证书签名请求
| |-- nezha.key # SSL/TLS 证书的私钥信息
| |-- nezha.pem # SSL/TLS 隐私增强邮件
| `-- restore.sh # 还原备份脚本
`-- dbfile # 记录最新的还原或备份文件名

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

免责声明:

  • 本程序仅供学习了解, 非盈利目的,请于下载后 24 小时内删除, 不得用作任何商业用途, 文字、数据及图片均有所属版权, 如转载须注明来源。
  • 使用本程序必循遵守部署免责声明。使用本程序必循遵守部署服务器所在地、所在国家和用户所在国家的法律法规, 程序作者不对使用者任何不当行为负责。

项目地址

https://github.com/fscarmen2/Argo-Nezha-Service-Container