Files
Team b6e3cef844 feat: add xui-deploy skill with lessons learned
- SKILL.md v1.1: full deployment workflow for 3x-ui on VPS via SSH
- Covers Docker/native install, Nginx+TLS, Xray inbound config
- references/xray-inbound-config.md: VLESS+WS+TLS and Reality configs
- references/lessons-learned.md: lessons from first real deployment
  - /app/x-ui binary vs shell wrapper in Docker
  - correct API path: panel/api/inbounds/add
  - subPath-only DB write (subURI causes blank settings page)
  - --network host port exposure workaround
- Agent prompt and eval configs included
2026-04-25 14:07:55 +08:00

1 line
16 KiB
XML

<?xml version="1.0" encoding="us-ascii" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="587px" preserveAspectRatio="none" style="width:1113px;height:587px;background:#FAFAFA;" version="1.1" viewBox="0 0 1113 587" width="1113px" zoomAndPan="magnify"><defs/><g><rect fill="#FAFAFA" height="587" style="stroke:none;stroke-width:1.0;" width="1113" x="0" y="0"/><!--cluster xui-deploy Skill--><g id="cluster_xui-deploy Skill"><path d="M170.5,6 L289.5,6 A3.75,3.75 0 0 1 292,8.5 L299,28.2969 L471.5,28.2969 A2.5,2.5 0 0 1 474,30.7969 L474,107.5 A2.5,2.5 0 0 1 471.5,110 L170.5,110 A2.5,2.5 0 0 1 168,107.5 L168,8.5 A2.5,2.5 0 0 1 170.5,6 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="168" x2="299" y1="28.2969" y2="28.2969"/><text fill="#000000" font-family="Arial" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="118" x="172" y="20.9951">xui-deploy Skill</text></g><!--cluster Local Machine--><g id="cluster_Local Machine"><path d="M8.5,159 L120.5,159 A3.75,3.75 0 0 1 123,161.5 L130,181.2969 L268.5,181.2969 A2.5,2.5 0 0 1 271,183.7969 L271,283.5 A2.5,2.5 0 0 1 268.5,286 L8.5,286 A2.5,2.5 0 0 1 6,283.5 L6,161.5 A2.5,2.5 0 0 1 8.5,159 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="6" x2="130" y1="181.2969" y2="181.2969"/><text fill="#000000" font-family="Arial" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="111" x="10" y="173.9951">Local Machine</text></g><!--cluster VPS (Linux)--><g id="cluster_VPS (Linux)"><path d="M433.5,170.5 L524.5,170.5 A3.75,3.75 0 0 1 527,173 L534,192.7969 L908.5,192.7969 A2.5,2.5 0 0 1 911,195.2969 L911,577.5 A2.5,2.5 0 0 1 908.5,580 L433.5,580 A2.5,2.5 0 0 1 431,577.5 L431,173 A2.5,2.5 0 0 1 433.5,170.5 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="431" x2="534" y1="192.7969" y2="192.7969"/><text fill="#000000" font-family="Arial" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="90" x="435" y="185.4951">VPS (Linux)</text></g><!--cluster GitHub--><g id="cluster_GitHub"><path d="M950.6642,344.8737 C953.6582,338.5029 958.1535,337.9463 963.2806,342.3838 C965.831,337.9313 971.1324,336.2904 974.0948,341.943 C976.4253,336.6391 980.4645,334.7044 984.8135,339.878 C987.7697,333.9437 993.8496,333.8496 997.5529,339.0212 C1000.499,333.2315 1005.4185,332.8554 1009.5508,337.6806 C1012.5477,332.9672 1017.3204,331.9957 1020.5821,337.3918 C1024.1731,332.2997 1029.6821,332.8163 1032.2946,338.4595 C1035.7068,333.4776 1039.0461,333.3583 1042.4793,338.4381 C1047.3803,333.6308 1051.0113,333.6107 1054.2589,340.1539 C1058.1252,334.9882 1064.2316,335.5043 1066.4785,341.87 C1070.1989,337.5718 1075.0573,338.7601 1077.2151,343.6884 C1085.6032,336.9071 1092.8542,339.1916 1095,350 C1096.1721,349.57 1096.886,350.3494 1096.7141,351.478 C1101.6873,354.8559 1102.6485,360.2992 1096.3508,363.3316 C1102.2069,366.502 1102.8801,370.7386 1097.3193,374.8676 C1105.578,378.0794 1106.1175,384.2655 1098.8749,389.1639 C1103.3669,393.0068 1102.5642,397.2977 1097.196,399.5461 C1103.2585,404.1223 1105.0525,408.2803 1097.6937,413.3408 C1103.9472,424.4685 1099.221,429.4646 1088,431 C1088.7414,430.6849 1089.2698,430.7485 1089.3687,431.6963 C1086.4961,438.2398 1082.4964,438.1893 1077.779,433.6203 C1074.9433,439.8079 1069.9368,439.6782 1066.6857,434.009 C1063.1071,440.409 1058.1138,439.5647 1054.2851,434.2743 C1052.1504,441.3148 1046.5775,442.0188 1042.0094,436.6891 C1039.1127,440.6737 1035.3576,440.9796 1032.2974,436.8856 C1029.5798,442.7883 1024.7049,444.3689 1020.1988,438.7662 C1016.0852,443.9468 1011.3121,442.0229 1009.4437,436.5084 C1006.0621,442.829 1000.3848,442.5713 996.8259,436.6918 C993.3032,442.6083 987.8873,441.0558 985.5059,435.5597 C980.8929,440.5226 977.1057,439.4975 975.0651,433.179 C970.8266,437.576 966.9903,437.9059 963.4769,432.336 C953.7391,440.804 944.1711,436.5757 943,424 C943.2736,423.729 943.4795,423.8082 943.653,424.1134 C937.6221,421.5477 936.7349,415.824 942.621,412.2239 C936.0296,409.3698 935.3499,403.5313 941.9093,399.9166 C936.1984,396.7047 935.1297,392.275 940.5043,387.7798 C934.1786,384.1813 935.5098,378.4541 941.4005,375.7669 C936.5325,371.8145 936.9194,365.975 942.5881,363.003 C935.8425,353.2621 937.6313,345.6583 950,343 C951.0359,343.2913 951.4056,343.9523 950.6642,344.8737 " fill="none" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="Arial" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="53" x="992.5" y="360.9951">GitHub</text></g><!--entity SKILL--><g id="elem_SKILL"><rect fill="#F1F1F1" height="52.5938" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="111" x="347.5" y="41"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="61" x="357.5" y="63.9951">SKILL.md</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="91" x="357.5" y="80.292">(instructions)</text></g><!--entity EVALS--><g id="elem_EVALS"><rect fill="#F1F1F1" height="36.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="128" x="184" y="49.5"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="108" x="194" y="72.4951">evals/evals.json</text></g><!--entity KEY--><g id="elem_KEY"><rect fill="#F1F1F1" height="36.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="126" x="22" y="214"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="106" x="32" y="236.9951">SSH private key</text></g><!--entity Developer--><g id="elem_Developer"><ellipse cx="219" cy="202.5" fill="#F1F1F1" rx="8" ry="8" style="stroke:#181818;stroke-width:0.5;"/><path d="M219,210.5 L219,237.5 M206,218.5 L232,218.5 M219,237.5 L206,252.5 M219,237.5 L232,252.5 " fill="none" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="71" x="183.5" y="266.9951">Developer</text></g><!--entity CURL--><g id="elem_CURL"><rect fill="#F1F1F1" height="36.2969" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="92" x="646" y="214"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="72" x="656" y="236.9951">curl / bash</text></g><!--entity XUCLI--><g id="elem_XUCLI"><rect fill="#F1F1F1" height="52.5938" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="164" x="447" y="205.5"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="48" x="457" y="228.4951">x-ui CLI</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="144" x="457" y="244.792">(x-ui setting / restart)</text></g><!--entity SERVICE--><g id="elem_SERVICE"><rect fill="#F1F1F1" height="52.5938" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="107" x="574.5" y="370"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="87" x="584.5" y="392.9951">3x-ui Service</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="69" x="584.5" y="409.292">(systemd)</text></g><!--entity DATA--><g id="elem_DATA"><path d="M489.5,512 C489.5,502 535,502 535,502 C535,502 580.5,502 580.5,512 L580.5,553.5938 C580.5,563.5938 535,563.5938 535,563.5938 C535,563.5938 489.5,563.5938 489.5,553.5938 L489.5,512 " fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;"/><path d="M489.5,512 C489.5,522 535,522 535,522 C535,522 580.5,522 580.5,512 " fill="none" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="60" x="499.5" y="538.9951">x-ui Data</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="71" x="499.5" y="555.292">(/etc/x-ui/)</text></g><!--entity PANEL--><g id="elem_PANEL"><rect fill="#F1F1F1" height="52.5938" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="132" x="616" y="506.5"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="90" x="626" y="529.4951">Panel Web UI</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="112" x="626" y="545.792">(:&lt;panel_port&gt;)</text></g><!--entity FW--><g id="elem_FW"><rect fill="#F1F1F1" height="52.5938" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="122" x="773" y="205.5"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="50" x="783" y="228.4951">Firewall</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="102" x="783" y="244.792">(ufw / firewalld)</text></g><!--entity INSTALLER--><g id="elem_INSTALLER"><rect fill="#F1F1F1" height="52.5938" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="136" x="951" y="370"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="60" x="961" y="392.9951">install.sh</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="116" x="961" y="409.292">(MHSanaei/3x-ui)</text></g><!--link Developer to SKILL--><g id="link_Developer_SKILL"><path d="M254.64,199.52 C289.37,168.86 337.0232,126.7723 369.3432,98.2223 " fill="none" id="Developer-to-SKILL" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="373.84,94.25,364.4466,97.2105,370.0927,97.5602,369.743,103.2063,373.84,94.25" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="76" x="334" y="139.0669">triggers skill</text></g><!--link SKILL to Developer--><g id="link_SKILL_Developer"><path d="M372.54,94.17 C359.88,103.37 344.52,112.76 329,118 C315.29,122.63 208.91,115.46 199,126 C182.16,143.91 185.7304,165.902 195.3904,188.262 " fill="none" id="SKILL-to-Developer" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="197.77,193.77,197.8726,183.9217,195.787,189.18,190.5287,187.0944,197.77,193.77" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="114" x="200" y="139.0669">reports panel URL</text></g><!--link SKILL to KEY--><g id="link_SKILL_KEY"><path d="M372.96,94.1 C360.24,103.41 344.73,112.89 329,118 C306.79,125.21 137.62,111.91 119,126 C91.65,146.7 86.1744,183.795 85.1944,207.835 " fill="none" id="SKILL-to-KEY" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="84.95,213.83,89.3133,205.0004,85.1537,208.8341,81.3199,204.6745,84.95,213.83" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="61" x="120" y="139.0669">SSH auth</text></g><!--link SKILL to CURL--><g id="link_SKILL_CURL"><path d="M458.77,75.11 C523.35,83.81 624.51,100.98 653,126 C678.86,148.71 686.8661,184.2563 689.7961,207.7063 " fill="none" id="SKILL-to-CURL" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="690.54,213.66,693.3933,204.2335,689.9201,208.6986,685.455,205.2254,690.54,213.66" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="136" x="668" y="139.0669">runs installer via SSH</text></g><!--link CURL to INSTALLER--><g id="link_CURL_INSTALLER"><path d="M705.09,250.2 C716.67,264.18 734.84,283.28 755,294 C817.57,327.28 845.37,300.26 911,327 C937.73,337.89 960.2692,351.9043 980.7992,366.4943 " fill="none" id="CURL-to-INSTALLER" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="985.69,369.97,980.671,361.4959,981.6144,367.0736,976.0367,368.017,985.69,369.97" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="127" x="886" y="315.0669">downloads install.sh</text></g><!--link INSTALLER to SERVICE--><g id="link_INSTALLER_SERVICE"><path d="M950.67,396.5 C874.09,396.5 757.51,396.5 687.55,396.5 " fill="none" id="INSTALLER-to-SERVICE" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="681.55,396.5,690.55,400.5,686.55,396.5,690.55,392.5,681.55,396.5" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="100" x="766.25" y="389.5669">installs &amp; starts</text></g><!--link SKILL to XUCLI--><g id="link_SKILL_XUCLI"><path d="M422.01,94.15 C432.77,108.57 446.53,126.87 459,143 C475.36,164.16 490.5043,183.1908 504.5343,200.6708 " fill="none" id="SKILL-to-XUCLI" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="508.29,205.35,505.776,195.8274,505.1603,201.4507,499.537,200.835,508.29,205.35" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="188" x="460" y="139.0669">configure port/user/pass/path</text></g><!--link XUCLI to SERVICE--><g id="link_XUCLI_SERVICE"><path d="M544.69,258.75 C563.22,289.18 590.7574,334.3766 609.2674,364.7466 " fill="none" id="XUCLI-to-SERVICE" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="612.39,369.87,611.1217,360.1032,609.7878,365.6005,604.2905,364.2667,612.39,369.87" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="43" x="580" y="315.0669">restart</text></g><!--link SERVICE to DATA--><g id="link_SERVICE_DATA"><path d="M581.54,423.12 C569.6,431.78 557.91,442.49 550,455 C541.19,468.93 537.9896,480.9231 536.3996,495.9931 " fill="none" id="SERVICE-to-DATA" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="535.77,501.96,540.6922,493.4294,536.2946,496.9876,532.7364,492.59,535.77,501.96" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="92" x="551" y="468.0669">persists config</text></g><!--link SERVICE to PANEL--><g id="link_SERVICE_PANEL"><path d="M638.28,423.12 C647.89,447.05 659.9256,477.0116 669.5156,500.9116 " fill="none" id="SERVICE-to-PANEL" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="671.75,506.48,672.1107,496.6378,669.888,501.8396,664.6861,499.6169,671.75,506.48" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="88" x="658" y="468.0669">serves web UI</text></g><!--link SKILL to FW--><g id="link_SKILL_FW"><path d="M458.82,68.62 C558.88,70.05 763.01,78.83 813,126 C834.36,146.16 837.5694,175.4337 836.7294,199.4837 " fill="none" id="SKILL-to-FW" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="836.52,205.48,840.8317,196.6251,836.6945,200.483,832.8366,196.3459,836.52,205.48" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="108" x="826" y="139.0669">opens panel port</text></g><!--SRC=[PL9TQzj047pNhrXSAEc3euU-XH8GZjsOA254-MYXK3RIMhxwV2Tkx-oOql_UlPFYs0a28TtCpkxE7A-KwT3X6cgxxgmXuok_qmIEQe-crPJndjBG0eFsCsly3Qu92gTG7-3FMAzQPuDf9bPR1vzcHNooh1C0MuBHIr3ZXZfjTr2jbDOZ-9l1MsiOLLVpiZnTDx_CYJBiNQYzieQ_Z00P4dZCfmrgpjFxz0zRatZJnwAiidy7VKjReuPhh9VAqCUcrILqJctG4wnebpIkfZ-5XBMNFIveGzfsv8uq7syhE2cL2IzVFYZMmMd8nH1U9hN9mzsxmL_6GS6adCkYwPF9UsLQANB47ftlL_xn89pZog-9Nv7Rg9gad7ViQTqC5atl7kUJgLGqw57wqz3gGdw5d9ElytYGz_oBuhuubhz5GngUw1aUud1dtxfuyBkppf_tDRV5pVJTDZFbQ8jQIq5OR6M9nN0mZ3LxYjRLseO6Hj-LlmpF7poBUKl5AIz5vVgoGeEayhHjBpA_gUwBifpUHQrz9Z0Ud_St0yx0EzMsv1WutgwiFuu4YLFW63G6lpm0OZA2k60OXWb4SwCmahE4Hjg-jt0RkpNQOhCla96pDqAQfuz1o0E5uJEaMFcWTmfNEBKr2zK6Hn1TpWEJopjabfVCshEELOSxahsUH3H6AP1Omeez3wf7b9ISSAJ1XXYsAUI3WMPF0egfuaLAFSrpWB-P7aU8u2jHVFeF]--></g></svg>