Browse Source

Merge branch 'feature-zjy' of uskycloud/usky-dev-doc into master

zhaojinyu 1 week ago
parent
commit
845bed7f68

+ 7 - 6
SUMMARY.md

@@ -4,7 +4,7 @@
   * [[20220331]永天云平台产品化讨论](会议记录/[20220331]永天云平台产品化讨论.md)
   * [[20220417]产品规划会议](会议记录/[20220417]产品规划会议.md)
   * [[20220419]管理会议纪要](会议记录/[20220419]管理会议纪要.md)
-  * [[20220423] 关于GIS设施管理需求](会议记录/[20220423]%20关于GIS设施管理需求.md)
+  * [[20220423]关于GIS设施管理需求](会议记录/[20220423]关于GIS设施管理需求.md)
   * [[20220426]京东云](会议记录/[20220426]京东云.md)
   * [[20220501]永天电力SaaS平台](会议记录/[20220501]永天电力SaaS平台.md)
   * [[20220519]中控平台场景管理](会议记录/[20220519]中控平台场景管理.md)
@@ -20,7 +20,7 @@
   * [[20230629]中控系统建设方案梳理](会议记录/[20230629]中控系统建设方案梳理.md)
   * [[20231215]部门项目会](会议记录/[20231215]部门项目会.md)
   * [[20240102]部门项目会议](会议记录/[20240102]部门项目会议.md)
-  * [[20240109] 平台系统产品推介会](会议记录/[20240109]%20平台系统产品推介会.md)
+  * [[20240109]平台系统产品推介会](会议记录/[20240109]平台系统产品推介会.md)
   * [[20240129]研发第1次会议](会议记录/[20240129]研发第1次会议.md)
 - 团队制度
   * [【产品规范】敏捷开发规范](团队制度/【产品规范】敏捷开发规范.md)
@@ -30,7 +30,7 @@
   * [分析jeecg框架](开发管理/分析jeecg框架.md)
   * [数据库变更记录](开发管理/数据库变更记录.md)
 - 技术分享
-  * [Dify 部署安装](技术分享/Dify%20部署安装.md)
+  * [Dify部署安装](技术分享/Dify部署安装.md)
   * [Jenkins存储目录变更及问题解决记录](技术分享/Jenkins存储目录变更及问题解决记录.md)
   * [JSONRPC命令回调格式](技术分享/JSONRPC命令回调格式.md)
   * [jumpserver堡垒机部署](技术分享/jumpserver堡垒机部署.md)
@@ -47,6 +47,7 @@
   * [智能安防系统计划](进度跟踪/智能安防系统计划.md)
   * [永天智慧园区平台](进度跟踪/永天智慧园区平台.md)
   * [永天电⼒SaaS平台](进度跟踪/永天电⼒SaaS平台.md)
+  * [电子巡更网关远程码](进度跟踪/电子巡更网关远程码.md)
 - 项目架构
   * [团队信息](项目架构/团队信息.md)
   * [开发流程](项目架构/开发流程.md)
@@ -55,9 +56,9 @@
   * [永天核心技术](项目架构/永天核心技术.md)
   * [资源管理](项目架构/资源管理.md)
 - 项目管理
-  * [[2001] 消防物联网平台](项目管理/[2001]%20消防物联网平台.md)
-  * [[2002] 东信智慧园区](项目管理/[2002]%20东信智慧园区.md)
-  * [[2003] 山东党校](项目管理/[2003]%20山东党校.md)
+  * [[2001]消防物联网平台](项目管理/[2001]消防物联网平台.md)
+  * [[2002]东信智慧园区](项目管理/[2002]东信智慧园区.md)
+  * [[2003]山东党校](项目管理/[2003]山东党校.md)
   * [[2004]闵行消防](项目管理/[2004]闵行消防.md)
   * [[2005]智慧电力](项目管理/[2005]智慧电力.md)
   * [[2006]金水园区-需求分析阶段](项目管理/[2006]金水园区-需求分析阶段.md)

+ 30 - 2
book.json

@@ -5,14 +5,42 @@
 	      "-search",
 	      "search-pro",
               "popup",
-              "code"],
+              "code",
+	      "tbfed-pagefooter",
+	      "back-to-top-button",
+	      "hide-element",
+	      "sidebar-style",
+	      "auto-scroll-table",
+	      "splitter",
+              "edit-link",
+              "page-toc-button"],
   "pluginsConfig": {
     "mermaid-gb3": {
       "default": {
         "theme": "default",
         "scale": 1.0
       }
-    }
+    },
+    "hide-element": {
+      "elements": [".gitbook-link"]
+      },        
+      "tbfed-pagefooter": {
+        "copyright":"Copyright &copy 永天科技 2025",
+        "modify_label": "该文件修订时间:",
+        "modify_format": "YYYY-MM-DD HH:mm:ss"
+      },        
+      "sidebar-style": {
+         "title": "《团队技术文档》",
+         "author": "研发中心"
+      },    
+      "edit-link": {
+         "base": "http://47.111.81.118:3000/uskycloud/usky-dev-doc/src/feature-zjy",
+	 "label": "编辑"
+      },
+      "page-toc-button": {
+          "maxTocDepth": 2,
+	  "minTocSize": 2
+      }    
   },
   "language": "zh-hans"
 }

+ 445 - 1
package-lock.json

@@ -5,14 +5,25 @@
   "packages": {
     "": {
       "dependencies": {
+        "gitbook-plugin-anchor-navigation": "^0.0.1",
+        "gitbook-plugin-anchor-navigation-ex": "^1.0.14",
+        "gitbook-plugin-ancre-navigation": "^1.0.0",
+        "gitbook-plugin-auto-scroll-table": "^0.0.5",
+        "gitbook-plugin-back-to-top-button": "^0.1.4",
         "gitbook-plugin-chapter-fold": "^0.0.4",
         "gitbook-plugin-code": "^0.1.0",
         "gitbook-plugin-edit-link": "^2.0.2",
         "gitbook-plugin-expandable-chapters": "^0.2.0",
+        "gitbook-plugin-hide-element": "^0.0.4",
         "gitbook-plugin-mermaid-gb3": "^2.1.0",
+        "gitbook-plugin-page-copyright": "^1.0.8",
+        "gitbook-plugin-page-toc-button": "^0.1.1",
         "gitbook-plugin-popup": "^0.0.1",
         "gitbook-plugin-search-pro": "^2.0.2",
-        "gitbook-plugin-simple-page-toc": "^0.1.2"
+        "gitbook-plugin-sidebar-style": "^1.0.2",
+        "gitbook-plugin-simple-page-toc": "^0.1.2",
+        "gitbook-plugin-splitter": "^0.0.8",
+        "gitbook-plugin-tbfed-pagefooter": "^0.0.1"
       }
     },
     "node_modules/ansi-red": {
@@ -54,12 +65,60 @@
         "gulp-header": "^1.7.1"
       }
     },
+    "node_modules/boolbase": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+      "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+      "license": "ISC"
+    },
     "node_modules/buffer-from": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
       "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
       "license": "MIT"
     },
+    "node_modules/cheerio": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.1.0.tgz",
+      "integrity": "sha512-+0hMx9eYhJvWbgpKV9hN7jg0JcwydpopZE4hgi+KvQtByZXPp04NiCWU0LzcAbP63abZckIHkTQaXVF52mX3xQ==",
+      "license": "MIT",
+      "dependencies": {
+        "cheerio-select": "^2.1.0",
+        "dom-serializer": "^2.0.0",
+        "domhandler": "^5.0.3",
+        "domutils": "^3.2.2",
+        "encoding-sniffer": "^0.2.0",
+        "htmlparser2": "^10.0.0",
+        "parse5": "^7.3.0",
+        "parse5-htmlparser2-tree-adapter": "^7.1.0",
+        "parse5-parser-stream": "^7.1.2",
+        "undici": "^7.10.0",
+        "whatwg-mimetype": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=18.17"
+      },
+      "funding": {
+        "url": "https://github.com/cheeriojs/cheerio?sponsor=1"
+      }
+    },
+    "node_modules/cheerio-select": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz",
+      "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "boolbase": "^1.0.0",
+        "css-select": "^5.1.0",
+        "css-what": "^6.1.0",
+        "domelementtype": "^2.3.0",
+        "domhandler": "^5.0.3",
+        "domutils": "^3.0.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/fb55"
+      }
+    },
     "node_modules/coffee-script": {
       "version": "1.12.7",
       "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz",
@@ -74,6 +133,15 @@
         "node": ">=0.8.0"
       }
     },
+    "node_modules/colors": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
+      "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.1.90"
+      }
+    },
     "node_modules/concat-stream": {
       "version": "1.6.2",
       "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
@@ -104,6 +172,34 @@
       "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
       "license": "MIT"
     },
+    "node_modules/css-select": {
+      "version": "5.2.2",
+      "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz",
+      "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==",
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "boolbase": "^1.0.0",
+        "css-what": "^6.1.0",
+        "domhandler": "^5.0.2",
+        "domutils": "^3.0.1",
+        "nth-check": "^2.0.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/fb55"
+      }
+    },
+    "node_modules/css-what": {
+      "version": "6.2.2",
+      "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz",
+      "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">= 6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/fb55"
+      }
+    },
     "node_modules/d3": {
       "version": "3.5.17",
       "resolved": "https://registry.npmjs.org/d3/-/d3-3.5.17.tgz",
@@ -141,6 +237,86 @@
         "node": ">=0.8.0"
       }
     },
