<mxfile host="next-ai-draw-io" version="26.0.0">
  <diagram id="03-部署拓扑" name="03-部署拓扑">
    <mxGraphModel dx="1400" dy="900" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1160" pageHeight="840" math="0" shadow="0" background="#0d1117">
      <root>
        <mxCell id="0"/>
        <mxCell id="1" parent="0"/>
        <mxCell id="n2" value="部署拓扑 · 两台阿里云 + 本机" style="text;html=1;align=left;verticalAlign=middle;fontSize=26;fontColor=#e6edf3;fontStyle=1;whiteSpace=wrap;" vertex="1" parent="1"><mxGeometry x="40" y="14" width="900" height="38" as="geometry"/></mxCell>
        <mxCell id="n3" value="服务分布、数据流向与备份关系" style="text;html=1;align=left;verticalAlign=middle;fontSize=13;fontColor=#8b949e;fontStyle=0;whiteSpace=wrap;" vertex="1" parent="1"><mxGeometry x="40" y="52" width="1000" height="24" as="geometry"/></mxCell>
        <mxCell id="n4" value="🌐 用户 / 微信" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#1f6feb;strokeColor=#58a6ff;fontColor=#ffffff;fontSize=13;fontStyle=1;dashed=0;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="300" y="100" width="300" height="58" as="geometry"/></mxCell>
        <mxCell id="n5" value="Nginx · 443 · 域名与静态报告" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#0b3d91;strokeColor=#58a6ff;fontColor=#ffffff;fontSize=13;fontStyle=1;dashed=0;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="300" y="196" width="300" height="58" as="geometry"/></mxCell>
        <mxCell id="n6" value="shweige · 139.224.103.137" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#11161d;strokeColor=#30363d;fontColor=#8b949e;fontSize=12;fontStyle=1;verticalAlign=top;align=left;spacingLeft=10;spacingTop=6;dashed=1;" vertex="1" parent="1"><mxGeometry x="40" y="292" width="540" height="300" as="geometry"/></mxCell>
        <mxCell id="n7" value="餐系统 TrackGen<br>点餐 / 订单 / 后台" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#1f6feb;strokeColor=#58a6ff;fontColor=#ffffff;fontSize=13;fontStyle=1;dashed=0;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="70" y="332" width="230" height="70" as="geometry"/></mxCell>
        <mxCell id="n8" value="数据库 MySQL<br>订单与库存" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#161b22;strokeColor=#30363d;fontColor=#e6edf3;fontSize=13;fontStyle=1;dashed=0;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="320" y="332" width="230" height="70" as="geometry"/></mxCell>
        <mxCell id="n9" value="PM2 进程守护<br>异常自动重启" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#238636;strokeColor=#3fb950;fontColor=#ffffff;fontSize=13;fontStyle=1;dashed=0;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="70" y="486" width="230" height="70" as="geometry"/></mxCell>
        <mxCell id="n10" value="定时任务<br>备份 / 清理" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#238636;strokeColor=#3fb950;fontColor=#ffffff;fontSize=13;fontStyle=1;dashed=0;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="320" y="486" width="230" height="70" as="geometry"/></mxCell>
        <mxCell id="n11" value="oldserver · 39.105.194.79" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#11161d;strokeColor=#30363d;fontColor=#8b949e;fontSize=12;fontStyle=1;verticalAlign=top;align=left;spacingLeft=10;spacingTop=6;dashed=1;" vertex="1" parent="1"><mxGeometry x="620" y="292" width="520" height="300" as="geometry"/></mxCell>
        <mxCell id="n12" value="股票扫描 daily_scan.py<br>9:35 / 13:35 / 14:50" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#1f6feb;strokeColor=#58a6ff;fontColor=#ffffff;fontSize=13;fontStyle=1;dashed=0;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="650" y="332" width="220" height="70" as="geometry"/></mxCell>
        <mxCell id="n13" value="reports 站点<br>AI 书籍 / 报告页" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#8957e5;strokeColor=#a371f7;fontColor=#ffffff;fontSize=13;fontStyle=1;dashed=0;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="890" y="332" width="220" height="70" as="geometry"/></mxCell>
        <mxCell id="n14" value="候选池输出<br>JSON / CSV" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#238636;strokeColor=#3fb950;fontColor=#ffffff;fontSize=13;fontStyle=1;dashed=0;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="650" y="486" width="220" height="70" as="geometry"/></mxCell>
        <mxCell id="n15" value="cron 调度<br>三时点触发" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#238636;strokeColor=#3fb950;fontColor=#ffffff;fontSize=13;fontStyle=1;dashed=0;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="890" y="486" width="220" height="70" as="geometry"/></mxCell>
        <mxCell id="n16" value="本机 · MacBook Pro 2019（16G / macOS 13.7）" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#11161d;strokeColor=#30363d;fontColor=#8b949e;fontSize=12;fontStyle=1;verticalAlign=top;align=left;spacingLeft=10;spacingTop=6;dashed=1;" vertex="1" parent="1"><mxGeometry x="40" y="620" width="1100" height="190" as="geometry"/></mxCell>
        <mxCell id="n17" value="Hermes Agent<br>CLI + 微信网关" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#9e6a03;strokeColor=#e3b341;fontColor=#ffffff;fontSize=13;fontStyle=1;dashed=0;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="70" y="668" width="230" height="70" as="geometry"/></mxCell>
        <mxCell id="n18" value="本地 RAG<br>Chroma + bge-small" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#9e6a03;strokeColor=#e3b341;fontColor=#ffffff;fontSize=13;fontStyle=1;dashed=0;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="320" y="668" width="230" height="70" as="geometry"/></mxCell>
        <mxCell id="n19" value="Ollama / FreeCAD<br>离线能力" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#9e6a03;strokeColor=#e3b341;fontColor=#ffffff;fontSize=13;fontStyle=1;dashed=0;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="570" y="668" width="220" height="70" as="geometry"/></mxCell>
        <mxCell id="n20" value="移动硬盘 500G<br>备份 / 工程文件 / 专利" style="rounded=1;arcSize=14;whiteSpace=wrap;html=1;fillColor=#3d1f5c;strokeColor=#a371f7;fontColor=#ffffff;fontSize=13;fontStyle=1;dashed=0;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="810" y="668" width="300" height="70" as="geometry"/></mxCell>
        <mxCell id="e1" value="HTTPS" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#58a6ff;strokeWidth=1.6;endArrow=block;endFill=1;dashed=0;fontSize=11;fontColor=#c9d1d9;labelBackgroundColor=#0d1117;" edge="1" parent="1" source="n4" target="n5"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="e2" value="反向代理" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#58a6ff;strokeWidth=1.6;endArrow=block;endFill=1;dashed=0;fontSize=11;fontColor=#c9d1d9;labelBackgroundColor=#0d1117;" edge="1" parent="1" source="n5" target="n7"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="e3" value="读写" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#58a6ff;strokeWidth=1.6;endArrow=block;endFill=1;dashed=0;fontSize=11;fontColor=#c9d1d9;labelBackgroundColor=#0d1117;" edge="1" parent="1" source="n7" target="n8"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="e4" value="守护" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#3fb950;strokeWidth=1.6;endArrow=block;endFill=1;dashed=1;fontSize=11;fontColor=#c9d1d9;labelBackgroundColor=#0d1117;" edge="1" parent="1" source="n9" target="n7"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="e5" value="维护" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#3fb950;strokeWidth=1.6;endArrow=block;endFill=1;dashed=1;fontSize=11;fontColor=#c9d1d9;labelBackgroundColor=#0d1117;" edge="1" parent="1" source="n10" target="n8"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="e6" value="静态托管" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#58a6ff;strokeWidth=1.6;endArrow=block;endFill=1;dashed=0;fontSize=11;fontColor=#c9d1d9;labelBackgroundColor=#0d1117;" edge="1" parent="1" source="n5" target="n13"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="e7" value="触发" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#3fb950;strokeWidth=1.6;endArrow=block;endFill=1;dashed=1;fontSize=11;fontColor=#c9d1d9;labelBackgroundColor=#0d1117;" edge="1" parent="1" source="n15" target="n12"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="e8" value="写盘" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#58a6ff;strokeWidth=1.6;endArrow=block;endFill=1;dashed=0;fontSize=11;fontColor=#c9d1d9;labelBackgroundColor=#0d1117;" edge="1" parent="1" source="n12" target="n14"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="e9" value="SSH 运维" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8b949e;strokeWidth=1.6;endArrow=block;endFill=1;dashed=1;fontSize=11;fontColor=#c9d1d9;labelBackgroundColor=#0d1117;" edge="1" parent="1" source="n17" target="n7"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="e10" value="SSH 触发" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#8b949e;strokeWidth=1.6;endArrow=block;endFill=1;dashed=1;fontSize=11;fontColor=#c9d1d9;labelBackgroundColor=#0d1117;" edge="1" parent="1" source="n17" target="n12"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="e11" value="备份" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#a371f7;strokeWidth=1.6;endArrow=block;endFill=1;dashed=1;fontSize=11;fontColor=#c9d1d9;labelBackgroundColor=#0d1117;" edge="1" parent="1" source="n17" target="n20"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="e12" value="上传报告" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#a371f7;strokeWidth=1.6;endArrow=block;endFill=1;dashed=1;fontSize=11;fontColor=#c9d1d9;labelBackgroundColor=#0d1117;" edge="1" parent="1" source="n18" target="n13"><mxGeometry relative="1" as="geometry"/></mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
