Koyeb部署哪吒服务

三者介绍

什么是 Koyeb

Koyeb 是一个无服务器平台,旨在帮助用户快速部署和管理各种应用程序。它提供简便的部署流程和自动扩展功能,使开发者能够专注于应用本身,而不必担心基础设施的维护。

什么是 Argo 隧道

Argo 隧道是 Cloudflare 提供的一项服务,允许用户通过一个安全的隧道将 Web 流量路由到他们的服务器。这样做的好处是无需暴露服务器的真实 IP 地址,同时还能利用 Cloudflare 的性能优化和安全防护功能。

什么是哪吒服务端

哪吒服务端是一款开源的网络管理工具,用于监控和管理服务器。它提供实时的流量监控、警报通知和多种统计图表,帮助管理员更好地掌握服务器的运行状态。

三者关系

通过在 Koyeb 上部署哪吒服务端,并使用 Argo 隧道对其进行保护和加速,您可以快速、安全地管理和监控服务器。Koyeb 提供了简便的部署流程,而 Argo 隧道则确保了流量的安全和高效路由。这种组合使得哪吒服务端的部署变得更加便捷和可靠。

部署准备

Cloudflare和Github配置

  1. 注册cloudflare账户,购买域名,配置环境

  2. 到 Cloudflare 官网,选择使用的域名,打开 网络 选项将 gRPC 开关打开

  3. 获取 github 认证授权: https://github.com/settings/applications/new 面板域名加上 https:// 开头,回调地址再加上 /oauth2/callback 结尾

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

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

Argo 认证获取方式

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

获取方式之JSON

获取方式之Token

  • 通过 Cloudflare 官网,手动生成 Argo 隧道 token 信息,到 cf 官网:https://dash.cloudflare.com/

  • 进入 zero trust 里生成 token 隧道和信息。

  • ssh 路径 22/ssh 为 < client id >

PaaS 镜像与环境变量

镜像 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 部署实例

Deploy to Koyeb

  • 演示示例

主体目录文件及说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/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

项目特点:

  • 适用范围更广 — 只要能连通网络,就能安装哪吒服务端,如 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 分自动检测最新的官方面板版本及备份还原脚本,有升级时自动更新
  • 手/自一体还原备份 — 每分钟检测一次在线还原文件的内容,遇到有更新立刻还原
  • 默认内置本机探针 — 能很方便的监控自身服务器信息

感谢作者