+    "node_modules/dom-serializer": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+      "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+      "license": "MIT",
+      "dependencies": {
+        "domelementtype": "^2.3.0",
+        "domhandler": "^5.0.2",
+        "entities": "^4.2.0"
+      },
+      "funding": {
+        "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+      }
+    },
+    "node_modules/domelementtype": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+      "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/fb55"
+        }
+      ],
+      "license": "BSD-2-Clause"
+    },
+    "node_modules/domhandler": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+      "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "domelementtype": "^2.3.0"
+      },
+      "engines": {
+        "node": ">= 4"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/domhandler?sponsor=1"
+      }
+    },
+    "node_modules/domutils": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
+      "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "dom-serializer": "^2.0.0",
+        "domelementtype": "^2.3.0",
+        "domhandler": "^5.0.3"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/domutils?sponsor=1"
+      }
+    },
+    "node_modules/encoding-sniffer": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz",
+      "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==",
+      "license": "MIT",
+      "dependencies": {
+        "iconv-lite": "^0.6.3",
+        "whatwg-encoding": "^3.1.1"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/encoding-sniffer?sponsor=1"
+      }
+    },
+    "node_modules/entities": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
     "node_modules/esprima": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
@@ -203,6 +379,65 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/gitbook-plugin-anchor-navigation": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/gitbook-plugin-anchor-navigation/-/gitbook-plugin-anchor-navigation-0.0.1.tgz",
+      "integrity": "sha512-RIx2JGng/2/I+hAZJBcZc6KTXADNgEbAAZo5C0dd9yt8a0shePN0qju5jxezZNWHklPP3NqeV9sFnzyyRT3FTQ==",
+      "license": "Apache 2",
+      "dependencies": {
+        "cheerio": "*",
+        "underscore": "*"
+      },
+      "engines": {
+        "gitbook": "*"
+      }
+    },
+    "node_modules/gitbook-plugin-anchor-navigation-ex": {
+      "version": "1.0.14",
+      "resolved": "https://registry.npmjs.org/gitbook-plugin-anchor-navigation-ex/-/gitbook-plugin-anchor-navigation-ex-1.0.14.tgz",
+      "integrity": "sha512-SEPrBRHYB+l+I8oRpME7HYOMqRDqWg08Y6t0FKd6PYz+sTYXogMjn3Nz3pbCDYBjzDI5/hXwmcMCBEpwG/m8SQ==",
+      "license": "GPL-3.0",
+      "dependencies": {
+        "cheerio": "*",
+        "colors": "^1.1.2",
+        "github-slugid": "1.0.1"
+      },
+      "engines": {
+        "gitbook": ">=3.0.0"
+      }
+    },
+    "node_modules/gitbook-plugin-ancre-navigation": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/gitbook-plugin-ancre-navigation/-/gitbook-plugin-ancre-navigation-1.0.0.tgz",
+      "integrity": "sha512-A3LgW3hn2tnXcwD7N44qXc/ALmTgUIDmEyajg6dLuqIJ0zDEsYiYYgWdlSi6hwOhNn25ilRg9O3vp3IUSIKyKg==",
+      "license": "GPL-3.0",
+      "dependencies": {
+        "cheerio": "*",
+        "colors": "^1.1.2",
+        "github-slugid": "1.0.1"
+      },
+      "engines": {
+        "gitbook": ">=3.0.0"
+      }
+    },
+    "node_modules/gitbook-plugin-auto-scroll-table": {
+      "version": "0.0.5",
+      "resolved": "https://registry.npmjs.org/gitbook-plugin-auto-scroll-table/-/gitbook-plugin-auto-scroll-table-0.0.5.tgz",
+      "integrity": "sha512-KgrvoeoAo/qJxQt3hlQfNzZUOJOJHGKqz62gWn4/AfxHesOKON7YEWYiBf+sEnpYnZH+JZr9GxRtXPTjf7MJGg==",
+      "license": "ISC",
+      "engines": {
+        "gitbook": ">1.x.x"
+      }
+    },
+    "node_modules/gitbook-plugin-back-to-top-button": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/gitbook-plugin-back-to-top-button/-/gitbook-plugin-back-to-top-button-0.1.4.tgz",
+      "integrity": "sha512-B97MdUp4YhNkSmEc1v+5E21nRaI+ppNKjz2oZelZ8DTuumOMe/e0QizXC2ymxO8iYPkWuaqzaeGedHpxRq/Yhw==",
+      "license": "Apache-2.0",
+      "engines": {
+        "gitbook": ">=3.1.1"
+      }
+    },
     "node_modules/gitbook-plugin-chapter-fold": {
       "version": "0.0.4",
       "resolved": "https://registry.npmjs.org/gitbook-plugin-chapter-fold/-/gitbook-plugin-chapter-fold-0.0.4.tgz",
@@ -239,6 +474,15 @@
         "gitbook": ">=0.4.6"
       }
     },
+    "node_modules/gitbook-plugin-hide-element": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmjs.org/gitbook-plugin-hide-element/-/gitbook-plugin-hide-element-0.0.4.tgz",
+      "integrity": "sha512-EHlhMdFAIWf73clRjT7lyuAA0qfP61K4CLzqzQYBzQJjdYlB5lVd4ymMWo+TIAXXei/WMdOTaJOUm4ThqS9vgA==",
+      "license": "ISC",
+      "engines": {
+        "gitbook": "*"
+      }
+    },
     "node_modules/gitbook-plugin-mermaid-gb3": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/gitbook-plugin-mermaid-gb3/-/gitbook-plugin-mermaid-gb3-2.1.0.tgz",
@@ -251,6 +495,24 @@
         "gitbook": "*"
       }
     },
+    "node_modules/gitbook-plugin-page-copyright": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/gitbook-plugin-page-copyright/-/gitbook-plugin-page-copyright-1.0.8.tgz",
+      "integrity": "sha512-IDO/OKtzi24hCb3FkzI6wVQxhbi4WDuTuvKoi2qCM8nq1VecIMXDVczU7q4wi5ebwnAdTR1Kdt3/SGkx1P6+8A==",
+      "license": "MIT",
+      "engines": {
+        "gitbook": ">=3.0.0-pre.0"
+      }
+    },
+    "node_modules/gitbook-plugin-page-toc-button": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/gitbook-plugin-page-toc-button/-/gitbook-plugin-page-toc-button-0.1.1.tgz",
+      "integrity": "sha512-htlxoEWhPkKze4W8xaWJ6KmC95e706dEVH06dKQSmgMEXzfovtxW67PxDwy78f0JB4z1B/3ZkaEoFmbWazAMow==",
+      "license": "Apache-2.0",
+      "engines": {
+        "gitbook": ">=3.1.1"
+      }
+    },
     "node_modules/gitbook-plugin-popup": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/gitbook-plugin-popup/-/gitbook-plugin-popup-0.0.1.tgz",
@@ -272,6 +534,15 @@
         "gitbook": ">=3.0.0"
       }
     },
+    "node_modules/gitbook-plugin-sidebar-style": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/gitbook-plugin-sidebar-style/-/gitbook-plugin-sidebar-style-1.0.2.tgz",
+      "integrity": "sha512-jMUdoI8X+HvCrdK/HLlBsLUkooeXsXTis9qoX3hXO32pdSK323njEfxrGmDwhysV0UmKP6JGsxbNjl8Vak0omA==",
+      "license": "MIT",
+      "engines": {
+        "gitbook": ">1.x.x"
+      }
+    },
     "node_modules/gitbook-plugin-simple-page-toc": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/gitbook-plugin-simple-page-toc/-/gitbook-plugin-simple-page-toc-0.1.2.tgz",
@@ -284,6 +555,33 @@
         "gitbook": ">=3.1.1"
       }
     },
+    "node_modules/gitbook-plugin-splitter": {
+      "version": "0.0.8",
+      "resolved": "https://registry.npmjs.org/gitbook-plugin-splitter/-/gitbook-plugin-splitter-0.0.8.tgz",
+      "integrity": "sha512-EGyaiGNPAOhkc5TDqYCMNa17eFTZJX6aD6M7imJ5JbHtIkKmx3mZhoAnI2ovZrxx3x1tq/lmhq94nkayCl8WdQ==",
+      "license": "MIT",
+      "engines": {
+        "gitbook": ">1.x.x"
+      }
+    },
+    "node_modules/gitbook-plugin-tbfed-pagefooter": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/gitbook-plugin-tbfed-pagefooter/-/gitbook-plugin-tbfed-pagefooter-0.0.1.tgz",
+      "integrity": "sha512-HUuC0bksLgkpGy+chdmYcPYdrYlThU7mFcev43dmUW4JlcbAtxL3I5R82gXQv9nSCE9vL1mrscC8+oZSqNBhdQ==",
+      "license": "Apache 2",
+      "dependencies": {
+        "moment": "^2.10.6"
+      },
+      "engines": {
+        "gitbook": ">=2.4.3"
+      }
+    },
+    "node_modules/github-slugid": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/github-slugid/-/github-slugid-1.0.1.tgz",
+      "integrity": "sha512-L5uVRzSM8jyWTgHUtaHwmymZW8S234JrIaOGotPK+0emNz9XsO6qqgw1KiI5YfP1SyBjG0ApNYU0vpb01teM9Q==",
+      "license": "Apache-2.0"
+    },
     "node_modules/graphlib": {
       "version": "2.1.8",
       "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz",
@@ -348,6 +646,49 @@
       ],
       "license": "MIT"
     },
