使用 Argo 隧道的哪吒服务端
Documentation: English version | 中文版
- 项目特点
- 准备需要用的变量
- Argo 认证的获取方式: json 或 token
- PaaS 部署实例
- VPS 部署方式 1 --- docker
- VPS 部署方式 2 --- 宿主机
- 客户端接入
- SSH 接入
- 手动备份数据
- 手动更新备份和还原脚本
- 自动还原备份
- 手动还原备份
- 完美搬家
- 主体目录文件及说明
- 鸣谢下列作者的文章和项目
- 免责声明
- 适用范围更广 --- 只要能连通网络,就能安装哪吒服务端,如 LXC, OpenVZ VPS,Nas 虚拟机 , Container PaaS 等
- Argo 隧道突破需要公网入口的限制 --- 传统的哪吒需要有两个公网端口,一个用于面板的访问,另一个用于客户端上报数据,本项目借用 Cloudflare Argo 隧道,使用内网穿透的办法
- IPv4 / v6 具备更高的灵活性 --- 传统哪吒需要处理服务端和客户端的 IPv4/v6 兼容性问题,还需要通过 warp 等工具来解决不对应的情况。然而,本项目可以完全不需要考虑这些问题,可以任意对接,更加方便和简便
- 一条 Argo 隧道分流多个域名和协议 --- 建立一条内网穿透的 Argo 隧道,即可分流三个域名(hostname)和协议(protocal),分别用于面板的访问(http),客户端上报数据(tcp)和 ssh(可选)
- Grpc 反向代理的 gRPC 数据端口 --- 配上证书做 tls 终结,然后 Argo 的隧道配置用 https 服务指向这个反向代理,启用http2回源,grpc(nezha)->Grpc Proxy->h2(argo)->cf cdn edge->agent
- 每天自动备份 --- 数据持久化从本地改为线上,北京时间每天 4 时 0 分自动备份整个哪吒面板文件夹到指定的 github 私库,包括面板主题,面板设置,探针数据和隧道信息,备份保留近 5 天数据;鉴于内容十分重要,必须要放在私库
- 每天自动更新面板和更新脚本 -- 北京时间每天 4 时 0 分自动检测最新的官方面板版本及备份还原脚本,有升级时自动更新
- 手/自一体还原备份 --- 每分钟检测一次在线还原文件的内容,遇到有更新立刻还原
- 默认内置本机探针 --- 能很方便的监控自身服务器信息
![image](https://private-user-images.githubusercontent.com/92626977/302051827-ecd9d887-68f0-46f9-9a63-eb0275f066eb.jpg?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM3MDg3NTUsIm5iZiI6MTcyMzcwODQ1NSwicGF0aCI6Ii85MjYyNjk3Ny8zMDIwNTE4MjctZWNkOWQ4ODctNjhmMC00NmY5LTlhNjMtZWIwMjc1ZjA2NmViLmpwZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE1VDA3NTQxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTBiNjM3MWE1YjhhYmQ2ZDEzYzBiODQ0ZjMwMjlhMjdhZjJiZDUxMWNmMWUxNWQ3YTM2YTRkMmVhODE3Mzg0ZjUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.YP7KSbZck8DwizFu2QYXVMuTrN5jt9ANVpumnsSAA5M)
- 到 Cloudflare 官网,选择使用的域名,打开
网络
选项将gRPC
开关打开
- 获取 github 认证授权: https://github.com/settings/applications/new
面板域名加上 https://
开头,回调地址再加上 /oauth2/callback
结尾
- 获取 github 的 PAT (Personal Access Token): https://github.com/settings/tokens/new
- 创建 github 用于备份的私库: https://github.com/new
Argo 隧道认证方式有 json 和 token,使用两个方式其中之一。推荐前者,理由脚本会处理好所有的 Argo 隧道参数和路径,后者需要到 Cloudflare 官网手动设置,容易出错。
通过 Cloudflare Json 生成网轻松获取 Argo 隧道 json 信息: https://fscarmen.cloudflare.now.cc
![image](https://private-user-images.githubusercontent.com/92626977/266221604-5b734a9d-b4fd-40ca-b7e6-5a1732a53175.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM3MDg3NTUsIm5iZiI6MTcyMzcwODQ1NSwicGF0aCI6Ii85MjYyNjk3Ny8yNjYyMjE2MDQtNWI3MzRhOWQtYjRmZC00MGNhLWI3ZTYtNWExNzMyYTUzMTc1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE1VDA3NTQxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTc1MTRhZDk3MjU5MGZmNDg1MzRjNjZhNmFhYWIxZGQxN2JlOTllMzkyZTFjN2I2YjdmMDQ4NTRlNGYzYTE2YWImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.w_bdBujHORBL07tvawDgTFqMhIW5dI6xKHL6G6bJSk4)
到 cf 官网:https://dash.cloudflare.com/
- 进入 zero trust 里生成 token 隧道和信息。
- 其中数据路径 443/https 为
proto.NezhaService
- ssh 路径 22/ssh 为 < client id >
![image](https://private-user-images.githubusercontent.com/92626977/266232710-0c467d8b-5fbc-4bde-ac8a-db70ed8798f0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM3MDg3NTUsIm5iZiI6MTcyMzcwODQ1NSwicGF0aCI6Ii85MjYyNjk3Ny8yNjYyMzI3MTAtMGM0NjdkOGItNWZiYy00YmRlLWFjOGEtZGI3MGVkODc5OGYwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE1VDA3NTQxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ0ZmEyOTA5NGQzYjk5YjY3Y2E1MTIxOTBlMmRiMTc0NzZhMzFjY2U3MDEyNjY5YzJlZThhZTcxYWY0ZThiMWUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.VxZX7KjZdGeamM7XIhwY0WH5414O8MdvBKW4I40y8og)
![image](https://private-user-images.githubusercontent.com/92626977/266232314-5aa4df19-f277-4582-8a4d-eef34a00085c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM3MDg3NTUsIm5iZiI6MTcyMzcwODQ1NSwicGF0aCI6Ii85MjYyNjk3Ny8yNjYyMzIzMTQtNWFhNGRmMTktZjI3Ny00NTgyLThhNGQtZWVmMzRhMDAwODVjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE1VDA3NTQxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWI1OGMwZjdiYTM1MGY3MjRkYjEzZDAyN2VlNjBjMzgwNTdmMjNhZTM4YjcyYTgyODYxNTcxYmQ3Yjg4ZTNjNDImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.SdpuyEfQTklvmtcT2kUkjH9NE2l3YKVzSVNHgQE072Q)
![image](https://private-user-images.githubusercontent.com/92626977/266236059-ec06ec20-a68d-405c-b6de-cd4c52cbd8c0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM3MDg3NTUsIm5iZiI6MTcyMzcwODQ1NSwicGF0aCI6Ii85MjYyNjk3Ny8yNjYyMzYwNTktZWMwNmVjMjAtYTY4ZC00MDVjLWI2ZGUtY2Q0YzUyY2JkOGMwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE1VDA3NTQxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJkNWRlZTEzN2QyM2IwNzc3OWM0YTQ0NzhmMjM1YTM2ZDY0NDgyYzI1ZTMzMTNlYTg0NzM3MmI0NTA4M2RjY2QmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.dOHBVge0l-hPmhpcqdtWc2yB-kjw_7boRAS71c_1SNA)
![image](https://private-user-images.githubusercontent.com/92626977/276819847-538707e1-a17b-4a0f-a8c0-63d0c7bc96aa.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM3MDg3NTUsIm5iZiI6MTcyMzcwODQ1NSwicGF0aCI6Ii85MjYyNjk3Ny8yNzY4MTk4NDctNTM4NzA3ZTEtYTE3Yi00YTBmLWE4YzAtNjNkMGM3YmM5NmFhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE1VDA3NTQxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTY5NTYzY2U2MzRmMWE1ZjY1YzYyM2MzOGU4NDhhZWUwNTgwOTZjYjgxNjg4YTEyMzE1NGM3NDBmNjZkMTlmMWUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Q54D8fqdcn5Mxga__rUzWuDHaeM9qwW5Q-hbSpRvHGg)
![image](https://private-user-images.githubusercontent.com/92626977/276815440-9f5778fd-aa94-4fda-9d85-552b68f6d530.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM3MDg3NTUsIm5iZiI6MTcyMzcwODQ1NSwicGF0aCI6Ii85MjYyNjk3Ny8yNzY4MTU0NDAtOWY1Nzc4ZmQtYWE5NC00ZmRhLTlkODUtNTUyYjY4ZjZkNTMwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE1VDA3NTQxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTdhODY0OWQ0ZTYxNjE2MzU1NGJlMTcwZWY1MTI1YmRkYWQ0YmQ0M2JiYWFjZmEzZWFjODQ5OGY2OWQ3ZmRkNTImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.4j3KfpaZpU32z1WRKBGs4rRz6yV5iRwQrPZRzTsDq5s)
![image](https://private-user-images.githubusercontent.com/92626977/266238630-d0fba15c-f41b-4ee4-bea3-f0506d9b2d23.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM3MDg3NTUsIm5iZiI6MTcyMzcwODQ1NSwicGF0aCI6Ii85MjYyNjk3Ny8yNjYyMzg2MzAtZDBmYmExNWMtZjQxYi00ZWU0LWJlYTMtZjA1MDZkOWIyZDIzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE1VDA3NTQxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTk0NzhhNjU1MTAwMWI0YTIzZjAzOWY2MDQ2NDY5NjMyYWE2ZjNiNDg3NjlkYTU5NGMwYTg4OWM5OThlNTAwMjcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.gFleU8SEKcCixCtGDtVWcR7Nx938nGHZFLWSmYFTF-8)
![image](https://private-user-images.githubusercontent.com/92626977/276951275-228b8e86-32a8-479a-8a86-89ed9b8b5b5e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM3MDg3NTUsIm5iZiI6MTcyMzcwODQ1NSwicGF0aCI6Ii85MjYyNjk3Ny8yNzY5NTEyNzUtMjI4YjhlODYtMzJhOC00NzlhLThhODYtODllZDliOGI1YjVlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE1VDA3NTQxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTUyNjg4ZmMyMzdjYzE4MjVlYTMyYmEzM2QwNzJiZDQ4YmJmYWQ0Nzg0YzU1NjgyMDExMDQ5ZjdlMWY2MDY3MzImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.qYDMDixbFo4I0Wh3axPyAnoQMAqrK33B-s3cz7_HG_k)
镜像 fscarmen/argo-nezha:latest
, 支持 amd64 和 arm64 架构
用到的变量
变量名 | 是否必须 | 备注 |
---|---|---|
GH_USER | 是 | github 的用户名,用于面板管理授权 |
GH_CLIENTID | 是 | 在 github 上申请 |
GH_CLIENTSECRET | 是 | 在 github 上申请 |
GH_BACKUP_USER | 否 | 在 github 上备份哪吒服务端数据库的 github 用户名,不填则与面板管理授权的账户 GH_USER 一致 |
GH_REPO | 否 | 在 github 上备份哪吒服务端数据库文件的 github 库 |
GH_EMAIL | 否 | github 的邮箱,用于备份的 git 推送到远程库 |
GH_PAT | 否 | github 的 PAT |
REVERSE_PROXY_MODE | 否 | 默认使用 Caddy 应用来反代,这时可以不填写该变量;如需 Nginx 或 gRPCwebProxy 反代,请设置该值为 nginx 或 grpcwebproxy |
ARGO_AUTH | 是 | Json: 从 https://fscarmen.cloudflare.now.cc 获取的 Argo Json Token: 从 Cloudflare 官网获取 |
ARGO_DOMAIN | 是 | Argo 域名 |
NO_AUTO_RENEW | 否 | 默认不需要该变量,即每天定时同步在线最新的备份和还原脚本。如不需要该功能,设置此变量,并赋值为 1 |
Koyeb
![image](https://private-user-images.githubusercontent.com/92626977/277978122-8cfdb9ab-5fb6-483f-a382-47aef0d64bea.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM3MDg3NTUsIm5iZiI6MTcyMzcwODQ1NSwicGF0aCI6Ii85MjYyNjk3Ny8yNzc5NzgxMjItOGNmZGI5YWItNWZiNi00ODNmLWEzODItNDdhZWYwZDY0YmVhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE1VDA3NTQxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTYwYWYxYWQxZWRmMWM1OTQ4MzU1YWJhMWRhYmU1YWQ0YTRhMzhlNWMzMTU4YTBmNTU0N2M5NzFlYzVjNTQ0YjMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.uM0DL1tzUNmTh-dSi_00qEWPxZXxeZa4oaX6ENJzdgY)
- 注意: ARGO_DOMAIN= 后面需要有单引号,不能去掉
- 如果 VPS 是 IPv6 only 的,请先安装 WARP IPv4 或者双栈: https://gitlab.com/fscarmen/warp
- 备份目录为当前路径的 dashboard 文件夹
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 一致,可以不要该环境变量> \
-e REVERSE_PROXY_MODE=<选填,选填,选填! 如想用 Nginx 或 gRPCwebProxy 替代 Caddy 反代的话,请设置该变量并赋值为 `nginx` 或 `grpcwebproxy`> \
-e NO_AUTO_RENEW=<选填,选填,选填! 如果不需要自动在线同步最新的 backup.sh 和 restore.sh,请设置该变量并赋值为 `1`>
fscarmen/argo-nezha
version: '3.8'
networks:
nezha-dashboard:
name: nezha-dashboard
services:
argo-nezha:
image: fscarmen/argo-nezha
pull_policy: always
container_name: nezha_dashboard
restart: always
networks:
- nezha-dashboard
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 一致,可以不要该环境变量>
- REVERSE_PROXY_MODE=<选填,选填,选填! 如想用 Nginx 或 gRPCwebProxy 替代 Caddy 反代的话,请设置该变量并赋值为 `nginx` 或 `grpcwebproxy`>
- NO_AUTO_RENEW=<选填,选填,选填! 如果不需要自动在线同步最新的 backup.sh 和 restore.sh,请设置该变量并赋值为 `1`>
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
- 以 macOS + WindTerm 为例,其他根据使用的 SSH 工具,结合官方官方说明文档: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/use_cases/ssh/#2-connect-as-a-user
- 官方 cloudflared 下载: https://github.com/cloudflare/cloudflared/releases
- 以下输入命令举例: SSH 用户名: root, 密码:<GH_CLIENTSECRET>
<file path>/cloudflared access ssh --hostname nezha.seales.nom.za/<GH_CLIENTID>
![image](https://private-user-images.githubusercontent.com/92626977/276812391-507b037a-25c6-457f-b2b5-d54f4b70a2b6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM3MDg3NTUsIm5iZiI6MTcyMzcwODQ1NSwicGF0aCI6Ii85MjYyNjk3Ny8yNzY4MTIzOTEtNTA3YjAzN2EtMjVjNi00NTdmLWIyYjUtZDU0ZjRiNzBhMmI2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE1VDA3NTQxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTAyMTIwYTJjZDBhNmEwMzUxZDhkZDZmMzJkNjkwYjRkZTIxODFjNTczM2JhMTFmOTMyM2I3NDQxNzVmMjRkMzgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.RUBI3Tr3NhVp8ga-2twqO8WtFQgL6hAjlKm-G_rio1w)
![image](https://private-user-images.githubusercontent.com/92626977/276811422-80284f0b-e2d7-4adb-982a-969aca0cb5f6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM3MDg3NTUsIm5iZiI6MTcyMzcwODQ1NSwicGF0aCI6Ii85MjYyNjk3Ny8yNzY4MTE0MjItODAyODRmMGItZTJkNy00YWRiLTk4MmEtOTY5YWNhMGNiNWY2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE1VDA3NTQxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTljZWY1OGFjZDkyZGI0ZmUwMWQ2YjNhZTEyNDE1OGRhZThlNmIyYzEzZmZlNjJhMzE4OWM0NDVkNzMxNDk5YWMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.gTUY9l9mo3wJXJ1HUSIf4Rmg_IpFBQZcCWLah3qBi94)
方法一: 把 Github 备份库里的 README.md
文件内容改为 backup
![image](https://private-user-images.githubusercontent.com/92626977/286192186-c5b6bc4b-e69c-48ce-97d4-3f9be88515f3.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM3MDg3NTUsIm5iZiI6MTcyMzcwODQ1NSwicGF0aCI6Ii85MjYyNjk3Ny8yODYxOTIxODYtYzViNmJjNGItZTY5Yy00OGNlLTk3ZDQtM2Y5YmU4ODUxNWYzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE1VDA3NTQxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTVjNzhkMDY1OGI2ZWNiNTM1YzM2MjRiMzY5ZWEzNTM5MmFkZDJhYzRmODQ4ZmI0MDczOGE0NWM4NTEwZThiMDEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.qO5JH5sWx0oCoY8Jhvuyc06AXlYiiI5_UDmWK6JMqwc)
方法二: ssh 进去后,容器版本运行 /dashboard/backup.sh
; 非容器版本运行 /opt/nezha/dashboard/backup.sh
ssh 进去后,容器版本运行 /dashboard/renew.sh
; 非容器版本运行 /opt/nezha/dashboard/renew.sh
- 把需要还原的文件名改到 github 备份库里的
README.md
,定时服务会每分钟检测更新,并把上次同步的文件名记录在本地/dbfile
处以与在线的文件内容作比对
下图为以还原文件名为 dashboard-2023-04-23-13:08:37.tar.gz
作示例
- ssh 进入容器后运行,github 备份库里的 tar.gz 文件名,格式: dashboard-2023-04-22-21:42:10.tar.gz
bash /dashboard/restore.sh <文件名>
- 备份原哪吒的
/dashboard
文件夹,压缩备份为dashboard.tar.gz
文件
tar czvf dashboard.tar.gz /dashboard
- 下载文件并放入私库,这个私库名要与新哪吒 <GH_REPO> 完全一致,并把该库的 README.md 的内容编辑为
dashboard.tar.gz
- 部署本项目新哪吒,完整填入变量即可。部署完成后,自动还原脚本会每分钟作检测,发现有新的内容即会自动还原,全程约 3 分钟
/dashboard/
|-- app # 哪吒面板主程序
|-- argo.json # Argo 隧道 json 文件,记录着使用隧道的信息
|-- argo.yml # Argo 隧道 yml 文件,用于在一同隧道下,根据不同域名来分流 web, gRPC 和 ssh 协议的作用
|-- backup.sh # 备份数据脚本
|-- restore.sh # 还原备份脚本
|-- renew.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 反代主程序
|-- caddy # Caddy 主程序
|-- Caddyfile # Caddy 配置文件
`-- nezha-agent # 哪吒客户端,用于监控本地 localhost
- 热心的朝阳群众 Robin,讨论哪吒服务端与客户端的关系,从而诞生了此项目
- 哪吒官网: https://nezha.wiki/ , TG 群: https://t.me/nezhamonitoring
- 共穷国际老中医: http://solitud.es/
- Akkia's Blog: https://blog.akkia.moe/
- 胡桃's Blog: https://blog.萝莉.org/
- HiFeng's Blog: https://www.hicairo.com/
- 用 Cloudflare Tunnel 进行内网穿透: https://blog.outv.im/2021/cloudflared-tunnel/
- 如何给 GitHub Actions 添加自己的 Runner 主机: https://cloud.tencent.com/developer/article/1756690
- github self-hosted runner 添加与启动: https://blog.csdn.net/sinat_32188225/article/details/125978331
- 如何从Docker镜像中导出文件: https://www.pkslow.com/archives/extract-files-from-docker-image
- grpcwebproxy: https://github.com/improbable-eng/grpc-web/tree/master/go/grpcwebproxy
- Applexad 的哪吒官方改版的面板二进制文件: https://github.com/applexad/nezha-binary-build
- 本程序仅供学习了解, 非盈利目的,请于下载后 24 小时内删除, 不得用作任何商业用途, 文字、数据及图片均有所属版权, 如转载须注明来源。
- 使用本程序必循遵守部署免责声明。使用本程序必循遵守部署服务器所在地、所在国家和用户所在国家的法律法规, 程序作者不对使用者任何不当行为负责。