ccf7e2a4c7
Enable sing-box Clash/V2Ray APIs for per-user metrics, persist cumulative traffic in SQLite, and refresh the dashboard every five seconds. Co-authored-by: Cursor <cursoragent@cursor.com>
6.1 KiB
6.1 KiB
运维与故障排查
服务检查
# sing-box 是否运行
systemctl is-active sing-box
# 管理面板是否运行
systemctl is-active jiedian-panel
# 配置语法
sing-box check -c /etc/sing-box/config.json
# 端口监听
ss -tlnp | grep 443 # Reality TCP
ss -tlnp | grep 5080 # 面板后端(仅本机)
ss -tlnp | grep :80 # Nginx(ACME + 面板反向代理)
ss -ulnp | grep 8443 # Hysteria2 UDP
# Nginx fallback
curl -s http://127.0.0.1:8080
管理面板访问
面板通过 Nginx 80 端口反向代理,不再单独暴露 8444。
# 查看面板路径(安装时自动生成或 .env 中配置)
grep PANEL_PATH /opt/jiedian/.env
# 示例:PANEL_PATH=jiedian-a1b2c3d4
# 访问地址:http://66.hyf2.cc/jiedian-a1b2c3d4/
curl -I "http://66.hyf2.cc/$(grep ^PANEL_PATH= /opt/jiedian/.env | cut -d= -f2)/login"
443 端口已被 sing-box Reality 占用,面板走 80 端口子路径。请妥善保管
PANEL_PATH,相当于隐藏入口。
面板可查看每个节点的 在线状态、连接数、实时速率、累计流量(数据来自 sing-box Clash API + V2Ray 统计,仅监听 127.0.0.1)。
常见问题
面板流量/在线状态显示「不可用」
sing-box 统计 API 未就绪,按顺序检查:
systemctl is-active sing-box
ss -tlnp | grep -E '9090|9091' # Clash API / V2Ray gRPC
grep CLASH_API_SECRET /opt/jiedian/.env
python3 /opt/jiedian/scripts/render-server.py
systemctl restart sing-box jiedian-panel
升级后若未重装,需重新生成 sing-box 配置并重启服务,才会启用 experimental.clash_api 与 v2ray_api。
在线状态始终离线但客户端能连
- 有流量时面板会按速率推断在线;若仍显示离线,执行
curl -s -H "Authorization: Bearer $(grep CLASH_API_SECRET /opt/jiedian/.env | cut -d= -f2)" http://127.0.0.1:9090/connections | head查看连接 metadata 是否含 user 字段 - 修改节点或升级后需重新渲染配置:
python3 /opt/jiedian/scripts/render-server.py && systemctl restart sing-box
面板打不开 / 404
- 路径不对:必须用完整路径,末尾带
/,例如http://域名/jiedian-xxxx/login - Nginx 未加载配置:
nginx -t && systemctl reload nginx cat /etc/nginx/sites-available/acme | grep -A5 jiedian - 面板进程未运行:
systemctl status jiedian-panel journalctl -u jiedian-panel -n 30 --no-pager curl -I http://127.0.0.1:5080/login - 阿里云安全组:只需放行
80/TCP,无需再放行 8444
面板登录后跳回登录页 / 样式丢失
通常是子路径反向代理头未生效,检查 Nginx 是否包含:
proxy_set_header X-Forwarded-Prefix /你的PANEL_PATH;
修改后 systemctl reload nginx,并确认 .env 中 PANEL_PATH 与 Nginx 一致。
设置了 PANEL_ALLOW_IP 后无法访问
.env 中 PANEL_ALLOW_IP 会限制仅该 IP 可访问面板。本机公网 IP 变更后需更新并重装 Nginx 配置:
# 编辑 .env 后重新渲染 nginx
cd /opt/jiedian
bash scripts/install.sh # 或手动 sed acme 配置后 reload nginx
忘记面板密码或路径
grep -E 'PANEL_(USERNAME|PASSWORD|PATH)' /opt/jiedian/.env
# 重置密码与 Reality 密钥
bash scripts/generate-keys.sh
acme.sh 证书申请失败
# 确认 DNS 已生效
dig +short A your.domain.com
# 确认 80 端口未被占用(nginx 需先启动)
ss -tlnp | grep :80
# 手动重试
/root/.acme.sh/acme.sh --issue -d your.domain.com -w /var/www/acme --force
sing-box 无法启动
journalctl -u sing-box -n 50 --no-pager
常见原因:证书路径错误、JSON 语法错误、443 被占用。
ss -tlnp | grep :443
sing-box check -c /etc/sing-box/config.json
客户端能连但速度慢
- 换 Hysteria2 节点(UDP/QUIC 抗丢包)
- 检查 VPS 带宽:
wget -O /dev/null http://speedtest.tele2.net/100MB.zip - 避免高峰时段长时间 4K 流媒体
IP 被封
- 向 VPS 商申请更换 IP
- 修改
.env中REALITY_SERVER_NAME为其他大站(如www.apple.com) - 重新运行
install.sh或手动更新/etc/sing-box/config.json并 restart
apt 锁被占用
安装脚本会自动等待最多 10 分钟。若超时:
# 查看占用进程
fuser /var/lib/dpkg/lock-frontend
# 等待 cloud-init / unattended-upgrades 结束后再执行
bash scripts/install.sh
SSH 主机密钥变更
VPS 重装系统后,本地执行:
ssh-keygen -R 你的VPS_IP
卸载后重装
cd /opt/jiedian
git pull
bash scripts/uninstall.sh
bash scripts/generate-keys.sh # 可选:重置密钥与面板密码
bash scripts/install.sh
改用 Xray 替代 sing-box(可选)
若更熟悉 Xray,可使用 server/xray-server.json.template:
# 安装 Xray
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
# 渲染配置
sed -e "s|\${UUID}|...|g" ... server/xray-server.json.template > /usr/local/etc/xray/config.json
systemctl restart xray
Hysteria2 仍需单独部署(或使用 sing-box 仅跑 Hy2 inbound)。
防火墙与安全组对照
| 端口 | 协议 | 用途 | 是否必须放行 |
|---|---|---|---|
| 22 | TCP | SSH | 是 |
| 80 | TCP | ACME 验证 + 管理面板 | 是 |
| 443 | TCP | VLESS + Reality | 是 |
| 8443 | UDP | Hysteria2 | 是 |
| 已废弃,无需放行 |
安全建议
- 使用随机
PANEL_PATH,不要公开分享面板地址 - 可选在
.env设置PANEL_ALLOW_IP=你的公网IP限制访问来源 - SSH 改用密钥登录,禁用密码:
PermitRootLogin prohibit-password - 可选修改 SSH 端口,ufw 放行新端口后再删 22
- 不要将
.env或节点分享链接上传到公开仓库