fix: dashboard port 5804→5807 (avoid conflicts with wechat_webhook and zhiwei bot)

This commit is contained in:
hmo
2026-07-19 10:56:42 +08:00
parent 747fdfe467
commit 782a914a3c
7 changed files with 42 additions and 24 deletions
+1 -1
View File
@@ -28,7 +28,7 @@ LOG_FILE = LOGS_DIR / "health_check.log"
# ---- Service List ---- # ---- Service List ----
SERVICES = [ SERVICES = [
{"name": "mofin_api", "label": "MoFin API", "host": "127.0.0.1", "port": 8899, "type": "http", "check": "/api/portfolio"}, {"name": "mofin_api", "label": "MoFin API", "host": "127.0.0.1", "port": 8899, "type": "http", "check": "/api/portfolio"},
{"name": "mofin_dashboard", "label": "Dashboard", "host": "127.0.0.1", "port": 5804, "type": "http", "check": "/api/health"}, {"name": "mofin_dashboard", "label": "Dashboard", "host": "127.0.0.1", "port": 5807, "type": "http", "check": "/api/health"},
{"name": "zhiwei_gateway", "label": "知微 Gateway", "host": "127.0.0.1", "port": 8643, "type": "http", "check": "/v1/health"}, {"name": "zhiwei_gateway", "label": "知微 Gateway", "host": "127.0.0.1", "port": 8643, "type": "http", "check": "/v1/health"},
{"name": "ejabberd", "label": "ejabberd XMPP", "host": "127.0.0.1", "port": 5222, "type": "tcp", "check": None}, {"name": "ejabberd", "label": "ejabberd XMPP", "host": "127.0.0.1", "port": 5222, "type": "tcp", "check": None},
{"name": "mofin_db", "label": "MoFin 数据库", "host": "127.0.0.1", "port": 0, "type": "db", "check": "/home/hmo/web-dashboard/data/mofin.db"}, {"name": "mofin_db", "label": "MoFin 数据库", "host": "127.0.0.1", "port": 0, "type": "db", "check": "/home/hmo/web-dashboard/data/mofin.db"},
+2 -2
View File
@@ -44,7 +44,7 @@ logging.basicConfig(
log = logging.getLogger("dashboard") log = logging.getLogger("dashboard")
# ---- Constants ---- # ---- Constants ----
PORT = int(os.environ.get("MOFIN_DASHBOARD_PORT", 5804)) PORT = int(os.environ.get("MOFIN_DASHBOARD_PORT", 5807))
START_TIME = time.time() START_TIME = time.time()
# ---- Monitored Services ---- # ---- Monitored Services ----
@@ -62,7 +62,7 @@ SERVICES = [
{ {
"name": "mofin_dashboard", "name": "mofin_dashboard",
"label": "Dashboard", "label": "Dashboard",
"port": 5804, "port": 5807,
"host": "127.0.0.1", "host": "127.0.0.1",
"type": "http", "type": "http",
"check": "/api/health", "check": "/api/health",
+2 -2
View File
@@ -1,6 +1,6 @@
# MoFin — Dashboard API 参考 # MoFin — Dashboard API 参考
> 版本: v1.0 | 端口: 5804 | 入口: http://192.168.1.246:5804 > 版本: v1.0 | 端口: 5807 | 入口: http://192.168.1.246:5807
--- ---
@@ -94,7 +94,7 @@ MoFin Dashboard
crontab (每 5 分钟) crontab (每 5 分钟)
└── agents_health_check.py → last_health_check.json └── agents_health_check.py → last_health_check.json
Dashboard (:5804) Dashboard (:5807)
├── /api/services ← 实时 TCP/HTTP 检测 ├── /api/services ← 实时 TCP/HTTP 检测
├── /api/monitor ← 聚合读取 health check JSON ├── /api/monitor ← 聚合读取 health check JSON
└── /api/module-spec/<module> ← 读取 specs/ └── /api/module-spec/<module> ← 读取 specs/
+9 -9
View File
@@ -9,7 +9,7 @@
| 组件 | 守护方式 | 端口 | 说明 | | 组件 | 守护方式 | 端口 | 说明 |
|------|---------|------|------| |------|---------|------|------|
| **server.py** | systemd `mofin-api` | 8899 | 持仓情报 API(已有,不动) | | **server.py** | systemd `mofin-api` | 8899 | 持仓情报 API(已有,不动) |
| **dashboard.py** | systemd `mofin-dashboard` | 5804 | 管理门户(新增) | | **dashboard.py** | systemd `mofin-dashboard` | 5807 | 管理门户(新增) |
| **health_check** | crontab `*/5 * * * *` | — | Tier1 健康检查(新增) | | **health_check** | crontab `*/5 * * * *` | — | Tier1 健康检查(新增) |
--- ---
@@ -49,9 +49,9 @@ sudo systemctl status mofin-dashboard
### 1.3 验证 ### 1.3 验证
```bash ```bash
curl http://127.0.0.1:5804/api/health curl http://127.0.0.1:5807/api/health
curl http://127.0.0.1:5804/api/services | python3 -m json.tool curl http://127.0.0.1:5807/api/services | python3 -m json.tool
# 浏览器访问: http://192.168.1.246:5804 # 浏览器访问: http://192.168.1.246:5807
``` ```
--- ---
@@ -71,18 +71,18 @@ crontab -l | grep health
## 3. 防火墙 ## 3. 防火墙
```bash ```bash
sudo ufw status | grep -E '8899|5804' sudo ufw status | grep -E '8899|5807'
# 如果未开放: # 如果未开放:
# sudo ufw allow 5804/tcp # sudo ufw allow 5807/tcp
``` ```
--- ---
## 4. 部署后验证清单 ## 4. 部署后验证清单
- [ ] `curl http://127.0.0.1:5804/api/health``{"status":"ok"}` - [ ] `curl http://127.0.0.1:5807/api/health``{"status":"ok"}`
- [ ] `curl http://127.0.0.1:5804/api/services` → 返回 5 个服务状态 - [ ] `curl http://127.0.0.1:5807/api/services` → 返回 5 个服务状态
- [ ] 浏览器打开 `http://192.168.1.246:5804` → Services Tab 显示服务状态 - [ ] 浏览器打开 `http://192.168.1.246:5807` → Services Tab 显示服务状态
- [ ] Dashboard F 健康 Tab → 定时任务状态显示正常 - [ ] Dashboard F 健康 Tab → 定时任务状态显示正常
- [ ] 点击各模块 ?§ 按钮 → 弹出 spec 帮助内容 - [ ] 点击各模块 ?§ 按钮 → 弹出 spec 帮助内容
- [ ] `python3 agents_health_check.py` → 无输出(全正常) - [ ] `python3 agents_health_check.py` → 无输出(全正常)
+4 -4
View File
@@ -1,6 +1,6 @@
# MoFin — 快速操作手册 # MoFin — 快速操作手册
> 生产环境: Linux 192.168.1.246 | 端口: API 8899 / Dashboard 5804 > 生产环境: Linux 192.168.1.246 | 端口: API 8899 / Dashboard 5807
--- ---
@@ -8,10 +8,10 @@
```bash ```bash
# 打开 Dashboard 看全局 # 打开 Dashboard 看全局
http://192.168.1.246:5804 http://192.168.1.246:5807
# 命令行快速状态 # 命令行快速状态
ssh hmo@192.168.1.246 "curl -s http://127.0.0.1:5804/api/services | python3 -m json.tool | head -20" ssh hmo@192.168.1.246 "curl -s http://127.0.0.1:5807/api/services | python3 -m json.tool | head -20"
``` ```
--- ---
@@ -71,7 +71,7 @@ ssh hmo@192.168.1.246 "cd ~/MoFin && git pull --rebase"
ssh hmo@192.168.1.246 "sudo systemctl restart mofin-dashboard" ssh hmo@192.168.1.246 "sudo systemctl restart mofin-dashboard"
# 3. 验证 # 3. 验证
ssh hmo@192.168.1.246 "curl -s http://127.0.0.1:5804/api/health" ssh hmo@192.168.1.246 "curl -s http://127.0.0.1:5807/api/health"
``` ```
--- ---
+20 -2
View File
@@ -13,7 +13,7 @@
import json, sys, os, re, urllib.request, sqlite3 import json, sys, os, re, urllib.request, sqlite3
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
from datetime import datetime from datetime import datetime
from mo_data import read_decisions, read_portfolio, get_price from mo_data import read_decisions, read_portfolio
DB_PATH = '/home/hmo/web-dashboard/data/mofin.db' DB_PATH = '/home/hmo/web-dashboard/data/mofin.db'
OUTPUT_PATH = "/home/hmo/web-dashboard/data/strategy_staleness_report.json" OUTPUT_PATH = "/home/hmo/web-dashboard/data/strategy_staleness_report.json"
@@ -23,7 +23,25 @@ CRITICAL_DAYS = 21 # 超过21天→严重警告
DIVERGENCE_WARN = 30 # 偏离买入区>30%→警告 DIVERGENCE_WARN = 30 # 偏离买入区>30%→警告
DIVERGENCE_CRIT = 50 # 偏离>50%→严重 DIVERGENCE_CRIT = 50 # 偏离>50%→严重
# ── 使用 mo_data.get_price 统一获取价格 ── def get_price(code):
"""从腾讯API获取当前价"""
try:
market = "sh" if code.startswith("6") else "sz" if code.startswith("0") or code.startswith("3") else ""
if code.startswith(("00", "30")) or code.startswith("68"):
market = "sh" if code.startswith("6") else "sz"
elif code.startswith(("01", "02", "03")):
market = "sz"
url = f"http://qt.gtimg.cn/q={market}{code}"
req = urllib.request.Request(url, headers={"User-Agent": "curl/7.81"})
with urllib.request.urlopen(req, timeout=5) as resp:
raw = resp.read().decode("gbk")
parts = raw.split("~")
if len(parts) > 3:
price = float(parts[3]) if parts[3] else 0
chg = float(parts[32]) if parts[32] else 0
return price, chg if price > 0 else (None, None)
except: pass
return None, None
def parse_buy_zone(current): def parse_buy_zone(current):
"""从策略current字段提取买入区间最低和最高""" """从策略current字段提取买入区间最低和最高"""
+4 -4
View File
@@ -1,17 +1,17 @@
{ {
"module": "dashboard", "module": "dashboard",
"version": "1.0", "version": "1.0",
"purpose": "MoFin 管理门户。独立 Flask 应用(端口 5804),统一展示系统健康状态、模块 spec 帮助和监控数据。", "purpose": "MoFin 管理门户。独立 Flask 应用(端口 5807),统一展示系统健康状态、模块 spec 帮助和监控数据。",
"human_help": { "human_help": {
"title": "Dashboard — 管理门户", "title": "Dashboard — 管理门户",
"description": [ "description": [
"MoFin 统一管理面板,提供系统健康状态总览和各模块的帮助文档。", "MoFin 统一管理面板,提供系统健康状态总览和各模块的帮助文档。",
"采用深色主题 Web UI,与 AgentsMeeting Dashboard 一致的视觉风格。", "采用深色主题 Web UI,与 AgentsMeeting Dashboard 一致的视觉风格。",
"访问地址: http://192.168.1.246:5804" "访问地址: http://192.168.1.246:5807"
], ],
"usage": [ "usage": [
"打开浏览器访问 http://192.168.1.246:5804", "打开浏览器访问 http://192.168.1.246:5807",
"F 健康 Tab — 查看所有服务运行状态和健康管线数据", "F 健康 Tab — 查看所有服务运行状态和健康管线数据",
"G 规范 Tab — 查看开发规范文档", "G 规范 Tab — 查看开发规范文档",
"点击 ? 按钮 — 查看面向人类的模块帮助", "点击 ? 按钮 — 查看面向人类的模块帮助",
@@ -39,7 +39,7 @@
"server.py :8899 — 业务 APIDashboard 通过 HTTP 检测其可达性)" "server.py :8899 — 业务 APIDashboard 通过 HTTP 检测其可达性)"
], ],
"constraints": [ "constraints": [
"Dashboard 部署在 Linux 246 上,端口 5804", "Dashboard 部署在 Linux 246 上,端口 5807",
"通过 systemd 守护(mofin-dashboard.service", "通过 systemd 守护(mofin-dashboard.service",
"不依赖 server.py :8899(可独立运行)", "不依赖 server.py :8899(可独立运行)",
"前端 5 秒轮询 /api/services + /api/expected", "前端 5 秒轮询 /api/services + /api/expected",