CloudFlare Tunnel哪吒监控面板
环境要求
- 飞牛NAS已安装 Docker + Docker Compose(Docker版本≥20.10,无需root权限);
- 已开通NAS SSH访问(或能通过文件管理器编辑配置文件);
- 防火墙放行
5501端口(仅需这1个对外端口)。
前期操作
- 记录NAS本地IP(如
192.168.5.134,在NAS网络设置中查看); - 确保Cloudflare Tunnel已在NAS安装(若未安装,先完成Tunnel客户端部署)。
Fnos本地操作
创建部署目录
通过NAS SSH或文件管理器创建统一目录(方便维护):
# 登录NAS SSH执行(或手动创建对应文件夹)
mkdir -p /vol1/1000/Docker/nezha/{data,nginx-logs}
cd /vol1/1000/Docker/nezha
最终目录结构:
/vol1/1000/Docker/nezha/
├── docker-compose.yml # 容器编排文件
├── nginx.conf # Nginx代理配置
├── data/ # 面板数据目录
└── nginx-logs/ # Nginx日志目录
编写配置文件
全部可直接复制即可
文件路径:/vol1/1000/Docker/nezha/docker-compose.yml
networks:
nezha-net:
driver: bridge
services:
nezha-dashboard:
image: ghcr.io/nezhahq/nezha:v1.12.0 # 哪吒面板的程序版本
container_name: nezha-dashboard # 容器名字,方便识别
restart: unless-stopped # 开机自动启动,崩溃了自动重启
volumes:
- ./data:/dashboard/data # 把面板数据存到咱们创建的 data 文件夹
environment:
- TZ=Asia/Shanghai # 时区设为上海(时间准确)
networks:
- nezha-net
expose:
- "8008" # 面板内部端口,不用对外暴露
nginx-proxy:
image: nginx:alpine # 轻量版 Nginx 反向代理
container_name: nezha-nginx # Nginx 容器名字
restart: unless-stopped # 开机自动启动
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf # 加载咱们的 Nginx 配置
- ./nginx-logs:/var/log/nginx # 日志存到 nginx-logs 文件夹
ports:
- "5501:80" # 对外暴露 5501 端口,前面是 NAS 端口,后面是容器端口
networks:
- nezha-net
environment:
- TZ=Asia/Shanghai # 时区设为上海
文件路径:/vol1/1000/Docker/nezha/nginx.conf
underscores_in_headers on; # 允许请求头里有下划线,避免报错
# 下面两行是让面板能看到真实访问 IP(用 Cloudflare 时有用)
set_real_ip_from 0.0.0.0/0;
real_ip_header CF-Connecting-IP;
# 指向哪吒面板的内部地址
upstream dashboard {
server nezha-dashboard:8008;
keepalive 256; # 保持连接,提升速度
}
server {
listen 80; # Nginx 内部监听 80 端口(和上面 ports 里的 80 对应)
server_name localhost; # 本地访问,不用改
# 支持 gRPC(监控代理和面板通信要用,必须有)
location ^~ /proto.NezhaService/ {
grpc_set_header Host host;
grpc_set_header nz-realiphttp_CF_Connecting_IP;
grpc_pass grpc://dashboard;
}
# 支持 Websocket(远程控制、实时数据要用,必须有)
location ~* ^/api/v1/ws/(server|terminal|file)(.*){
proxy_set_header Connection "upgrade";
proxy_set_header Upgradehttp_upgrade;
proxy_pass http://dashboard;
}
# 网页访问(打开面板的页面要用)
location / {
proxy_set_header Host $host;
proxy_pass http://dashboard;
}
}
文件路径:/vol1/1000/Docker/nezha/data/config.yaml
debug: false
language: zh-CN
site:
brand: 哪吒监控面板
httpport: 8008
grpcport: 8008
grpchost: nezha-dashboard
tls: false
location: Asia/Shanghai
🔐 默认账号密码:admin/admin
# 启动容器
cd /vol1/1000/Docker/nezha
docker-compose pull
docker-compose up -d
docker-compose ps
两个容器都为 Up 即成功。
Cloudflar操作
注意:
Cloudflare 默认 不启用 HTTP/2,哪吒 Agent 的 gRPC 会失败。必须在 cloudflared 的 systemd 服务里添加:
--protocol http2
Cloudflare 隧道的安装非常简单这里就不讲了,主要讲解Cloudflared 服务配置。
文件路径(大多数系统):
/etc/systemd/system/cloudflared.service
打开:
sudo vim /etc/systemd/system/cloudflared.service
按「i」进入编辑模式,删除文件里原来的内容,粘贴下面的示例配置(注意改「<你的 CloudflareTunnelToken>」为你刚才复制的 Token):
[Unit]
Description=cloudflared 隧道服务(哪吒监控用)
After=network-online.target # 网络通了之后再启动
Wants=network-online.target
[Service]
TimeoutStartSec=0 # 取消启动超时(避免网络慢导致启动失败)
Type=notify
# 核心命令:启动隧道,开启 HTTP/2,用 Token 登录(不用其他配置文件)
ExecStart=/usr/bin/cloudflared --no-autoupdate tunnel run --protocol http2 --token <你的CloudflareTunnelToken>
Restart=on-failure # 隧道失败时自动重启
RestartSec=5s # 5 秒后重启
[Install]
WantedBy=multi-user.target # 多用户模式下启动
无注释版本:
[Unit]
Description=cloudflared
After=network-online.target
Wants=network-online.target
[Service]
TimeoutStartSec=0
Type=notify
ExecStart=/usr/bin/cloudflared --no-autoupdate tunnel run --protocol http2 --token <你的CloudflareTunnelToken>
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
修改 systemd 后必须执行:
sudo systemctl daemon-reload
sudo systemctl restart cloudflared
sudo systemctl status cloudflared
看到:Active: active (running) 即代表隧道正常。
面板设置
Agent对接地址【域名/IP:端口】填写应当与穿透的网址一致,直接填:scendr.de5.net:443
- 解释:
- 域名:
scendr.de5.net(你提供的 CF 绑定域名,不用加https://或后面的/dashboard/settings路径!) - 端口:
443(HTTPS/TLS 的默认端口,Cloudflare 隧道自动映射,不用填 5501!)
- 域名:
局域网对接(仅同一 WiFi 下用)
填:NAS局域网IP:5501(比如 192.168.5.134:5501) 适合:公网出问题时临时对接,不用 TLS(局域网安全)