+    "node_modules/htmlparser2": {
+      "version": "10.0.0",
+      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz",
+      "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==",
+      "funding": [
+        "https://github.com/fb55/htmlparser2?sponsor=1",
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/fb55"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "domelementtype": "^2.3.0",
+        "domhandler": "^5.0.3",
+        "domutils": "^3.2.1",
+        "entities": "^6.0.0"
+      }
+    },
+    "node_modules/htmlparser2/node_modules/entities": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
+      "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
+    "node_modules/iconv-lite": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+      "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+      "license": "MIT",
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/inherits": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
@@ -601,6 +942,18 @@
         "node": "*"
       }
     },
+    "node_modules/nth-check": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+      "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "boolbase": "^1.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/nth-check?sponsor=1"
+      }
+    },
     "node_modules/object.pick": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
@@ -622,6 +975,55 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/parse5": {
+      "version": "7.3.0",
+      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
+      "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
+      "license": "MIT",
+      "dependencies": {
+        "entities": "^6.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/inikulin/parse5?sponsor=1"
+      }
+    },
+    "node_modules/parse5-htmlparser2-tree-adapter": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz",
+      "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==",
+      "license": "MIT",
+      "dependencies": {
+        "domhandler": "^5.0.3",
+        "parse5": "^7.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/inikulin/parse5?sponsor=1"
+      }
+    },
+    "node_modules/parse5-parser-stream": {
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz",
+      "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==",
+      "license": "MIT",
+      "dependencies": {
+        "parse5": "^7.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/inikulin/parse5?sponsor=1"
+      }
+    },
+    "node_modules/parse5/node_modules/entities": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
+      "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
     "node_modules/process-nextick-args": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@@ -715,6 +1117,12 @@
       "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
       "license": "MIT"
     },
+    "node_modules/safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+      "license": "MIT"
+    },
     "node_modules/set-getter": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.1.tgz",
@@ -794,12 +1202,48 @@
       "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
       "license": "MIT"
     },
+    "node_modules/underscore": {
+      "version": "1.13.7",
+      "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz",
+      "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==",
+      "license": "MIT"
+    },
+    "node_modules/undici": {
+      "version": "7.11.0",
+      "resolved": "https://registry.npmjs.org/undici/-/undici-7.11.0.tgz",
+      "integrity": "sha512-heTSIac3iLhsmZhUCjyS3JQEkZELateufzZuBaVM5RHXdSBMb1LPMQf5x+FH7qjsZYDP0ttAc3nnVpUB+wYbOg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=20.18.1"
+      }
+    },
     "node_modules/util-deprecate": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
       "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
       "license": "MIT"
     },
+    "node_modules/whatwg-encoding": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
+      "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
+      "license": "MIT",
+      "dependencies": {
+        "iconv-lite": "0.6.3"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/whatwg-mimetype": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
+      "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      }
+    },
     "node_modules/xtend": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",

+ 12 - 1
package.json

@@ -1,12 +1,23 @@
 {
   "dependencies": {
+    "gitbook-plugin-anchor-navigation": "^0.0.1",
+    "gitbook-plugin-anchor-navigation-ex": "^1.0.14",
+    "gitbook-plugin-ancre-navigation": "^1.0.0",
+    "gitbook-plugin-auto-scroll-table": "^0.0.5",
+    "gitbook-plugin-back-to-top-button": "^0.1.4",
     "gitbook-plugin-chapter-fold": "^0.0.4",
     "gitbook-plugin-code": "^0.1.0",
     "gitbook-plugin-edit-link": "^2.0.2",
     "gitbook-plugin-expandable-chapters": "^0.2.0",
+    "gitbook-plugin-hide-element": "^0.0.4",
     "gitbook-plugin-mermaid-gb3": "^2.1.0",
+    "gitbook-plugin-page-copyright": "^1.0.8",
+    "gitbook-plugin-page-toc-button": "^0.1.1",
     "gitbook-plugin-popup": "^0.0.1",
     "gitbook-plugin-search-pro": "^2.0.2",
-    "gitbook-plugin-simple-page-toc": "^0.1.2"
+    "gitbook-plugin-sidebar-style": "^1.0.2",
+    "gitbook-plugin-simple-page-toc": "^0.1.2",
+    "gitbook-plugin-splitter": "^0.0.8",
+    "gitbook-plugin-tbfed-pagefooter": "^0.0.1"
   }
 }

+ 194 - 0
技术分享/FRP内网穿透安装部署文档

@@ -0,0 +1,194 @@
+下载地址:
+wget https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gz
+
+
+下面两个是配置好了服务端与客户端的frp
+
+
+1:准备
+一台公网服务器(配置无要求网络稳定就行),服务器端,如公网IP:121.41.4.166。
+内网客户端(准备要穿透出去的设备),客户端,如内网IP:192.168.10.195。
+
+2:下载解压安装包
+gitlab地址:GitHub - fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.,可以在 Release 页面中下载到最新版本的客户端和服务端二进制文件,所有文件被打包在一个压缩包中。
+这里使用的是上面的 frp.tar.gz
+
+上传服务器,进入文件夹,有两个名称文件frpc(c结尾代表client)和frps(s结尾代表server),分别是服务端程序和服务端配置程序。
+需要将frpc拷贝至客户端,即内网服务器,或者在客户端直接下载也可以,客户端只需要使用frpc文件即可。
+
+
+
+
+配置服务器端和客户端,及启动
+1:配置服务器端
+这里是为服务端配置frp 只关注frps和frps.ini即可,原始最简单配置为。
+[root@iZbp126fstzhkzq3ifwcmrZ frp]# cat frps.ini
+[common]
+#隧道通道,服务器和客户端通过此端口通讯
+bind_port = 7000
+#客户端需要设置一样的token值才能鉴权通过
+token = usky2025
+最简单也可以直接使用,先不配置其他测试使用先。
+
+2:配置客户端
+只关注frpc和frpc.ini即可,修改frpc.ini。
+[root@localhost frp]# vim frpc.ini
+原始配置已经有ssh的端口配置,所以修改server_addr为服务器IP即可。
+
+[common]
+server_addr = 121.41.4.166
+server_port = 7000
+#token和服务器一致
+token = usky2025
+
+[ssh]
+type = tcp
+#本机IP
+local_ip = 127.0.0.1
+#本机需要映射的端口22(此端口为ssh端口,WSL2有可能设置为2222或其他端口,这里需要注意)
+local_port = 22
+#远程服务器映射的端口为6715
+remote_port = 6715
+
+3:分别启动服务器端和客户端
+注:服务器,如有防火墙,请开启7000端口和有需要的端口。
+服务器运行启动:
+[root@iZbp126fstzhkzq3ifwcmrZ frp]# ./frps -c frps.ini
+客户端运行启动:
+[root@localhost frp]# ./frpc -c frpc.ini
+
+可以看到提示,都已经启动成功
+
+
+
+测试ssh连接,这里用第三方工具xshell测试。
+连接IP 为公网IP地址,端口为6715端口。
+连接登录,即可登录到内网的192.168.10.195机器。
+最简单的ssh端口映射就完成了。
+
+升级配置
+原始配置简单,但是如果需要其他功能,可自行添加,如下:
+1:服务器端配置
+[root@iZbp126fstzhkzq3ifwcmrZ frp]# vim frps.ini
+修改如下
+[common]
+#隧道通道,服务器和客户端通过此端口通讯
+bind_port = 7000
+#客户端需要设置一样的token值才能鉴权通过
+token = usky2025
+
+#http服务端口
+vhost_http_port = 8080
+#https服务端口
+vhost_https_port = 8443
+# dashboard网页管理界面,以及设置账户密码(非必须,未配置则直接进入)
+dashboard_port = 7500
+dashboard_user = usky
+dashboard_pwd = usky#2025Yt
+
+2:客户端配置
+[root@localhost frp]# vim frpc.ini
+修改如下
+[common]
+server_addr = 121.41.4.166
+server_port = 7000
+#token和服务器一致
+token = usky2025
+
+[ssh]
+type = tcp
+#本机IP
+local_ip = 127.0.0.1
+#本机需要映射的端口22(此端口为ssh端口,WSL2有可能设置为2222或其他端口,这里需要注意)
+local_port = 22
+#远程服务器映射的端口为6715
+remote_port = 6715
+
+[crm-web]
+type = tcp
+local_ip = 127.0.0.1
+local_port = 8443
+remote_port = 9080
+
+[crm-h5]
+type = tcp
+local_ip = 127.0.0.1
+local_port = 8080
+remote_port = 9081
+
+#[web]
+#type = http
+#本地http服务端口,默认80,按需配置
+#local_port = 80
+# 绑定域名,注:配置http,必须需要域名,否则报错。如没有,可采用普通的tcp模式映射。
+#custom_domains = xxx
+
+
+3:启动测试
+分别启动客户端和服务器端
+服务器运行启动:
+[root@iZbp126fstzhkzq3ifwcmrZ frp]# sh start.sh    
+#脚本中是:nohup ./frps -c ./frps.ini >> frps.log  2>&1 &
+客户端运行启动:
+[root@localhost frp]# ./frpc -c frpc.ini
+#脚本中是:nohup ./frpc -c ./frpc.ini >> frpc.log  2>&1 &
+
+
+
+浏览器打开web管理界面,http://121.41.4.166:7500/,输入账户密码,可查看端口映射相关情况。
+
+同时访问:http://121.41.4.166:9080,即可访问跳转到到内网192.168.10.195机器的http服务。
+
+
+设置frp开机自启动
+1、服务端配置frps.ini
+在/etc/systemd/system/目录下创建服务文件
+[root@iZbp126fstzhkzq3ifwcmrZ frp]# pwd
+/data/frp
+[root@iZbp126fstzhkzq3ifwcmrZ frp]# cd /etc/systemd/system/
+[root@iZbp126fstzhkzq3ifwcmrZ system]# vim frps.service
+填入以下信息,ExecStart自行替换为你自己的frp启动命令
+[Unit]
+Description=frps        #客户端请修改为frpc
+After=network.target
+Wants=network.target
+
+[Service]
+Restart=on-failure
+RestartSec=5
+ExecStart=/data/frp/frps -c /data/frp/frps.ini    #客户端请修改正确路径并使用frpc
+
+[Install]
+WantedBy=multi-user.target
+
+
+[root@iZbp126fstzhkzq3ifwcmrZ system]# systemctl daemon-reload
+[root@iZbp126fstzhkzq3ifwcmrZ system]# systemctl status frps.service 
+● frps.service - frps
+   Loaded: loaded (/etc/systemd/system/frps.service; disabled; vendor preset: disabled)
+   Active: inactive (dead)
+
+# 因为之前是直接命令启动的,先杀死之前启动的frp,然后再命令启动
+
+
+2、客户端配置frpc.ini
+客户端同样在/etc/systemd/system/目录下创建服务文件
+
+下面是一些常用的systemctl命令
+# 刷新服务列表
+systemctl daemon-reload
+# 启动服务
+systemctl start frps.service
+# 停止服务
+systemctl stop frps.service
+# 重启服务
+systemctl restart frps.service
+# 查看服务状态
+systemctl status frps.service
+
+# 设置开机自启
+systemctl enable frps.service
+# 查看是否设置开机自启
+systemctl is-enabled frps.service
+# 关闭开机自启
+systemctl disable frps.service

+ 651 - 0
技术分享/Mysql集群之mysql双主双活教程

@@ -0,0 +1,651 @@
+第一种是keepalived方式
+第二种是nginx方式
+
+一、介绍
+
+
+
+    MySQL双主双活是指两台mysql服务器mysql-1、mysql-2都为master主节点服务器,同时又是对方的slave从节点,每个数据库都可作为主数据库使用,并将对数据库操作的数据同步至另外一台mysql服务中。
+    当应用服务开发过程中使用了mysql-1连接信息,在打包发布后,数据库连接信息已经固定,当数据库mysql-1出现异常时,需要人工干预先将应用服务停止-->将应用服务的mysql连接信息改为mysql-2 -->在启动应用服务器,比较繁琐,当应用服务器较多时,一个一个关闭,修改,再重启,将耽误更多时间,应用服务器修复故障时间延长,严重时会造成灾难性的后果。
+    故而引入了keepalived,keepalived通过VIP虚拟IP的漂移实现高可用,在相同集群内发送组播包,master主通过VRRP协议发送组播包,告诉从主的状态。
+  当我们通过keepalived虚拟出一个ip服务 mysql-3,应用服务只需要将mysql配置信息更改为mysql-3的配置信息,mysql-3实际代理的实体服务器为mysql-1或mysql-2。
+  例如:当mysql-3实际代理mysql-1时,mysql-1服务出现故障后,keepalived通过自身机制,自动将mysql-2作为实际代理主服务器,不需要人工干预去修改mysql配置信息,从而实现了高可用。
+
+二、准备工作
+1.两台centos7 linux服务器
+        mysql-1:192.168.222.128
+        mysql-2:192.168.222.129
+2.mysql安装包
+版本:mysql-5.7.36-el7-x86_64.tar.gz
+    下载地址:https://cdn.mysql.com/archives/mysql-5.7/mysql-test-5.7.36-el7-x86_64.tar.gz
+3.keepalived安装包
+        版本:keepalived-2.2.7.tar.gz
+下载地址:https://www.keepalived.org/software/keepalived-2.2.7.tar.gz
+
+三、安装mysql
+    1.在128、129两台服务器根据《linux安装mysql服务-两种安装方式教程》安装好mysql应用。
+    2.修改128服务器/etc/my.cnf配置文件,没有的话可自行创建,配置如下:
+
+两个数据库数据要一致
+整库备份:/data/mysql-5.7.37/bin/mysqldump -uroot -p -h172.16.66.142 --all-databases > /data/mysql_backup/usky.sql
+单库备份:/data/mysql-5.7.37/bin/mysqldump -uusky_admin -p'Usky@2024!@#$_' -h172.16.66.142 usky-cloud > /2025-03-21/usky-cloud.sql
+整库还原:mysql -u root -p  < usky.sql
+单库还原:mysql -u root -p usky-cloud < /2025-03-21/usky-cloud.sql
+
+如果不一致备份时需要加参数定位备份时的 LOG_POS
+例如:
+/data/mysql-5.7.37/bin/mysqldump -uroot -p -h172.16.66.142 --all-databases --master-data=2 > /data/mysql_backup/usky.sql
+
+备份文件中会有记录
+
+
+
+[client]
+#客户端连接端口
+port=3306
+#客户端连接sock
+socket=/opt/mysql5.7/log/mysql.socka
+#客户端编码
+default-character-set=utf8
+[mysqld]
+#mysql服务端口
+port=3306
+#安装目录
+basedir=/opt/mysql5.7
+#数据存放目录
+datadir=/opt/mysql5.7/data
+#sock文件地址
+socket=/opt/mysql5.7/log/mysql.sock
+#错误日志存放地址
+log-error=/opt/mysql5.7/log/mysql.log
+#pid文件地址
+pid-file=/opt/mysql5.7/log/mysql.pid
+#下面内容为mysq主备时配置,单mysql部署护理下面配置
+#server-id 多台服务器时,此表示需要唯一
+server-id=1
+#主从同步bin-log日志文件名
+log-bin=mysql-bin
+#主从同步时,需要同步的数据库,多个数据库写多行binlog_do_db配置
+binlog_do_db=test_db
+#主从同步时,不需要同步的数据库,多个数据库写多行binlog_ignore_db配置
+#binlog_ignore_db=mysql
+#binlog_ignore_db=information_schema
+#binlog_ignore_db=sys
+#binlog_ignore_db=performance_schema
+#主从同步方式
+binlog_format=row
+#服务端编码
+character-set-server=utf8
+!includedir /etc/my.cnf.d
+3.修改129服务器/etc/my.cnf配置文件,只有server-id不同,为2配置如下
+[client]
+#客户端连接端口
+port=3306
+#客户端连接sock
+socket=/opt/mysql5.7/log/mysql.socka
+#客户端编码
+default-character-set=utf8
+[mysqld]
+#mysql服务端口
+port=3306
+#安装目录
+basedir=/opt/mysql5.7
+#数据存放目录
+datadir=/opt/mysql5.7/data
+#sock文件地址
+socket=/opt/mysql5.7/log/mysql.sock
+#错误日志存放地址
+log-error=/opt/mysql5.7/log/mysql.log
+#pid文件地址
+pid-file=/opt/mysql5.7/log/mysql.pid
+#下面内容为mysq主备时配置,单mysql部署护理下面配置
+#server-id 多台服务器时,此表示需要唯一
+server-id=2
+#主从同步bin-log日志文件名
+log-bin=mysql-bin
+#主从同步时,需要同步的数据库,多个数据库写多行binlog_do_db配置
+binlog_do_db=test_db
+#主从同步时,不需要同步的数据库,多个数据库写多行binlog_ignore_db配置
+#binlog_ignore_db=mysql
+#binlog_ignore_db=information_schema
+#binlog_ignore_db=sys
+#binlog_ignore_db=performance_schema
+#主从同步方式
+binlog_format=row
+#服务端编码
+character-set-server=utf8
+!includedir /etc/my.cnf.d
+5.重启mysql服务
+[root@128 mysql5.7]# systemctl stop mysqld
+[root@128 mysql5.7]# systemctl start mysqld
+四、mysql数据库双主双从配置
+    1.连接128服务器mysql,并创建主从同步账户slavebak,并查看master状态,记录下file、psition值,配置129mysql从库时使用
+[root@128 ~]# /opt/mysql5.7/bin/mysql -uroot -proot
+mysql: [Warning] Using a password on the command line interface can be insecure.
+......
+Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
+mysql> grant replication slave on *.* to slavebak@'%' identified by 'slavebak';
+mysql> flush privileges;
+mysql> show master status;
++------------------+----------+--------------+------------------+-------------------+
+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
++------------------+----------+--------------+------------------+-------------------+
+| mysql-bin.000002 |     1287 | test_db      |                  |                   |
++------------------+----------+--------------+------------------+-------------------+
+1 row in set (0.01 sec)
+mysql>
+2.连接129服务器,使用slavebak用户远程登录128mysql,测试连接是否正常。
+[root@129 ~]# /opt/mysql5.7/bin/mysql -h192.168.222.128 -uslavebak -pslavebak
+mysql: [Warning] Using a password on the command line interface can be insecure.
+......
+Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
+mysql> exit;
+[root@129 ~]#
+3.在129服务器用root连接本服务器mysql,并配置128的主库信息
+[root@129 ~]# /opt/mysql5.7/bin/mysql -uroot -proot
+mysql: [Warning] Using a password on the command line interface can be insecure.
+......
+Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
+mysql> change master to
+-> master_host='192.168.222.128',            #128服务器mysql ip
+-> master_port=3306,                         #128服务器mysql端口
+-> master_user='slavebak',                   #128服务器mysql从库同步用户
+-> master_password='slavebak',               #128服务器mysql从库同步用户密码
+-> master_log_file='mysql-bin.000002',       #前面记录的128服务mysql file值
+-> master_log_pos=1287;                      #前面记录的128服务mysql psition值
+Query OK, 0 rows affected, 2 warnings (0.02 sec)
+mysql> start slave;            #启动从库配置
+
+4.查看129从库配置是否成功Slave_IO_Running、Slave_SQL_Running都为yes则成功
+mysql> show slave status;
+mysql> show slave status \G;
+*************************** 1. row ***************************
+......
+Slave_IO_Running:  Yes                    #此值为yes配置成功
+Slave_SQL_Running: Yes                    #此值为yes配置i成功
+......
+1 row in set (0.01 sec)
+5.在129服务器mysql创建主从同步账户slavebak,查看master状态,记录下file、psition值
+mysql> grant replication slave on *.* to slavebak@'%' identified by 'slavebak';
+mysql> flush privileges;
+mysql> show master status;
++------------------+----------+--------------+------------------+-------------------+
+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
++------------------+----------+--------------+------------------+-------------------+
+| mysql-bin.000002 |     848  | test_db      |                  |                   |
++------------------+----------+--------------+------------------+-------------------+
+1 row in set (0.01 sec)
+ 6.连接128服务器并使用root用户连接本服务器mysql,配置129的主库信息
+[root@128 ~]# /opt/mysql5.7/bin/mysql -uroot -proot
+mysql: [Warning] Using a password on the command line interface can be insecure.
+......
+Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
+ 
+mysql> change master to 
+    -> master_host='192.168.222.129',            #129服务器mysql ip
+    -> master_port=3306,                         #129服务器mysql端口
+    -> master_user='slavebak',                   #129服务器mysql从库同步用户
+    -> master_password='slavebak',               #129服务器mysql从库同步用户密码
+    -> master_log_file='mysql-bin.000002',       #前面记录的129服务mysql file值
+    -> master_log_pos=848;                       #前面记录的129服务mysql psition值
+Query OK, 0 rows affected, 2 warnings (0.02 sec)
+ 
+mysql> start slave;            #启动从库配置
+   7.查看128从库配置是否成功Slave_IO_Running、Slave_SQL_Running都为yes则成功
+mysql> show slave status;
+mysql> show slave status \G;
+*************************** 1. row ***************************
+......
+Slave_IO_Running:  Yes                    #此值为yes配置成功
+Slave_SQL_Running: Yes                    #此值为yes配置i成功
+......
+1 row in set (0.01 sec)
+至此,128服务器,129服务器双主双从配置完成
+
+五、MySQL双主双从测试
+    1.连接128服务器,使用root用户连接本机mysql,并创建test_db数据库,t_test表,并插入一条数据id=1,name='zhangsan'
+[root@128 ~]# /opt/mysql5.7/bin/mysql -uroot -proot
+mysql: [Warning] Using a password on the command line interface can be insecure.
+......
+Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
+mysql> create database test_db;
+Query OK, 1 row affected (0.00 sec)
+mysql> use test_db;
+mysql> create table t_test(id int primary key, name varchar(30));
+Query OK, 0 row affected (0.01 sec)
+mysql> insert into t_test values (1, 'zhangsan');
+Query OK, 1 row affected (0.01 sec)
+mysql> select * from t_test;
++----+----------+
+| id | name     |
++----+----------+
+|  1 | zhangsan |
++----+----------+
+1 rows in set (0.00 sec)
+2.连接129服务器,使用root用户连接mysql,查看test_db数据库、t_test表以及数据是否同步,并插入id=2,name=‘lisi’ 
+[root@129 ~]# /opt/mysql5.7/bin/mysql -uroot -proot
+mysql: [Warning] Using a password on the command line interface can be insecure.
+......
+Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
+mysql> show databases;
++--------------------+
+| Database           |
++--------------------+
+| information_schema |
+| mysql              |
+| performance_schema |
+| sys                |
+| test_db            |        #test_db数据库已同步过来
++--------------------+
+5 rows in set (0.01 sec)
+mysql> use test_db;
+mysql> show tables;
++-------------------+
+| Tables_in_test_db |
++-------------------+
+| t_test            |        #t_test表已同步过来
++-------------------+
+1 row in set (0.01 sec)
+mysql> select * from t_test;
++----+----------+
+| id | name     |
++----+----------+
+|  1 | zhangsan |            #数据已同步过来
++----+----------+
+1 rows in set (0.00 sec)
+mysql> insert into t_test values (2, 'lisi');
+Query OK, 1 row affected (0.01 sec)
+3.在128服务器查看id=2,name="lisi" 是否同步
+[root@128 ~]# /opt/mysql5.7/bin/mysql -uroot -proot
+mysql: [Warning] Using a password on the command line interface can be insecure.
+......
+Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
+mysql> select * from t_test;
++----+----------+
+| id | name     |
++----+----------+
+|  1 | zhangsan |
+|  2 | lisi     |            #lisi数据已同步
++----+----------+
+1 rows in set (0.00 sec)
+ 至此,数据库双主双从测试完成。
+
+六、keepalived安装
+    128、129两台服务器安装步骤相同,配置文件不同,下面有介绍。
+    1.安装相关依赖包,并下载keepalived安装包,解压,配置,编译
+[root@128 ~]# cd /opt
+[root@128 opt]# yum -y install gcc openssl-devel popt-devel psmisc
+[root@128 opt]# wget https://www.keepalived.org/software/keepalived-2.2.7.tar.gz
+[root@128 opt]# tar -zxvf keepalived-2.2.7.tar.gz
+[root@128 opt]# cd keepalived-2.2.7
+[root@128 keepalived-2.2.7]# ./configure --prefix=/opt/keepalived-2.2.7
+[root@128 keepalived-2.2.7]# make && make install
+  2.将文件复制到对应目录下
+[root@128 keepalived-2.2.7]# mkdir /etc/keepalived
+[root@128 keepalived-2.2.7]# cp keepalived/etc/keepalived/keepalived.conf.sample /etc/keepalived/keepalived.conf
+[root@128 keepalived-2.2.7]# cp keepalived/etc/init.d/keepalived /etc/init.d/
+[root@128 keepalived-2.2.7]# cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/
+[root@128 keepalived-2.2.7]# cp bin/keepalived /usr/sbin/
+   3.新建/etc/keepalived/shutdown.sh文件,内容为:
+#!/bin/bash
+#该脚本是在mysql服务出现异常时,将keepalived应用停止,从而使虚拟vip主机自动连接到另一台mysql上
+killall keepalived
+4.使用ifconfig命令查看下网卡名称,本机网卡名称为ens33
+
+   5.修改128服务器/etc/keepalived/keepalived.conf配置文件,内容如下:
+! Configuration File for keepalived
+ 
+global_defs {
+   notification_email {
+     acassen@firewall.loc
+     failover@firewall.loc
+     sysadmin@firewall.loc
+   }
+   notification_email_from Alexandre.Cassen@firewall.loc
+   smtp_server 192.168.200.1
+   smtp_connect_timeout 30
+   router_id LVS_MASTER
+   vrrp_skip_check_adv_addr
+   vrrp_strict
+   vrrp_garp_interval 0
+   vrrp_gna_interval 0
+}
+ 
+vrrp_instance VI_1 {
+    state MASTER
+    #interface为刚才查到的本机网卡名称
+    interface ens33
+    #同一网段中同一组virtual_router_id值相同。不同组virtual_router_id值唯一。
+    #如server-1、server-2为一组,virtual_router_id=51
+    #server-3、server-4为一组,则virtual_router_id不能为51
+    virtual_router_id 51
+    #字数越大,优先级越高,master必须大于backup
+    priority 100
+    advert_int 1
+    authentication {
+        auth_type PASS
+        auth_pass 1111
+    }
+    virtual_ipaddress {
+       #该ip为虚拟出来的vip地址
+       192.168.222.130
+    }
+}
+ 
+#配置virtual_server  ip为上面配置的虚拟vip地址  端口为mysql的端口
+virtual_server 192.168.222.130 3306 {
+    delay_loop 6
+    lb_algo rr
+    lb_kind NAT
+    persistence_timeout 50
+    protocol TCP
+    #real_server 该配置为实际物理机ip地址 以及实际物理机mysql端口
+    real_server 192.168.222.128 3306 {
+        #当该ip 端口连接异常时,执行该脚本
+        notify_down /etc/keepalived/shutdown.sh
+        TCP_CHECK {
+            #实际物理机ip地址
+            connect_ip 192.168.222.128
+            #实际物理机port端口
+            connect_port 3306
+            connect_timeout 3
+            nb_get_retry 3
+            delay_before_retry 3
+        }
+    }
+}
+6.修改129服务器/etc/keepalived/keepalived.conf配置文件,与128的配置不同地方为real_server、connect_ip 两个配置,需要配置对应的实际主机ip,详细内容如下:
+! Configuration File for keepalived
+ 
+global_defs {
+   notification_email {
+     acassen@firewall.loc
+     failover@firewall.loc
+     sysadmin@firewall.loc
+   }
+   notification_email_from Alexandre.Cassen@firewall.loc
+   smtp_server 192.168.200.1
+   smtp_connect_timeout 30
+   router_id LVS_MASTER
+   vrrp_skip_check_adv_addr
+   vrrp_strict
+   vrrp_garp_interval 0
+   vrrp_gna_interval 0
+}
+ 
+vrrp_instance VI_1 {
+    state BACKUP
+    #interface为刚才查到的本机网卡名称
+    interface ens33
+    #同一网段中同一组virtual_router_id值相同。不同组virtual_router_id值唯一。
+    #如server-1、server-2为一组,virtual_router_id=51
+    #server-3、server-4为一组,则virtual_router_id不能为51
+    virtual_router_id 51
+    #字数越大,优先级越高,master必须大于backup
+    priority 90
+    advert_int 1
+    authentication {
+        auth_type PASS
+        auth_pass 1111
+    }
+    virtual_ipaddress {
+       #该ip为虚拟出来的vip地址
+       192.168.222.130
+    }
+}
+ 
+#配置virtual_server  ip为上面配置的虚拟vip地址  端口为mysql的端口
+virtual_server 192.168.222.130 3306 {
+    delay_loop 6
+    lb_algo rr
+    lb_kind NAT
+    persistence_timeout 50
+    protocol TCP
+    #real_server 该配置为实际物理机ip地址 以及实际物理机mysql端口
+    real_server 192.168.222.129 3306 {
+        #当该ip 端口连接异常时,执行该脚本
+        notify_down /etc/keepalived/shutdown.sh
+        TCP_CHECK {
+            #实际物理机ip地址
+            connect_ip 192.168.222.129
+            #实际物理机port端口
+            connect_port 3306
+            connect_timeout 3
+            nb_get_retry 3
+            delay_before_retry 3
+        }
+    }
+}
+详细配置参考《Keepalived 安装和配置详解》
+    7.将128、129服务器keepalived加入开机自启,并启动服务
+[root@128 keepalived-2.2.7]# systemctl enable keepalived
+[root@128 keepalived-2.2.7]# systemctl start keepalived
+8.启动后keepalived状态为:active(running)则正常
+
+
+
+    9.启动后相当于虚拟出一个vip 192.168.222.130,可使用远程连接工具,连接该服务器,连接进去后使用ifconfig查看该虚拟vip实际上使用的实体服务器是129服务器。
+
+
+   10.将129服务器的keepalived应用停止,再次查看130服务ifconfig,可以看到,130服务器自动将实体机ip漂移到了128服务器上
+
+
+    至此,keepalived部署完成。
+七、mysql双主双活+keepalived高可用整体测试
+    1.首先将128、129两台服务器mysql、keepalived应用全部启动,然后用mysql连接工具连接keepalived虚拟出来的192.168.222.130服务器
+
+
+   2.再130数据库test_db库t_test表插入id=3,name='wangwu'
+
+    3.此时可以查看128、129数据库,数据已同步
+
+
+4.查看130服务器ifconfig实际使用的物理机为128,所以128服务器mysql为主数据库。
+
+
+5.此时手动将128服务器mysql停止,keepalived检测到128服务3306端口连接失败,会执行/etc/keepalived/shutdown.sh脚本,将128服务器keepalived应用结束。 
+
+ 6.此时再连接130服务下,ifconfig查看,发现已经实际将物理机由128转移到129服务器上
+
+  7.再使用mysql连接工具连接130的mysql,插入一条数据id=4,name='zhaoliu',测试是否将数据存入129服务器mysql中
+
+
+8.查看129服务器mysql数据,数据已同步,说明keepalived搭建高可用成功,当128服务器mysql出现问题后keepalived自动漂移IP到实体机129服务器上,从而使129服务器mysql作为主数据库。
+
+  9.此时再启动128服务器mysql、keepalived应用
+
+  10.查看128数据库t_test表数据,数据已同步成功。
+
+11.如果漂移失败,可能是virtual_router_id在同网段内重复导致。可执行命令查看是否有其他ip使用
+[root@128 keepalived-2.2.7]# tcpdump -i 网卡名 vrrp -n |grep virtual_router_id值
+#例如:
+[root@128 keepalived-2.2.7]# tcpdump -i eno16777736 vrrp -n |grep 51
+至此,mysql双主双活+keepalived高可用部署并测试完成。
+
+
+8、mysql是数据库双主双活配置与上面相同,不同的为配置高可用第六步
+nginx配置mysql数据库的高可用
+在配置Nginx作为MySQL数据库的高可用解决方案时,通常我们会采用一些策略来确保MySQL数据库服务的持续性和可用性。这里我将介绍几种常见的策略,包括使用Nginx作为负载均衡器、配置MySQL主从复制、以及使用Nginx的代理缓存功能。
+1. 使用Nginx作为负载均衡器
+Nginx可以作为负载均衡器,将请求分发到多个MySQL服务器上,从而分散压力和增加系统的可用性。
+配置步骤:
+1、安装Nginx
+(如果尚未安装):自行安装
+
+2、配置Nginx负载均衡:
+编辑Nginx的配置文件,通常位于/etc/nginx/nginx.conf或者/etc/nginx/sites-available/目录下的某个文件。
+
+根据实际需求,在Nginx的配置中选择合适的负载均衡算法。常见的负载均衡算法包括轮询(Round Robin)、权重(Weighted)、IP哈希(IP Hash)等。
+轮询算法:Nginx按照请求的顺序依次将请求分发给每个备份服务器。这是默认的负载均衡算法,适用于服务器性能相近的情况。
+权重算法:可以为每个备份服务器设置权重,以便更多的请求被分发到性能更好或更强大的服务器上。根据服务器的处理能力来调整权重值,以达到负载均衡的效果。
+IP哈希算法:根据客户端的IP地址进行哈希计算,将同一客户端的请求始终分发到相同的备份服务器。这样可以确保与特定客户端的会话始终在同一个服务器上进行处理,适用于有状态的应用程序。
+
+
+nginx.conf添加下面配置
+stream {
+    include /etc/nginx/stream.d/*.conf;
+}
+
+
+轮询算法:
+在/etc/nginx/stream.d下创建编辑mysql_proxy.conf
+
+upstream mysql_servers {
+    server 192.168.222.128:3306;
+    #server 192.168.222.129:3306;    #如果不加backup会顺序依次将请求分发给每个服务器
+    server 192.168.222.129:3306 backup;
+}
+
+server {
+    listen 3307;
+    proxy_pass mysql_servers;
+}
+
+
+权重算法
+在/etc/nginx/stream.d下创建编辑mysql_proxy.conf
+
+upstream mysql_servers {
+    server 192.168.222.128:3306 weight=3;
+    server 192.168.222.129:3306 weight=1;
+}
+
+server {
+    listen 3307;
+    proxy_pass mysql_servers;
+}
+
+
+使用 http 上下文实现 IP 哈希
+如果你需要基于 IP 哈希的负载均衡,可以考虑将 MySQL 流量通过 HTTP 模块代理。但这通常不推荐,因为 MySQL 使用的是 TCP 协议,而不是 HTTP 协议。不过,如果你的场景允许,可以尝试以下配置:
+
+http {
+    upstream mysql_servers {
+        ip_hash;
+        server 192.168.222.128:3306;
+        server 192.168.222.129:3306 backup;
+    }
+
+    server {
+        listen 3307;
+        location / {
+            proxy_pass http://mysql_servers;
+            proxy_set_header Host $host;
+            proxy_set_header X-Real-IP $remote_addr;
+            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+    }
+}
+
+
+
+3、使用Nginx的代理缓存功能加速读取操作(可选)
+虽然这并不直接提供高可用性,但可以减轻数据库服务器的读取压力。你可以在Nginx中配置静态内容的缓存。
+配置步骤:
+在Nginx配置中添加缓存指令:
+location / {
+    proxy_pass http://mysql_servers;
+    proxy_cache one;  # 使用名为"one"的缓存区,需要先定义缓存区大小等配置项。
+    proxy_cache_valid 200 302 60m;  # 设置缓存有效期为60分钟。
+    proxy_cache_key $request_method:$scheme:$host$request_uri;
+
+
+mysql数据库中查询当前服务器host
+mysql> SELECT @@hostname AS 'Host', @@port AS 'Port';
+
++-------------------------+------+
+| Host                    | Port |
++-------------------------+------+
+| iZbp126fstzhkzq3ifwcmrZ | 3306 |
++-------------------------+------+
+1 row in set
+
+mysql> 
+
+
+
+
+两台不同账号同一区域阿里云服务器如何实现内网互通?
+原文链接:https://blog.csdn.net/weixin_44678969/article/details/136769184
+
+1.登录阿里云平台
+2.[开通peer对等]
+点击右上角的控制台,然后进行搜索专有网络VPC。
+
+
+点击进入专有网络VPC界面操作步骤如下:
+
+
+(1)点击VPC对等连接,然后开通VPC对等连接后创建对等连接。
+
+
+(2)在另一台服务器B上也同时开通VPC对等连接服务,然后点击专有网络生成默认的专有网络。
+
+
+(3)在服务器B的这个VPC对等连接对面接收发起的对等连接即可。
+(4)分别在A,B服务器的VPC对等连接界面的配置路由条目中配置对方所在的交换机网络(IP+掩码)
+
+
+
+
+如果在A,B服务器的VPC对等连接中都配置,那么就可以Ping对方的内网IP了。
+问题:
+(1)在配置路由条目时,填写对方的交换机网段时报错的原因:
+这个原因是存在网络冲突,即服务器A和服务器B的交换机网段重叠了导致配置失败。那如何解决这个问题呢?
+首先在ESC服务器中关掉该主机,然后重新创建一个交换机,在创建时填写一个与另一个服务器的交换机不在同一个网段的地址即可。
+
+
+创建完成之后,需要在VPC连接界面删除掉原来那个冲突的交换机实例即可。
+
+
+最后在重新配置一下VPC连接的路由条目后就能使内网互通。
+这是不账号同区域的情况不需要付费,如果时不同账号不同区域则需要付费使用VPC连接服务。
+注意:
+如果内网还是不通,记得看看两台服务器有没有开机!!!
+看看私网地址有没有填写正确
+最后还不能解决,可以使用工单提交你所遇到的问题,一般工程师都会快速回复你的。
+
+
+
+
+
+我们配置好MySQL主主同步时,是可以实现主主同步,但是重启机器后或者其他原因导致MySQL无法同步了。
+一、问题描述:
+当我们配置好MySQL主主同步时,是可以实现主主同步,但是重启机器后或者其他原因导致MySQL无法同步了。
+https://www.cnblogs.com/qiangyuzhou/p/14635890.html
+https://www.cnblogs.com/l-hh/p/9922548.html#
+
+如果提示数据冲突需执行下面命令一条一条跳过错误数据
+STOP SLAVE;
+SET GLOBAL sql_slave_skip_counter = 1;
+START SLAVE;
+SHOW SLAVE STATUS\G;
+ 
+二、Slave两个关键进程
+mysql replication 中slave机器上有两个关键的进程,死一个都不行,一个是slave_sql_running,一个是Slave_IO_Running,一个负责与主机的io通信,一个负责自己的slave mysql进程。
+三、如果是Slave_SQL_Running:no:
+
+
+解决办法如下:
+mysql > stop slave;                                                      
+mysql > SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;            
+mysql > start slave;                                                      
+mysql > show slave status\G;  
+
+四、如果是slave_io_running:no
+
+
+解决办法如下:
+1、查看主服务器
+mysql > show slave status\G;
+
+2、在从服务器上查看
+
+问题所在:发现Master_Log_File没有对应。
+3、出现Slave_IO_Running: No的机器上操作
+MariaDB [(none)]> stop slave;                 
+MariaDB [(none)]>CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000026', MASTER_LOG_POS=0;  
+MariaDB [(none)]> start  slave;                               
+MariaDB [(none)]> show slave status\G      
+
+到此问题就解决了!

+ 459 - 0
技术分享/gitbook服务部署及添加插件文档

@@ -0,0 +1,459 @@
+
+使用docker部署
+
+在本地目录拉取项目代码
+root@usky-backdb:~# cd /var/services/
+root@usky-backdb:~# git clone http://47.111.81.118:3000/uskycloud/usky-dev-doc.git
+
+root@usky-backdb:/var/services# cd usky-dev-doc/
+
+查看是否正确
+root@usky-backdb:/var/services/usky-dev-doc# ll
+total 228
+drwxr-xr-x 15 root root   4096 Jun 26 11:04 ./
+drwxr-xr-x 16 root root   4096 Jun 26 11:01 ../
+drwxr-xr-x  2 root root   4096 Jun 26 10:40 bin/
+drwxr-xr-x 12 root root   4096 Jun 26 11:04 _book/
+-rw-r--r--  1 root root    182 Jun 26 11:03 book.json
+-rw-r--r--  1 root root     45 Jun 24 16:40 book.json.bak
+drwxr-xr-x  8 root root   4096 Jun 26 11:03 .git/
+-rw-r--r--  1 root root    476 Jun 24 14:58 .gitignore
+drwxr-xr-x  2 root root   4096 Jun 24 14:59 .html/
+drwxr-xr-x 13 root root  12288 Jun 26 11:02 node_modules/
+-rw-r--r--  1 root root 126760 Jun 24 17:02 npm-debug.log
+-rw-r--r--  1 root root     71 Jun 26 11:02 package.json
+-rw-r--r--  1 root root   3854 Jun 26 11:02 package-lock.json
+-rw-r--r--  1 root root   6037 Jun 25 23:59 README.md
+-rw-r--r--  1 root root   4225 Jun 26 11:04 SUMMARY.md
+drwxr-xr-x  2 root root   4096 Jun 25 09:02 会议记录/
+drwxr-xr-x  2 root root   4096 Jun 25 08:54 团队制度/
+drwxr-xr-x  2 root root   4096 Jun 24 14:58 开发管理/
+drwxr-xr-x  2 root root   4096 Jun 26 10:55 技术分享/
+drwxr-xr-x  2 root root   4096 Jun 25 23:59 设计管理/
+drwxr-xr-x  2 root root   4096 Jun 25 08:54 进度跟踪/
+drwxr-xr-x  2 root root   4096 Jun 26 10:37 项目架构/
+drwxr-xr-x  2 root root   4096 Jun 24 14:58 项目管理/
+root@usky-backdb:/var/services/usky-dev-doc# 
+
+
+root@usky-backdb:~# docker images     #查询镜像
+REPOSITORY                  TAG       IMAGE ID       CREATED         SIZE
+phpmyadmin                  5.2.1     878650d0fc15   14 months ago   562MB
+jumpserver/jms_all          v3.10.6   397d150bf76a   15 months ago   2.62GB
+jumpserver/jms_all          v3.10.5   0dc156e155f7   15 months ago   2.62GB
+hub.zentao.net/app/zentao   latest    4cae640bf3bf   17 months ago   550MB
+mysql                       5.7.44    5107333e08a8   18 months ago   501MB
+redis                       6.2.14    800a4c20dea0   18 months ago   127MB
+root@usky-backdb:~# 
+root@usky-backdb:~# docker pull fellah/gitbook   #拉取镜像 这里gitbook是3.2.3版本
+root@usky-backdb:~# docker images
+REPOSITORY                  TAG       IMAGE ID       CREATED         SIZE
+phpmyadmin                  5.2.1     878650d0fc15   14 months ago   562MB
+jumpserver/jms_all          v3.10.6   397d150bf76a   15 months ago   2.62GB
+jumpserver/jms_all          v3.10.5   0dc156e155f7   15 months ago   2.62GB
+hub.zentao.net/app/zentao   latest    4cae640bf3bf   17 months ago   550MB
+mysql                       5.7.44    5107333e08a8   18 months ago   501MB
+redis                       6.2.14    800a4c20dea0   18 months ago   127MB
+fellah/gitbook              latest    29087de21915   8 years ago     287MB    *
+root@usky-backdb:~# 
+
+修改后配置文件
+root@usky-backdb:/var/services/usky-dev-doc# vim book.json
+{
+  "plugins": ["mermaid-gb3",
+          "expandable-chapters",
+          "-lunr",
+          "-search",
+          "search-pro",
+              "popup",
+              "code",
+          "tbfed-pagefooter",
+          "back-to-top-button",
+          "hide-element",
+          "sidebar-style",
+          "auto-scroll-table",
+          "splitter",
+              "edit-link",
+              "page-toc-button"],
+  "pluginsConfig": {
+    "mermaid-gb3": {
+      "default": {
+        "theme": "default",
+        "scale": 1.0
+      }
+    },
+    "hide-element": {
+      "elements": [".gitbook-link"]
+      },        
+      "tbfed-pagefooter": {
+        "copyright":"Copyright &copy 永天科技 2025",
+        "modify_label": "该文件修订时间:",
+        "modify_format": "YYYY-MM-DD HH:mm:ss"
+      },        
+      "sidebar-style": {
+         "title": "《团队技术文档》",
+         "author": "研发中心"
+      },    
+      "edit-link": {
+         "base": "http://47.111.81.118:3000/uskycloud/usky-dev-doc/src/feature-zjy",
+     "label": "编辑"
+      },
+      "page-toc-button": {
+          "maxTocDepth": 2,
+      "minTocSize": 2
+      }    
+  },
+  "language": "zh-hans"
+}
+
+
+#执行脚本构建gitbook容器
+root@usky-backdb:~# var/services/usky-dev-doc/bin/reload-book
+
+脚本内容
+#!/bin/bash
+
+cd /var/services/usky-dev-doc
+
+docker ps -a | grep usky-book
+
+docker rm -f usky-book
+
+sleep 5
+
+git pull
+
+sleep 10
+
+book sm
+
+gitbook init
+gitbook build
+
+docker run --name usky-book -p 4000:4000 -v /var/services/usky-dev-doc/:/srv/gitbook -v /var/services/usky-dev-doc/.html:/srv/html --restart=always -d fellah/gitbook
+
+sleep 5
+
+docker ps -a | grep usky-book
+
+docker logs usky-book
+
+说明
+- /srv/gitbook 是gitbook工作目录,用来存放源文件,映射到了本地的/var/services/usky-dev-doc/
+- /srv/html 是构建后的html文件,可在WEB服务中查看,映射到了本地的/var/services/usky-dev-doc/.html
+- 请确保本地的usky-dev-doc目录中包含至少README.md和SUMMARY.md两个文件
+- 访问:http://localhost:4000/
+
+
+
+
+插件描述如下
+
+渲染图表
+添加Mermaid-gb3插件
+支持渲染Mermaid图表
+使用方法
+在配置文件的plugins中添加插件
+root@usky-backdb:/var/services/usky-dev-doc# vim book.json
+
+{
+    "plugins": [
+       "mermaid-gb3"
+    ],
+  "pluginsConfig": {
+    "mermaid-gb3": {
+      "default": {
+        "theme": "default",
+        "scale": 1.0
+        }
+      }
+    }
+}
+
+保存后下载插件并重启服务
+root@usky-backdb:/var/services/usky-dev-doc# sudo npm install gitbook-plugin-mermaid-gb3 --save
+
+#执行脚本构建gitbook容器
+root@usky-backdb:~# var/services/usky-dev-doc/bin/reload-book
+
+
+侧边目录展示方式
+添加expandable-chapters 插件
+默认的侧边目录是全部展开的,该插件可以使左侧导航目录默认折叠。
+可以支持点击展开后的目录一直保持展开的状态,这点和 chapter-fold 不同。
+和 expandable-chapters-small 效果相同,唯一不同的是这个插件的箭头粗一些。
+使用方法
+在配置文件的plugins中添加插件
+root@usky-backdb:/var/services/usky-dev-doc# vim book.json
+
+{
+    "plugins": [
+         "expandable-chapters"
+    ]
+}
+
+保存后下载插件并重启服务
+root@usky-backdb:/var/services/usky-dev-doc# sudo npm install gitbook-plugin-expandable-chapters --save
+
+#执行脚本构建gitbook容器
+root@usky-backdb:~# var/services/usky-dev-doc/bin/reload-book
+
+
+
+高级搜索
+添加search-pro 高级搜索插件
+支持中文搜索
+在搜索结果中,关键字会高亮;自带的 search 插件,关键字不会高亮
+在使用此插件之前,需要将默认的 search 和 lunr 插件去掉;
+使用方法
+在配置文件的plugins中添加插件
+root@usky-backdb:/var/services/usky-dev-doc# vim book.json
+
+{
+    "plugins": [
+          "-lunr", 
+          "-search", 
+          "search-pro"
+    ]
+}
+
+保存后下载插件并重启服务
+root@usky-backdb:/var/services/usky-dev-doc# sudo npm install gitbook-plugin-search-pro --save
+
+#执行脚本构建gitbook容器
+root@usky-backdb:~# var/services/usky-dev-doc/bin/reload-book
+
+
+在新页面查看大图
+添加popup 插件
+单击图片,在新页面查看大图。
+使用方法
+在配置文件的plugins中添加插件
+root@usky-backdb:/var/services/usky-dev-doc# vim book.json
+
+{
+  "plugins": [ "popup" ]
+}
+
+保存后下载插件并重启服务
+root@usky-backdb:/var/services/usky-dev-doc# sudo npm install gitbook-plugin-popup --save
+
+#执行脚本构建gitbook容器
+root@usky-backdb:~# var/services/usky-dev-doc/bin/reload-book
+
+
+代码块
+添加code插件
+code 代码添加行号&复制按钮
+使用方法
+在配置文件的plugins中添加插件
+root@usky-backdb:/var/services/usky-dev-doc# vim book.json
+
+{
+    "plugins" : [ "code" ]
+}
+
+如果想去掉复制按钮,可配置
+
+"pluginsConfig": {
+      "code": {
+        "copyButtons": false
+      }
+}
+
+保存后下载插件并重启服务
+root@usky-backdb:/var/services/usky-dev-doc# sudo npm install gitbook-plugin-code --save
+
+#执行脚本构建gitbook容器
+root@usky-backdb:~# var/services/usky-dev-doc/bin/reload-book
+
+页面添加页脚
+添加tbfed-pagefooter 插件
+站点底部的版权相关说明配置。
+使用方法
+在配置文件的plugins中添加插件
+root@usky-backdb:/var/services/usky-dev-doc# vim book.json
+
+{
+    "plugins": [
+       "tbfed-pagefooter"
+    ],
+    "pluginsConfig": {
+        "tbfed-pagefooter": {
+            "copyright":"Copyright &copy learn.fuming.site 2019",
+            "modify_label": "该文件修订时间:",
+            "modify_format": "YYYY-MM-DD HH:mm:ss"
+        }
+    }
+}
+
+保存后下载插件并重启服务
+root@usky-backdb:/var/services/usky-dev-doc# sudo npm install gitbook-plugin-tbfed-pagefooter --save
+
+#执行脚本构建gitbook容器
+root@usky-backdb:~# var/services/usky-dev-doc/bin/reload-book
+
+
+回到顶部按钮
+添加back-to-top-button 插件
+当页面超过一屏幕时,会显示一个 回到顶部按钮
+使用方法
+在配置文件的plugins中添加插件
+root@usky-backdb:/var/services/usky-dev-doc# vim book.json
+
+{
+    "plugins": [
+         "back-to-top-button"
+    ]
+}
+
+保存后下载插件并重启服务
+root@usky-backdb:/var/services/usky-dev-doc# sudo npm install gitbook-plugin-back-to-top-button --save
+
+#执行脚本构建gitbook容器
+root@usky-backdb:~# var/services/usky-dev-doc/bin/reload-book
+效果图,注意关注页面的右下脚图标
+
+文本隐藏
+添加hide-element插件
+可以隐藏不想看到的元素,比如导航栏中 Published by GitBook
+使用方法
+在配置文件的plugins中添加插件
+root@usky-backdb:/var/services/usky-dev-doc# vim book.json
+
+
+{
+    "plugins": [
+        "hide-element"
+    ],
+    "pluginsConfig": {
+        "hide-element": {
+            "elements": [".gitbook-link"]
+        }
+    }
+}
+
+保存后下载插件并重启服务
+root@usky-backdb:/var/services/usky-dev-doc# sudo npm install gitbook-plugin-hide-element --save
+
+#执行脚本构建gitbook容器
+root@usky-backdb:~# var/services/usky-dev-doc/bin/reload-book
+默认可以移除最左侧下方的提示信息:
+Published with GitBook 或 本书使用 Gitbook 发布
+
+侧边添加标题
+添加sidebar-style 插件
+在左侧最上方添加标题。
+在左侧导航最下方替换掉 Published by GitBook 提示信息
+使用方法
+在配置文件的plugins中添加插件
+root@usky-backdb:/var/services/usky-dev-doc# vim book.json
+
+
+{
+    "plugins": ["sidebar-style"],
+    "pluginsConfig": {
+      "sidebar-style": {
+         "title": "《团队技术文档》",
+         "author": "研发中心"
+      }
+    }
+}
+
+保存后下载插件并重启服务
+root@usky-backdb:/var/services/usky-dev-doc# sudo npm install gitbook-plugin-sidebar-style --save
+
+#执行脚本构建gitbook容器
+root@usky-backdb:~# var/services/usky-dev-doc/bin/reload-book
+
+
+表格滚动条
+添加auto-scroll-table插件
+为避免表格过宽,添加滚动条。
+在超过文章默认宽度时才会显示,不够宽也是没有滚动条的。
+使用方法
+在配置文件的plugins中添加插件
+root@usky-backdb:/var/services/usky-dev-doc# vim book.json
+
+
+{
+  "plugins": ["auto-scroll-table"]
+}
+
+保存后下载插件并重启服务
+root@usky-backdb:/var/services/usky-dev-doc# sudo npm install gitbook-plugin-auto-scroll-table --save
+
+#执行脚本构建gitbook容器
+root@usky-backdb:~# var/services/usky-dev-doc/bin/reload-book
+
+
+侧边宽度调节
+添加splitter 插件
+侧边栏宽度可调节
+使用方法
+在配置文件的plugins中添加插件
+root@usky-backdb:/var/services/usky-dev-doc# vim book.json
+
+
+{
+    "plugins": [
+        "splitter"
+    ]
+}
+
+保存后下载插件并重启服务
+root@usky-backdb:/var/services/usky-dev-doc# sudo npm install gitbook-plugin-splitter --save
+
+#执行脚本构建gitbook容器
+root@usky-backdb:~# var/services/usky-dev-doc/bin/reload-book
+
+页面编辑
+添加edit-link插件
+页面出现编辑按钮
+使用方法
+在配置文件的plugins中添加插件
+root@usky-backdb:/var/services/usky-dev-doc# vim book.json
+
+
+{
+    "plugins": [
+        "edit-link"
+    ],
+    "pluginsConfig": {
+      "edit-link": {
+         "base": "http://47.111.81.118:3000/uskycloud/usky-dev-doc/src/feature-zjy",
+         "label": "编辑"
+      }
+    }
+}
+
+保存后下载插件并重启服务
+root@usky-backdb:/var/services/usky-dev-doc# sudo npm install gitbook-plugin-edit-link --save
+
+#执行脚本构建gitbook容器
+root@usky-backdb:~# var/services/usky-dev-doc/bin/reload-book
+
+悬浮目录
+添加page-toc-button插件
+maxTocDept 标题的最大深度(2 = h1 + h2 + h3)。不支持值> 2。 默认2
+minTocSize 显示toc按钮的最小toc条目数。 默认 2
+使用方法
+在配置文件的plugins中添加插件
+root@usky-backdb:/var/services/usky-dev-doc# vim book.json
+
+
+{
+"plugins" : [ "page-toc-button" ],
+"pluginsConfig": {
+        "page-toc-button": {
+            "maxTocDepth": 2,
+            "minTocSize": 2
+       }
+}
+}
+
+保存后下载插件并重启服务
+root@usky-backdb:/var/services/usky-dev-doc# sudo npm install gitbook-plugin-page-toc-button --save
+
+#执行脚本构建gitbook容器
+root@usky-backdb:~# var/services/usky-dev-doc/bin/reload-book