diff --git a/docs/404.html b/docs/404.html index fa9725a..4b10cd7 100644 --- a/docs/404.html +++ b/docs/404.html @@ -18,13 +18,13 @@ - - + + -

404

Looks like we've got some broken links.
+ - + diff --git a/docs/api/api.html b/docs/api/api.html index ec868f2..39997a8 100644 --- a/docs/api/api.html +++ b/docs/api/api.html @@ -18,8 +18,8 @@ - - + + - + diff --git a/docs/assets/css/0.styles.dd5321dc.css b/docs/assets/css/0.styles.6546de6a.css similarity index 95% rename from docs/assets/css/0.styles.dd5321dc.css rename to docs/assets/css/0.styles.6546de6a.css index 6417c25..21e92b9 100644 --- a/docs/assets/css/0.styles.dd5321dc.css +++ b/docs/assets/css/0.styles.6546de6a.css @@ -1 +1 @@ -svg[data-v-56cbd8b4]{position:absolute;right:7.5px;opacity:.75;cursor:pointer}svg.hover[data-v-56cbd8b4]{opacity:0}svg[data-v-56cbd8b4]:hover{opacity:1!important}span[data-v-56cbd8b4]{position:absolute;font-size:.85rem;line-height:.425rem;right:50px;opacity:0;transition:opacity .5s}.success[data-v-56cbd8b4]{opacity:1!important}.code-copy-added:hover>.code-copy svg{opacity:.75}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.theme-default-content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.theme-default-content code .token.deleted{color:#ec5975}.theme-default-content code .token.inserted{color:#3eaf7c}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;color:hsla(0,0%,100%,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983}.custom-block.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:#2c3e50}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:#2c3e50}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:#eee}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-default-content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}body,html{padding:0;margin:0;background-color:#fff}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:#2c3e50}.page{padding-left:20rem}.navbar{z-index:20;right:0;height:3.6rem;background-color:#fff;box-sizing:border-box;border-bottom:1px solid #eaecef}.navbar,.sidebar-mask{position:fixed;top:0;left:0}.sidebar-mask{z-index:9;width:100vw;height:100vh;display:none}.sidebar{font-size:16px;background-color:#fff;width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid #eaecef;overflow-y:auto}.theme-default-content:not(.custom)>:first-child{margin-top:3.6rem}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#3eaf7c}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-block,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-block,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-block,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-block,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-block,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-block,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:focus .header-anchor,h1:hover .header-anchor,h2:focus .header-anchor,h2:hover .header-anchor,h3:focus .header-anchor,h3:hover .header-anchor,h4:focus .header-anchor,h4:hover .header-anchor,h5:focus .header-anchor,h5:hover .header-anchor,h6:focus .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}h3{font-size:1.35rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:focus,a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid #eaecef}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid #dfe2e5}tr:nth-child(2n){background-color:#f6f8fa}td,th{border:1px solid #dfe2e5;padding:.6em 1em}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:959px){.sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width:719px){.sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}#nprogress{pointer-events:none}#nprogress .bar{background:#3eaf7c;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #3eaf7c,0 0 5px #3eaf7c;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#3eaf7c transparent transparent #3eaf7c;border-style:solid;border-width:2px;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.go-to-top[data-v-1c80d7ad]{cursor:pointer;position:fixed;bottom:2rem;right:2.5rem;width:2rem;color:#3eaf7c;z-index:1}.go-to-top[data-v-1c80d7ad]:hover{color:#72cda4}@media (max-width:959px){.go-to-top[data-v-1c80d7ad]{display:none}}.fade-enter-active[data-v-1c80d7ad],.fade-leave-active[data-v-1c80d7ad]{transition:opacity .3s}.fade-enter[data-v-1c80d7ad],.fade-leave-to[data-v-1c80d7ad]{opacity:0}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.home{padding:3.6rem 2rem 0;max-width:960px;margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:#6a8bad}.home .hero .action-button{display:inline-block;font-size:1.2rem;color:#fff;background-color:#3eaf7c;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #389d70}.home .hero .action-button:hover{background-color:#4abf8a}.home .features{border-top:1px solid #eaecef;padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:#3a5169}.home .feature p{color:#4e6e8e}.home .footer{padding:2.5rem;border-top:1px solid #eaecef;text-align:center;color:#4e6e8e}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.search-box{display:inline-block;position:relative;margin-right:1rem}.search-box input{cursor:text;width:10rem;height:2rem;color:#4e6e8e;display:inline-block;border:1px solid #cfd4db;border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all .2s ease;background:#fff url(/assets/img/search.83621669.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#3eaf7c}.search-box .suggestions{background:#fff;width:20rem;position:absolute;top:2rem;border:1px solid #cfd4db;border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestions.align-right{right:0}.search-box .suggestion{line-height:1.4;padding:.4rem .6rem;border-radius:4px;cursor:pointer}.search-box .suggestion a{white-space:normal;color:#5d82a6}.search-box .suggestion a .page-title{font-weight:600}.search-box .suggestion a .header{font-size:.9em;margin-left:.25em}.search-box .suggestion.focused{background-color:#f3f4f5}.search-box .suggestion.focused a{color:#3eaf7c}@media (max-width:959px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (-ms-high-contrast:none){.search-box input{height:2rem}}@media (max-width:959px) and (min-width:719px){.search-box .suggestions{left:0}}@media (max-width:719px){.search-box{margin-right:0}.search-box input{left:1rem}.search-box .suggestions{right:0}}@media (max-width:419px){.search-box .suggestions{width:calc(100vw - 4rem)}.search-box input:focus{width:8rem}}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (max-width:719px){.sidebar-button{display:block}}.dropdown-enter,.dropdown-leave-to{height:0!important}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title,.dropdown-wrapper .mobile-dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:#2c3e50}.dropdown-wrapper .dropdown-title:hover,.dropdown-wrapper .mobile-dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow,.dropdown-wrapper .mobile-dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .mobile-dropdown-title{display:none;font-weight:600}.dropdown-wrapper .mobile-dropdown-title font-size inherit:hover{color:#3eaf7c}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid #eee;padding:1rem 1.5rem .45rem 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#3eaf7c}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #3eaf7c;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{display:none}.dropdown-wrapper .mobile-dropdown-title{display:block}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper.open:blur{display:none}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:#fff;padding:.6rem 0;border:1px solid;border-color:#ddd #ddd #ccc;text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#3eaf7c}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:#2c3e50}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #46bd87}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#2c3e50;position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;background-color:#fff;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.page-edit{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-edit{padding:2rem}}@media (max-width:419px){.page-edit{padding:1.5rem}}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:#4e6e8e;margin-right:.25rem}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:#4e6e8e}.page-edit .last-updated .time{font-weight:400;color:#767676}@media (max-width:719px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}}.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-nav{padding:2rem}}@media (max-width:419px){.page-nav{padding:1.5rem}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #eaecef;padding-top:1rem;overflow:auto}.page-nav .next{float:right}.page{padding-bottom:2rem;display:block}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-heading:not(.clickable){opacity:.5}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.95em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:#2c3e50;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#3eaf7c;border-left-color:#3eaf7c}.sidebar-heading.clickable:hover{color:#3eaf7c}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:#2c3e50;border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#3eaf7c}a.sidebar-link.active{font-weight:600;color:#3eaf7c;border-left-color:#3eaf7c}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid #eaecef;padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:719px){.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}.theme-code-block[data-v-492049b0]{display:none}.theme-code-block__active[data-v-492049b0]{display:block}.theme-code-block>pre[data-v-492049b0]{background-color:orange}.theme-code-group__nav[data-v-6667a46d]{margin-bottom:-35px;background-color:#282c34;padding-bottom:22px;border-top-left-radius:6px;border-top-right-radius:6px;padding-left:10px;padding-top:10px}.theme-code-group__ul[data-v-6667a46d]{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.theme-code-group__nav-tab[data-v-6667a46d]{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:hsla(0,0%,100%,.9);font-weight:600}.theme-code-group__nav-tab-active[data-v-6667a46d]{border-bottom:1px solid #42b983}.pre-blank[data-v-6667a46d]{color:#42b983}.badge[data-v-cd6f89c2]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff}.badge.green[data-v-cd6f89c2],.badge.tip[data-v-cd6f89c2],.badge[data-v-cd6f89c2]{background-color:#42b983}.badge.error[data-v-cd6f89c2]{background-color:#da5961}.badge.warn[data-v-cd6f89c2],.badge.warning[data-v-cd6f89c2],.badge.yellow[data-v-cd6f89c2]{background-color:#e7c000}.badge+.badge[data-v-cd6f89c2]{margin-left:5px} \ No newline at end of file +svg[data-v-56cbd8b4]{position:absolute;right:7.5px;opacity:.75;cursor:pointer}svg.hover[data-v-56cbd8b4]{opacity:0}svg[data-v-56cbd8b4]:hover{opacity:1!important}span[data-v-56cbd8b4]{position:absolute;font-size:.85rem;line-height:.425rem;right:50px;opacity:0;transition:opacity .5s}.success[data-v-56cbd8b4]{opacity:1!important}.code-copy-added:hover>.code-copy svg{opacity:.75}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.theme-default-content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.theme-default-content code .token.deleted{color:#ec5975}.theme-default-content code .token.inserted{color:#3eaf7c}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;color:hsla(0,0%,100%,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983}.custom-block.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:#2c3e50}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:#2c3e50}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:#eee}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-default-content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}body,html{padding:0;margin:0;background-color:#fff}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:#2c3e50}.page{padding-left:20rem}.navbar{z-index:20;right:0;height:3.6rem;background-color:#fff;box-sizing:border-box;border-bottom:1px solid #eaecef}.navbar,.sidebar-mask{position:fixed;top:0;left:0}.sidebar-mask{z-index:9;width:100vw;height:100vh;display:none}.sidebar{font-size:16px;background-color:#fff;width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid #eaecef;overflow-y:auto}.theme-default-content:not(.custom)>:first-child{margin-top:3.6rem}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#3eaf7c}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-block,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-block,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-block,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-block,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-block,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-block,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:focus .header-anchor,h1:hover .header-anchor,h2:focus .header-anchor,h2:hover .header-anchor,h3:focus .header-anchor,h3:hover .header-anchor,h4:focus .header-anchor,h4:hover .header-anchor,h5:focus .header-anchor,h5:hover .header-anchor,h6:focus .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}h3{font-size:1.35rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:focus,a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid #eaecef}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid #dfe2e5}tr:nth-child(2n){background-color:#f6f8fa}td,th{border:1px solid #dfe2e5;padding:.6em 1em}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:959px){.sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width:719px){.sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}#nprogress{pointer-events:none}#nprogress .bar{background:#3eaf7c;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #3eaf7c,0 0 5px #3eaf7c;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#3eaf7c transparent transparent #3eaf7c;border-style:solid;border-width:2px;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.go-to-top[data-v-1c80d7ad]{cursor:pointer;position:fixed;bottom:2rem;right:2.5rem;width:2rem;color:#3eaf7c;z-index:1}.go-to-top[data-v-1c80d7ad]:hover{color:#72cda4}@media (max-width:959px){.go-to-top[data-v-1c80d7ad]{display:none}}.fade-enter-active[data-v-1c80d7ad],.fade-leave-active[data-v-1c80d7ad]{transition:opacity .3s}.fade-enter[data-v-1c80d7ad],.fade-leave-to[data-v-1c80d7ad]{opacity:0}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.home{padding:3.6rem 2rem 0;max-width:960px;margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:#6a8bad}.home .hero .action-button{display:inline-block;font-size:1.2rem;color:#fff;background-color:#3eaf7c;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #389d70}.home .hero .action-button:hover{background-color:#4abf8a}.home .features{border-top:1px solid #eaecef;padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:#3a5169}.home .feature p{color:#4e6e8e}.home .footer{padding:2.5rem;border-top:1px solid #eaecef;text-align:center;color:#4e6e8e}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.search-box{display:inline-block;position:relative;margin-right:1rem}.search-box input{cursor:text;width:10rem;height:2rem;color:#4e6e8e;display:inline-block;border:1px solid #cfd4db;border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all .2s ease;background:#fff url(/assets/img/search.83621669.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#3eaf7c}.search-box .suggestions{background:#fff;width:20rem;position:absolute;top:2rem;border:1px solid #cfd4db;border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestions.align-right{right:0}.search-box .suggestion{line-height:1.4;padding:.4rem .6rem;border-radius:4px;cursor:pointer}.search-box .suggestion a{white-space:normal;color:#5d82a6}.search-box .suggestion a .page-title{font-weight:600}.search-box .suggestion a .header{font-size:.9em;margin-left:.25em}.search-box .suggestion.focused{background-color:#f3f4f5}.search-box .suggestion.focused a{color:#3eaf7c}@media (max-width:959px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (-ms-high-contrast:none){.search-box input{height:2rem}}@media (max-width:959px) and (min-width:719px){.search-box .suggestions{left:0}}@media (max-width:719px){.search-box{margin-right:0}.search-box input{left:1rem}.search-box .suggestions{right:0}}@media (max-width:419px){.search-box .suggestions{width:calc(100vw - 4rem)}.search-box input:focus{width:8rem}}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (max-width:719px){.sidebar-button{display:block}}.dropdown-enter,.dropdown-leave-to{height:0!important}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title,.dropdown-wrapper .mobile-dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:#2c3e50}.dropdown-wrapper .dropdown-title:hover,.dropdown-wrapper .mobile-dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow,.dropdown-wrapper .mobile-dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .mobile-dropdown-title{display:none;font-weight:600}.dropdown-wrapper .mobile-dropdown-title font-size inherit:hover{color:#3eaf7c}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid #eee;padding:1rem 1.5rem .45rem 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#3eaf7c}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #3eaf7c;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{display:none}.dropdown-wrapper .mobile-dropdown-title{display:block}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper.open:blur{display:none}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:#fff;padding:.6rem 0;border:1px solid;border-color:#ddd #ddd #ccc;text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#3eaf7c}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:#2c3e50}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #46bd87}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#2c3e50;position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;background-color:#fff;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.page-edit{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-edit{padding:2rem}}@media (max-width:419px){.page-edit{padding:1.5rem}}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:#4e6e8e;margin-right:.25rem}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:#4e6e8e}.page-edit .last-updated .time{font-weight:400;color:#767676}@media (max-width:719px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}}.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-nav{padding:2rem}}@media (max-width:419px){.page-nav{padding:1.5rem}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #eaecef;padding-top:1rem;overflow:auto}.page-nav .next{float:right}.page{padding-bottom:2rem;display:block}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-heading:not(.clickable){opacity:.5}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.95em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:#2c3e50;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#3eaf7c;border-left-color:#3eaf7c}.sidebar-heading.clickable:hover{color:#3eaf7c}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:#2c3e50;border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#3eaf7c}a.sidebar-link.active{font-weight:600;color:#3eaf7c;border-left-color:#3eaf7c}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid #eaecef;padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:719px){.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}.badge[data-v-cd6f89c2]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff}.badge.green[data-v-cd6f89c2],.badge.tip[data-v-cd6f89c2],.badge[data-v-cd6f89c2]{background-color:#42b983}.badge.error[data-v-cd6f89c2]{background-color:#da5961}.badge.warn[data-v-cd6f89c2],.badge.warning[data-v-cd6f89c2],.badge.yellow[data-v-cd6f89c2]{background-color:#e7c000}.badge+.badge[data-v-cd6f89c2]{margin-left:5px}.theme-code-block[data-v-492049b0]{display:none}.theme-code-block__active[data-v-492049b0]{display:block}.theme-code-block>pre[data-v-492049b0]{background-color:orange}.theme-code-group__nav[data-v-6667a46d]{margin-bottom:-35px;background-color:#282c34;padding-bottom:22px;border-top-left-radius:6px;border-top-right-radius:6px;padding-left:10px;padding-top:10px}.theme-code-group__ul[data-v-6667a46d]{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.theme-code-group__nav-tab[data-v-6667a46d]{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:hsla(0,0%,100%,.9);font-weight:600}.theme-code-group__nav-tab-active[data-v-6667a46d]{border-bottom:1px solid #42b983}.pre-blank[data-v-6667a46d]{color:#42b983} \ No newline at end of file diff --git a/docs/assets/js/10.25d9ee7b.js b/docs/assets/js/10.47227018.js similarity index 95% rename from docs/assets/js/10.25d9ee7b.js rename to docs/assets/js/10.47227018.js index 83be62a..6dd0a4e 100644 --- a/docs/assets/js/10.25d9ee7b.js +++ b/docs/assets/js/10.47227018.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{287:function(t,a,s){"use strict";s.r(a);var r=s(7),e=Object(r.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"faq"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#faq"}},[t._v("#")]),t._v(" FAQ")]),t._v(" "),a("h2",{attrs:{id:"联机和单机有什么区别"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#联机和单机有什么区别"}},[t._v("#")]),t._v(" 联机和单机有什么区别?")]),t._v(" "),a("p",[t._v("联机:可以使用面板管理多个服务器上的节点,支持多用户,支持流量控制,功能强大,适合多人使用。")]),t._v(" "),a("p",[t._v("单机:只有一个用户,功能简单,适合自用。")]),t._v(" "),a("h2",{attrs:{id:"是否考虑支持商业化功能"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#是否考虑支持商业化功能"}},[t._v("#")]),t._v(" 是否考虑支持商业化功能?")]),t._v(" "),a("p",[t._v("不考虑")]),t._v(" "),a("h2",{attrs:{id:"会收费么"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#会收费么"}},[t._v("#")]),t._v(" 会收费么?")]),t._v(" "),a("p",[t._v("不会")]),t._v(" "),a("h2",{attrs:{id:"是否开源"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#是否开源"}},[t._v("#")]),t._v(" 是否开源?")]),t._v(" "),a("p",[t._v("不开源")])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{284:function(t,a,s){"use strict";s.r(a);var r=s(7),e=Object(r.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"faq"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#faq"}},[t._v("#")]),t._v(" FAQ")]),t._v(" "),a("h2",{attrs:{id:"联机和单机有什么区别"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#联机和单机有什么区别"}},[t._v("#")]),t._v(" 联机和单机有什么区别?")]),t._v(" "),a("p",[t._v("联机:可以使用面板管理多个服务器上的节点,支持多用户,支持流量控制,功能强大,适合多人使用。")]),t._v(" "),a("p",[t._v("单机:只有一个用户,功能简单,适合自用。")]),t._v(" "),a("h2",{attrs:{id:"是否考虑支持商业化功能"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#是否考虑支持商业化功能"}},[t._v("#")]),t._v(" 是否考虑支持商业化功能?")]),t._v(" "),a("p",[t._v("不考虑")]),t._v(" "),a("h2",{attrs:{id:"会收费么"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#会收费么"}},[t._v("#")]),t._v(" 会收费么?")]),t._v(" "),a("p",[t._v("不会")]),t._v(" "),a("h2",{attrs:{id:"是否开源"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#是否开源"}},[t._v("#")]),t._v(" 是否开源?")]),t._v(" "),a("p",[t._v("不开源")])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/11.3705b692.js b/docs/assets/js/11.80ef2bf2.js similarity index 99% rename from docs/assets/js/11.3705b692.js rename to docs/assets/js/11.80ef2bf2.js index 84f60fc..37adf37 100644 --- a/docs/assets/js/11.3705b692.js +++ b/docs/assets/js/11.80ef2bf2.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{286:function(a,t,e){"use strict";e.r(t);var s=e(7),r=Object(s.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"手动安装教程"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#手动安装教程"}},[a._v("#")]),a._v(" 手动安装教程")]),a._v(" "),t("h2",{attrs:{id:"准备"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#准备"}},[a._v("#")]),a._v(" 准备")]),a._v(" "),t("h4",{attrs:{id:"安装顺序"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装顺序"}},[a._v("#")]),a._v(" 安装顺序")]),a._v(" "),t("p",[a._v("Docker -> Caddy2 -> MariaDB -> Redis -> Trojan Panel Backend -> Trojan Panel Frontend -> Trojan Panel Core")]),a._v(" "),t("h4",{attrs:{id:"版本对应关系"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#版本对应关系"}},[a._v("#")]),a._v(" 版本对应关系")]),a._v(" "),t("table",[t("thead",[t("tr",[t("th",[a._v("名称")]),a._v(" "),t("th",[a._v("版本")])])]),a._v(" "),t("tbody",[t("tr",[t("td",[a._v("Docker")]),a._v(" "),t("td",[a._v("latest")])]),a._v(" "),t("tr",[t("td",[a._v("Nginx")]),a._v(" "),t("td",[a._v("1.20-alpine")])]),a._v(" "),t("tr",[t("td",[a._v("Caddy2")]),a._v(" "),t("td",[a._v("2.6.2")])]),a._v(" "),t("tr",[t("td",[a._v("MariaDB")]),a._v(" "),t("td",[a._v("10.7.3")])]),a._v(" "),t("tr",[t("td",[a._v("Redis")]),a._v(" "),t("td",[a._v("6.2.7")])]),a._v(" "),t("tr",[t("td",[a._v("Trojan Panel Frontend")]),a._v(" "),t("td",[a._v("latest")])]),a._v(" "),t("tr",[t("td",[a._v("Trojan Panel Backend")]),a._v(" "),t("td",[a._v("latest")])]),a._v(" "),t("tr",[t("td",[a._v("Trojan Panel Core")]),a._v(" "),t("td",[a._v("latest")])])])]),a._v(" "),t("h2",{attrs:{id:"安装docker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装docker"}},[a._v("#")]),a._v(" 安装Docker")]),a._v(" "),t("blockquote",[t("p",[a._v("Docker官方安装教程:https://docs.docker.com/engine/install/")])]),a._v(" "),t("h2",{attrs:{id:"安装caddy2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装caddy2"}},[a._v("#")]),a._v(" 安装Caddy2")]),a._v(" "),t("blockquote",[t("p",[a._v("Docker Hub:https://hub.docker.com/_/caddy")])]),a._v(" "),t("ol",[t("li",[t("p",[a._v("Pull the image")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" pull caddy:2.6.2\n")])])])]),a._v(" "),t("li",[t("p",[a._v("Start a container")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" run "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--name")]),a._v(" trojan-panel-caddy "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--restart")]),a._v(" always "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("host "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CADDY_CONFIG}")]),a._v('"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CADDY_CONFIG}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CERT_PATH}")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/tpdata/cert/certificates/acme-v02.api.letsencrypt.org-directory/'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${domain}")]),a._v('/"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${WEB_PATH}")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${WEB_PATH}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CADDY_LOG}")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CADDY_LOG}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\ncaddy:2.6.2 caddy run "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--config")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CADDY_CONFIG}")]),a._v("\n")])])])])]),a._v(" "),t("p",[a._v("参数解释:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("--name trojan-panel-redis")]),a._v(":定义容器的名称")]),a._v(" "),t("li",[t("code",[a._v("--restart always")]),a._v(":容器随着Docker启动而启动")]),a._v(" "),t("li",[t("code",[a._v("--network=host")]),a._v(":使用Host网络模式")]),a._v(" "),t("li",[t("code",[a._v('-v "${CADDY_CONFIG}":"${CADDY_CONFIG}"')]),a._v(":映射Caddy配置文件")]),a._v(" "),t("li",[t("code",[a._v('-v ${CERT_PATH}:"/tpdata/cert/certificates/acme-v02.api.letsencrypt.org-directory/${domain}/"')]),a._v(":映射证书文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${WEB_PATH}:${WEB_PATH}")]),a._v(":映射伪装网站文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${CADDY_LOG}:${CADDY_LOG}")]),a._v(":日志文件夹")]),a._v(" "),t("li",[t("code",[a._v("caddy run --config ${CADDY_CONFIG}")]),a._v(":指定配置文件运行")])]),a._v(" "),t("p",[a._v("Caddy配置举例")]),a._v(" "),t("ol",[t("li",[a._v("acme自动申请和续签")])]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v('{\n "admin":{\n "disabled":true\n },\n "logging":{\n "logs":{\n "default":{\n "writer":{\n "output":"file",\n "filename":"${CADDY_LOG}error.log"\n },\n "level":"ERROR"\n }\n }\n },\n "storage":{\n "module":"file_system",\n "root":"${CERT_PATH}"\n },\n "apps":{\n "http":{\n "http_port": ${caddy_port},\n "servers":{\n "srv0":{\n "listen":[\n ":${caddy_port}"\n ],\n "routes":[\n {\n "match":[\n {\n "host":[\n "${domain}"\n ]\n }\n ],\n "handle":[\n {\n "handler":"static_response",\n "headers":{\n "Location":[\n "https://{http.request.host}:${caddy_remote_port}{http.request.uri}"\n ]\n },\n "status_code":301\n }\n ]\n }\n ]\n },\n "srv1":{\n "listen":[\n ":${caddy_remote_port}"\n ],\n "routes":[\n {\n "handle":[\n {\n "handler":"subroute",\n "routes":[\n {\n "match":[\n {\n "host":[\n "${domain}"\n ]\n }\n ],\n "handle":[\n {\n "handler":"file_server",\n "root":"${WEB_PATH}",\n "index_names":[\n "index.html",\n "index.htm"\n ]\n }\n ],\n "terminal":true\n }\n ]\n }\n ]\n }\n ],\n "tls_connection_policies":[\n {\n "match":{\n "sni":[\n "${domain}"\n ]\n }\n }\n ],\n "automatic_https":{\n "disable":true\n }\n }\n }\n },\n "tls":{\n "certificates":{\n "automate":[\n "${domain}"\n ]\n },\n "automation":{\n "policies":[\n {\n "issuers":[\n {\n "module":"acme",\n "email":""\n }\n ]\n }\n ]\n }\n }\n }\n}\n')])])]),t("p",[a._v("参数解释:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("${CADDY_LOG}")]),a._v(":日志文件夹")]),a._v(" "),t("li",[t("code",[a._v("${CERT_PATH}")]),a._v(":证书文件夹")]),a._v(" "),t("li",[t("code",[a._v("${caddy_port}")]),a._v(":Caddy端口")]),a._v(" "),t("li",[t("code",[a._v("${domain}")]),a._v(":你的域名")]),a._v(" "),t("li",[t("code",[a._v("${caddy_remote_port}")]),a._v(":Caddy转发的端口")]),a._v(" "),t("li",[t("code",[a._v("${WEB_PATH}")]),a._v(":伪装网站文件夹")])]),a._v(" "),t("ol",{attrs:{start:"2"}},[t("li",[a._v("手动设置自定义证书")])]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v('{\n "admin":{\n "disabled":true\n },\n "logging":{\n "logs":{\n "default":{\n "writer":{\n "output":"file",\n "filename":"${CADDY_LOG}error.log"\n },\n "level":"ERROR"\n }\n }\n },\n "storage":{\n "module":"file_system",\n "root":"${CERT_PATH}"\n },\n "apps":{\n "http":{\n "http_port": ${caddy_port},\n "servers":{\n "srv0":{\n "listen":[\n ":${caddy_port}"\n ],\n "routes":[\n {\n "match":[\n {\n "host":[\n "${domain}"\n ]\n }\n ],\n "handle":[\n {\n "handler":"static_response",\n "headers":{\n "Location":[\n "https://{http.request.host}:${caddy_remote_port}{http.request.uri}"\n ]\n },\n "status_code":301\n }\n ]\n }\n ]\n },\n "srv1":{\n "listen":[\n ":${caddy_remote_port}"\n ],\n "routes":[\n {\n "handle":[\n {\n "handler":"subroute",\n "routes":[\n {\n "match":[\n {\n "host":[\n "${domain}"\n ]\n }\n ],\n "handle":[\n {\n "handler":"file_server",\n "root":"${WEB_PATH}",\n "index_names":[\n "index.html",\n "index.htm"\n ]\n }\n ],\n "terminal":true\n }\n ]\n }\n ]\n }\n ],\n "tls_connection_policies":[\n {\n "match":{\n "sni":[\n "${domain}"\n ]\n }\n }\n ],\n "automatic_https":{\n "disable":true\n }\n }\n }\n },\n "tls":{\n "certificates":{\n "automate":[\n "${domain}"\n ],\n "load_files":[\n {\n "certificate":"/tpdata/cert/certificates/acme-v02.api.letsencrypt.org-directory/${domain}/${domain}.crt",\n "key":"/tpdata/cert/certificates/acme-v02.api.letsencrypt.org-directory/${domain}/${domain}.key"\n }\n ]\n },\n "automation":{\n "policies":[\n {\n "issuers":[\n {\n "module":"acme",\n "email":""\n }\n ]\n }\n ]\n }\n }\n }\n}\n')])])]),t("p",[a._v("注意:需要将证书文件上传至证书文件夹:"),t("code",[a._v("/tpdata/cert/")]),a._v(",证书文件名称格式为"),t("code",[a._v("${domian}.crt")]),a._v("和"),t("code",[a._v("${domian}.key")]),a._v("。")]),a._v(" "),t("p",[a._v("参数解释:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("${CADDY_LOG}")]),a._v(":日志文件夹")]),a._v(" "),t("li",[t("code",[a._v("${CERT_PATH}")]),a._v(":证书文件夹")]),a._v(" "),t("li",[t("code",[a._v("${caddy_port}")]),a._v(":Caddy端口")]),a._v(" "),t("li",[t("code",[a._v("${domain}")]),a._v(":你的域名")]),a._v(" "),t("li",[t("code",[a._v("${caddy_remote_port}")]),a._v(":Caddy转发的端口")]),a._v(" "),t("li",[t("code",[a._v("${WEB_PATH}")]),a._v(":伪装网站文件夹")])]),a._v(" "),t("h2",{attrs:{id:"安装mariadb"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装mariadb"}},[a._v("#")]),a._v(" 安装MariaDB")]),a._v(" "),t("blockquote",[t("p",[a._v("Docker Hub:https://hub.docker.com/_/mariadb")])]),a._v(" "),t("ol",[t("li",[t("p",[a._v("Pull the image")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" pull mariadb:10.7.3\n")])])])]),a._v(" "),t("li",[t("p",[a._v("Start a container")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" run "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--name")]),a._v(" trojan-panel-mariadb "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--restart")]),a._v(" always "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("host "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("MYSQL_DATABASE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"trojan_panel_db"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("MYSQL_ROOT_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${mariadb_pas}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("TZ")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("Asia/Shanghai "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\nmariadb:10.7.3 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--port")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${mariadb_port}")]),a._v("\n")])])])])]),a._v(" "),t("p",[a._v("参数解释:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("--name trojan-panel-mariadb")]),a._v(":定义容器的名称")]),a._v(" "),t("li",[t("code",[a._v("--restart always")]),a._v(":容器随着Docker启动而启动")]),a._v(" "),t("li",[t("code",[a._v("--network=host")]),a._v(":使用Host网络模式")]),a._v(" "),t("li",[t("code",[a._v('-e MYSQL_DATABASE="trojan_panel_db"')]),a._v(":容器启动时创建一个默认的"),t("code",[a._v("trojan_panel_db")]),a._v("库")]),a._v(" "),t("li",[t("code",[a._v('-e MYSQL_ROOT_PASSWORD="${mariadb_pas}"')]),a._v(":设置MariaDB密码为"),t("code",[a._v("${mariadb_pas}")])]),a._v(" "),t("li",[t("code",[a._v("-e TZ=Asia/Shanghai")]),a._v(":设置时区为上海")]),a._v(" "),t("li",[t("code",[a._v("--port ${mariadb_port}")]),a._v(":自定义数据库端口(默认:9507)")])]),a._v(" "),t("h2",{attrs:{id:"安装redis"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装redis"}},[a._v("#")]),a._v(" 安装Redis")]),a._v(" "),t("blockquote",[t("p",[a._v("Docker Hub:https://hub.docker.com/_/redis")])]),a._v(" "),t("ol",[t("li",[t("p",[a._v("Pull the image")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" pull redis:6.2.7\n")])])])]),a._v(" "),t("li",[t("p",[a._v("Start a container")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" run "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--name")]),a._v(" trojan-panel-redis "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--restart")]),a._v(" always "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("host "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\nredis:6.2.7 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\nredis-server "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--requirepass")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${redis_pass}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--port")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${redis_port}")]),a._v("\n")])])])])]),a._v(" "),t("p",[a._v("参数解释:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("--name trojan-panel-redis")]),a._v(":定义容器的名称")]),a._v(" "),t("li",[t("code",[a._v("--restart always")]),a._v(":容器随着Docker启动而启动")]),a._v(" "),t("li",[t("code",[a._v("--network=host")]),a._v(":使用Host网络模式")]),a._v(" "),t("li",[t("code",[a._v('redis-server --requirepass "${redis_pass}" --port ${redis_port}')]),a._v(":设置Redis密码为"),t("code",[a._v("${redis_pass}")]),a._v("\n设置Redis端口为"),t("code",[a._v("${redis_port}")]),a._v("(默认:6378)")])]),a._v(" "),t("h2",{attrs:{id:"安装trojan-panel-backend"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装trojan-panel-backend"}},[a._v("#")]),a._v(" 安装Trojan Panel Backend")]),a._v(" "),t("blockquote",[t("p",[a._v("Docker Hub:https://hub.docker.com/r/jonssonyan/trojan-panel")])]),a._v(" "),t("ol",[t("li",[t("p",[a._v("Pull the image")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" pull jonssonyan/trojan-panel\n")])])])]),a._v(" "),t("li",[t("p",[a._v("Start a container")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" run "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--name")]),a._v(" trojan-panel "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--restart")]),a._v(" always "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("host "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${WEB_PATH}")]),a._v(":/tpdata/trojan-panel/webfile/ "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_LOGS}")]),a._v(":/tpdata/trojan-panel/logs/ "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_EXPORT}")]),a._v(":/tpdata/trojan-panel/export/ "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_TEMPLATE}")]),a._v(":/tpdata/trojan-panel/template/ "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" /etc/localtime:/etc/localtime "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GIN_MODE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("release "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"mariadb_ip='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${mariadb_ip}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"mariadb_port='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${mariadb_port}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"mariadb_user='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${mariadb_user}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"mariadb_pas='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${mariadb_pas}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"redis_host='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${redis_host}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"redis_port='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${redis_port}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"redis_pass='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${redis_pass}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\njonssonyan/trojan-panel\n")])])])])]),a._v(" "),t("p",[a._v("参数解释:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("--name trojan-panel")]),a._v(":定义容器的名称")]),a._v(" "),t("li",[t("code",[a._v("--restart always")]),a._v(":容器随着Docker启动而启动")]),a._v(" "),t("li",[t("code",[a._v("--network=host")]),a._v(":使用Host网络模式")]),a._v(" "),t("li",[t("code",[a._v("-v ${WEB_PATH}:/tpdata/trojan-panel/webfile/")]),a._v(":映射伪装网站文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${TROJAN_PANEL_LOGS}:/tpdata/trojan-panel/logs/")]),a._v(":映射日志文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${TROJAN_PANEL_EXPORT}:/tpdata/trojan-panel/export/")]),a._v(":映射导出文件文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${TROJAN_PANEL_TEMPLATE}:/tpdata/trojan-panel/template/")]),a._v(":映射模板文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v /etc/localtime:/etc/localtime")]),a._v(":同步宿主机和容器的时区")]),a._v(" "),t("li",[t("code",[a._v("-e GIN_MODE=release")]),a._v(":release模式启动")]),a._v(" "),t("li",[t("code",[a._v('-e "mariadb_ip=${mariadb_ip}"')]),a._v(":"),t("code",[a._v("${mariadb_ip}")]),a._v("为 MariaDB 数据库的 IP 地址(默认:本机数据库)")]),a._v(" "),t("li",[t("code",[a._v('-e "mariadb_port=${mariadb_port}"')]),a._v(":"),t("code",[a._v("${mariadb_port}")]),a._v("为 MariaDB 数据库的端口(默认:本机数据库端口)")]),a._v(" "),t("li",[t("code",[a._v('-e "mariadb_user=${mariadb_user}"')]),a._v(":"),t("code",[a._v("${mariadb_user}")]),a._v("为 MariaDB 数据库的用户名(默认:root)")]),a._v(" "),t("li",[t("code",[a._v('-e "mariadb_pas=${mariadb_pas}"')]),a._v(":"),t("code",[a._v("${mariadb_pas}")]),a._v("为 MariaDB 数据库密码(必填)")]),a._v(" "),t("li",[t("code",[a._v('-e "redis_host=${redis_host}"')]),a._v(":"),t("code",[a._v("${redis_host}")]),a._v("为 Redis 的 IP 地址(默认:本机 Redis)")]),a._v(" "),t("li",[t("code",[a._v('-e "redis_port=${redis_port}"')]),a._v(":"),t("code",[a._v("${redis_port}")]),a._v("为 Redis 的端口(默认:本机 Redis 端口)")]),a._v(" "),t("li",[t("code",[a._v('-e "redis_pass=${redis_pass}"')]),a._v(":"),t("code",[a._v("${redis_pass}")]),a._v("为 Redis 的密码(必填)")])]),a._v(" "),t("h2",{attrs:{id:"安装trojan-panel-frontend"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装trojan-panel-frontend"}},[a._v("#")]),a._v(" 安装Trojan Panel Frontend")]),a._v(" "),t("blockquote",[t("p",[a._v("Docker Hub:https://hub.docker.com/r/jonssonyan/trojan-panel-ui")])]),a._v(" "),t("ol",[t("li",[t("p",[a._v("Pull the image")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" pull jonssonyan/trojan-panel-ui\n")])])])]),a._v(" "),t("li",[t("p",[a._v("Start a container")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" run "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--name")]),a._v(" trojan-panel-ui "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--restart")]),a._v(" always "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("host "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${UI_NGINX_CONFIG}")]),a._v('"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/etc/nginx/conf.d/default.conf"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CERT_PATH}")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CERT_PATH}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\njonssonyan/trojan-panel-ui\n")])])])])]),a._v(" "),t("p",[a._v("参数解释:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("--name trojan-panel-ui")]),a._v(":定义容器名称")]),a._v(" "),t("li",[t("code",[a._v("--restart always")]),a._v(":容器随着Docker启动而启动")]),a._v(" "),t("li",[t("code",[a._v("--network=host")]),a._v(":使用Host网络模式")]),a._v(" "),t("li",[t("code",[a._v('-v "${NGINX_CONFIG}":"/etc/nginx/conf.d/default.conf"')]),a._v(":映射Nginx配置文件")]),a._v(" "),t("li",[t("code",[a._v("-v ${CERT_PATH}:${CERT_PATH}")]),a._v(":映射证书文件夹")])]),a._v(" "),t("p",[a._v("Nginx配置举例")]),a._v(" "),t("ol",[t("li",[a._v("使用 https")])]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("server {\n listen ${trojan_panel_ui_port} ssl;\n server_name localhost;\n #强制ssl\n ssl on;\n ssl_certificate ${CERT_PATH}${domain}.crt;\n ssl_certificate_key ${CERT_PATH}${domain}.key;\n #缓存有效期\n ssl_session_timeout 5m;\n #安全链接可选的加密协议\n ssl_protocols TLSv1.3;\n #加密算法\n ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;\n #使用服务器端的首选算法\n ssl_prefer_server_ciphers on;\n #access_log /var/log/nginx/host.access.log main;\n location / {\n root ${TROJAN_PANEL_UI_DATA};\n index index.html index.htm;\n }\n location /api {\n proxy_pass http://127.0.0.1:8081;\n }\n #error_page 404 /404.html;\n #497 http->https\n error_page 497 https://\\$host:${trojan_panel_ui_port}\\$request_uri;\n # redirect server error pages to the static page /50x.html\n #\n error_page 500 502 503 504 /50x.html;\n location = /50x.html {\n root /usr/share/nginx/html;\n }\n}\n")])])]),t("p",[a._v("参数解释:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("${trojan_panel_ui_port}")]),a._v(":Trojan Panel 端口")]),a._v(" "),t("li",[t("code",[a._v("${CERT_PATH}")]),a._v(":证书文件夹")]),a._v(" "),t("li",[t("code",[a._v("${domain}")]),a._v(":你的域名")]),a._v(" "),t("li",[t("code",[a._v("${TROJAN_PANEL_UI_DATA}")]),a._v(":前端编译文件所在的文件夹")])]),a._v(" "),t("ol",{attrs:{start:"2"}},[t("li",[a._v("使用 http")])]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("server {\n listen ${trojan_panel_ui_port};\n server_name localhost;\n location / {\n root ${TROJAN_PANEL_UI_DATA};\n index index.html index.htm;\n }\n location /api {\n proxy_pass http://127.0.0.1:8081;\n }\n error_page 497 http://\\$host:${trojan_panel_ui_port}\\$request_uri;\n error_page 500 502 503 504 /50x.html;\n location = /50x.html {\n root /usr/share/nginx/html;\n }\n}\n")])])]),t("p",[a._v("参数解释:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("${trojan_panel_ui_port}")]),a._v(":Trojan Panel 前端端口")]),a._v(" "),t("li",[t("code",[a._v("${TROJAN_PANEL_UI_DATA}")]),a._v(":前端编译文件所在的文件夹")])]),a._v(" "),t("h2",{attrs:{id:"安装trojan-panel-core"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装trojan-panel-core"}},[a._v("#")]),a._v(" 安装Trojan Panel Core")]),a._v(" "),t("blockquote",[t("p",[a._v("Docker Hub:https://hub.docker.com/r/jonssonyan/trojan-panel-core")])]),a._v(" "),t("ol",[t("li",[t("p",[a._v("Pull the image")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" pull jonssonyan/trojan-panel-core\n")])])])]),a._v(" "),t("li",[t("p",[a._v("Start a container")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" run "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--name")]),a._v(" trojan-panel-core "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--restart")]),a._v(" always "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("host "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_DATA}")]),a._v("bin/xray/config:"),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_DATA}")]),a._v("bin/xray/config "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_DATA}")]),a._v("bin/trojango/config:"),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_DATA}")]),a._v("bin/trojango/config "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_DATA}")]),a._v("bin/hysteria/config:"),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_DATA}")]),a._v("bin/hysteria/config "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_DATA}")]),a._v("bin/naiveproxy/config:"),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_DATA}")]),a._v("bin/naiveproxy/config "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_LOGS}")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_LOGS}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_SQLITE}")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_SQLITE}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CERT_PATH}")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CERT_PATH}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${WEB_PATH}")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${WEB_PATH}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" /etc/localtime:/etc/localtime "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GIN_MODE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("release "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"mariadb_ip='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${mariadb_ip}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"mariadb_port='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${mariadb_port}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"mariadb_user='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${mariadb_user}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"mariadb_pas='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${mariadb_pas}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"database='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${database}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"account-table='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${account_table}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"redis_host='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${redis_host}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"redis_port='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${redis_port}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"redis_pass='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${redis_pass}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"crt_path='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CERT_PATH}")]),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${domain}")]),a._v('.crt"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"key_path='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CERT_PATH}")]),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${domain}")]),a._v('.key"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"grpc_port='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${grpc_port}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\njonssonyan/trojan-panel-core\n")])])])])]),a._v(" "),t("p",[a._v("参数解释:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("--name trojan-panel-core")]),a._v(":定义容器名称")]),a._v(" "),t("li",[t("code",[a._v("--restart always")]),a._v(":容器随着Docker启动而启动")]),a._v(" "),t("li",[t("code",[a._v("--network=host")]),a._v(":使用Host网络模式")]),a._v(" "),t("li",[t("code",[a._v("-v ${TROJAN_PANEL_CORE_DATA}bin/xray/config:${TROJAN_PANEL_CORE_DATA}bin/xray/config")]),a._v(":映射Xray配置文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${TROJAN_PANEL_CORE_DATA}bin/trojango/config:${TROJAN_PANEL_CORE_DATA}bin/trojango/config")]),a._v(":映射TrojanGo配置文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${TROJAN_PANEL_CORE_DATA}bin/hysteria/config:${TROJAN_PANEL_CORE_DATA}bin/hysteria/config")]),a._v(":映射Hysteria配置文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${TROJAN_PANEL_CORE_DATA}bin/naiveproxy/config:${TROJAN_PANEL_CORE_DATA}bin/naiveproxy/config")]),a._v(":映射NaiveProxy配置文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${TROJAN_PANEL_CORE_LOGS}:${TROJAN_PANEL_CORE_LOGS}")]),a._v(":映射日志文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${TROJAN_PANEL_CORE_SQLITE}:${TROJAN_PANEL_CORE_SQLITE}")]),a._v(":映射SQLite文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${CERT_PATH}:${CERT_PATH}")]),a._v(":映射证书文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${WEB_PATH}:${WEB_PATH}")]),a._v(":映射回落资源文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v /etc/localtime:/etc/localtime")]),a._v(":同步宿主机和容器的时区")]),a._v(" "),t("li",[t("code",[a._v("-e GIN_MODE=release")]),a._v(":release模式启动")]),a._v(" "),t("li",[t("code",[a._v('-e "mariadb_ip=${mariadb_ip}"')]),a._v(":"),t("code",[a._v("${mariadb_ip}")]),a._v("为 MariaDB 数据库的 IP 地址(默认:本机数据库)")]),a._v(" "),t("li",[t("code",[a._v('-e "mariadb_port=${mariadb_port}"')]),a._v(":"),t("code",[a._v("${mariadb_port}")]),a._v("为 MariaDB 数据库的端口(默认:本机数据库端口)")]),a._v(" "),t("li",[t("code",[a._v('-e "mariadb_user=${mariadb_user}"')]),a._v(":"),t("code",[a._v("${mariadb_user}")]),a._v("为 MariaDB 数据库的用户名(默认:root)")]),a._v(" "),t("li",[t("code",[a._v('-e "mariadb_pas=${mariadb_pas}"')]),a._v(":"),t("code",[a._v("${mariadb_pas}")]),a._v("为 MariaDB 数据库密码(默认:123456)")]),a._v(" "),t("li",[t("code",[a._v('-e "database=${database}"')]),a._v(":"),t("code",[a._v("${database}")]),a._v("为数据库名称")]),a._v(" "),t("li",[t("code",[a._v('-e "account-table=${account_table}"')]),a._v(":"),t("code",[a._v("${account_table}")]),a._v("为用户表名称")]),a._v(" "),t("li",[t("code",[a._v('-e "redis_host=${redis_host}"')]),a._v(":"),t("code",[a._v("${redis_host}")]),a._v("为 Redis 的 IP 地址(默认:本机 Redis)")]),a._v(" "),t("li",[t("code",[a._v('-e "redis_port=${redis_port}"')]),a._v(":"),t("code",[a._v("${redis_port}")]),a._v("为 Redis 的端口(默认:本机 Redis 端口)")]),a._v(" "),t("li",[t("code",[a._v('-e "redis_pass=${redis_pass}"')]),a._v(":"),t("code",[a._v("${redis_pass}")]),a._v("为 Redis 的密码(默认:123456)")]),a._v(" "),t("li",[t("code",[a._v('-e "crt_path=${CERT_PATH}${domain}.crt"')]),a._v(":自定义证书.crt文件路径")]),a._v(" "),t("li",[t("code",[a._v('-e "key_path=${CERT_PATH}${domain}.key"')]),a._v(":自定义证书.key文件路径")]),a._v(" "),t("li",[t("code",[a._v('-e "grpc_port=${grpc_port}"')]),a._v(":自定义服务器之间的通讯端口")])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{290:function(a,t,e){"use strict";e.r(t);var s=e(7),r=Object(s.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"手动安装教程"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#手动安装教程"}},[a._v("#")]),a._v(" 手动安装教程")]),a._v(" "),t("h2",{attrs:{id:"准备"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#准备"}},[a._v("#")]),a._v(" 准备")]),a._v(" "),t("h4",{attrs:{id:"安装顺序"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装顺序"}},[a._v("#")]),a._v(" 安装顺序")]),a._v(" "),t("p",[a._v("Docker -> Caddy2 -> MariaDB -> Redis -> Trojan Panel Backend -> Trojan Panel Frontend -> Trojan Panel Core")]),a._v(" "),t("h4",{attrs:{id:"版本对应关系"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#版本对应关系"}},[a._v("#")]),a._v(" 版本对应关系")]),a._v(" "),t("table",[t("thead",[t("tr",[t("th",[a._v("名称")]),a._v(" "),t("th",[a._v("版本")])])]),a._v(" "),t("tbody",[t("tr",[t("td",[a._v("Docker")]),a._v(" "),t("td",[a._v("latest")])]),a._v(" "),t("tr",[t("td",[a._v("Nginx")]),a._v(" "),t("td",[a._v("1.20-alpine")])]),a._v(" "),t("tr",[t("td",[a._v("Caddy2")]),a._v(" "),t("td",[a._v("2.6.2")])]),a._v(" "),t("tr",[t("td",[a._v("MariaDB")]),a._v(" "),t("td",[a._v("10.7.3")])]),a._v(" "),t("tr",[t("td",[a._v("Redis")]),a._v(" "),t("td",[a._v("6.2.7")])]),a._v(" "),t("tr",[t("td",[a._v("Trojan Panel Frontend")]),a._v(" "),t("td",[a._v("latest")])]),a._v(" "),t("tr",[t("td",[a._v("Trojan Panel Backend")]),a._v(" "),t("td",[a._v("latest")])]),a._v(" "),t("tr",[t("td",[a._v("Trojan Panel Core")]),a._v(" "),t("td",[a._v("latest")])])])]),a._v(" "),t("h2",{attrs:{id:"安装docker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装docker"}},[a._v("#")]),a._v(" 安装Docker")]),a._v(" "),t("blockquote",[t("p",[a._v("Docker官方安装教程:https://docs.docker.com/engine/install/")])]),a._v(" "),t("h2",{attrs:{id:"安装caddy2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装caddy2"}},[a._v("#")]),a._v(" 安装Caddy2")]),a._v(" "),t("blockquote",[t("p",[a._v("Docker Hub:https://hub.docker.com/_/caddy")])]),a._v(" "),t("ol",[t("li",[t("p",[a._v("Pull the image")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" pull caddy:2.6.2\n")])])])]),a._v(" "),t("li",[t("p",[a._v("Start a container")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" run "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--name")]),a._v(" trojan-panel-caddy "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--restart")]),a._v(" always "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("host "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CADDY_CONFIG}")]),a._v('"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CADDY_CONFIG}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CERT_PATH}")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/tpdata/cert/certificates/acme-v02.api.letsencrypt.org-directory/'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${domain}")]),a._v('/"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${WEB_PATH}")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${WEB_PATH}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CADDY_LOG}")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CADDY_LOG}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\ncaddy:2.6.2 caddy run "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--config")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CADDY_CONFIG}")]),a._v("\n")])])])])]),a._v(" "),t("p",[a._v("参数解释:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("--name trojan-panel-redis")]),a._v(":定义容器的名称")]),a._v(" "),t("li",[t("code",[a._v("--restart always")]),a._v(":容器随着Docker启动而启动")]),a._v(" "),t("li",[t("code",[a._v("--network=host")]),a._v(":使用Host网络模式")]),a._v(" "),t("li",[t("code",[a._v('-v "${CADDY_CONFIG}":"${CADDY_CONFIG}"')]),a._v(":映射Caddy配置文件")]),a._v(" "),t("li",[t("code",[a._v('-v ${CERT_PATH}:"/tpdata/cert/certificates/acme-v02.api.letsencrypt.org-directory/${domain}/"')]),a._v(":映射证书文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${WEB_PATH}:${WEB_PATH}")]),a._v(":映射伪装网站文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${CADDY_LOG}:${CADDY_LOG}")]),a._v(":日志文件夹")]),a._v(" "),t("li",[t("code",[a._v("caddy run --config ${CADDY_CONFIG}")]),a._v(":指定配置文件运行")])]),a._v(" "),t("p",[a._v("Caddy配置举例")]),a._v(" "),t("ol",[t("li",[a._v("acme自动申请和续签")])]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v('{\n "admin":{\n "disabled":true\n },\n "logging":{\n "logs":{\n "default":{\n "writer":{\n "output":"file",\n "filename":"${CADDY_LOG}error.log"\n },\n "level":"ERROR"\n }\n }\n },\n "storage":{\n "module":"file_system",\n "root":"${CERT_PATH}"\n },\n "apps":{\n "http":{\n "http_port": ${caddy_port},\n "servers":{\n "srv0":{\n "listen":[\n ":${caddy_port}"\n ],\n "routes":[\n {\n "match":[\n {\n "host":[\n "${domain}"\n ]\n }\n ],\n "handle":[\n {\n "handler":"static_response",\n "headers":{\n "Location":[\n "https://{http.request.host}:${caddy_remote_port}{http.request.uri}"\n ]\n },\n "status_code":301\n }\n ]\n }\n ]\n },\n "srv1":{\n "listen":[\n ":${caddy_remote_port}"\n ],\n "routes":[\n {\n "handle":[\n {\n "handler":"subroute",\n "routes":[\n {\n "match":[\n {\n "host":[\n "${domain}"\n ]\n }\n ],\n "handle":[\n {\n "handler":"file_server",\n "root":"${WEB_PATH}",\n "index_names":[\n "index.html",\n "index.htm"\n ]\n }\n ],\n "terminal":true\n }\n ]\n }\n ]\n }\n ],\n "tls_connection_policies":[\n {\n "match":{\n "sni":[\n "${domain}"\n ]\n }\n }\n ],\n "automatic_https":{\n "disable":true\n }\n }\n }\n },\n "tls":{\n "certificates":{\n "automate":[\n "${domain}"\n ]\n },\n "automation":{\n "policies":[\n {\n "issuers":[\n {\n "module":"acme",\n "email":""\n }\n ]\n }\n ]\n }\n }\n }\n}\n')])])]),t("p",[a._v("参数解释:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("${CADDY_LOG}")]),a._v(":日志文件夹")]),a._v(" "),t("li",[t("code",[a._v("${CERT_PATH}")]),a._v(":证书文件夹")]),a._v(" "),t("li",[t("code",[a._v("${caddy_port}")]),a._v(":Caddy端口")]),a._v(" "),t("li",[t("code",[a._v("${domain}")]),a._v(":你的域名")]),a._v(" "),t("li",[t("code",[a._v("${caddy_remote_port}")]),a._v(":Caddy转发的端口")]),a._v(" "),t("li",[t("code",[a._v("${WEB_PATH}")]),a._v(":伪装网站文件夹")])]),a._v(" "),t("ol",{attrs:{start:"2"}},[t("li",[a._v("手动设置自定义证书")])]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v('{\n "admin":{\n "disabled":true\n },\n "logging":{\n "logs":{\n "default":{\n "writer":{\n "output":"file",\n "filename":"${CADDY_LOG}error.log"\n },\n "level":"ERROR"\n }\n }\n },\n "storage":{\n "module":"file_system",\n "root":"${CERT_PATH}"\n },\n "apps":{\n "http":{\n "http_port": ${caddy_port},\n "servers":{\n "srv0":{\n "listen":[\n ":${caddy_port}"\n ],\n "routes":[\n {\n "match":[\n {\n "host":[\n "${domain}"\n ]\n }\n ],\n "handle":[\n {\n "handler":"static_response",\n "headers":{\n "Location":[\n "https://{http.request.host}:${caddy_remote_port}{http.request.uri}"\n ]\n },\n "status_code":301\n }\n ]\n }\n ]\n },\n "srv1":{\n "listen":[\n ":${caddy_remote_port}"\n ],\n "routes":[\n {\n "handle":[\n {\n "handler":"subroute",\n "routes":[\n {\n "match":[\n {\n "host":[\n "${domain}"\n ]\n }\n ],\n "handle":[\n {\n "handler":"file_server",\n "root":"${WEB_PATH}",\n "index_names":[\n "index.html",\n "index.htm"\n ]\n }\n ],\n "terminal":true\n }\n ]\n }\n ]\n }\n ],\n "tls_connection_policies":[\n {\n "match":{\n "sni":[\n "${domain}"\n ]\n }\n }\n ],\n "automatic_https":{\n "disable":true\n }\n }\n }\n },\n "tls":{\n "certificates":{\n "automate":[\n "${domain}"\n ],\n "load_files":[\n {\n "certificate":"/tpdata/cert/certificates/acme-v02.api.letsencrypt.org-directory/${domain}/${domain}.crt",\n "key":"/tpdata/cert/certificates/acme-v02.api.letsencrypt.org-directory/${domain}/${domain}.key"\n }\n ]\n },\n "automation":{\n "policies":[\n {\n "issuers":[\n {\n "module":"acme",\n "email":""\n }\n ]\n }\n ]\n }\n }\n }\n}\n')])])]),t("p",[a._v("注意:需要将证书文件上传至证书文件夹:"),t("code",[a._v("/tpdata/cert/")]),a._v(",证书文件名称格式为"),t("code",[a._v("${domian}.crt")]),a._v("和"),t("code",[a._v("${domian}.key")]),a._v("。")]),a._v(" "),t("p",[a._v("参数解释:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("${CADDY_LOG}")]),a._v(":日志文件夹")]),a._v(" "),t("li",[t("code",[a._v("${CERT_PATH}")]),a._v(":证书文件夹")]),a._v(" "),t("li",[t("code",[a._v("${caddy_port}")]),a._v(":Caddy端口")]),a._v(" "),t("li",[t("code",[a._v("${domain}")]),a._v(":你的域名")]),a._v(" "),t("li",[t("code",[a._v("${caddy_remote_port}")]),a._v(":Caddy转发的端口")]),a._v(" "),t("li",[t("code",[a._v("${WEB_PATH}")]),a._v(":伪装网站文件夹")])]),a._v(" "),t("h2",{attrs:{id:"安装mariadb"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装mariadb"}},[a._v("#")]),a._v(" 安装MariaDB")]),a._v(" "),t("blockquote",[t("p",[a._v("Docker Hub:https://hub.docker.com/_/mariadb")])]),a._v(" "),t("ol",[t("li",[t("p",[a._v("Pull the image")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" pull mariadb:10.7.3\n")])])])]),a._v(" "),t("li",[t("p",[a._v("Start a container")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" run "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--name")]),a._v(" trojan-panel-mariadb "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--restart")]),a._v(" always "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("host "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("MYSQL_DATABASE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"trojan_panel_db"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("MYSQL_ROOT_PASSWORD")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${mariadb_pas}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("TZ")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("Asia/Shanghai "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\nmariadb:10.7.3 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--port")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${mariadb_port}")]),a._v("\n")])])])])]),a._v(" "),t("p",[a._v("参数解释:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("--name trojan-panel-mariadb")]),a._v(":定义容器的名称")]),a._v(" "),t("li",[t("code",[a._v("--restart always")]),a._v(":容器随着Docker启动而启动")]),a._v(" "),t("li",[t("code",[a._v("--network=host")]),a._v(":使用Host网络模式")]),a._v(" "),t("li",[t("code",[a._v('-e MYSQL_DATABASE="trojan_panel_db"')]),a._v(":容器启动时创建一个默认的"),t("code",[a._v("trojan_panel_db")]),a._v("库")]),a._v(" "),t("li",[t("code",[a._v('-e MYSQL_ROOT_PASSWORD="${mariadb_pas}"')]),a._v(":设置MariaDB密码为"),t("code",[a._v("${mariadb_pas}")])]),a._v(" "),t("li",[t("code",[a._v("-e TZ=Asia/Shanghai")]),a._v(":设置时区为上海")]),a._v(" "),t("li",[t("code",[a._v("--port ${mariadb_port}")]),a._v(":自定义数据库端口(默认:9507)")])]),a._v(" "),t("h2",{attrs:{id:"安装redis"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装redis"}},[a._v("#")]),a._v(" 安装Redis")]),a._v(" "),t("blockquote",[t("p",[a._v("Docker Hub:https://hub.docker.com/_/redis")])]),a._v(" "),t("ol",[t("li",[t("p",[a._v("Pull the image")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" pull redis:6.2.7\n")])])])]),a._v(" "),t("li",[t("p",[a._v("Start a container")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" run "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--name")]),a._v(" trojan-panel-redis "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--restart")]),a._v(" always "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("host "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\nredis:6.2.7 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\nredis-server "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--requirepass")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${redis_pass}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--port")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${redis_port}")]),a._v("\n")])])])])]),a._v(" "),t("p",[a._v("参数解释:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("--name trojan-panel-redis")]),a._v(":定义容器的名称")]),a._v(" "),t("li",[t("code",[a._v("--restart always")]),a._v(":容器随着Docker启动而启动")]),a._v(" "),t("li",[t("code",[a._v("--network=host")]),a._v(":使用Host网络模式")]),a._v(" "),t("li",[t("code",[a._v('redis-server --requirepass "${redis_pass}" --port ${redis_port}')]),a._v(":设置Redis密码为"),t("code",[a._v("${redis_pass}")]),a._v("\n设置Redis端口为"),t("code",[a._v("${redis_port}")]),a._v("(默认:6378)")])]),a._v(" "),t("h2",{attrs:{id:"安装trojan-panel-backend"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装trojan-panel-backend"}},[a._v("#")]),a._v(" 安装Trojan Panel Backend")]),a._v(" "),t("blockquote",[t("p",[a._v("Docker Hub:https://hub.docker.com/r/jonssonyan/trojan-panel")])]),a._v(" "),t("ol",[t("li",[t("p",[a._v("Pull the image")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" pull jonssonyan/trojan-panel\n")])])])]),a._v(" "),t("li",[t("p",[a._v("Start a container")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" run "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--name")]),a._v(" trojan-panel "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--restart")]),a._v(" always "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("host "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${WEB_PATH}")]),a._v(":/tpdata/trojan-panel/webfile/ "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_LOGS}")]),a._v(":/tpdata/trojan-panel/logs/ "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_EXPORT}")]),a._v(":/tpdata/trojan-panel/export/ "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_TEMPLATE}")]),a._v(":/tpdata/trojan-panel/template/ "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" /etc/localtime:/etc/localtime "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GIN_MODE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("release "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"mariadb_ip='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${mariadb_ip}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"mariadb_port='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${mariadb_port}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"mariadb_user='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${mariadb_user}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"mariadb_pas='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${mariadb_pas}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"redis_host='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${redis_host}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"redis_port='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${redis_port}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"redis_pass='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${redis_pass}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\njonssonyan/trojan-panel\n")])])])])]),a._v(" "),t("p",[a._v("参数解释:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("--name trojan-panel")]),a._v(":定义容器的名称")]),a._v(" "),t("li",[t("code",[a._v("--restart always")]),a._v(":容器随着Docker启动而启动")]),a._v(" "),t("li",[t("code",[a._v("--network=host")]),a._v(":使用Host网络模式")]),a._v(" "),t("li",[t("code",[a._v("-v ${WEB_PATH}:/tpdata/trojan-panel/webfile/")]),a._v(":映射伪装网站文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${TROJAN_PANEL_LOGS}:/tpdata/trojan-panel/logs/")]),a._v(":映射日志文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${TROJAN_PANEL_EXPORT}:/tpdata/trojan-panel/export/")]),a._v(":映射导出文件文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${TROJAN_PANEL_TEMPLATE}:/tpdata/trojan-panel/template/")]),a._v(":映射模板文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v /etc/localtime:/etc/localtime")]),a._v(":同步宿主机和容器的时区")]),a._v(" "),t("li",[t("code",[a._v("-e GIN_MODE=release")]),a._v(":release模式启动")]),a._v(" "),t("li",[t("code",[a._v('-e "mariadb_ip=${mariadb_ip}"')]),a._v(":"),t("code",[a._v("${mariadb_ip}")]),a._v("为 MariaDB 数据库的 IP 地址(默认:本机数据库)")]),a._v(" "),t("li",[t("code",[a._v('-e "mariadb_port=${mariadb_port}"')]),a._v(":"),t("code",[a._v("${mariadb_port}")]),a._v("为 MariaDB 数据库的端口(默认:本机数据库端口)")]),a._v(" "),t("li",[t("code",[a._v('-e "mariadb_user=${mariadb_user}"')]),a._v(":"),t("code",[a._v("${mariadb_user}")]),a._v("为 MariaDB 数据库的用户名(默认:root)")]),a._v(" "),t("li",[t("code",[a._v('-e "mariadb_pas=${mariadb_pas}"')]),a._v(":"),t("code",[a._v("${mariadb_pas}")]),a._v("为 MariaDB 数据库密码(必填)")]),a._v(" "),t("li",[t("code",[a._v('-e "redis_host=${redis_host}"')]),a._v(":"),t("code",[a._v("${redis_host}")]),a._v("为 Redis 的 IP 地址(默认:本机 Redis)")]),a._v(" "),t("li",[t("code",[a._v('-e "redis_port=${redis_port}"')]),a._v(":"),t("code",[a._v("${redis_port}")]),a._v("为 Redis 的端口(默认:本机 Redis 端口)")]),a._v(" "),t("li",[t("code",[a._v('-e "redis_pass=${redis_pass}"')]),a._v(":"),t("code",[a._v("${redis_pass}")]),a._v("为 Redis 的密码(必填)")])]),a._v(" "),t("h2",{attrs:{id:"安装trojan-panel-frontend"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装trojan-panel-frontend"}},[a._v("#")]),a._v(" 安装Trojan Panel Frontend")]),a._v(" "),t("blockquote",[t("p",[a._v("Docker Hub:https://hub.docker.com/r/jonssonyan/trojan-panel-ui")])]),a._v(" "),t("ol",[t("li",[t("p",[a._v("Pull the image")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" pull jonssonyan/trojan-panel-ui\n")])])])]),a._v(" "),t("li",[t("p",[a._v("Start a container")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" run "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--name")]),a._v(" trojan-panel-ui "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--restart")]),a._v(" always "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("host "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"'),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${UI_NGINX_CONFIG}")]),a._v('"')]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"/etc/nginx/conf.d/default.conf"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CERT_PATH}")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CERT_PATH}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\njonssonyan/trojan-panel-ui\n")])])])])]),a._v(" "),t("p",[a._v("参数解释:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("--name trojan-panel-ui")]),a._v(":定义容器名称")]),a._v(" "),t("li",[t("code",[a._v("--restart always")]),a._v(":容器随着Docker启动而启动")]),a._v(" "),t("li",[t("code",[a._v("--network=host")]),a._v(":使用Host网络模式")]),a._v(" "),t("li",[t("code",[a._v('-v "${NGINX_CONFIG}":"/etc/nginx/conf.d/default.conf"')]),a._v(":映射Nginx配置文件")]),a._v(" "),t("li",[t("code",[a._v("-v ${CERT_PATH}:${CERT_PATH}")]),a._v(":映射证书文件夹")])]),a._v(" "),t("p",[a._v("Nginx配置举例")]),a._v(" "),t("ol",[t("li",[a._v("使用 https")])]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("server {\n listen ${trojan_panel_ui_port} ssl;\n server_name localhost;\n #强制ssl\n ssl on;\n ssl_certificate ${CERT_PATH}${domain}.crt;\n ssl_certificate_key ${CERT_PATH}${domain}.key;\n #缓存有效期\n ssl_session_timeout 5m;\n #安全链接可选的加密协议\n ssl_protocols TLSv1.3;\n #加密算法\n ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;\n #使用服务器端的首选算法\n ssl_prefer_server_ciphers on;\n #access_log /var/log/nginx/host.access.log main;\n location / {\n root ${TROJAN_PANEL_UI_DATA};\n index index.html index.htm;\n }\n location /api {\n proxy_pass http://127.0.0.1:8081;\n }\n #error_page 404 /404.html;\n #497 http->https\n error_page 497 https://\\$host:${trojan_panel_ui_port}\\$request_uri;\n # redirect server error pages to the static page /50x.html\n #\n error_page 500 502 503 504 /50x.html;\n location = /50x.html {\n root /usr/share/nginx/html;\n }\n}\n")])])]),t("p",[a._v("参数解释:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("${trojan_panel_ui_port}")]),a._v(":Trojan Panel 端口")]),a._v(" "),t("li",[t("code",[a._v("${CERT_PATH}")]),a._v(":证书文件夹")]),a._v(" "),t("li",[t("code",[a._v("${domain}")]),a._v(":你的域名")]),a._v(" "),t("li",[t("code",[a._v("${TROJAN_PANEL_UI_DATA}")]),a._v(":前端编译文件所在的文件夹")])]),a._v(" "),t("ol",{attrs:{start:"2"}},[t("li",[a._v("使用 http")])]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("server {\n listen ${trojan_panel_ui_port};\n server_name localhost;\n location / {\n root ${TROJAN_PANEL_UI_DATA};\n index index.html index.htm;\n }\n location /api {\n proxy_pass http://127.0.0.1:8081;\n }\n error_page 497 http://\\$host:${trojan_panel_ui_port}\\$request_uri;\n error_page 500 502 503 504 /50x.html;\n location = /50x.html {\n root /usr/share/nginx/html;\n }\n}\n")])])]),t("p",[a._v("参数解释:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("${trojan_panel_ui_port}")]),a._v(":Trojan Panel 前端端口")]),a._v(" "),t("li",[t("code",[a._v("${TROJAN_PANEL_UI_DATA}")]),a._v(":前端编译文件所在的文件夹")])]),a._v(" "),t("h2",{attrs:{id:"安装trojan-panel-core"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装trojan-panel-core"}},[a._v("#")]),a._v(" 安装Trojan Panel Core")]),a._v(" "),t("blockquote",[t("p",[a._v("Docker Hub:https://hub.docker.com/r/jonssonyan/trojan-panel-core")])]),a._v(" "),t("ol",[t("li",[t("p",[a._v("Pull the image")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" pull jonssonyan/trojan-panel-core\n")])])])]),a._v(" "),t("li",[t("p",[a._v("Start a container")]),a._v(" "),t("div",{staticClass:"language-shell extra-class"},[t("pre",{pre:!0,attrs:{class:"language-shell"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("docker")]),a._v(" run "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-d")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--name")]),a._v(" trojan-panel-core "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--restart")]),a._v(" always "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("--network")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("host "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_DATA}")]),a._v("bin/xray/config:"),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_DATA}")]),a._v("bin/xray/config "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_DATA}")]),a._v("bin/trojango/config:"),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_DATA}")]),a._v("bin/trojango/config "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_DATA}")]),a._v("bin/hysteria/config:"),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_DATA}")]),a._v("bin/hysteria/config "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_DATA}")]),a._v("bin/naiveproxy/config:"),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_DATA}")]),a._v("bin/naiveproxy/config "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_LOGS}")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_LOGS}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_SQLITE}")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${TROJAN_PANEL_CORE_SQLITE}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CERT_PATH}")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CERT_PATH}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${WEB_PATH}")]),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v(":")]),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${WEB_PATH}")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-v")]),a._v(" /etc/localtime:/etc/localtime "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("GIN_MODE")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("release "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"mariadb_ip='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${mariadb_ip}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"mariadb_port='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${mariadb_port}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"mariadb_user='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${mariadb_user}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"mariadb_pas='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${mariadb_pas}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"database='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${database}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"account-table='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${account_table}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"redis_host='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${redis_host}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"redis_port='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${redis_port}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"redis_pass='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${redis_pass}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"crt_path='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CERT_PATH}")]),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${domain}")]),a._v('.crt"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"key_path='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${CERT_PATH}")]),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${domain}")]),a._v('.key"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-e")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"grpc_port='),t("span",{pre:!0,attrs:{class:"token variable"}},[a._v("${grpc_port}")]),a._v('"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\njonssonyan/trojan-panel-core\n")])])])])]),a._v(" "),t("p",[a._v("参数解释:")]),a._v(" "),t("ul",[t("li",[t("code",[a._v("--name trojan-panel-core")]),a._v(":定义容器名称")]),a._v(" "),t("li",[t("code",[a._v("--restart always")]),a._v(":容器随着Docker启动而启动")]),a._v(" "),t("li",[t("code",[a._v("--network=host")]),a._v(":使用Host网络模式")]),a._v(" "),t("li",[t("code",[a._v("-v ${TROJAN_PANEL_CORE_DATA}bin/xray/config:${TROJAN_PANEL_CORE_DATA}bin/xray/config")]),a._v(":映射Xray配置文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${TROJAN_PANEL_CORE_DATA}bin/trojango/config:${TROJAN_PANEL_CORE_DATA}bin/trojango/config")]),a._v(":映射TrojanGo配置文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${TROJAN_PANEL_CORE_DATA}bin/hysteria/config:${TROJAN_PANEL_CORE_DATA}bin/hysteria/config")]),a._v(":映射Hysteria配置文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${TROJAN_PANEL_CORE_DATA}bin/naiveproxy/config:${TROJAN_PANEL_CORE_DATA}bin/naiveproxy/config")]),a._v(":映射NaiveProxy配置文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${TROJAN_PANEL_CORE_LOGS}:${TROJAN_PANEL_CORE_LOGS}")]),a._v(":映射日志文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${TROJAN_PANEL_CORE_SQLITE}:${TROJAN_PANEL_CORE_SQLITE}")]),a._v(":映射SQLite文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${CERT_PATH}:${CERT_PATH}")]),a._v(":映射证书文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v ${WEB_PATH}:${WEB_PATH}")]),a._v(":映射回落资源文件夹")]),a._v(" "),t("li",[t("code",[a._v("-v /etc/localtime:/etc/localtime")]),a._v(":同步宿主机和容器的时区")]),a._v(" "),t("li",[t("code",[a._v("-e GIN_MODE=release")]),a._v(":release模式启动")]),a._v(" "),t("li",[t("code",[a._v('-e "mariadb_ip=${mariadb_ip}"')]),a._v(":"),t("code",[a._v("${mariadb_ip}")]),a._v("为 MariaDB 数据库的 IP 地址(默认:本机数据库)")]),a._v(" "),t("li",[t("code",[a._v('-e "mariadb_port=${mariadb_port}"')]),a._v(":"),t("code",[a._v("${mariadb_port}")]),a._v("为 MariaDB 数据库的端口(默认:本机数据库端口)")]),a._v(" "),t("li",[t("code",[a._v('-e "mariadb_user=${mariadb_user}"')]),a._v(":"),t("code",[a._v("${mariadb_user}")]),a._v("为 MariaDB 数据库的用户名(默认:root)")]),a._v(" "),t("li",[t("code",[a._v('-e "mariadb_pas=${mariadb_pas}"')]),a._v(":"),t("code",[a._v("${mariadb_pas}")]),a._v("为 MariaDB 数据库密码(默认:123456)")]),a._v(" "),t("li",[t("code",[a._v('-e "database=${database}"')]),a._v(":"),t("code",[a._v("${database}")]),a._v("为数据库名称")]),a._v(" "),t("li",[t("code",[a._v('-e "account-table=${account_table}"')]),a._v(":"),t("code",[a._v("${account_table}")]),a._v("为用户表名称")]),a._v(" "),t("li",[t("code",[a._v('-e "redis_host=${redis_host}"')]),a._v(":"),t("code",[a._v("${redis_host}")]),a._v("为 Redis 的 IP 地址(默认:本机 Redis)")]),a._v(" "),t("li",[t("code",[a._v('-e "redis_port=${redis_port}"')]),a._v(":"),t("code",[a._v("${redis_port}")]),a._v("为 Redis 的端口(默认:本机 Redis 端口)")]),a._v(" "),t("li",[t("code",[a._v('-e "redis_pass=${redis_pass}"')]),a._v(":"),t("code",[a._v("${redis_pass}")]),a._v("为 Redis 的密码(默认:123456)")]),a._v(" "),t("li",[t("code",[a._v('-e "crt_path=${CERT_PATH}${domain}.crt"')]),a._v(":自定义证书.crt文件路径")]),a._v(" "),t("li",[t("code",[a._v('-e "key_path=${CERT_PATH}${domain}.key"')]),a._v(":自定义证书.key文件路径")]),a._v(" "),t("li",[t("code",[a._v('-e "grpc_port=${grpc_port}"')]),a._v(":自定义服务器之间的通讯端口")])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/12.bb7fdcf8.js b/docs/assets/js/12.be41f7c9.js similarity index 99% rename from docs/assets/js/12.bb7fdcf8.js rename to docs/assets/js/12.be41f7c9.js index 87ff9d2..7b284da 100644 --- a/docs/assets/js/12.bb7fdcf8.js +++ b/docs/assets/js/12.be41f7c9.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{288:function(t,n,a){"use strict";a.r(n);var s=a(7),e=Object(s.a)({},(function(){var t=this,n=t._self._c;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"docker-compose方式安装"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#docker-compose方式安装"}},[t._v("#")]),t._v(" Docker Compose方式安装")]),t._v(" "),n("h2",{attrs:{id:"准备"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#准备"}},[t._v("#")]),t._v(" 准备")]),t._v(" "),n("h3",{attrs:{id:"设置伪装网站"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#设置伪装网站"}},[t._v("#")]),t._v(" 设置伪装网站")]),t._v(" "),n("p",[t._v("将静态网站文件上传至伪装网站文件夹:"),n("code",[t._v("/tpdata/web/")])]),t._v(" "),n("h3",{attrs:{id:"新建caddy配置文件"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#新建caddy配置文件"}},[t._v("#")]),t._v(" 新建Caddy配置文件")]),t._v(" "),n("p",[t._v("文件路径:"),n("code",[t._v("/tpdata/caddy/config.json")])]),t._v(" "),n("p",[t._v("Caddy配置举例")]),t._v(" "),n("ol",[n("li",[t._v("acme自动申请和续签")])]),t._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v('{\n "admin": {\n "disabled": true\n },\n "logging": {\n "logs": {\n "default": {\n "writer": {\n "output": "file",\n "filename": "/tpdata/caddy/logs/error.log"\n },\n "level": "ERROR"\n }\n }\n },\n "storage": {\n "module": "file_system",\n "root": "/tpdata/cert/"\n },\n "apps": {\n "http": {\n "http_port": 80,\n "servers": {\n "srv0": {\n "listen": [\n ":80"\n ],\n "routes": [\n {\n "match": [\n {\n "host": [\n "${domain}"\n ]\n }\n ],\n "handle": [\n {\n "handler": "static_response",\n "headers": {\n "Location": [\n "https://{http.request.host}:8863{http.request.uri}"\n ]\n },\n "status_code": 301\n }\n ]\n }\n ]\n },\n "srv1": {\n "listen": [\n ":8863"\n ],\n "routes": [\n {\n "handle": [\n {\n "handler": "subroute",\n "routes": [\n {\n "match": [\n {\n "host": [\n "${domain}"\n ]\n }\n ],\n "handle": [\n {\n "handler": "file_server",\n "root": "/tpdata/web/",\n "index_names": [\n "index.html",\n "index.htm"\n ]\n }\n ],\n "terminal": true\n }\n ]\n }\n ]\n }\n ],\n "tls_connection_policies": [\n {\n "match": {\n "sni": [\n "${domain}"\n ]\n }\n }\n ],\n "automatic_https": {\n "disable": true\n }\n }\n }\n },\n "tls": {\n "certificates": {\n "automate": [\n "${domain}"\n ]\n },\n "automation": {\n "policies": [\n {\n "issuers": [\n {\n "module": "acme",\n "email": ""\n }\n ]\n }\n ]\n }\n }\n }\n}\n')])])]),n("p",[t._v("参数解释")]),t._v(" "),n("ul",[n("li",[n("code",[t._v("${domain}")]),t._v(":你的域名")])]),t._v(" "),n("ol",{attrs:{start:"2"}},[n("li",[t._v("手动设置自定义证书")])]),t._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v('{\n "admin": {\n "disabled": true\n },\n "logging": {\n "logs": {\n "default": {\n "writer": {\n "output": "file",\n "filename": "/tpdata/caddy/logs/error.log"\n },\n "level": "ERROR"\n }\n }\n },\n "storage": {\n "module": "file_system",\n "root": "/tpdata/cert/"\n },\n "apps": {\n "http": {\n "http_port": 80,\n "servers": {\n "srv0": {\n "listen": [\n ":80"\n ],\n "routes": [\n {\n "match": [\n {\n "host": [\n "${domain}"\n ]\n }\n ],\n "handle": [\n {\n "handler": "static_response",\n "headers": {\n "Location": [\n "https://{http.request.host}:8863{http.request.uri}"\n ]\n },\n "status_code": 301\n }\n ]\n }\n ]\n },\n "srv1": {\n "listen": [\n ":8863"\n ],\n "routes": [\n {\n "handle": [\n {\n "handler": "subroute",\n "routes": [\n {\n "match": [\n {\n "host": [\n "${domain}"\n ]\n }\n ],\n "handle": [\n {\n "handler": "file_server",\n "root": "/tpdata/web/",\n "index_names": [\n "index.html",\n "index.htm"\n ]\n }\n ],\n "terminal": true\n }\n ]\n }\n ]\n }\n ],\n "tls_connection_policies": [\n {\n "match": {\n "sni": [\n "${domain}"\n ]\n }\n }\n ],\n "automatic_https": {\n "disable": true\n }\n }\n }\n },\n "tls": {\n "certificates": {\n "automate": [\n "${domain}"\n ],\n "load_files": [\n {\n "certificate": "/tpdata/cert/certificates/acme-v02.api.letsencrypt.org-directory/${domain}/${domain}.crt",\n "key": "/tpdata/cert/certificates/acme-v02.api.letsencrypt.org-directory/${domain}/${domain}.key"\n }\n ]\n },\n "automation": {\n "policies": [\n {\n "issuers": [\n {\n "module": "acme",\n "email": ""\n }\n ]\n }\n ]\n }\n }\n }\n}\n')])])]),n("p",[t._v("注意:需要将证书文件上传至证书文件夹:"),n("code",[t._v("/tpdata/cert/")]),t._v(",证书文件名称格式为"),n("code",[t._v("${domian}.crt")]),t._v("和"),n("code",[t._v("${domian}.key")]),t._v("。")]),t._v(" "),n("p",[t._v("参数解释")]),t._v(" "),n("ul",[n("li",[n("code",[t._v("${domain}")]),t._v(":你的域名")])]),t._v(" "),n("h3",{attrs:{id:"新建nginx配置文件"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#新建nginx配置文件"}},[t._v("#")]),t._v(" 新建Nginx配置文件")]),t._v(" "),n("p",[t._v("文件路径:"),n("code",[t._v("/tpdata/trojan-panel-ui/nginx/default.conf")])]),t._v(" "),n("ol",[n("li",[t._v("使用 https")])]),t._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("server {\n listen 8888 ssl;\n server_name localhost;\n #强制ssl\n ssl on;\n ssl_certificate /tpdata/cert/${domain}.crt;\n ssl_certificate_key /tpdata/cert/${domain}.key;\n #缓存有效期\n ssl_session_timeout 5m;\n #安全链接可选的加密协议\n ssl_protocols TLSv1.3;\n #加密算法\n ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;\n #使用服务器端的首选算法\n ssl_prefer_server_ciphers on;\n #access_log /var/log/nginx/host.access.log main;\n location / {\n root /tpdata/trojan-panel-ui/;\n index index.html index.htm;\n }\n location /api {\n proxy_pass http://127.0.0.1:8081;\n }\n #error_page 404 /404.html;\n #497 http->https\n error_page 497 https://\\$host:8888\\$request_uri;\n # redirect server error pages to the static page /50x.html\n #\n error_page 500 502 503 504 /50x.html;\n location = /50x.html {\n root /usr/share/nginx/html;\n }\n}\n")])])]),n("p",[t._v("参数解释")]),t._v(" "),n("ul",[n("li",[n("code",[t._v("${domain}")]),t._v(":你的域名")])]),t._v(" "),n("ol",{attrs:{start:"2"}},[n("li",[t._v("使用 http")])]),t._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("server {\n listen 8888;\n server_name localhost;\n location / {\n root /tpdata/trojan-panel-ui/;\n index index.html index.htm;\n }\n error_page 497 http://\\$host:8888\\$request_uri;\n error_page 500 502 503 504 /50x.html;\n location = /50x.html {\n root /usr/share/nginx/html;\n }\n}\n")])])]),n("h2",{attrs:{id:"配置文件"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#配置文件"}},[t._v("#")]),t._v(" 配置文件")]),t._v(" "),n("div",{staticClass:"language-yml extra-class"},[n("pre",{pre:!0,attrs:{class:"language-yml"}},[n("code",[n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("version")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'3'")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("services")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("trojan-panel-caddy")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("image")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" caddy"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("2.6.2\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("container_name")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" trojan"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("panel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("caddy\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("restart")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" always\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("network_mode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" host\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("volumes")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/caddy/config.json:/tpdata/caddy/config.json"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/cert/:/tpdata/cert/certificates/acme-v02.api.letsencrypt.org-directory/${domain}/"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/web/:/tpdata/web/"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/caddy/logs/:/tpdata/caddy/logs/"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("command")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" caddy run "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("config /tpdata/caddy/config.json\n\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("trojan-panel-mariadb")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("image")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" mariadb"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("10.7.3\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("container_name")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" trojan"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("panel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("mariadb\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("restart")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" always\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("network_mode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" host\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("environment")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("MYSQL_DATABASE")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" trojan_panel_db\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("MYSQL_ROOT_PASSWORD")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"${mariadb_pas}"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("TZ")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Asia/Shanghai\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("command")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("port=9507\n\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("trojan-panel-redis")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("image")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" redis"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("6.2.7\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("container_name")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" trojan"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("panel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("redis\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("restart")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" always\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("network_mode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" host\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("command")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" redis"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("server "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("requirepass $"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("redis_pass"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("port 6378\n\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("trojan-panel")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("image")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" jonssonyan/trojan"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("panel\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("container_name")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" trojan"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("panel\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("restart")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" always\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("network_mode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" host\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("volumes")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/web/:/tpdata/trojan-panel/webfile/"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/trojan-panel/logs/:/tpdata/trojan-panel/logs/"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/trojan-panel/export:/tpdata/trojan-panel/export"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/trojan-panel/template:/tpdata/trojan-panel/template"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/etc/localtime:/etc/localtime"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("environment")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"GIN_MODE=release"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mariadb_ip=127.0.0.1"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mariadb_port=9507"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mariadb_user=root"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mariadb_pas=${mariadb_pas}"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"redis_host=127.0.0.1"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"redis_port=6378"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"redis_pass=${redis_pass}"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"server_port=8081"')]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("trojan-panel-ui")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("image")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" jonssonyan/trojan"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("panel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("ui\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("container_name")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" trojan"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("panel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("ui\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("restart")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" always\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("network_mode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" host\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("volumes")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/trojan-panel-ui/nginx/default.conf:/etc/nginx/conf.d/default.conf"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/cert/:/tpdata/cert/"')]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("trojan-panel-core")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("image")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" jonssonyan/trojan"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("panel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("core\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("container_name")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" trojan"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("panel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("core\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("restart")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" always\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("network_mode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" host\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("volumes")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/trojan-panel-core/bin/xray/config:/tpdata/trojan-panel-core/bin/xray/config"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/trojan-panel-core/bin/trojango/config:/tpdata/trojan-panel-core/bin/trojango/config"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/trojan-panel-core/bin/hysteria/config:/tpdata/trojan-panel-core/bin/hysteria/config"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/trojan-panel-core/bin/naiveproxy/config:/tpdata/trojan-panel-core/bin/naiveproxy/config"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/trojan-panel-core/logs/:/tpdata/trojan-panel-core/logs/"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/trojan-panel-core/config/sqlite/:/tpdata/trojan-panel-core/config/sqlite/"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/cert/:/tpdata/cert/"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/web/:/tpdata/web/"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/etc/localtime:/etc/localtime"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("environment")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"GIN_MODE=release"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mariadb_ip=127.0.0.1"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mariadb_port=9507"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mariadb_user=root"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mariadb_pas=${mariadb_pas}"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"database=trojan_panel_db"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"account-table=account"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"redis_host=127.0.0.1"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"redis_port=6378"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"redis_pass=${redis_pass}"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"crt_path=/tpdata/cert/${domain}.crt"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"key_path=/tpdata/cert/${domain}.key"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"grpc_port=8100"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"server_port=8082"')]),t._v("\n")])])]),n("p",[t._v("参数解释:")]),t._v(" "),n("ul",[n("li",[n("code",[t._v("${mariadb_pas}")]),t._v(":MariaDB 数据库密码")]),t._v(" "),n("li",[n("code",[t._v("${redis_pass}")]),t._v(":Redis 的密码")]),t._v(" "),n("li",[n("code",[t._v("${domain}")]),t._v(":你的域名")])]),t._v(" "),n("h2",{attrs:{id:"部署"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#部署"}},[t._v("#")]),t._v(" 部署")]),t._v(" "),n("p",[t._v("在Docker Compose配置文件同一级目录下执行")]),t._v(" "),n("div",{staticClass:"language-shell extra-class"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[t._v("docker")]),t._v(" compose up\n")])])])])}),[],!1,null,null,null);n.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{295:function(t,n,a){"use strict";a.r(n);var s=a(7),e=Object(s.a)({},(function(){var t=this,n=t._self._c;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"docker-compose方式安装"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#docker-compose方式安装"}},[t._v("#")]),t._v(" Docker Compose方式安装")]),t._v(" "),n("h2",{attrs:{id:"准备"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#准备"}},[t._v("#")]),t._v(" 准备")]),t._v(" "),n("h3",{attrs:{id:"设置伪装网站"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#设置伪装网站"}},[t._v("#")]),t._v(" 设置伪装网站")]),t._v(" "),n("p",[t._v("将静态网站文件上传至伪装网站文件夹:"),n("code",[t._v("/tpdata/web/")])]),t._v(" "),n("h3",{attrs:{id:"新建caddy配置文件"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#新建caddy配置文件"}},[t._v("#")]),t._v(" 新建Caddy配置文件")]),t._v(" "),n("p",[t._v("文件路径:"),n("code",[t._v("/tpdata/caddy/config.json")])]),t._v(" "),n("p",[t._v("Caddy配置举例")]),t._v(" "),n("ol",[n("li",[t._v("acme自动申请和续签")])]),t._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v('{\n "admin": {\n "disabled": true\n },\n "logging": {\n "logs": {\n "default": {\n "writer": {\n "output": "file",\n "filename": "/tpdata/caddy/logs/error.log"\n },\n "level": "ERROR"\n }\n }\n },\n "storage": {\n "module": "file_system",\n "root": "/tpdata/cert/"\n },\n "apps": {\n "http": {\n "http_port": 80,\n "servers": {\n "srv0": {\n "listen": [\n ":80"\n ],\n "routes": [\n {\n "match": [\n {\n "host": [\n "${domain}"\n ]\n }\n ],\n "handle": [\n {\n "handler": "static_response",\n "headers": {\n "Location": [\n "https://{http.request.host}:8863{http.request.uri}"\n ]\n },\n "status_code": 301\n }\n ]\n }\n ]\n },\n "srv1": {\n "listen": [\n ":8863"\n ],\n "routes": [\n {\n "handle": [\n {\n "handler": "subroute",\n "routes": [\n {\n "match": [\n {\n "host": [\n "${domain}"\n ]\n }\n ],\n "handle": [\n {\n "handler": "file_server",\n "root": "/tpdata/web/",\n "index_names": [\n "index.html",\n "index.htm"\n ]\n }\n ],\n "terminal": true\n }\n ]\n }\n ]\n }\n ],\n "tls_connection_policies": [\n {\n "match": {\n "sni": [\n "${domain}"\n ]\n }\n }\n ],\n "automatic_https": {\n "disable": true\n }\n }\n }\n },\n "tls": {\n "certificates": {\n "automate": [\n "${domain}"\n ]\n },\n "automation": {\n "policies": [\n {\n "issuers": [\n {\n "module": "acme",\n "email": ""\n }\n ]\n }\n ]\n }\n }\n }\n}\n')])])]),n("p",[t._v("参数解释")]),t._v(" "),n("ul",[n("li",[n("code",[t._v("${domain}")]),t._v(":你的域名")])]),t._v(" "),n("ol",{attrs:{start:"2"}},[n("li",[t._v("手动设置自定义证书")])]),t._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v('{\n "admin": {\n "disabled": true\n },\n "logging": {\n "logs": {\n "default": {\n "writer": {\n "output": "file",\n "filename": "/tpdata/caddy/logs/error.log"\n },\n "level": "ERROR"\n }\n }\n },\n "storage": {\n "module": "file_system",\n "root": "/tpdata/cert/"\n },\n "apps": {\n "http": {\n "http_port": 80,\n "servers": {\n "srv0": {\n "listen": [\n ":80"\n ],\n "routes": [\n {\n "match": [\n {\n "host": [\n "${domain}"\n ]\n }\n ],\n "handle": [\n {\n "handler": "static_response",\n "headers": {\n "Location": [\n "https://{http.request.host}:8863{http.request.uri}"\n ]\n },\n "status_code": 301\n }\n ]\n }\n ]\n },\n "srv1": {\n "listen": [\n ":8863"\n ],\n "routes": [\n {\n "handle": [\n {\n "handler": "subroute",\n "routes": [\n {\n "match": [\n {\n "host": [\n "${domain}"\n ]\n }\n ],\n "handle": [\n {\n "handler": "file_server",\n "root": "/tpdata/web/",\n "index_names": [\n "index.html",\n "index.htm"\n ]\n }\n ],\n "terminal": true\n }\n ]\n }\n ]\n }\n ],\n "tls_connection_policies": [\n {\n "match": {\n "sni": [\n "${domain}"\n ]\n }\n }\n ],\n "automatic_https": {\n "disable": true\n }\n }\n }\n },\n "tls": {\n "certificates": {\n "automate": [\n "${domain}"\n ],\n "load_files": [\n {\n "certificate": "/tpdata/cert/certificates/acme-v02.api.letsencrypt.org-directory/${domain}/${domain}.crt",\n "key": "/tpdata/cert/certificates/acme-v02.api.letsencrypt.org-directory/${domain}/${domain}.key"\n }\n ]\n },\n "automation": {\n "policies": [\n {\n "issuers": [\n {\n "module": "acme",\n "email": ""\n }\n ]\n }\n ]\n }\n }\n }\n}\n')])])]),n("p",[t._v("注意:需要将证书文件上传至证书文件夹:"),n("code",[t._v("/tpdata/cert/")]),t._v(",证书文件名称格式为"),n("code",[t._v("${domian}.crt")]),t._v("和"),n("code",[t._v("${domian}.key")]),t._v("。")]),t._v(" "),n("p",[t._v("参数解释")]),t._v(" "),n("ul",[n("li",[n("code",[t._v("${domain}")]),t._v(":你的域名")])]),t._v(" "),n("h3",{attrs:{id:"新建nginx配置文件"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#新建nginx配置文件"}},[t._v("#")]),t._v(" 新建Nginx配置文件")]),t._v(" "),n("p",[t._v("文件路径:"),n("code",[t._v("/tpdata/trojan-panel-ui/nginx/default.conf")])]),t._v(" "),n("ol",[n("li",[t._v("使用 https")])]),t._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("server {\n listen 8888 ssl;\n server_name localhost;\n #强制ssl\n ssl on;\n ssl_certificate /tpdata/cert/${domain}.crt;\n ssl_certificate_key /tpdata/cert/${domain}.key;\n #缓存有效期\n ssl_session_timeout 5m;\n #安全链接可选的加密协议\n ssl_protocols TLSv1.3;\n #加密算法\n ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;\n #使用服务器端的首选算法\n ssl_prefer_server_ciphers on;\n #access_log /var/log/nginx/host.access.log main;\n location / {\n root /tpdata/trojan-panel-ui/;\n index index.html index.htm;\n }\n location /api {\n proxy_pass http://127.0.0.1:8081;\n }\n #error_page 404 /404.html;\n #497 http->https\n error_page 497 https://\\$host:8888\\$request_uri;\n # redirect server error pages to the static page /50x.html\n #\n error_page 500 502 503 504 /50x.html;\n location = /50x.html {\n root /usr/share/nginx/html;\n }\n}\n")])])]),n("p",[t._v("参数解释")]),t._v(" "),n("ul",[n("li",[n("code",[t._v("${domain}")]),t._v(":你的域名")])]),t._v(" "),n("ol",{attrs:{start:"2"}},[n("li",[t._v("使用 http")])]),t._v(" "),n("div",{staticClass:"language- extra-class"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[t._v("server {\n listen 8888;\n server_name localhost;\n location / {\n root /tpdata/trojan-panel-ui/;\n index index.html index.htm;\n }\n error_page 497 http://\\$host:8888\\$request_uri;\n error_page 500 502 503 504 /50x.html;\n location = /50x.html {\n root /usr/share/nginx/html;\n }\n}\n")])])]),n("h2",{attrs:{id:"配置文件"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#配置文件"}},[t._v("#")]),t._v(" 配置文件")]),t._v(" "),n("div",{staticClass:"language-yml extra-class"},[n("pre",{pre:!0,attrs:{class:"language-yml"}},[n("code",[n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("version")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'3'")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("services")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("trojan-panel-caddy")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("image")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" caddy"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("2.6.2\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("container_name")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" trojan"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("panel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("caddy\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("restart")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" always\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("network_mode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" host\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("volumes")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/caddy/config.json:/tpdata/caddy/config.json"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/cert/:/tpdata/cert/certificates/acme-v02.api.letsencrypt.org-directory/${domain}/"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/web/:/tpdata/web/"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/caddy/logs/:/tpdata/caddy/logs/"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("command")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" caddy run "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("config /tpdata/caddy/config.json\n\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("trojan-panel-mariadb")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("image")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" mariadb"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("10.7.3\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("container_name")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" trojan"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("panel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("mariadb\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("restart")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" always\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("network_mode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" host\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("environment")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("MYSQL_DATABASE")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" trojan_panel_db\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("MYSQL_ROOT_PASSWORD")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"${mariadb_pas}"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("TZ")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Asia/Shanghai\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("command")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("port=9507\n\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("trojan-panel-redis")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("image")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" redis"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("6.2.7\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("container_name")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" trojan"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("panel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("redis\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("restart")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" always\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("network_mode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" host\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("command")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" redis"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("server "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("requirepass $"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("redis_pass"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("port 6378\n\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("trojan-panel")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("image")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" jonssonyan/trojan"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("panel\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("container_name")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" trojan"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("panel\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("restart")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" always\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("network_mode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" host\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("volumes")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/web/:/tpdata/trojan-panel/webfile/"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/trojan-panel/logs/:/tpdata/trojan-panel/logs/"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/trojan-panel/export:/tpdata/trojan-panel/export"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/trojan-panel/template:/tpdata/trojan-panel/template"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/etc/localtime:/etc/localtime"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("environment")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"GIN_MODE=release"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mariadb_ip=127.0.0.1"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mariadb_port=9507"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mariadb_user=root"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mariadb_pas=${mariadb_pas}"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"redis_host=127.0.0.1"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"redis_port=6378"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"redis_pass=${redis_pass}"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"server_port=8081"')]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("trojan-panel-ui")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("image")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" jonssonyan/trojan"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("panel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("ui\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("container_name")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" trojan"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("panel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("ui\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("restart")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" always\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("network_mode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" host\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("volumes")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/trojan-panel-ui/nginx/default.conf:/etc/nginx/conf.d/default.conf"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/cert/:/tpdata/cert/"')]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("trojan-panel-core")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("image")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" jonssonyan/trojan"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("panel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("core\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("container_name")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" trojan"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("panel"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("core\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("restart")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" always\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("network_mode")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" host\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("volumes")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/trojan-panel-core/bin/xray/config:/tpdata/trojan-panel-core/bin/xray/config"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/trojan-panel-core/bin/trojango/config:/tpdata/trojan-panel-core/bin/trojango/config"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/trojan-panel-core/bin/hysteria/config:/tpdata/trojan-panel-core/bin/hysteria/config"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/trojan-panel-core/bin/naiveproxy/config:/tpdata/trojan-panel-core/bin/naiveproxy/config"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/trojan-panel-core/logs/:/tpdata/trojan-panel-core/logs/"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/trojan-panel-core/config/sqlite/:/tpdata/trojan-panel-core/config/sqlite/"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/cert/:/tpdata/cert/"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/tpdata/web/:/tpdata/web/"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/etc/localtime:/etc/localtime"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("environment")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"GIN_MODE=release"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mariadb_ip=127.0.0.1"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mariadb_port=9507"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mariadb_user=root"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mariadb_pas=${mariadb_pas}"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"database=trojan_panel_db"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"account-table=account"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"redis_host=127.0.0.1"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"redis_port=6378"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"redis_pass=${redis_pass}"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"crt_path=/tpdata/cert/${domain}.crt"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"key_path=/tpdata/cert/${domain}.key"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"grpc_port=8100"')]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"server_port=8082"')]),t._v("\n")])])]),n("p",[t._v("参数解释:")]),t._v(" "),n("ul",[n("li",[n("code",[t._v("${mariadb_pas}")]),t._v(":MariaDB 数据库密码")]),t._v(" "),n("li",[n("code",[t._v("${redis_pass}")]),t._v(":Redis 的密码")]),t._v(" "),n("li",[n("code",[t._v("${domain}")]),t._v(":你的域名")])]),t._v(" "),n("h2",{attrs:{id:"部署"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#部署"}},[t._v("#")]),t._v(" 部署")]),t._v(" "),n("p",[t._v("在Docker Compose配置文件同一级目录下执行")]),t._v(" "),n("div",{staticClass:"language-shell extra-class"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[t._v("docker")]),t._v(" compose up\n")])])])])}),[],!1,null,null,null);n.default=e.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/13.475d08af.js b/docs/assets/js/13.4ac64c97.js similarity index 99% rename from docs/assets/js/13.475d08af.js rename to docs/assets/js/13.4ac64c97.js index 5b0a131..4dd49cc 100644 --- a/docs/assets/js/13.475d08af.js +++ b/docs/assets/js/13.4ac64c97.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{289:function(t,_,v){"use strict";v.r(_);var a=v(7),s=Object(a.a)({},(function(){var t=this,_=t._self._c;return _("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[_("h1",{attrs:{id:"自动安装教程"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#自动安装教程"}},[t._v("#")]),t._v(" 自动安装教程")]),t._v(" "),_("h2",{attrs:{id:"准备"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#准备"}},[t._v("#")]),t._v(" 准备")]),t._v(" "),_("h4",{attrs:{id:"系统要求"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#系统要求"}},[t._v("#")]),t._v(" 系统要求")]),t._v(" "),_("p",[t._v("系统:: CentOS 7+ / Ubuntu 18+ / Debian 10+")]),t._v(" "),_("p",[t._v("CPU: linux/amd64 / linux/arm/v6 / linux/arm/v7 / linux/arm64 / linux/s390x / linux/ppc64le / linux/386")]),t._v(" "),_("p",[t._v("内存: ≥ 1G")]),t._v(" "),_("h4",{attrs:{id:"相关端口"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#相关端口"}},[t._v("#")]),t._v(" 相关端口")]),t._v(" "),_("table",[_("thead",[_("tr",[_("th",[t._v("端口")]),t._v(" "),_("th",[t._v("描述")])])]),t._v(" "),_("tbody",[_("tr",[_("td",[t._v("80")]),t._v(" "),_("td",[t._v("伪装Web")])]),t._v(" "),_("tr",[_("td",[t._v("8863")]),t._v(" "),_("td",[t._v("Caddy/Nginx转发")])]),t._v(" "),_("tr",[_("td",[t._v("8888")]),t._v(" "),_("td",[t._v("Trojan Panel前端")])]),t._v(" "),_("tr",[_("td",[t._v("8081")]),t._v(" "),_("td",[t._v("Trojan Panel后端")])]),t._v(" "),_("tr",[_("td",[t._v("8082")]),t._v(" "),_("td",[t._v("Trojan Panel Core")])]),t._v(" "),_("tr",[_("td",[t._v("8100")]),t._v(" "),_("td",[t._v("Trojan Panel Core API端口")])]),t._v(" "),_("tr",[_("td",[t._v("9507")]),t._v(" "),_("td",[t._v("MariaDB")])]),t._v(" "),_("tr",[_("td",[t._v("6378")]),t._v(" "),_("td",[t._v("Redis")])])])]),t._v(" "),_("p",[t._v("提示:")]),t._v(" "),_("ol",[_("li",[_("p",[t._v("如果使用的服务器控制面板有防火墙设置需要自己在控制面板自行开放以上端口。")])]),t._v(" "),_("li",[_("p",[t._v("如果没有没有远程节点,尽量关闭"),_("code",[t._v("9507")]),t._v("和"),_("code",[t._v("6378")]),t._v("端口。")])])]),t._v(" "),_("h4",{attrs:{id:"注意"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#注意"}},[t._v("#")]),t._v(" 注意")]),t._v(" "),_("ol",[_("li",[_("p",[t._v("控制面板和节点都推荐部署在"),_("strong",[t._v("国外服务器")]),t._v("上,否则会由于网络问题使用一键安装脚本会因为远程下载文件超时报错。")])]),t._v(" "),_("li",[_("p",[t._v("提前准备一个解析到服务的"),_("strong",[t._v("二级域名")]),t._v("。")])]),t._v(" "),_("li",[_("p",[t._v("数据库和Redis的密码"),_("strong",[t._v("尽量设置复杂")]),t._v("(数据库密码不支持部分特殊字符),否则存在被撞库的安全风险。")])]),t._v(" "),_("li",[_("p",[t._v("建议的安装顺序: "),_("RouterLink",{attrs:{to:"/tutorial/performance-tuning.html#网络加速"}},[t._v("网络加速")]),t._v(" > Trojan Panel Backend > Trojan Panel\nFrontend -> Trojan Panel Core")],1),t._v(" "),_("p",[t._v("建议在脚本运行中需要手动输入的部分,如果没有特殊需求或者不知道这个选项是干什么的,\n"),_("strong",[t._v("除数据库密码和Redis密码自定义以外,其他默认即可")]),t._v("。")])]),t._v(" "),_("li",[_("p",[t._v("如果是远程多节点的情况,节点服务器"),_("strong",[t._v("只需要安装一次")]),t._v("Trojan Panel Core,在面板界面才可以操作远程服务器从而远程自动化管理节点。")])]),t._v(" "),_("li",[_("p",[t._v("如果使用Caddy2自动申请/续签证书,需要开放Caddy端口(默认80)并且"),_("strong",[t._v("保证Caddy端口没有被其他进程占用")]),t._v("。")])])]),t._v(" "),_("h2",{attrs:{id:"一键安装脚本"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#一键安装脚本"}},[t._v("#")]),t._v(" 一键安装脚本")]),t._v(" "),_("ol",[_("li",[_("p",[t._v("联机版(推荐)")]),t._v(" "),_("div",{staticClass:"language-shell extra-class"},[_("pre",{pre:!0,attrs:{class:"language-shell"}},[_("code",[_("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("source")]),t._v(" "),_("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),_("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),_("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" "),_("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-L")]),t._v(" https://github.com/trojanpanel/install-script/raw/main/install_script.sh"),_("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),_("li",[_("p",[t._v("单机版")]),t._v(" "),_("div",{staticClass:"language-shell extra-class"},[_("pre",{pre:!0,attrs:{class:"language-shell"}},[_("code",[_("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("source")]),t._v(" "),_("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),_("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),_("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" "),_("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-L")]),t._v(" https://github.com/trojanpanel/install-script/raw/main/install_script_standalone.sh"),_("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),_("li",[_("p",[_("a",{attrs:{href:"https://github.com/trojanpanel/install-script/blob/main/README_ARCHIVE.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("安装旧版"),_("OutboundLink")],1)])])]),t._v(" "),_("h2",{attrs:{id:"安装trojan-panel"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#安装trojan-panel"}},[t._v("#")]),t._v(" 安装Trojan Panel")]),t._v(" "),_("ol",[_("li",[t._v("设置伪装Web")])]),t._v(" "),_("p",[t._v("推荐使用Caddy 2,可以作为伪装Web也可以自动申请/续签证书。")]),t._v(" "),_("ol",{attrs:{start:"2"}},[_("li",[t._v("请输入Caddy的端口(默认:80)")])]),t._v(" "),_("p",[t._v("默认即可,除非80端口被墙或者被其他进程占用。")]),t._v(" "),_("ol",{attrs:{start:"3"}},[_("li",[t._v("请输入Caddy的转发端口(用于申请证书,默认:8863)")])]),t._v(" "),_("p",[t._v("默认即可,除非8863端口被墙。")]),t._v(" "),_("ol",{attrs:{start:"4"}},[_("li",[t._v("请输入你的域名(必填)")])]),t._v(" "),_("p",[t._v("输入你提前解析到本机的域名。")]),t._v(" "),_("ol",{attrs:{start:"5"}},[_("li",[t._v("请输入你的邮箱(可选)")])]),t._v(" "),_("p",[t._v("默认即可,或输入一个合法的邮箱地址。")]),t._v(" "),_("ol",{attrs:{start:"6"}},[_("li",[t._v("请选择设置证书的方式?(1/自动申请和续签证书 2/手动设置证书路径 默认:1/自动申请和续签证书)")])]),t._v(" "),_("p",[t._v("推荐自动申请和续签证书,如果自己有证书或者自动申请和续签证书失败可以选择手动设置证书路径(24小时内申请2次以上可能会导致自动申请证书失败,如果搭建频繁,建议选择手动设置证书路径)。")]),t._v(" "),_("ol",{attrs:{start:"6"}},[_("li",[t._v("请选择申请证书的方式(1/acme 2/zerossl 默认:1/acme)")])]),t._v(" "),_("p",[t._v("默认即可,选择自动申请证书的方式。")]),t._v(" "),_("ol",{attrs:{start:"7"}},[_("li",[t._v("请输入证书的.crt文件路径(必填)")])]),t._v(" "),_("p",[t._v("使用.crt文件的绝对路径,例如:"),_("code",[t._v("/root/www.google.com.crt")])]),t._v(" "),_("ol",{attrs:{start:"8"}},[_("li",[t._v("请输入证书的.key文件路径(必填)")])]),t._v(" "),_("p",[t._v("使用.key文件的绝对路径,例如:"),_("code",[t._v("/root/www.google.com.key")])]),t._v(" "),_("ol",{attrs:{start:"9"}},[_("li",[t._v("请输入数据库的用户名(默认:root)")])]),t._v(" "),_("p",[t._v("默认即可,除非有自定义数据库用户的需求。")]),t._v(" "),_("ol",{attrs:{start:"10"}},[_("li",[t._v("请输入数据库的密码(必填)")])]),t._v(" "),_("p",[t._v("输入一个较为复杂且你能记得住的密码。")]),t._v(" "),_("ol",{attrs:{start:"11"}},[_("li",[t._v("请输入Redis的密码(必填)")])]),t._v(" "),_("p",[t._v("输入一个较为复杂且你能记得住的密码。")]),t._v(" "),_("ol",{attrs:{start:"12"}},[_("li",[t._v("请输入数据库的IP地址(默认:本地数据库)")])]),t._v(" "),_("p",[t._v("如果数据库安装在本机则默认即可,如果数据库安装在其他服务器这里填远程服务器的IP地址。")]),t._v(" "),_("ol",{attrs:{start:"13"}},[_("li",[t._v("请输入数据库的端口(默认:本地数据库端口)")])]),t._v(" "),_("p",[t._v("如果数据库安装在本机则默认即可,如果数据库安装在其他服务器这里填远程服务器的数据库端口。")]),t._v(" "),_("ol",{attrs:{start:"14"}},[_("li",[t._v("请输入数据库的用户名(默认:root)")])]),t._v(" "),_("p",[t._v("默认即可,除非有自定义数据库用户的需求。")]),t._v(" "),_("ol",{attrs:{start:"15"}},[_("li",[t._v("请输入数据库的密码(必填)")])]),t._v(" "),_("p",[t._v("如果数据库安装在本机则填写本机数据库密码,如果数据库安装在其他服务器这里填远程服务器的数据库密码。")]),t._v(" "),_("ol",{attrs:{start:"16"}},[_("li",[t._v("请输入Redis的IP地址(默认:本机Redis)")])]),t._v(" "),_("p",[t._v("如果Redis安装在本机则默认即可,如果Redis安装在其他服务器这里填远程服务器的IP地址。")]),t._v(" "),_("ol",{attrs:{start:"17"}},[_("li",[t._v("请输入Redis的端口(默认:本机Redis端口)")])]),t._v(" "),_("p",[t._v("如果Redis安装在本机则默认即可,如果Redis安装在其他服务器这里填远程服务器的Redis端口。")]),t._v(" "),_("ol",{attrs:{start:"18"}},[_("li",[t._v("请输入Redis的密码(必填)")])]),t._v(" "),_("p",[t._v("如果Redis安装在本机则填写本机Redis密码,如果Redis安装在其他服务器这里填远程服务器的Redis密码。")]),t._v(" "),_("ol",{attrs:{start:"19"}},[_("li",[t._v("请输入Trojan Panel前端端口(默认:8888)")])]),t._v(" "),_("p",[t._v("默认即可,除非有自定义Trojan Panel前端端口的需求。")]),t._v(" "),_("ol",{attrs:{start:"20"}},[_("li",[t._v("请选择Trojan Panel前端是否开启https?(0/关闭 1/开启 默认:1/开启)")])]),t._v(" "),_("p",[t._v("默认即可,除非有自定义择Trojan Panel前端是否开启https的需求。如果开启https,则管理面板地址为"),_("code",[t._v("https://你的域名:端口")]),t._v("\n,如果未开启https,则管理面板地址为"),_("code",[t._v("http://你的域名:端口")]),t._v("。")]),t._v(" "),_("p",[_("strong",[t._v("提示")])]),t._v(" "),_("ol",[_("li",[_("p",[t._v("安装结束后,访问"),_("strong",[t._v("你的域名")]),t._v("如果是一个静态网页,说明已经安装成功。")])]),t._v(" "),_("li",[_("p",[t._v("安装成功后,Trojan Panel管理面板地址: "),_("code",[t._v("你的域名:8888")]),t._v("\n系统管理员 默认用户名: "),_("code",[t._v("sysadmin")]),t._v(" 默认密码: "),_("code",[t._v("123456")]),t._v(" 请及时登陆管理面板修改密码。")])])]),t._v(" "),_("h2",{attrs:{id:"安装trojan-panel-core"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#安装trojan-panel-core"}},[t._v("#")]),t._v(" 安装Trojan Panel Core")]),t._v(" "),_("ol",[_("li",[t._v("请输入数据库的IP地址(默认:本地数据库)")])]),t._v(" "),_("p",[t._v("如果数据库安装在本机则默认即可,如果数据库安装在其他服务器这里填远程服务器的IP地址。")]),t._v(" "),_("ol",{attrs:{start:"2"}},[_("li",[t._v("请输入数据库的端口(默认:本地数据库端口)")])]),t._v(" "),_("p",[t._v("如果数据库安装在本机则默认即可,如果数据库安装在其他服务器这里填远程服务器的数据库端口。")]),t._v(" "),_("ol",{attrs:{start:"3"}},[_("li",[t._v("请输入数据库的用户名(默认:root)")])]),t._v(" "),_("p",[t._v("默认即可,除非有自定义数据库用户的需求。")]),t._v(" "),_("ol",{attrs:{start:"4"}},[_("li",[t._v("请输入数据库的密码(必填)")])]),t._v(" "),_("p",[t._v("如果数据库安装在本机则填写本机数据库密码,如果数据库安装在其他服务器这里填远程服务器的数据库密码。")]),t._v(" "),_("ol",{attrs:{start:"5"}},[_("li",[t._v("请输入数据库名称(默认:trojan_panel_db)")])]),t._v(" "),_("p",[t._v("默认即可,除非有自定义数据库名称的需求。")]),t._v(" "),_("ol",{attrs:{start:"6"}},[_("li",[t._v("请输入数据库的用户表名称(默认:account)")])]),t._v(" "),_("p",[t._v("默认即可,除非有自定义数据库的用户表的需求。")]),t._v(" "),_("ol",{attrs:{start:"7"}},[_("li",[t._v("请输入Redis的IP地址(默认:本机Redis)")])]),t._v(" "),_("p",[t._v("如果Redis安装在本机则默认即可,如果Redis安装在其他服务器这里填远程服务器的IP地址。")]),t._v(" "),_("ol",{attrs:{start:"8"}},[_("li",[t._v("请输入Redis的端口(默认:本机Redis端口)")])]),t._v(" "),_("p",[t._v("如果Redis安装在本机则默认即可,如果Redis安装在其他服务器这里填远程服务器的Redis端口。")]),t._v(" "),_("ol",{attrs:{start:"9"}},[_("li",[t._v("请输入Redis的密码(必填)")])]),t._v(" "),_("p",[t._v("如果Redis安装在本机则填写本机Redis密码,如果Redis安装在其他服务器这里填远程服务器的Redis密码。")]),t._v(" "),_("ol",{attrs:{start:"10"}},[_("li",[t._v("请输入API的端口(默认:8100)")])]),t._v(" "),_("p",[t._v("默认即可,除非8100端口被墙。")])])}),[],!1,null,null,null);_.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{286:function(t,_,v){"use strict";v.r(_);var a=v(7),s=Object(a.a)({},(function(){var t=this,_=t._self._c;return _("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[_("h1",{attrs:{id:"自动安装教程"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#自动安装教程"}},[t._v("#")]),t._v(" 自动安装教程")]),t._v(" "),_("h2",{attrs:{id:"准备"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#准备"}},[t._v("#")]),t._v(" 准备")]),t._v(" "),_("h4",{attrs:{id:"系统要求"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#系统要求"}},[t._v("#")]),t._v(" 系统要求")]),t._v(" "),_("p",[t._v("系统:: CentOS 7+ / Ubuntu 18+ / Debian 10+")]),t._v(" "),_("p",[t._v("CPU: linux/amd64 / linux/arm/v6 / linux/arm/v7 / linux/arm64 / linux/s390x / linux/ppc64le / linux/386")]),t._v(" "),_("p",[t._v("内存: ≥ 1G")]),t._v(" "),_("h4",{attrs:{id:"相关端口"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#相关端口"}},[t._v("#")]),t._v(" 相关端口")]),t._v(" "),_("table",[_("thead",[_("tr",[_("th",[t._v("端口")]),t._v(" "),_("th",[t._v("描述")])])]),t._v(" "),_("tbody",[_("tr",[_("td",[t._v("80")]),t._v(" "),_("td",[t._v("伪装Web")])]),t._v(" "),_("tr",[_("td",[t._v("8863")]),t._v(" "),_("td",[t._v("Caddy/Nginx转发")])]),t._v(" "),_("tr",[_("td",[t._v("8888")]),t._v(" "),_("td",[t._v("Trojan Panel前端")])]),t._v(" "),_("tr",[_("td",[t._v("8081")]),t._v(" "),_("td",[t._v("Trojan Panel后端")])]),t._v(" "),_("tr",[_("td",[t._v("8082")]),t._v(" "),_("td",[t._v("Trojan Panel Core")])]),t._v(" "),_("tr",[_("td",[t._v("8100")]),t._v(" "),_("td",[t._v("Trojan Panel Core API端口")])]),t._v(" "),_("tr",[_("td",[t._v("9507")]),t._v(" "),_("td",[t._v("MariaDB")])]),t._v(" "),_("tr",[_("td",[t._v("6378")]),t._v(" "),_("td",[t._v("Redis")])])])]),t._v(" "),_("p",[t._v("提示:")]),t._v(" "),_("ol",[_("li",[_("p",[t._v("如果使用的服务器控制面板有防火墙设置需要自己在控制面板自行开放以上端口。")])]),t._v(" "),_("li",[_("p",[t._v("如果没有没有远程节点,尽量关闭"),_("code",[t._v("9507")]),t._v("和"),_("code",[t._v("6378")]),t._v("端口。")])])]),t._v(" "),_("h4",{attrs:{id:"注意"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#注意"}},[t._v("#")]),t._v(" 注意")]),t._v(" "),_("ol",[_("li",[_("p",[t._v("控制面板和节点都推荐部署在"),_("strong",[t._v("国外服务器")]),t._v("上,否则会由于网络问题使用一键安装脚本会因为远程下载文件超时报错。")])]),t._v(" "),_("li",[_("p",[t._v("提前准备一个解析到服务的"),_("strong",[t._v("二级域名")]),t._v("。")])]),t._v(" "),_("li",[_("p",[t._v("数据库和Redis的密码"),_("strong",[t._v("尽量设置复杂")]),t._v("(数据库密码不支持部分特殊字符),否则存在被撞库的安全风险。")])]),t._v(" "),_("li",[_("p",[t._v("建议的安装顺序: "),_("RouterLink",{attrs:{to:"/tutorial/performance-tuning.html#网络加速"}},[t._v("网络加速")]),t._v(" > Trojan Panel Backend > Trojan Panel\nFrontend -> Trojan Panel Core")],1),t._v(" "),_("p",[t._v("建议在脚本运行中需要手动输入的部分,如果没有特殊需求或者不知道这个选项是干什么的,\n"),_("strong",[t._v("除数据库密码和Redis密码自定义以外,其他默认即可")]),t._v("。")])]),t._v(" "),_("li",[_("p",[t._v("如果是远程多节点的情况,节点服务器"),_("strong",[t._v("只需要安装一次")]),t._v("Trojan Panel Core,在面板界面才可以操作远程服务器从而远程自动化管理节点。")])]),t._v(" "),_("li",[_("p",[t._v("如果使用Caddy2自动申请/续签证书,需要开放Caddy端口(默认80)并且"),_("strong",[t._v("保证Caddy端口没有被其他进程占用")]),t._v("。")])])]),t._v(" "),_("h2",{attrs:{id:"一键安装脚本"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#一键安装脚本"}},[t._v("#")]),t._v(" 一键安装脚本")]),t._v(" "),_("ol",[_("li",[_("p",[t._v("联机版(推荐)")]),t._v(" "),_("div",{staticClass:"language-shell extra-class"},[_("pre",{pre:!0,attrs:{class:"language-shell"}},[_("code",[_("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("source")]),t._v(" "),_("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),_("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),_("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" "),_("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-L")]),t._v(" https://github.com/trojanpanel/install-script/raw/main/install_script.sh"),_("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),_("li",[_("p",[t._v("单机版")]),t._v(" "),_("div",{staticClass:"language-shell extra-class"},[_("pre",{pre:!0,attrs:{class:"language-shell"}},[_("code",[_("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("source")]),t._v(" "),_("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),_("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),_("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" "),_("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-L")]),t._v(" https://github.com/trojanpanel/install-script/raw/main/install_script_standalone.sh"),_("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),_("li",[_("p",[_("a",{attrs:{href:"https://github.com/trojanpanel/install-script/blob/main/README_ARCHIVE.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("安装旧版"),_("OutboundLink")],1)])])]),t._v(" "),_("h2",{attrs:{id:"安装trojan-panel"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#安装trojan-panel"}},[t._v("#")]),t._v(" 安装Trojan Panel")]),t._v(" "),_("ol",[_("li",[t._v("设置伪装Web")])]),t._v(" "),_("p",[t._v("推荐使用Caddy 2,可以作为伪装Web也可以自动申请/续签证书。")]),t._v(" "),_("ol",{attrs:{start:"2"}},[_("li",[t._v("请输入Caddy的端口(默认:80)")])]),t._v(" "),_("p",[t._v("默认即可,除非80端口被墙或者被其他进程占用。")]),t._v(" "),_("ol",{attrs:{start:"3"}},[_("li",[t._v("请输入Caddy的转发端口(用于申请证书,默认:8863)")])]),t._v(" "),_("p",[t._v("默认即可,除非8863端口被墙。")]),t._v(" "),_("ol",{attrs:{start:"4"}},[_("li",[t._v("请输入你的域名(必填)")])]),t._v(" "),_("p",[t._v("输入你提前解析到本机的域名。")]),t._v(" "),_("ol",{attrs:{start:"5"}},[_("li",[t._v("请输入你的邮箱(可选)")])]),t._v(" "),_("p",[t._v("默认即可,或输入一个合法的邮箱地址。")]),t._v(" "),_("ol",{attrs:{start:"6"}},[_("li",[t._v("请选择设置证书的方式?(1/自动申请和续签证书 2/手动设置证书路径 默认:1/自动申请和续签证书)")])]),t._v(" "),_("p",[t._v("推荐自动申请和续签证书,如果自己有证书或者自动申请和续签证书失败可以选择手动设置证书路径(24小时内申请2次以上可能会导致自动申请证书失败,如果搭建频繁,建议选择手动设置证书路径)。")]),t._v(" "),_("ol",{attrs:{start:"6"}},[_("li",[t._v("请选择申请证书的方式(1/acme 2/zerossl 默认:1/acme)")])]),t._v(" "),_("p",[t._v("默认即可,选择自动申请证书的方式。")]),t._v(" "),_("ol",{attrs:{start:"7"}},[_("li",[t._v("请输入证书的.crt文件路径(必填)")])]),t._v(" "),_("p",[t._v("使用.crt文件的绝对路径,例如:"),_("code",[t._v("/root/www.google.com.crt")])]),t._v(" "),_("ol",{attrs:{start:"8"}},[_("li",[t._v("请输入证书的.key文件路径(必填)")])]),t._v(" "),_("p",[t._v("使用.key文件的绝对路径,例如:"),_("code",[t._v("/root/www.google.com.key")])]),t._v(" "),_("ol",{attrs:{start:"9"}},[_("li",[t._v("请输入数据库的用户名(默认:root)")])]),t._v(" "),_("p",[t._v("默认即可,除非有自定义数据库用户的需求。")]),t._v(" "),_("ol",{attrs:{start:"10"}},[_("li",[t._v("请输入数据库的密码(必填)")])]),t._v(" "),_("p",[t._v("输入一个较为复杂且你能记得住的密码。")]),t._v(" "),_("ol",{attrs:{start:"11"}},[_("li",[t._v("请输入Redis的密码(必填)")])]),t._v(" "),_("p",[t._v("输入一个较为复杂且你能记得住的密码。")]),t._v(" "),_("ol",{attrs:{start:"12"}},[_("li",[t._v("请输入数据库的IP地址(默认:本地数据库)")])]),t._v(" "),_("p",[t._v("如果数据库安装在本机则默认即可,如果数据库安装在其他服务器这里填远程服务器的IP地址。")]),t._v(" "),_("ol",{attrs:{start:"13"}},[_("li",[t._v("请输入数据库的端口(默认:本地数据库端口)")])]),t._v(" "),_("p",[t._v("如果数据库安装在本机则默认即可,如果数据库安装在其他服务器这里填远程服务器的数据库端口。")]),t._v(" "),_("ol",{attrs:{start:"14"}},[_("li",[t._v("请输入数据库的用户名(默认:root)")])]),t._v(" "),_("p",[t._v("默认即可,除非有自定义数据库用户的需求。")]),t._v(" "),_("ol",{attrs:{start:"15"}},[_("li",[t._v("请输入数据库的密码(必填)")])]),t._v(" "),_("p",[t._v("如果数据库安装在本机则填写本机数据库密码,如果数据库安装在其他服务器这里填远程服务器的数据库密码。")]),t._v(" "),_("ol",{attrs:{start:"16"}},[_("li",[t._v("请输入Redis的IP地址(默认:本机Redis)")])]),t._v(" "),_("p",[t._v("如果Redis安装在本机则默认即可,如果Redis安装在其他服务器这里填远程服务器的IP地址。")]),t._v(" "),_("ol",{attrs:{start:"17"}},[_("li",[t._v("请输入Redis的端口(默认:本机Redis端口)")])]),t._v(" "),_("p",[t._v("如果Redis安装在本机则默认即可,如果Redis安装在其他服务器这里填远程服务器的Redis端口。")]),t._v(" "),_("ol",{attrs:{start:"18"}},[_("li",[t._v("请输入Redis的密码(必填)")])]),t._v(" "),_("p",[t._v("如果Redis安装在本机则填写本机Redis密码,如果Redis安装在其他服务器这里填远程服务器的Redis密码。")]),t._v(" "),_("ol",{attrs:{start:"19"}},[_("li",[t._v("请输入Trojan Panel前端端口(默认:8888)")])]),t._v(" "),_("p",[t._v("默认即可,除非有自定义Trojan Panel前端端口的需求。")]),t._v(" "),_("ol",{attrs:{start:"20"}},[_("li",[t._v("请选择Trojan Panel前端是否开启https?(0/关闭 1/开启 默认:1/开启)")])]),t._v(" "),_("p",[t._v("默认即可,除非有自定义择Trojan Panel前端是否开启https的需求。如果开启https,则管理面板地址为"),_("code",[t._v("https://你的域名:端口")]),t._v("\n,如果未开启https,则管理面板地址为"),_("code",[t._v("http://你的域名:端口")]),t._v("。")]),t._v(" "),_("p",[_("strong",[t._v("提示")])]),t._v(" "),_("ol",[_("li",[_("p",[t._v("安装结束后,访问"),_("strong",[t._v("你的域名")]),t._v("如果是一个静态网页,说明已经安装成功。")])]),t._v(" "),_("li",[_("p",[t._v("安装成功后,Trojan Panel管理面板地址: "),_("code",[t._v("你的域名:8888")]),t._v("\n系统管理员 默认用户名: "),_("code",[t._v("sysadmin")]),t._v(" 默认密码: "),_("code",[t._v("123456")]),t._v(" 请及时登陆管理面板修改密码。")])])]),t._v(" "),_("h2",{attrs:{id:"安装trojan-panel-core"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#安装trojan-panel-core"}},[t._v("#")]),t._v(" 安装Trojan Panel Core")]),t._v(" "),_("ol",[_("li",[t._v("请输入数据库的IP地址(默认:本地数据库)")])]),t._v(" "),_("p",[t._v("如果数据库安装在本机则默认即可,如果数据库安装在其他服务器这里填远程服务器的IP地址。")]),t._v(" "),_("ol",{attrs:{start:"2"}},[_("li",[t._v("请输入数据库的端口(默认:本地数据库端口)")])]),t._v(" "),_("p",[t._v("如果数据库安装在本机则默认即可,如果数据库安装在其他服务器这里填远程服务器的数据库端口。")]),t._v(" "),_("ol",{attrs:{start:"3"}},[_("li",[t._v("请输入数据库的用户名(默认:root)")])]),t._v(" "),_("p",[t._v("默认即可,除非有自定义数据库用户的需求。")]),t._v(" "),_("ol",{attrs:{start:"4"}},[_("li",[t._v("请输入数据库的密码(必填)")])]),t._v(" "),_("p",[t._v("如果数据库安装在本机则填写本机数据库密码,如果数据库安装在其他服务器这里填远程服务器的数据库密码。")]),t._v(" "),_("ol",{attrs:{start:"5"}},[_("li",[t._v("请输入数据库名称(默认:trojan_panel_db)")])]),t._v(" "),_("p",[t._v("默认即可,除非有自定义数据库名称的需求。")]),t._v(" "),_("ol",{attrs:{start:"6"}},[_("li",[t._v("请输入数据库的用户表名称(默认:account)")])]),t._v(" "),_("p",[t._v("默认即可,除非有自定义数据库的用户表的需求。")]),t._v(" "),_("ol",{attrs:{start:"7"}},[_("li",[t._v("请输入Redis的IP地址(默认:本机Redis)")])]),t._v(" "),_("p",[t._v("如果Redis安装在本机则默认即可,如果Redis安装在其他服务器这里填远程服务器的IP地址。")]),t._v(" "),_("ol",{attrs:{start:"8"}},[_("li",[t._v("请输入Redis的端口(默认:本机Redis端口)")])]),t._v(" "),_("p",[t._v("如果Redis安装在本机则默认即可,如果Redis安装在其他服务器这里填远程服务器的Redis端口。")]),t._v(" "),_("ol",{attrs:{start:"9"}},[_("li",[t._v("请输入Redis的密码(必填)")])]),t._v(" "),_("p",[t._v("如果Redis安装在本机则填写本机Redis密码,如果Redis安装在其他服务器这里填远程服务器的Redis密码。")]),t._v(" "),_("ol",{attrs:{start:"10"}},[_("li",[t._v("请输入API的端口(默认:8100)")])]),t._v(" "),_("p",[t._v("默认即可,除非8100端口被墙。")])])}),[],!1,null,null,null);_.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/14.e9904199.js b/docs/assets/js/14.134bc367.js similarity index 89% rename from docs/assets/js/14.e9904199.js rename to docs/assets/js/14.134bc367.js index 75ebb3c..66dcfbe 100644 --- a/docs/assets/js/14.e9904199.js +++ b/docs/assets/js/14.134bc367.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{290:function(t,s,e){"use strict";e.r(s);var o=e(7),r=Object(o.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"core-sdk"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#core-sdk"}},[this._v("#")]),this._v(" Core SDK")]),this._v(" "),t("p",[this._v("项目地址:https://github.com/trojanpanel/core-sdk")]),this._v(" "),t("p",[this._v("Demo地址:https://github.com/trojanpanel/core-sdk-example")])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{287:function(t,s,e){"use strict";e.r(s);var o=e(7),r=Object(o.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"core-sdk"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#core-sdk"}},[this._v("#")]),this._v(" Core SDK")]),this._v(" "),t("p",[this._v("项目地址:https://github.com/trojanpanel/core-sdk")]),this._v(" "),t("p",[this._v("Demo地址:https://github.com/trojanpanel/core-sdk-example")])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/15.1de42b84.js b/docs/assets/js/15.d63940fd.js similarity index 87% rename from docs/assets/js/15.1de42b84.js rename to docs/assets/js/15.d63940fd.js index 989790b..46dea70 100644 --- a/docs/assets/js/15.1de42b84.js +++ b/docs/assets/js/15.d63940fd.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{291:function(t,s,r){"use strict";r.r(s);var a=r(7),e=Object(a.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"介绍"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#介绍"}},[this._v("#")]),this._v(" 介绍")]),this._v(" "),t("p",[this._v("支持Xray/Trojan-Go/Hysteria/NaiveProxy的多用户Web管理面板")])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{288:function(t,s,r){"use strict";r.r(s);var a=r(7),e=Object(a.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"介绍"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#介绍"}},[this._v("#")]),this._v(" 介绍")]),this._v(" "),t("p",[this._v("支持Xray/Trojan-Go/Hysteria/NaiveProxy的多用户Web管理面板")])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/16.033c25ea.js b/docs/assets/js/16.033c25ea.js new file mode 100644 index 0000000..3e61567 --- /dev/null +++ b/docs/assets/js/16.033c25ea.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{289:function(t,r,e){"use strict";e.r(r);var s=e(7),a=Object(s.a)({},(function(){var t=this,r=t._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"架构设计"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#架构设计"}},[t._v("#")]),t._v(" 架构设计")]),t._v(" "),r("ul",[r("li",[t._v("所有服务基于Docker,通过容器技术承载各类服务,屏蔽平台差异")]),t._v(" "),r("li",[t._v("前后端分离开发,面板和内核分离,支持多节点,支持分布式部署,提升性能")]),t._v(" "),r("li",[t._v("内核适配多种代理软件,扩展简单")]),t._v(" "),r("li",[t._v("一键安装脚本,系统快速部署,降低安装门槛")])]),t._v(" "),r("p",[t._v("这是占内存最小而且不需要自己手动申请/续签证书的轻量级方案。实测,把所有服务器都部署完,1H1G的服务器足够用,参考"),r("a",{attrs:{href:"/tutorial/performance-testing"}},[t._v("性能检测")]),t._v("。")])])}),[],!1,null,null,null);r.default=a.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/16.fe3f2352.js b/docs/assets/js/16.fe3f2352.js deleted file mode 100644 index f4464c4..0000000 --- a/docs/assets/js/16.fe3f2352.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{295:function(t,s,r){"use strict";r.r(s);var e=r(7),l=Object(e.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"架构设计"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#架构设计"}},[t._v("#")]),t._v(" 架构设计")]),t._v(" "),s("ul",[s("li",[t._v("所有服务基于Docker,通过容器技术承载各类服务,屏蔽平台差异")]),t._v(" "),s("li",[t._v("前后端分离,并行开发,性能提升,提升用户体验")]),t._v(" "),s("li",[t._v("一键安装脚本,系统一键部署,降低部署门槛")])]),t._v(" "),s("p",[t._v("这是占内存最小而且不需要自己手动申请/续签证书的轻量级方案。实测,把所有服务器都部署完,1H1G的服务器足够用。")])])}),[],!1,null,null,null);s.default=l.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/17.376c9f99.js b/docs/assets/js/17.b59084f8.js similarity index 99% rename from docs/assets/js/17.376c9f99.js rename to docs/assets/js/17.b59084f8.js index c7f9129..0bc06d2 100644 --- a/docs/assets/js/17.376c9f99.js +++ b/docs/assets/js/17.b59084f8.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{292:function(r,t,a){"use strict";a.r(t);var s=a(7),e=Object(s.a)({},(function(){var r=this,t=r._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":r.$parent.slotKey}},[t("h1",{attrs:{id:"客户端配置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#客户端配置"}},[r._v("#")]),r._v(" 客户端配置")]),r._v(" "),t("h2",{attrs:{id:"v2rayn"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v2rayn"}},[r._v("#")]),r._v(" v2rayN")]),r._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/2dust/v2rayN/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("下载v2rayN-Core"),t("OutboundLink")],1)]),r._v(" "),t("h3",{attrs:{id:"配置hysteria-windows"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#配置hysteria-windows"}},[r._v("#")]),r._v(" 配置Hysteria(Windows)")]),r._v(" "),t("ol",[t("li",[t("p",[t("a",{attrs:{href:"https://github.com/apernet/hysteria/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("下载Hysteria"),t("OutboundLink")],1)])]),r._v(" "),t("li",[t("p",[r._v("将Hysteria执行文件复制到v2rayN-Core目录下")])])]),r._v(" "),t("p",[t("img",{attrs:{src:"/client-config/hysteria/v2rayn-hysteria-win-1.png",alt:""}})]),r._v(" "),t("ol",{attrs:{start:"3"}},[t("li",[r._v("编辑Hysteria配置文件")])]),r._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v("{")]),r._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[r._v('"server"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[r._v(":")]),r._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[r._v('"域名:端口"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v(",")]),r._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[r._v('"protocol"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[r._v(":")]),r._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[r._v('"udp"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v(",")]),r._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[r._v('"up_mbps"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[r._v(":")]),r._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[r._v("100")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v(",")]),r._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[r._v('"down_mbps"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[r._v(":")]),r._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[r._v("100")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v(",")]),r._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[r._v('"auth_str"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[r._v(":")]),r._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[r._v('"密码"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v(",")]),r._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[r._v('"socks5"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[r._v(":")]),r._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v("{")]),r._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[r._v('"listen"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[r._v(":")]),r._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[r._v('"127.0.0.1:1080"')]),r._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v("}")]),r._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v("}")]),r._v("\n")])])]),t("p",[r._v("备注:auth_str不需要base64编码")]),r._v(" "),t("ol",{attrs:{start:"4"}},[t("li",[t("p",[r._v("开启对应的udp端口或者关闭防火墙")])]),r._v(" "),t("li",[t("p",[r._v("打开v2rayN,添加自定义服务器")])])]),r._v(" "),t("p",[t("img",{attrs:{src:"/client-config/hysteria/v2rayn-hysteria-win-2.png",alt:""}})]),r._v(" "),t("p",[t("img",{attrs:{src:"/client-config/hysteria/v2rayn-hysteria-win-3.png",alt:""}})]),r._v(" "),t("ol",{attrs:{start:"6"}},[t("li",[t("p",[r._v("将v2rayN的系统代理设置为自动配置系统代理")])]),r._v(" "),t("li",[t("p",[r._v("选中节点,点击Enter即可连接节点")])])]),r._v(" "),t("h3",{attrs:{id:"配置naiveproxy-windows"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#配置naiveproxy-windows"}},[r._v("#")]),r._v(" 配置NaiveProxy(Windows)")]),r._v(" "),t("ol",[t("li",[t("p",[t("a",{attrs:{href:"https://github.com/klzgrad/naiveproxy/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("下载NaiveProxy"),t("OutboundLink")],1)])]),r._v(" "),t("li",[t("p",[r._v("将NaiveProxy执行文件复制到v2rayN-Core目录下")])])]),r._v(" "),t("p",[t("img",{attrs:{src:"/client-config/naiveproxy/v2rayn-naiveproxy-win-1.png",alt:""}})]),r._v(" "),t("ol",{attrs:{start:"3"}},[t("li",[r._v("编辑NaiveProxy配置文件")])]),r._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v("{")]),r._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[r._v('"listen"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[r._v(":")]),r._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[r._v('"socks://127.0.0.1:1080"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v(",")]),r._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[r._v('"proxy"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[r._v(":")]),r._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[r._v('"https://user:pass@example.com:port"')]),r._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v("}")]),r._v("\n")])])]),t("ol",{attrs:{start:"4"}},[t("li",[t("p",[r._v("开启对应的tcp端口或者关闭防火墙")])]),r._v(" "),t("li",[t("p",[r._v("开v2rayN,添加自定义服务器")])])]),r._v(" "),t("p",[t("img",{attrs:{src:"/client-config/naiveproxy/v2rayn-naiveproxy-win-2.png",alt:""}})]),r._v(" "),t("ol",{attrs:{start:"6"}},[t("li",[t("p",[r._v("将v2rayN的系统代理设置为自动配置系统代理")])]),r._v(" "),t("li",[t("p",[r._v("选中节点,点击Enter即可连接节点")])])]),r._v(" "),t("h2",{attrs:{id:"qv2ray"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#qv2ray"}},[r._v("#")]),r._v(" Qv2ray")]),r._v(" "),t("ol",[t("li",[t("p",[t("a",{attrs:{href:"https://github.com/Qv2ray/Qv2ray/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("下载Qv2ray"),t("OutboundLink")],1)])]),r._v(" "),t("li",[t("p",[t("a",{attrs:{href:"https://github.com/XTLS/Xray-core/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("下载Xray-core"),t("OutboundLink")],1)])]),r._v(" "),t("li",[t("p",[r._v("在Qv2ray配置v2ray-core/Xray-core")])])]),r._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/v2fly/v2ray-core/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("下载v2ray-core"),t("OutboundLink")],1)]),r._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/XTLS/Xray-core/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("下载Xray-core(推荐)"),t("OutboundLink")],1)])]),r._v(" "),t("p",[t("img",{attrs:{src:"/client-config/qv2ray/qv2ray-win-1.png",alt:""}})]),r._v(" "),t("h3",{attrs:{id:"配置trojan-go-windows"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#配置trojan-go-windows"}},[r._v("#")]),r._v(" 配置Trojan-Go(Windows)")]),r._v(" "),t("ol",[t("li",[t("p",[t("a",{attrs:{href:"https://github.com/p4gefau1t/trojan-go/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("下载Trojan-Go"),t("OutboundLink")],1)])]),r._v(" "),t("li",[t("p",[r._v("添加"),t("a",{attrs:{href:"https://github.com/Qv2ray/QvPlugin-Trojan-Go/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("Trojan-Go插件"),t("OutboundLink")],1),r._v(" 并设定Trojan-Go Kernel Path")])])]),r._v(" "),t("p",[t("img",{attrs:{src:"/client-config/trojango/qv2ray-trojan-go-win-1.png",alt:""}})]),r._v(" "),t("ol",{attrs:{start:"3"}},[t("li",[r._v("重启Qv2ray后即可添加Trojan-Go节点")])]),r._v(" "),t("h3",{attrs:{id:"配置trojan-windows"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#配置trojan-windows"}},[r._v("#")]),r._v(" 配置Trojan(Windows)")]),r._v(" "),t("ol",[t("li",[t("p",[r._v("添加"),t("a",{attrs:{href:"https://github.com/Qv2ray/QvPlugin-Trojan/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("Trojan插件"),t("OutboundLink")],1)])]),r._v(" "),t("li",[t("p",[r._v("重启Qv2ray后即可添加Trojan节点")])])]),r._v(" "),t("h3",{attrs:{id:"配置naiveproxy-windows-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#配置naiveproxy-windows-2"}},[r._v("#")]),r._v(" 配置NaiveProxy(Windows)")]),r._v(" "),t("ol",[t("li",[t("p",[t("a",{attrs:{href:"https://github.com/klzgrad/naiveproxy/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("下载NaiveProxy"),t("OutboundLink")],1)])]),r._v(" "),t("li",[t("p",[r._v("添加"),t("a",{attrs:{href:"https://github.com/Qv2ray/QvPlugin-NaiveProxy/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("NaiveProxy插件"),t("OutboundLink")],1),r._v(" 并设定NaiveProxy Kernel Path")])])]),r._v(" "),t("p",[t("img",{attrs:{src:"/client-config/naiveproxy/qv2ray-naiveproxy-win-1.png",alt:""}})]),r._v(" "),t("ol",{attrs:{start:"3"}},[t("li",[r._v("重启Qv2ray后即可添加NaiveProxy节点")])]),r._v(" "),t("h3",{attrs:{id:"配置ss-ssr-windows"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#配置ss-ssr-windows"}},[r._v("#")]),r._v(" 配置SS/SSR(Windows)")]),r._v(" "),t("ol",[t("li",[t("p",[r._v("添加"),t("a",{attrs:{href:"https://github.com/Qv2ray/QvPlugin-SS/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("SS插件"),t("OutboundLink")],1),r._v(" / "),t("a",{attrs:{href:"https://github.com/Qv2ray/QvPlugin-SSR/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("SSR插件"),t("OutboundLink")],1)])]),r._v(" "),t("li",[t("p",[r._v("重启Qv2ray后即可添加SS/SSR节点")])])])])}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{291:function(r,t,a){"use strict";a.r(t);var s=a(7),e=Object(s.a)({},(function(){var r=this,t=r._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":r.$parent.slotKey}},[t("h1",{attrs:{id:"客户端配置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#客户端配置"}},[r._v("#")]),r._v(" 客户端配置")]),r._v(" "),t("h2",{attrs:{id:"v2rayn"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#v2rayn"}},[r._v("#")]),r._v(" v2rayN")]),r._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/2dust/v2rayN/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("下载v2rayN-Core"),t("OutboundLink")],1)]),r._v(" "),t("h3",{attrs:{id:"配置hysteria-windows"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#配置hysteria-windows"}},[r._v("#")]),r._v(" 配置Hysteria(Windows)")]),r._v(" "),t("ol",[t("li",[t("p",[t("a",{attrs:{href:"https://github.com/apernet/hysteria/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("下载Hysteria"),t("OutboundLink")],1)])]),r._v(" "),t("li",[t("p",[r._v("将Hysteria执行文件复制到v2rayN-Core目录下")])])]),r._v(" "),t("p",[t("img",{attrs:{src:"/client-config/hysteria/v2rayn-hysteria-win-1.png",alt:""}})]),r._v(" "),t("ol",{attrs:{start:"3"}},[t("li",[r._v("编辑Hysteria配置文件")])]),r._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v("{")]),r._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[r._v('"server"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[r._v(":")]),r._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[r._v('"域名:端口"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v(",")]),r._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[r._v('"protocol"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[r._v(":")]),r._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[r._v('"udp"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v(",")]),r._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[r._v('"up_mbps"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[r._v(":")]),r._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[r._v("100")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v(",")]),r._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[r._v('"down_mbps"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[r._v(":")]),r._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[r._v("100")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v(",")]),r._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[r._v('"auth_str"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[r._v(":")]),r._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[r._v('"密码"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v(",")]),r._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[r._v('"socks5"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[r._v(":")]),r._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v("{")]),r._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[r._v('"listen"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[r._v(":")]),r._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[r._v('"127.0.0.1:1080"')]),r._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v("}")]),r._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v("}")]),r._v("\n")])])]),t("p",[r._v("备注:auth_str不需要base64编码")]),r._v(" "),t("ol",{attrs:{start:"4"}},[t("li",[t("p",[r._v("开启对应的udp端口或者关闭防火墙")])]),r._v(" "),t("li",[t("p",[r._v("打开v2rayN,添加自定义服务器")])])]),r._v(" "),t("p",[t("img",{attrs:{src:"/client-config/hysteria/v2rayn-hysteria-win-2.png",alt:""}})]),r._v(" "),t("p",[t("img",{attrs:{src:"/client-config/hysteria/v2rayn-hysteria-win-3.png",alt:""}})]),r._v(" "),t("ol",{attrs:{start:"6"}},[t("li",[t("p",[r._v("将v2rayN的系统代理设置为自动配置系统代理")])]),r._v(" "),t("li",[t("p",[r._v("选中节点,点击Enter即可连接节点")])])]),r._v(" "),t("h3",{attrs:{id:"配置naiveproxy-windows"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#配置naiveproxy-windows"}},[r._v("#")]),r._v(" 配置NaiveProxy(Windows)")]),r._v(" "),t("ol",[t("li",[t("p",[t("a",{attrs:{href:"https://github.com/klzgrad/naiveproxy/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("下载NaiveProxy"),t("OutboundLink")],1)])]),r._v(" "),t("li",[t("p",[r._v("将NaiveProxy执行文件复制到v2rayN-Core目录下")])])]),r._v(" "),t("p",[t("img",{attrs:{src:"/client-config/naiveproxy/v2rayn-naiveproxy-win-1.png",alt:""}})]),r._v(" "),t("ol",{attrs:{start:"3"}},[t("li",[r._v("编辑NaiveProxy配置文件")])]),r._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v("{")]),r._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[r._v('"listen"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[r._v(":")]),r._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[r._v('"socks://127.0.0.1:1080"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v(",")]),r._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[r._v('"proxy"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[r._v(":")]),r._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[r._v('"https://user:pass@example.com:port"')]),r._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[r._v("}")]),r._v("\n")])])]),t("ol",{attrs:{start:"4"}},[t("li",[t("p",[r._v("开启对应的tcp端口或者关闭防火墙")])]),r._v(" "),t("li",[t("p",[r._v("开v2rayN,添加自定义服务器")])])]),r._v(" "),t("p",[t("img",{attrs:{src:"/client-config/naiveproxy/v2rayn-naiveproxy-win-2.png",alt:""}})]),r._v(" "),t("ol",{attrs:{start:"6"}},[t("li",[t("p",[r._v("将v2rayN的系统代理设置为自动配置系统代理")])]),r._v(" "),t("li",[t("p",[r._v("选中节点,点击Enter即可连接节点")])])]),r._v(" "),t("h2",{attrs:{id:"qv2ray"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#qv2ray"}},[r._v("#")]),r._v(" Qv2ray")]),r._v(" "),t("ol",[t("li",[t("p",[t("a",{attrs:{href:"https://github.com/Qv2ray/Qv2ray/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("下载Qv2ray"),t("OutboundLink")],1)])]),r._v(" "),t("li",[t("p",[t("a",{attrs:{href:"https://github.com/XTLS/Xray-core/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("下载Xray-core"),t("OutboundLink")],1)])]),r._v(" "),t("li",[t("p",[r._v("在Qv2ray配置v2ray-core/Xray-core")])])]),r._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/v2fly/v2ray-core/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("下载v2ray-core"),t("OutboundLink")],1)]),r._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/XTLS/Xray-core/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("下载Xray-core(推荐)"),t("OutboundLink")],1)])]),r._v(" "),t("p",[t("img",{attrs:{src:"/client-config/qv2ray/qv2ray-win-1.png",alt:""}})]),r._v(" "),t("h3",{attrs:{id:"配置trojan-go-windows"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#配置trojan-go-windows"}},[r._v("#")]),r._v(" 配置Trojan-Go(Windows)")]),r._v(" "),t("ol",[t("li",[t("p",[t("a",{attrs:{href:"https://github.com/p4gefau1t/trojan-go/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("下载Trojan-Go"),t("OutboundLink")],1)])]),r._v(" "),t("li",[t("p",[r._v("添加"),t("a",{attrs:{href:"https://github.com/Qv2ray/QvPlugin-Trojan-Go/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("Trojan-Go插件"),t("OutboundLink")],1),r._v(" 并设定Trojan-Go Kernel Path")])])]),r._v(" "),t("p",[t("img",{attrs:{src:"/client-config/trojango/qv2ray-trojan-go-win-1.png",alt:""}})]),r._v(" "),t("ol",{attrs:{start:"3"}},[t("li",[r._v("重启Qv2ray后即可添加Trojan-Go节点")])]),r._v(" "),t("h3",{attrs:{id:"配置trojan-windows"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#配置trojan-windows"}},[r._v("#")]),r._v(" 配置Trojan(Windows)")]),r._v(" "),t("ol",[t("li",[t("p",[r._v("添加"),t("a",{attrs:{href:"https://github.com/Qv2ray/QvPlugin-Trojan/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("Trojan插件"),t("OutboundLink")],1)])]),r._v(" "),t("li",[t("p",[r._v("重启Qv2ray后即可添加Trojan节点")])])]),r._v(" "),t("h3",{attrs:{id:"配置naiveproxy-windows-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#配置naiveproxy-windows-2"}},[r._v("#")]),r._v(" 配置NaiveProxy(Windows)")]),r._v(" "),t("ol",[t("li",[t("p",[t("a",{attrs:{href:"https://github.com/klzgrad/naiveproxy/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("下载NaiveProxy"),t("OutboundLink")],1)])]),r._v(" "),t("li",[t("p",[r._v("添加"),t("a",{attrs:{href:"https://github.com/Qv2ray/QvPlugin-NaiveProxy/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("NaiveProxy插件"),t("OutboundLink")],1),r._v(" 并设定NaiveProxy Kernel Path")])])]),r._v(" "),t("p",[t("img",{attrs:{src:"/client-config/naiveproxy/qv2ray-naiveproxy-win-1.png",alt:""}})]),r._v(" "),t("ol",{attrs:{start:"3"}},[t("li",[r._v("重启Qv2ray后即可添加NaiveProxy节点")])]),r._v(" "),t("h3",{attrs:{id:"配置ss-ssr-windows"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#配置ss-ssr-windows"}},[r._v("#")]),r._v(" 配置SS/SSR(Windows)")]),r._v(" "),t("ol",[t("li",[t("p",[r._v("添加"),t("a",{attrs:{href:"https://github.com/Qv2ray/QvPlugin-SS/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("SS插件"),t("OutboundLink")],1),r._v(" / "),t("a",{attrs:{href:"https://github.com/Qv2ray/QvPlugin-SSR/releases",target:"_blank",rel:"noopener noreferrer"}},[r._v("SSR插件"),t("OutboundLink")],1)])]),r._v(" "),t("li",[t("p",[r._v("重启Qv2ray后即可添加SS/SSR节点")])])])])}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/18.726837b8.js b/docs/assets/js/18.eb08dfc3.js similarity index 97% rename from docs/assets/js/18.726837b8.js rename to docs/assets/js/18.eb08dfc3.js index 5e4dff4..17a338c 100644 --- a/docs/assets/js/18.726837b8.js +++ b/docs/assets/js/18.eb08dfc3.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{293:function(t,a,e){"use strict";e.r(a);var r=e(7),s=Object(r.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"常见问题"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#常见问题"}},[t._v("#")]),t._v(" 常见问题")]),t._v(" "),a("h2",{attrs:{id:"搭建失败或系统报错的常见解决方案"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#搭建失败或系统报错的常见解决方案"}},[t._v("#")]),t._v(" 搭建失败或系统报错的常见解决方案")]),t._v(" "),a("p",[t._v("有以下几个方案,可以按照顺序依次尝试,修复力度逐层递增。")]),t._v(" "),a("ol",[a("li",[a("p",[t._v("关闭防火墙:如果开放了对应的端口,但是访问不了域名或者控制面板,以下为常用关闭防火墙的命令,仅供参考。")]),t._v(" "),a("ul",[a("li",[t._v("CentOS:"),a("code",[t._v("systemctl disable firewalld")])]),t._v(" "),a("li",[t._v("Debian/Ubuntu:"),a("code",[t._v("sudo ufw disable")])])])]),t._v(" "),a("li",[a("p",[t._v("故障监测:运行一键安装脚本选择故障检测的选项,对出现运行异常的应用进行单独地卸载重装。")])]),t._v(" "),a("li",[a("p",[t._v("查询系统报错日志:运行一键安装脚本选择日志查询选项,查询对应应用的日志信息,从而进行针对性修复。")])]),t._v(" "),a("li",[a("p",[t._v("重启服务器。")])]),t._v(" "),a("li",[a("p",[t._v("重装系统:有时候搭建失败可能是服务器系统不纯净导致,可以尝试DD系统。")])])]),t._v(" "),a("h2",{attrs:{id:"证书申请失败"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#证书申请失败"}},[t._v("#")]),t._v(" 证书申请失败")]),t._v(" "),a("p",[t._v("Caddy内置"),a("a",{attrs:{href:"https://acme.sh",target:"_blank",rel:"noopener noreferrer"}},[t._v("acme"),a("OutboundLink")],1),t._v("进行证书申请,使用Caddy自动申请/续签证书时,需要临时听在80端口,所以你的服务器需要开放80端口并且保证80端口没有被其他进程占用,\n并且每天申请次数有限制,通常每天超过2次就有很大概率会申请失败,如果申请失败,可以尝试重启Caddy容器或者重启服务器,Caddy就会重新申请,但是不保证100%申请成功。\n如果一直申请失败,可以等第二天重试或者在搭建之前提前准备好证书并上传至服务器,在安装的时候选择手动设置证书路径选项指定证书的绝对路径。")])])}),[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{299:function(t,a,e){"use strict";e.r(a);var r=e(7),s=Object(r.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"常见问题"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#常见问题"}},[t._v("#")]),t._v(" 常见问题")]),t._v(" "),a("h2",{attrs:{id:"搭建失败或系统报错的常见解决方案"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#搭建失败或系统报错的常见解决方案"}},[t._v("#")]),t._v(" 搭建失败或系统报错的常见解决方案")]),t._v(" "),a("p",[t._v("有以下几个方案,可以按照顺序依次尝试,修复力度逐层递增。")]),t._v(" "),a("ol",[a("li",[a("p",[t._v("关闭防火墙:如果开放了对应的端口,但是访问不了域名或者控制面板,以下为常用关闭防火墙的命令,仅供参考。")]),t._v(" "),a("ul",[a("li",[t._v("CentOS:"),a("code",[t._v("systemctl disable firewalld")])]),t._v(" "),a("li",[t._v("Debian/Ubuntu:"),a("code",[t._v("sudo ufw disable")])])])]),t._v(" "),a("li",[a("p",[t._v("故障监测:运行一键安装脚本选择故障检测的选项,对出现运行异常的应用进行单独地卸载重装。")])]),t._v(" "),a("li",[a("p",[t._v("查询系统报错日志:运行一键安装脚本选择日志查询选项,查询对应应用的日志信息,从而进行针对性修复。")])]),t._v(" "),a("li",[a("p",[t._v("重启服务器。")])]),t._v(" "),a("li",[a("p",[t._v("重装系统:有时候搭建失败可能是服务器系统不纯净导致,可以尝试DD系统。")])])]),t._v(" "),a("h2",{attrs:{id:"证书申请失败"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#证书申请失败"}},[t._v("#")]),t._v(" 证书申请失败")]),t._v(" "),a("p",[t._v("Caddy内置"),a("a",{attrs:{href:"https://acme.sh",target:"_blank",rel:"noopener noreferrer"}},[t._v("acme"),a("OutboundLink")],1),t._v("进行证书申请,使用Caddy自动申请/续签证书时,需要临时听在80端口,所以你的服务器需要开放80端口并且保证80端口没有被其他进程占用,\n并且每天申请次数有限制,通常每天超过2次就有很大概率会申请失败,如果申请失败,可以尝试重启Caddy容器或者重启服务器,Caddy就会重新申请,但是不保证100%申请成功。\n如果一直申请失败,可以等第二天重试或者在搭建之前提前准备好证书并上传至服务器,在安装的时候选择手动设置证书路径选项指定证书的绝对路径。")])])}),[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/19.4a673d2a.js b/docs/assets/js/19.16f6cfa5.js similarity index 98% rename from docs/assets/js/19.4a673d2a.js rename to docs/assets/js/19.16f6cfa5.js index e2d2c15..f687db1 100644 --- a/docs/assets/js/19.4a673d2a.js +++ b/docs/assets/js/19.16f6cfa5.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{294:function(a,t,r){"use strict";r.r(t);var e=r(7),n=Object(e.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"相关说明"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#相关说明"}},[a._v("#")]),a._v(" 相关说明")]),a._v(" "),t("h2",{attrs:{id:"文件路径"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#文件路径"}},[a._v("#")]),a._v(" 文件路径")]),a._v(" "),t("p",[a._v("证书文件位置如下")]),a._v(" "),t("p",[t("code",[a._v("/tpdata/cert/")])]),a._v(" "),t("p",[a._v("伪装网站文件位置如下")]),a._v(" "),t("p",[t("code",[a._v("/tpdata/web/")])]),a._v(" "),t("p",[a._v("Nginx配置文件位置如下")]),a._v(" "),t("p",[t("code",[a._v("/tpdata/nginx/default.conf")])]),a._v(" "),t("p",[a._v("Caddy配置文件位置如下")]),a._v(" "),t("p",[t("code",[a._v("/tpdata/caddy/config.json")])]),a._v(" "),t("p",[a._v("Trojan Panel UI Nginx配置文件位置如下")]),a._v(" "),t("p",[t("code",[a._v("/tpdata/trojan-panel-ui/nginx/default.conf")])]),a._v(" "),t("p",[a._v("Trojan Panel日志文件位置如下")]),a._v(" "),t("p",[t("code",[a._v("/tpdata/trojan-panel/logs/")])]),a._v(" "),t("p",[a._v("Trojan Panel导出文件位置如下")]),a._v(" "),t("p",[t("code",[a._v("/tpdata/trojan-panel/config/export/")])]),a._v(" "),t("p",[a._v("Trojan Panel模板文件位置如下")]),a._v(" "),t("p",[t("code",[a._v("/tpdata/trojan-panel/config/template/")])]),a._v(" "),t("p",[a._v("Trojan Panel Core日志文件位置如下")]),a._v(" "),t("p",[t("code",[a._v("/tpdata/trojan-panel-core/logs/")])]),a._v(" "),t("p",[a._v("Xray/Trojan-Go/Hysteria/NaiveProxy配置文件位置如下")]),a._v(" "),t("ul",[t("li",[a._v("Xray:"),t("code",[a._v("/tpdata/trojan-panel-core/bin/xray/config/")])]),a._v(" "),t("li",[a._v("Trojan-Go:"),t("code",[a._v("/tpdata/trojan-panel-core/bin/trojango/config/")])]),a._v(" "),t("li",[a._v("Hysteria:"),t("code",[a._v("/tpdata/trojan-panel-core/bin/hysteria/config/")])]),a._v(" "),t("li",[a._v("NaiveProxy:"),t("code",[a._v("/tpdata/trojan-panel-core/bin/naiveproxy/config/")])])]),a._v(" "),t("h2",{attrs:{id:"xray"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#xray"}},[a._v("#")]),a._v(" Xray")]),a._v(" "),t("ol",[t("li",[t("a",{attrs:{href:"https://github.com/XTLS/Xray-core/issues/1562",target:"_blank",rel:"noopener noreferrer"}},[a._v("xtls-rprx-vision仅支持TLS"),t("OutboundLink")],1)]),a._v(" "),t("li",[t("a",{attrs:{href:"https://xtls.github.io/config/features/fallback.html#fallbacks-%E9%85%8D%E7%BD%AE",target:"_blank",rel:"noopener noreferrer"}},[a._v("fallbacks仅支持TCP+TLS"),t("OutboundLink")],1)]),a._v(" "),t("li",[t("a",{attrs:{href:"https://xtls.github.io/config/#%E6%A6%82%E8%BF%B0",target:"_blank",rel:"noopener noreferrer"}},[a._v("Xray配置"),t("OutboundLink")],1)]),a._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/XTLS/Xray-examples",target:"_blank",rel:"noopener noreferrer"}},[a._v("Xray配置举例"),t("OutboundLink")],1)])]),a._v(" "),t("h2",{attrs:{id:"clash"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#clash"}},[a._v("#")]),a._v(" Clash")]),a._v(" "),t("ol",[t("li",[t("a",{attrs:{href:"https://github.com/Loyalsoldier/clash-rules",target:"_blank",rel:"noopener noreferrer"}},[a._v("Clash规则"),t("OutboundLink")],1)])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{300:function(a,t,r){"use strict";r.r(t);var e=r(7),n=Object(e.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"相关说明"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#相关说明"}},[a._v("#")]),a._v(" 相关说明")]),a._v(" "),t("h2",{attrs:{id:"文件路径"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#文件路径"}},[a._v("#")]),a._v(" 文件路径")]),a._v(" "),t("p",[a._v("证书文件位置如下")]),a._v(" "),t("p",[t("code",[a._v("/tpdata/cert/")])]),a._v(" "),t("p",[a._v("伪装网站文件位置如下")]),a._v(" "),t("p",[t("code",[a._v("/tpdata/web/")])]),a._v(" "),t("p",[a._v("Nginx配置文件位置如下")]),a._v(" "),t("p",[t("code",[a._v("/tpdata/nginx/default.conf")])]),a._v(" "),t("p",[a._v("Caddy配置文件位置如下")]),a._v(" "),t("p",[t("code",[a._v("/tpdata/caddy/config.json")])]),a._v(" "),t("p",[a._v("Trojan Panel UI Nginx配置文件位置如下")]),a._v(" "),t("p",[t("code",[a._v("/tpdata/trojan-panel-ui/nginx/default.conf")])]),a._v(" "),t("p",[a._v("Trojan Panel日志文件位置如下")]),a._v(" "),t("p",[t("code",[a._v("/tpdata/trojan-panel/logs/")])]),a._v(" "),t("p",[a._v("Trojan Panel导出文件位置如下")]),a._v(" "),t("p",[t("code",[a._v("/tpdata/trojan-panel/config/export/")])]),a._v(" "),t("p",[a._v("Trojan Panel模板文件位置如下")]),a._v(" "),t("p",[t("code",[a._v("/tpdata/trojan-panel/config/template/")])]),a._v(" "),t("p",[a._v("Trojan Panel Core日志文件位置如下")]),a._v(" "),t("p",[t("code",[a._v("/tpdata/trojan-panel-core/logs/")])]),a._v(" "),t("p",[a._v("Xray/Trojan-Go/Hysteria/NaiveProxy配置文件位置如下")]),a._v(" "),t("ul",[t("li",[a._v("Xray:"),t("code",[a._v("/tpdata/trojan-panel-core/bin/xray/config/")])]),a._v(" "),t("li",[a._v("Trojan-Go:"),t("code",[a._v("/tpdata/trojan-panel-core/bin/trojango/config/")])]),a._v(" "),t("li",[a._v("Hysteria:"),t("code",[a._v("/tpdata/trojan-panel-core/bin/hysteria/config/")])]),a._v(" "),t("li",[a._v("NaiveProxy:"),t("code",[a._v("/tpdata/trojan-panel-core/bin/naiveproxy/config/")])])]),a._v(" "),t("h2",{attrs:{id:"xray"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#xray"}},[a._v("#")]),a._v(" Xray")]),a._v(" "),t("ol",[t("li",[t("a",{attrs:{href:"https://github.com/XTLS/Xray-core/issues/1562",target:"_blank",rel:"noopener noreferrer"}},[a._v("xtls-rprx-vision仅支持TLS"),t("OutboundLink")],1)]),a._v(" "),t("li",[t("a",{attrs:{href:"https://xtls.github.io/config/features/fallback.html#fallbacks-%E9%85%8D%E7%BD%AE",target:"_blank",rel:"noopener noreferrer"}},[a._v("fallbacks仅支持TCP+TLS"),t("OutboundLink")],1)]),a._v(" "),t("li",[t("a",{attrs:{href:"https://xtls.github.io/config/#%E6%A6%82%E8%BF%B0",target:"_blank",rel:"noopener noreferrer"}},[a._v("Xray配置"),t("OutboundLink")],1)]),a._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/XTLS/Xray-examples",target:"_blank",rel:"noopener noreferrer"}},[a._v("Xray配置举例"),t("OutboundLink")],1)])]),a._v(" "),t("h2",{attrs:{id:"clash"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#clash"}},[a._v("#")]),a._v(" Clash")]),a._v(" "),t("ol",[t("li",[t("a",{attrs:{href:"https://github.com/Loyalsoldier/clash-rules",target:"_blank",rel:"noopener noreferrer"}},[a._v("Clash规则"),t("OutboundLink")],1)])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/20.e477ad1a.js b/docs/assets/js/20.dfa8754a.js similarity index 98% rename from docs/assets/js/20.e477ad1a.js rename to docs/assets/js/20.dfa8754a.js index 704f77f..456decc 100644 --- a/docs/assets/js/20.e477ad1a.js +++ b/docs/assets/js/20.dfa8754a.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{298:function(t,n,s){"use strict";s.r(n);var a=s(7),e=Object(a.a)({},(function(){var t=this,n=t._self._c;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"性能测试"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#性能测试"}},[t._v("#")]),t._v(" 性能测试")]),t._v(" "),n("p",[t._v("测试服务器配置:"),n("code",[t._v("CentOS 7 x86_64 1H1G")])]),t._v(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[t._v("Architecture: x86_64\nCPU op-mode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(": "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("32")]),t._v("-bit, "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("64")]),t._v("-bit\nByte Order: Little Endian\nCPU"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(": "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\nOn-line CPU"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" list: "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\nThread"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" per core: "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\nCore"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" per socket: "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\nSocket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(": "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\nNUMA node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(": "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\nVendor ID: GenuineIntel\nCPU family: "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("6")]),t._v("\nModel: "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("61")]),t._v("\nModel name: Intel Core Processor "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Broadwell, no TSX, IBRS"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nStepping: "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v("\nCPU MHz: "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2394.454")]),t._v("\nBogoMIPS: "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("4788.90")]),t._v("\nHypervisor vendor: Microsoft\nVirtualization type: full\nL1d cache: 32K\nL1i cache: 32K\nL2 cache: 4096K\nL3 cache: 16384K\nNUMA node0 CPU"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(": "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n")])])]),n("p",[t._v("一共安装6个服务,运行一个星期,实际使用内存不到400M")]),t._v(" "),n("p",[n("img",{attrs:{src:"/linux-memory.png",alt:"linux-memory"}})]),t._v(" "),n("p",[t._v("以下时所有服务的性能监控,内存消耗(MEM USAGE)\n从小到大依次为:"),n("code",[t._v("trojan-panel-redis > trojan-panel-ui < trojan-panel-caddy < trojan-panel < trojan-panel-mariadb < trojan-panel-core")])]),t._v(" "),n("p",[n("img",{attrs:{src:"/docker-memory.png",alt:"docker-memory"}})])])}),[],!1,null,null,null);n.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{293:function(t,n,s){"use strict";s.r(n);var a=s(7),e=Object(a.a)({},(function(){var t=this,n=t._self._c;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"性能测试"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#性能测试"}},[t._v("#")]),t._v(" 性能测试")]),t._v(" "),n("p",[t._v("测试服务器配置:"),n("code",[t._v("CentOS 7 x86_64 1H1G")])]),t._v(" "),n("div",{staticClass:"language-bash extra-class"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[t._v("Architecture: x86_64\nCPU op-mode"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(": "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("32")]),t._v("-bit, "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("64")]),t._v("-bit\nByte Order: Little Endian\nCPU"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(": "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\nOn-line CPU"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" list: "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\nThread"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" per core: "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\nCore"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" per socket: "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\nSocket"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(": "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\nNUMA node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(": "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\nVendor ID: GenuineIntel\nCPU family: "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("6")]),t._v("\nModel: "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("61")]),t._v("\nModel name: Intel Core Processor "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Broadwell, no TSX, IBRS"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nStepping: "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v("\nCPU MHz: "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2394.454")]),t._v("\nBogoMIPS: "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("4788.90")]),t._v("\nHypervisor vendor: Microsoft\nVirtualization type: full\nL1d cache: 32K\nL1i cache: 32K\nL2 cache: 4096K\nL3 cache: 16384K\nNUMA node0 CPU"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(": "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n")])])]),n("p",[t._v("一共安装6个服务,运行一个星期,实际使用内存不到400M")]),t._v(" "),n("p",[n("img",{attrs:{src:"/linux-memory.png",alt:"linux-memory"}})]),t._v(" "),n("p",[t._v("以下时所有服务的性能监控,内存消耗(MEM USAGE)\n从小到大依次为:"),n("code",[t._v("trojan-panel-redis > trojan-panel-ui < trojan-panel-caddy < trojan-panel < trojan-panel-mariadb < trojan-panel-core")])]),t._v(" "),n("p",[n("img",{attrs:{src:"/docker-memory.png",alt:"docker-memory"}})])])}),[],!1,null,null,null);n.default=e.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/21.00cbafee.js b/docs/assets/js/21.36cb866d.js similarity index 96% rename from docs/assets/js/21.00cbafee.js rename to docs/assets/js/21.36cb866d.js index 81a24da..67cefa0 100644 --- a/docs/assets/js/21.00cbafee.js +++ b/docs/assets/js/21.36cb866d.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{296:function(t,e,r){"use strict";r.r(e);var a=r(7),s=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"性能调优"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#性能调优"}},[t._v("#")]),t._v(" 性能调优")]),t._v(" "),e("h2",{attrs:{id:"定时重启"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#定时重启"}},[t._v("#")]),t._v(" 定时重启")]),t._v(" "),e("p",[t._v("每天凌晨4点重启服务的crontab定时任务")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),t._v(" * * * /sbin/reboot\n")])])]),e("h2",{attrs:{id:"网络加速"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#网络加速"}},[t._v("#")]),t._v(" 网络加速")]),t._v(" "),e("ol",[e("li",[e("a",{attrs:{href:"https://github.com/Chikage0o0/Linux-NetSpeed",target:"_blank",rel:"noopener noreferrer"}},[t._v("Chikage0o0/Linux-NetSpeed"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/ylx2016/Linux-NetSpeed",target:"_blank",rel:"noopener noreferrer"}},[t._v("ylx2016/Linux-NetSpeed"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/teddysun/across#bbrsh",target:"_blank",rel:"noopener noreferrer"}},[t._v("teddysun/across#bbrsh"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/cx9208/bbrplus",target:"_blank",rel:"noopener noreferrer"}},[t._v("cx9208/bbrplus(archive)"),e("OutboundLink")],1)])])])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{294:function(t,e,r){"use strict";r.r(e);var a=r(7),s=Object(a.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"性能调优"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#性能调优"}},[t._v("#")]),t._v(" 性能调优")]),t._v(" "),e("h2",{attrs:{id:"定时重启"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#定时重启"}},[t._v("#")]),t._v(" 定时重启")]),t._v(" "),e("p",[t._v("每天凌晨4点重启服务的crontab定时任务")]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),t._v(" * * * /sbin/reboot\n")])])]),e("h2",{attrs:{id:"网络加速"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#网络加速"}},[t._v("#")]),t._v(" 网络加速")]),t._v(" "),e("ol",[e("li",[e("a",{attrs:{href:"https://github.com/Chikage0o0/Linux-NetSpeed",target:"_blank",rel:"noopener noreferrer"}},[t._v("Chikage0o0/Linux-NetSpeed"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/ylx2016/Linux-NetSpeed",target:"_blank",rel:"noopener noreferrer"}},[t._v("ylx2016/Linux-NetSpeed"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/teddysun/across#bbrsh",target:"_blank",rel:"noopener noreferrer"}},[t._v("teddysun/across#bbrsh"),e("OutboundLink")],1)]),t._v(" "),e("li",[e("a",{attrs:{href:"https://github.com/cx9208/bbrplus",target:"_blank",rel:"noopener noreferrer"}},[t._v("cx9208/bbrplus(archive)"),e("OutboundLink")],1)])])])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/22.02b17259.js b/docs/assets/js/22.100de7a6.js similarity index 97% rename from docs/assets/js/22.02b17259.js rename to docs/assets/js/22.100de7a6.js index 94bae0c..899c15d 100644 --- a/docs/assets/js/22.02b17259.js +++ b/docs/assets/js/22.100de7a6.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{297:function(r,t,a){"use strict";a.r(t);var e=a(7),n=Object(e.a)({},(function(){var r=this,t=r._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":r.$parent.slotKey}},[t("h1",{attrs:{id:"工具推荐"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#工具推荐"}},[r._v("#")]),r._v(" 工具推荐")]),r._v(" "),t("h2",{attrs:{id:"客户端"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#客户端"}},[r._v("#")]),r._v(" 客户端")]),r._v(" "),t("h3",{attrs:{id:"xray"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#xray"}},[r._v("#")]),r._v(" Xray")]),r._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/XTLS/Xray-core#gui-clients",target:"_blank",rel:"noopener noreferrer"}},[r._v("Xray客户端"),t("OutboundLink")],1)]),r._v(" "),t("h3",{attrs:{id:"trojan-gfw-trojan-go"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#trojan-gfw-trojan-go"}},[r._v("#")]),r._v(" Trojan-gfw & Trojan-go")]),r._v(" "),t("ul",[t("li",[r._v("Android: "),t("a",{attrs:{href:"https://github.com/trojan-gfw/igniter",target:"_blank",rel:"noopener noreferrer"}},[r._v("igniter"),t("OutboundLink")],1),r._v(" / "),t("a",{attrs:{href:"https://github.com/p4gefau1t/trojan-go-android",target:"_blank",rel:"noopener noreferrer"}},[r._v("trojan-go-android"),t("OutboundLink")],1)]),r._v(" "),t("li",[r._v("IOS: "),t("a",{attrs:{href:"https://apps.apple.com/us/app/shadowrocket/id932747118",target:"_blank",rel:"noopener noreferrer"}},[r._v("Shadowrocket"),t("OutboundLink")],1)]),r._v(" "),t("li",[r._v("Windows/Mac/Linux: "),t("a",{attrs:{href:"https://github.com/2dust/v2rayN",target:"_blank",rel:"noopener noreferrer"}},[r._v("v2rayN"),t("OutboundLink")],1),r._v(" / "),t("a",{attrs:{href:"https://github.com/Fndroid/clash_for_windows_pkg",target:"_blank",rel:"noopener noreferrer"}},[r._v("Clash for Windows"),t("OutboundLink")],1),r._v(" / "),t("a",{attrs:{href:"https://github.com/Qv2ray/Qv2ray",target:"_blank",rel:"noopener noreferrer"}},[r._v("Qv2ray(archive)"),t("OutboundLink")],1)])]),r._v(" "),t("h3",{attrs:{id:"hysteria"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#hysteria"}},[r._v("#")]),r._v(" Hysteria")]),r._v(" "),t("p",[t("a",{attrs:{href:"https://hysteria.network/zh/docs/installation/",target:"_blank",rel:"noopener noreferrer"}},[r._v("Hysteria客户端"),t("OutboundLink")],1)]),r._v(" "),t("h2",{attrs:{id:"申请免费证书"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#申请免费证书"}},[r._v("#")]),r._v(" 申请免费证书")]),r._v(" "),t("ol",[t("li",[t("a",{attrs:{href:"https://github.com/acmesh-official/acme.sh",target:"_blank",rel:"noopener noreferrer"}},[r._v("ACME"),t("OutboundLink")],1),r._v("(推荐)")]),r._v(" "),t("li",[t("a",{attrs:{href:"https://freessl.cn/",target:"_blank",rel:"noopener noreferrer"}},[r._v("FreeSSL"),t("OutboundLink")],1),r._v("(注册需要并绑定手机)")])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{296:function(r,t,a){"use strict";a.r(t);var e=a(7),n=Object(e.a)({},(function(){var r=this,t=r._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":r.$parent.slotKey}},[t("h1",{attrs:{id:"工具推荐"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#工具推荐"}},[r._v("#")]),r._v(" 工具推荐")]),r._v(" "),t("h2",{attrs:{id:"客户端"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#客户端"}},[r._v("#")]),r._v(" 客户端")]),r._v(" "),t("h3",{attrs:{id:"xray"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#xray"}},[r._v("#")]),r._v(" Xray")]),r._v(" "),t("p",[t("a",{attrs:{href:"https://github.com/XTLS/Xray-core#gui-clients",target:"_blank",rel:"noopener noreferrer"}},[r._v("Xray客户端"),t("OutboundLink")],1)]),r._v(" "),t("h3",{attrs:{id:"trojan-gfw-trojan-go"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#trojan-gfw-trojan-go"}},[r._v("#")]),r._v(" Trojan-gfw & Trojan-go")]),r._v(" "),t("ul",[t("li",[r._v("Android: "),t("a",{attrs:{href:"https://github.com/trojan-gfw/igniter",target:"_blank",rel:"noopener noreferrer"}},[r._v("igniter"),t("OutboundLink")],1),r._v(" / "),t("a",{attrs:{href:"https://github.com/p4gefau1t/trojan-go-android",target:"_blank",rel:"noopener noreferrer"}},[r._v("trojan-go-android"),t("OutboundLink")],1)]),r._v(" "),t("li",[r._v("IOS: "),t("a",{attrs:{href:"https://apps.apple.com/us/app/shadowrocket/id932747118",target:"_blank",rel:"noopener noreferrer"}},[r._v("Shadowrocket"),t("OutboundLink")],1)]),r._v(" "),t("li",[r._v("Windows/Mac/Linux: "),t("a",{attrs:{href:"https://github.com/2dust/v2rayN",target:"_blank",rel:"noopener noreferrer"}},[r._v("v2rayN"),t("OutboundLink")],1),r._v(" / "),t("a",{attrs:{href:"https://github.com/Fndroid/clash_for_windows_pkg",target:"_blank",rel:"noopener noreferrer"}},[r._v("Clash for Windows"),t("OutboundLink")],1),r._v(" / "),t("a",{attrs:{href:"https://github.com/Qv2ray/Qv2ray",target:"_blank",rel:"noopener noreferrer"}},[r._v("Qv2ray(archive)"),t("OutboundLink")],1)])]),r._v(" "),t("h3",{attrs:{id:"hysteria"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#hysteria"}},[r._v("#")]),r._v(" Hysteria")]),r._v(" "),t("p",[t("a",{attrs:{href:"https://hysteria.network/zh/docs/installation/",target:"_blank",rel:"noopener noreferrer"}},[r._v("Hysteria客户端"),t("OutboundLink")],1)]),r._v(" "),t("h2",{attrs:{id:"申请免费证书"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#申请免费证书"}},[r._v("#")]),r._v(" 申请免费证书")]),r._v(" "),t("ol",[t("li",[t("a",{attrs:{href:"https://github.com/acmesh-official/acme.sh",target:"_blank",rel:"noopener noreferrer"}},[r._v("ACME"),t("OutboundLink")],1),r._v("(推荐)")]),r._v(" "),t("li",[t("a",{attrs:{href:"https://freessl.cn/",target:"_blank",rel:"noopener noreferrer"}},[r._v("FreeSSL"),t("OutboundLink")],1),r._v("(注册需要并绑定手机)")])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/23.27e2c4ef.js b/docs/assets/js/23.aa3dc89d.js similarity index 96% rename from docs/assets/js/23.27e2c4ef.js rename to docs/assets/js/23.aa3dc89d.js index dd17140..8f80e14 100644 --- a/docs/assets/js/23.27e2c4ef.js +++ b/docs/assets/js/23.aa3dc89d.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{300:function(t,r,e){"use strict";e.r(r);var a=e(7),n=Object(a.a)({},(function(){var t=this,r=t._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"使用cdn"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#使用cdn"}},[t._v("#")]),t._v(" 使用CDN")]),t._v(" "),r("h2",{attrs:{id:"cloudflare"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#cloudflare"}},[t._v("#")]),t._v(" Cloudflare")]),t._v(" "),r("blockquote",[r("p",[t._v("Cloudflare: https://www.cloudflare.com/zh-cn/")])]),t._v(" "),r("p",[t._v("注意:")]),t._v(" "),r("ol",[r("li",[r("p",[t._v("节点端口必须使用"),r("a",{attrs:{href:"https://developers.cloudflare.com/fundamentals/get-started/reference/network-ports/",target:"_blank",rel:"noopener noreferrer"}},[t._v("CF指定的端口"),r("OutboundLink")],1)])]),t._v(" "),r("li",[r("p",[t._v("Cloudflare 代理状态必须设置为"),r("strong",[t._v("已代理")]),t._v(",SSL/TLS加密模式必须设置为"),r("strong",[t._v("完全")]),t._v("或者"),r("strong",[t._v("完全(严格)")])])])]),t._v(" "),r("p",[r("img",{attrs:{src:"/tuorial/cdn-1.png",alt:"cdn-1"}})]),t._v(" "),r("p",[r("img",{attrs:{src:"/tuorial/cdn-2.png",alt:"cdn-2"}})]),t._v(" "),r("ol",{attrs:{start:"3"}},[r("li",[t._v("如果前端开启了https,则必须使用"),r("a",{attrs:{href:"https://developers.cloudflare.com/fundamentals/get-started/reference/network-ports/",target:"_blank",rel:"noopener noreferrer"}},[t._v("CF指定的https端口"),r("OutboundLink")],1),t._v(" ,http同理,否则无法通过域名访问面板")])])])}),[],!1,null,null,null);r.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{297:function(t,r,e){"use strict";e.r(r);var a=e(7),n=Object(a.a)({},(function(){var t=this,r=t._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"使用cdn"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#使用cdn"}},[t._v("#")]),t._v(" 使用CDN")]),t._v(" "),r("h2",{attrs:{id:"cloudflare"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#cloudflare"}},[t._v("#")]),t._v(" Cloudflare")]),t._v(" "),r("blockquote",[r("p",[t._v("Cloudflare: https://www.cloudflare.com/zh-cn/")])]),t._v(" "),r("p",[t._v("注意:")]),t._v(" "),r("ol",[r("li",[r("p",[t._v("节点端口必须使用"),r("a",{attrs:{href:"https://developers.cloudflare.com/fundamentals/get-started/reference/network-ports/",target:"_blank",rel:"noopener noreferrer"}},[t._v("CF指定的端口"),r("OutboundLink")],1)])]),t._v(" "),r("li",[r("p",[t._v("Cloudflare 代理状态必须设置为"),r("strong",[t._v("已代理")]),t._v(",SSL/TLS加密模式必须设置为"),r("strong",[t._v("完全")]),t._v("或者"),r("strong",[t._v("完全(严格)")])])])]),t._v(" "),r("p",[r("img",{attrs:{src:"/tuorial/cdn-1.png",alt:"cdn-1"}})]),t._v(" "),r("p",[r("img",{attrs:{src:"/tuorial/cdn-2.png",alt:"cdn-2"}})]),t._v(" "),r("ol",{attrs:{start:"3"}},[r("li",[t._v("如果前端开启了https,则必须使用"),r("a",{attrs:{href:"https://developers.cloudflare.com/fundamentals/get-started/reference/network-ports/",target:"_blank",rel:"noopener noreferrer"}},[t._v("CF指定的https端口"),r("OutboundLink")],1),t._v(" ,http同理,否则无法通过域名访问面板")])])])}),[],!1,null,null,null);r.default=n.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/24.38b8b1de.js b/docs/assets/js/24.b89c1c15.js similarity index 98% rename from docs/assets/js/24.38b8b1de.js rename to docs/assets/js/24.b89c1c15.js index 10b45b2..f6b5520 100644 --- a/docs/assets/js/24.38b8b1de.js +++ b/docs/assets/js/24.b89c1c15.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{299:function(s,a,t){"use strict";t.r(a);var r=t(7),v=Object(r.a)({},(function(){var s=this,a=s._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"使用教程"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#使用教程"}},[s._v("#")]),s._v(" 使用教程")]),s._v(" "),a("h3",{attrs:{id:"登录-注册"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#登录-注册"}},[s._v("#")]),s._v(" 登录/注册")]),s._v(" "),a("p",[s._v("Trojan Panel Web管理面板地址在安装好之后会打印在控制台。")]),s._v(" "),a("p",[a("img",{attrs:{src:"/using/using-1.png",alt:"using-1"}})]),s._v(" "),a("p",[s._v("根据提示在浏览器打开面板登录界面。默认用户名:sysadmin 默认密码:123456,登陆以后请及时修改密码。")]),s._v(" "),a("p",[s._v("登录系统之后点击右上角头像->个人中心,修改当前用户的登录密码。")]),s._v(" "),a("p",[a("img",{attrs:{src:"/using/using-2.png",alt:"using-2"}})]),s._v(" "),a("h2",{attrs:{id:"用户管理"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#用户管理"}},[s._v("#")]),s._v(" 用户管理")]),s._v(" "),a("p",[s._v("用户列表->添加,支持设置用户的总流量、到期时间等,如果用户填写了邮箱地址并且设置了系统邮箱,那么账户将要到期的时候系统会自动向用户发送账户到期提醒的邮件。")]),s._v(" "),a("p",[a("img",{attrs:{src:"/using/using-6.png",alt:"using-6"}})]),s._v(" "),a("h2",{attrs:{id:"节点管理"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#节点管理"}},[s._v("#")]),s._v(" 节点管理")]),s._v(" "),a("p",[s._v("节点列表->添加,支持远程自动化管理节点,"),a("strong",[s._v("前提条件是,节点服务器已经安装了Trojan Panel Core,并且只需要安装一次")]),s._v("\n。在面板中添加完节点之后就可以直接扫描二维码或者Clash订阅地址使用了。节点类型支持Xray、Trojan-Go、Hysteria、NaiveProxy。")]),s._v(" "),a("blockquote",[a("p",[s._v("目前支持的Hysteria和NaiveProxy处于测试阶段,只支持用户认证不支持流量统计。")])]),s._v(" "),a("p",[a("img",{attrs:{src:"/using/using-7.png",alt:"using-7"}})]),s._v(" "),a("h2",{attrs:{id:"用户设置"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#用户设置"}},[s._v("#")]),s._v(" 用户设置")]),s._v(" "),a("p",[s._v("系统设置->基础设置->用户设置")]),s._v(" "),a("ol",[a("li",[s._v("新用户设置:默认开启新用户注册,可以设置新用户的默认有效期和默认流量")]),s._v(" "),a("li",[s._v("是否每月重设下载和上传流量:默认关闭,开启后每月1号00:00:00重设角色为普通用户的下载和上传流量")]),s._v(" "),a("li",[s._v("是否开启流量排行:默认开启,关闭后角色为普通用户的首页将不在显示流量排行模块")])]),s._v(" "),a("p",[a("img",{attrs:{src:"/using/using-10.png",alt:"using-10"}})]),s._v(" "),a("h2",{attrs:{id:"服务器管理"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#服务器管理"}},[s._v("#")]),s._v(" 服务器管理")]),s._v(" "),a("p",[s._v("服务器管理->添加,先添加服务器,然后再添加节点。")]),s._v(" "),a("p",[a("img",{attrs:{src:"/using/using-11.png",alt:"using-11"}})]),s._v(" "),a("h2",{attrs:{id:"系统邮箱设置"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#系统邮箱设置"}},[s._v("#")]),s._v(" 系统邮箱设置")]),s._v(" "),a("p",[s._v("系统设置->基础设置->系统邮箱设置,用于对即将到期的用户进行邮件提醒。")]),s._v(" "),a("blockquote",[a("p",[s._v("每天中午12点发送到期提醒邮件")])]),s._v(" "),a("p",[a("img",{attrs:{src:"/using/using-5.png",alt:"using-5"}})]),s._v(" "),a("h2",{attrs:{id:"自定义伪装网站"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#自定义伪装网站"}},[s._v("#")]),s._v(" 自定义伪装网站")]),s._v(" "),a("p",[s._v("系统设置->基础设置->自定义伪装网站,将网站打包为zip格式,将zip文件进行上传。服务器对应的文件目录为"),a("code",[s._v("/tpdata/trojan-panel/webfile/")]),s._v(",如果上传失败,可以手动修改服务器文件夹里的内容。")]),s._v(" "),a("p",[a("img",{attrs:{src:"/using/using-4.png",alt:"using-4"}})]),s._v(" "),a("h2",{attrs:{id:"黑名单管理"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#黑名单管理"}},[s._v("#")]),s._v(" 黑名单管理")]),s._v(" "),a("p",[s._v("系统设置->黑名单,可以屏蔽添加到黑名单的IP地址或者域名,提升系统的安全性。")]),s._v(" "),a("h2",{attrs:{id:"模板设置"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#模板设置"}},[s._v("#")]),s._v(" 模板设置")]),s._v(" "),a("p",[s._v("系统设置->模板设置,可以自定义系统名称、Clash规则模板、Xray模板,统一设置管理更加方便。")]),s._v(" "),a("p",[a("img",{attrs:{src:"/using/using-12.png",alt:"using-9"}})]),s._v(" "),a("h2",{attrs:{id:"数据统计"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#数据统计"}},[s._v("#")]),s._v(" 数据统计")]),s._v(" "),a("p",[s._v("首页,可以查看总流量、剩余流量、到期时间等,如果是超级管理员角色另外可以查看系统运行状态,总用户数,总节点数,所有用户都查看用户的流量排名,一小时更新一次。")]),s._v(" "),a("p",[a("img",{attrs:{src:"/using/using-9.png",alt:"using-9"}})]),s._v(" "),a("h2",{attrs:{id:"小功能"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#小功能"}},[s._v("#")]),s._v(" 小功能")]),s._v(" "),a("p",[s._v("界面右上角可以实现全屏显示、设置界面字体大小、中文/English/한국인/فارسی切换。")]),s._v(" "),a("p",[a("img",{attrs:{src:"/using/using-8.png",alt:"using-8"}})]),s._v(" "),a("p",[s._v("更多功能持续开发中,敬请期待...")])])}),[],!1,null,null,null);a.default=v.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{298:function(s,a,t){"use strict";t.r(a);var r=t(7),v=Object(r.a)({},(function(){var s=this,a=s._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"使用教程"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#使用教程"}},[s._v("#")]),s._v(" 使用教程")]),s._v(" "),a("h3",{attrs:{id:"登录-注册"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#登录-注册"}},[s._v("#")]),s._v(" 登录/注册")]),s._v(" "),a("p",[s._v("Trojan Panel Web管理面板地址在安装好之后会打印在控制台。")]),s._v(" "),a("p",[a("img",{attrs:{src:"/using/using-1.png",alt:"using-1"}})]),s._v(" "),a("p",[s._v("根据提示在浏览器打开面板登录界面。默认用户名:sysadmin 默认密码:123456,登陆以后请及时修改密码。")]),s._v(" "),a("p",[s._v("登录系统之后点击右上角头像->个人中心,修改当前用户的登录密码。")]),s._v(" "),a("p",[a("img",{attrs:{src:"/using/using-2.png",alt:"using-2"}})]),s._v(" "),a("h2",{attrs:{id:"用户管理"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#用户管理"}},[s._v("#")]),s._v(" 用户管理")]),s._v(" "),a("p",[s._v("用户列表->添加,支持设置用户的总流量、到期时间等,如果用户填写了邮箱地址并且设置了系统邮箱,那么账户将要到期的时候系统会自动向用户发送账户到期提醒的邮件。")]),s._v(" "),a("p",[a("img",{attrs:{src:"/using/using-6.png",alt:"using-6"}})]),s._v(" "),a("h2",{attrs:{id:"节点管理"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#节点管理"}},[s._v("#")]),s._v(" 节点管理")]),s._v(" "),a("p",[s._v("节点列表->添加,支持远程自动化管理节点,"),a("strong",[s._v("前提条件是,节点服务器已经安装了Trojan Panel Core,并且只需要安装一次")]),s._v("\n。在面板中添加完节点之后就可以直接扫描二维码或者Clash订阅地址使用了。节点类型支持Xray、Trojan-Go、Hysteria、NaiveProxy。")]),s._v(" "),a("blockquote",[a("p",[s._v("目前支持的Hysteria和NaiveProxy处于测试阶段,只支持用户认证不支持流量统计。")])]),s._v(" "),a("p",[a("img",{attrs:{src:"/using/using-7.png",alt:"using-7"}})]),s._v(" "),a("h2",{attrs:{id:"用户设置"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#用户设置"}},[s._v("#")]),s._v(" 用户设置")]),s._v(" "),a("p",[s._v("系统设置->基础设置->用户设置")]),s._v(" "),a("ol",[a("li",[s._v("新用户设置:默认开启新用户注册,可以设置新用户的默认有效期和默认流量")]),s._v(" "),a("li",[s._v("是否每月重设下载和上传流量:默认关闭,开启后每月1号00:00:00重设角色为普通用户的下载和上传流量")]),s._v(" "),a("li",[s._v("是否开启流量排行:默认开启,关闭后角色为普通用户的首页将不在显示流量排行模块")])]),s._v(" "),a("p",[a("img",{attrs:{src:"/using/using-10.png",alt:"using-10"}})]),s._v(" "),a("h2",{attrs:{id:"服务器管理"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#服务器管理"}},[s._v("#")]),s._v(" 服务器管理")]),s._v(" "),a("p",[s._v("服务器管理->添加,先添加服务器,然后再添加节点。")]),s._v(" "),a("p",[a("img",{attrs:{src:"/using/using-11.png",alt:"using-11"}})]),s._v(" "),a("h2",{attrs:{id:"系统邮箱设置"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#系统邮箱设置"}},[s._v("#")]),s._v(" 系统邮箱设置")]),s._v(" "),a("p",[s._v("系统设置->基础设置->系统邮箱设置,用于对即将到期的用户进行邮件提醒。")]),s._v(" "),a("blockquote",[a("p",[s._v("每天中午12点发送到期提醒邮件")])]),s._v(" "),a("p",[a("img",{attrs:{src:"/using/using-5.png",alt:"using-5"}})]),s._v(" "),a("h2",{attrs:{id:"自定义伪装网站"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#自定义伪装网站"}},[s._v("#")]),s._v(" 自定义伪装网站")]),s._v(" "),a("p",[s._v("系统设置->基础设置->自定义伪装网站,将网站打包为zip格式,将zip文件进行上传。服务器对应的文件目录为"),a("code",[s._v("/tpdata/trojan-panel/webfile/")]),s._v(",如果上传失败,可以手动修改服务器文件夹里的内容。")]),s._v(" "),a("p",[a("img",{attrs:{src:"/using/using-4.png",alt:"using-4"}})]),s._v(" "),a("h2",{attrs:{id:"黑名单管理"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#黑名单管理"}},[s._v("#")]),s._v(" 黑名单管理")]),s._v(" "),a("p",[s._v("系统设置->黑名单,可以屏蔽添加到黑名单的IP地址或者域名,提升系统的安全性。")]),s._v(" "),a("h2",{attrs:{id:"模板设置"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#模板设置"}},[s._v("#")]),s._v(" 模板设置")]),s._v(" "),a("p",[s._v("系统设置->模板设置,可以自定义系统名称、Clash规则模板、Xray模板,统一设置管理更加方便。")]),s._v(" "),a("p",[a("img",{attrs:{src:"/using/using-12.png",alt:"using-9"}})]),s._v(" "),a("h2",{attrs:{id:"数据统计"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#数据统计"}},[s._v("#")]),s._v(" 数据统计")]),s._v(" "),a("p",[s._v("首页,可以查看总流量、剩余流量、到期时间等,如果是超级管理员角色另外可以查看系统运行状态,总用户数,总节点数,所有用户都查看用户的流量排名,一小时更新一次。")]),s._v(" "),a("p",[a("img",{attrs:{src:"/using/using-9.png",alt:"using-9"}})]),s._v(" "),a("h2",{attrs:{id:"小功能"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#小功能"}},[s._v("#")]),s._v(" 小功能")]),s._v(" "),a("p",[s._v("界面右上角可以实现全屏显示、设置界面字体大小、中文/English/한국인/فارسی切换。")]),s._v(" "),a("p",[a("img",{attrs:{src:"/using/using-8.png",alt:"using-8"}})]),s._v(" "),a("p",[s._v("更多功能持续开发中,敬请期待...")])])}),[],!1,null,null,null);a.default=v.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/3.5425e89d.js b/docs/assets/js/3.a9a9dc9a.js similarity index 60% rename from docs/assets/js/3.5425e89d.js rename to docs/assets/js/3.a9a9dc9a.js index ad2b7d9..a4c6640 100644 --- a/docs/assets/js/3.5425e89d.js +++ b/docs/assets/js/3.a9a9dc9a.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{259:function(t,e,n){},278:function(t,e,n){"use strict";n(259)},301:function(t,e,n){"use strict";n.r(e);var i={functional:!0,props:{type:{type:String,default:"tip"},text:String,vertical:{type:String,default:"top"}},render:(t,{props:e,slots:n})=>t("span",{class:["badge",e.type],style:{verticalAlign:e.vertical}},e.text||n().default)},p=(n(278),n(7)),l=Object(p.a)(i,void 0,void 0,!1,null,"cd6f89c2",null);e.default=l.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{257:function(t,e,n){},276:function(t,e,n){"use strict";n(257)},301:function(t,e,n){"use strict";n.r(e);var i={functional:!0,props:{type:{type:String,default:"tip"},text:String,vertical:{type:String,default:"top"}},render:(t,{props:e,slots:n})=>t("span",{class:["badge",e.type],style:{verticalAlign:e.vertical}},e.text||n().default)},p=(n(276),n(7)),l=Object(p.a)(i,void 0,void 0,!1,null,"cd6f89c2",null);e.default=l.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/4.be669d2a.js b/docs/assets/js/4.bc43e7f4.js similarity index 65% rename from docs/assets/js/4.be669d2a.js rename to docs/assets/js/4.bc43e7f4.js index 03bb462..6f684bc 100644 --- a/docs/assets/js/4.be669d2a.js +++ b/docs/assets/js/4.bc43e7f4.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{257:function(t,e,s){},276:function(t,e,s){"use strict";s(257)},281:function(t,e,s){"use strict";s.r(e);var a={name:"CodeBlock",props:{title:{type:String,required:!0},active:{type:Boolean,default:!1}},mounted(){this.$parent&&this.$parent.loadTabs&&this.$parent.loadTabs()}},i=(s(276),s(7)),n=Object(i.a)(a,(function(){return(0,this._self._c)("div",{staticClass:"theme-code-block",class:{"theme-code-block__active":this.active}},[this._t("default")],2)}),[],!1,null,"492049b0",null);e.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{258:function(t,e,s){},277:function(t,e,s){"use strict";s(258)},281:function(t,e,s){"use strict";s.r(e);var a={name:"CodeBlock",props:{title:{type:String,required:!0},active:{type:Boolean,default:!1}},mounted(){this.$parent&&this.$parent.loadTabs&&this.$parent.loadTabs()}},i=(s(277),s(7)),n=Object(i.a)(a,(function(){return(0,this._self._c)("div",{staticClass:"theme-code-block",class:{"theme-code-block__active":this.active}},[this._t("default")],2)}),[],!1,null,"492049b0",null);e.default=n.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/5.9af91946.js b/docs/assets/js/5.a8cfbe33.js similarity index 88% rename from docs/assets/js/5.9af91946.js rename to docs/assets/js/5.a8cfbe33.js index 7d982d0..d9da7ad 100644 --- a/docs/assets/js/5.9af91946.js +++ b/docs/assets/js/5.a8cfbe33.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{258:function(e,t,a){},277:function(e,t,a){"use strict";a(258)},282:function(e,t,a){"use strict";a.r(t);var o={name:"CodeGroup",data:()=>({codeTabs:[],activeCodeTabIndex:-1}),watch:{activeCodeTabIndex(e){this.activateCodeTab(e)}},mounted(){this.loadTabs()},methods:{changeCodeTab(e){this.activeCodeTabIndex=e},loadTabs(){this.codeTabs=(this.$slots.default||[]).filter(e=>Boolean(e.componentOptions)).map((e,t)=>(""===e.componentOptions.propsData.active&&(this.activeCodeTabIndex=t),{title:e.componentOptions.propsData.title,elm:e.elm})),-1===this.activeCodeTabIndex&&this.codeTabs.length>0&&(this.activeCodeTabIndex=0),this.activateCodeTab(0)},activateCodeTab(e){this.codeTabs.forEach(e=>{e.elm&&e.elm.classList.remove("theme-code-block__active")}),this.codeTabs[e].elm&&this.codeTabs[e].elm.classList.add("theme-code-block__active")}}},s=(a(277),a(7)),c=Object(s.a)(o,(function(){var e=this,t=e._self._c;return t("ClientOnly",[t("div",{staticClass:"theme-code-group"},[t("div",{staticClass:"theme-code-group__nav"},[t("ul",{staticClass:"theme-code-group__ul"},e._l(e.codeTabs,(function(a,o){return t("li",{key:a.title,staticClass:"theme-code-group__li"},[t("button",{staticClass:"theme-code-group__nav-tab",class:{"theme-code-group__nav-tab-active":o===e.activeCodeTabIndex},on:{click:function(t){return e.changeCodeTab(o)}}},[e._v("\n "+e._s(a.title)+"\n ")])])})),0)]),e._v(" "),e._t("default"),e._v(" "),e.codeTabs.length<1?t("pre",{staticClass:"pre-blank"},[e._v("// Make sure to add code blocks to your code group")]):e._e()],2)])}),[],!1,null,"6667a46d",null);t.default=c.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{259:function(e,t,a){},278:function(e,t,a){"use strict";a(259)},282:function(e,t,a){"use strict";a.r(t);var o={name:"CodeGroup",data:()=>({codeTabs:[],activeCodeTabIndex:-1}),watch:{activeCodeTabIndex(e){this.activateCodeTab(e)}},mounted(){this.loadTabs()},methods:{changeCodeTab(e){this.activeCodeTabIndex=e},loadTabs(){this.codeTabs=(this.$slots.default||[]).filter(e=>Boolean(e.componentOptions)).map((e,t)=>(""===e.componentOptions.propsData.active&&(this.activeCodeTabIndex=t),{title:e.componentOptions.propsData.title,elm:e.elm})),-1===this.activeCodeTabIndex&&this.codeTabs.length>0&&(this.activeCodeTabIndex=0),this.activateCodeTab(0)},activateCodeTab(e){this.codeTabs.forEach(e=>{e.elm&&e.elm.classList.remove("theme-code-block__active")}),this.codeTabs[e].elm&&this.codeTabs[e].elm.classList.add("theme-code-block__active")}}},s=(a(278),a(7)),c=Object(s.a)(o,(function(){var e=this,t=e._self._c;return t("ClientOnly",[t("div",{staticClass:"theme-code-group"},[t("div",{staticClass:"theme-code-group__nav"},[t("ul",{staticClass:"theme-code-group__ul"},e._l(e.codeTabs,(function(a,o){return t("li",{key:a.title,staticClass:"theme-code-group__li"},[t("button",{staticClass:"theme-code-group__nav-tab",class:{"theme-code-group__nav-tab-active":o===e.activeCodeTabIndex},on:{click:function(t){return e.changeCodeTab(o)}}},[e._v("\n "+e._s(a.title)+"\n ")])])})),0)]),e._v(" "),e._t("default"),e._v(" "),e.codeTabs.length<1?t("pre",{staticClass:"pre-blank"},[e._v("// Make sure to add code blocks to your code group")]):e._e()],2)])}),[],!1,null,"6667a46d",null);t.default=c.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/7.498f78f2.js b/docs/assets/js/7.498f78f2.js new file mode 100644 index 0000000..5c7ac8f --- /dev/null +++ b/docs/assets/js/7.498f78f2.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{283:function(t,r,a){"use strict";a.r(r);var e=a(7),s=Object(e.a)({},(function(){var t=this,r=t._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h2",{attrs:{id:"🚀-安装"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#🚀-安装"}},[t._v("#")]),t._v(" 🚀 安装")]),t._v(" "),r("ul",[r("li",[r("p",[t._v("联机(推荐)")]),t._v(" "),r("div",{staticClass:"language-shell extra-class"},[r("pre",{pre:!0,attrs:{class:"language-shell"}},[r("code",[r("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("source")]),t._v(" "),r("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),r("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" "),r("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-L")]),t._v(" https://github.com/trojanpanel/install-script/raw/main/install_script.sh"),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),r("li",[r("p",[t._v("单机")]),t._v(" "),r("div",{staticClass:"language-shell extra-class"},[r("pre",{pre:!0,attrs:{class:"language-shell"}},[r("code",[r("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("source")]),t._v(" "),r("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),r("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" "),r("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-L")]),t._v(" https://github.com/trojanpanel/install-script/raw/main/install_script_standalone.sh"),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),r("li",[r("p",[r("a",{attrs:{href:"https://github.com/trojanpanel/install-script/tree/main/README_ZH.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("安装旧版本"),r("OutboundLink")],1)])])]),t._v(" "),r("h2",{attrs:{id:"✨-社区"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#✨-社区"}},[t._v("#")]),t._v(" ✨ 社区")]),t._v(" "),r("p",[t._v("Telegram 频道: "),r("a",{attrs:{href:"https://t.me/TrojanPanel",target:"_blank",rel:"noopener noreferrer"}},[t._v("Trojan Panel"),r("OutboundLink")],1)]),t._v(" "),r("h2",{attrs:{id:"🔍-报告缺陷与问题"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#🔍-报告缺陷与问题"}},[t._v("#")]),t._v(" 🔍 报告缺陷与问题")]),t._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/trojanpanel/install-script/issues",target:"_blank",rel:"noopener noreferrer"}},[t._v("Issues"),r("OutboundLink")],1)]),t._v(" "),r("h2",{attrs:{id:"💞-支持"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#💞-支持"}},[t._v("#")]),t._v(" 💞 支持")]),t._v(" "),r("ul",[r("li",[r("a",{attrs:{href:"https://github.com/trojan-gfw/trojan",target:"_blank",rel:"noopener noreferrer"}},[t._v("trojan"),r("OutboundLink")],1)]),t._v(" "),r("li",[r("a",{attrs:{href:"https://github.com/p4gefau1t/trojan-go",target:"_blank",rel:"noopener noreferrer"}},[t._v("trojan-go"),r("OutboundLink")],1)]),t._v(" "),r("li",[r("a",{attrs:{href:"https://github.com/XTLS/Xray-core",target:"_blank",rel:"noopener noreferrer"}},[t._v("Xray-core"),r("OutboundLink")],1)]),t._v(" "),r("li",[r("a",{attrs:{href:"https://github.com/HyNetwork/hysteria",target:"_blank",rel:"noopener noreferrer"}},[t._v("hysteria"),r("OutboundLink")],1)]),t._v(" "),r("li",[r("a",{attrs:{href:"https://github.com/klzgrad/naiveproxy",target:"_blank",rel:"noopener noreferrer"}},[t._v("naiveproxy"),r("OutboundLink")],1)])]),t._v(" "),r("h2",{attrs:{id:"🌟-star随时间变化"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#🌟-star随时间变化"}},[t._v("#")]),t._v(" 🌟 Star随时间变化")]),t._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/trojanpanel/install-script",target:"_blank",rel:"noopener noreferrer"}},[r("img",{attrs:{src:"https://starchart.cc/trojanpanel/install-script.svg",alt:"Stargazers over time"}}),r("OutboundLink")],1)])])}),[],!1,null,null,null);r.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/7.6abc4715.js b/docs/assets/js/7.6abc4715.js deleted file mode 100644 index 5cdce62..0000000 --- a/docs/assets/js/7.6abc4715.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{283:function(t,r,a){"use strict";a.r(r);var e=a(7),s=Object(e.a)({},(function(){var t=this,r=t._self._c;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h2",{attrs:{id:"🚀-安装"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#🚀-安装"}},[t._v("#")]),t._v(" 🚀 安装")]),t._v(" "),r("ol",[r("li",[r("p",[t._v("联机(推荐)")]),t._v(" "),r("div",{staticClass:"language-shell extra-class"},[r("pre",{pre:!0,attrs:{class:"language-shell"}},[r("code",[r("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("source")]),t._v(" "),r("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),r("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" "),r("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-L")]),t._v(" https://github.com/trojanpanel/install-script/raw/main/install_script.sh"),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),r("li",[r("p",[t._v("单机")]),t._v(" "),r("div",{staticClass:"language-shell extra-class"},[r("pre",{pre:!0,attrs:{class:"language-shell"}},[r("code",[r("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("source")]),t._v(" "),r("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),r("span",{pre:!0,attrs:{class:"token function"}},[t._v("curl")]),t._v(" "),r("span",{pre:!0,attrs:{class:"token parameter variable"}},[t._v("-L")]),t._v(" https://github.com/trojanpanel/install-script/raw/main/install_script_standalone.sh"),r("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])]),t._v(" "),r("li",[r("p",[r("a",{attrs:{href:"https://github.com/trojanpanel/install-script/tree/main/README_ZH.md",target:"_blank",rel:"noopener noreferrer"}},[t._v("安装旧版本"),r("OutboundLink")],1)])])]),t._v(" "),r("h2",{attrs:{id:"✨-community"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#✨-community"}},[t._v("#")]),t._v(" ✨ Community")]),t._v(" "),r("p",[t._v("Telegram 频道: "),r("a",{attrs:{href:"https://t.me/TrojanPanel",target:"_blank",rel:"noopener noreferrer"}},[t._v("Trojan Panel"),r("OutboundLink")],1)]),t._v(" "),r("h2",{attrs:{id:"🔍-报告缺陷与问题"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#🔍-报告缺陷与问题"}},[t._v("#")]),t._v(" 🔍 报告缺陷与问题")]),t._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/trojanpanel/install-script/issues",target:"_blank",rel:"noopener noreferrer"}},[t._v("Issues"),r("OutboundLink")],1)]),t._v(" "),r("h2",{attrs:{id:"💞-支持"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#💞-支持"}},[t._v("#")]),t._v(" 💞 支持")]),t._v(" "),r("ul",[r("li",[r("a",{attrs:{href:"https://github.com/trojan-gfw/trojan",target:"_blank",rel:"noopener noreferrer"}},[t._v("trojan"),r("OutboundLink")],1)]),t._v(" "),r("li",[r("a",{attrs:{href:"https://github.com/p4gefau1t/trojan-go",target:"_blank",rel:"noopener noreferrer"}},[t._v("trojan-go"),r("OutboundLink")],1)]),t._v(" "),r("li",[r("a",{attrs:{href:"https://github.com/XTLS/Xray-core",target:"_blank",rel:"noopener noreferrer"}},[t._v("Xray-core"),r("OutboundLink")],1)]),t._v(" "),r("li",[r("a",{attrs:{href:"https://github.com/HyNetwork/hysteria",target:"_blank",rel:"noopener noreferrer"}},[t._v("hysteria"),r("OutboundLink")],1)]),t._v(" "),r("li",[r("a",{attrs:{href:"https://github.com/klzgrad/naiveproxy",target:"_blank",rel:"noopener noreferrer"}},[t._v("naiveproxy"),r("OutboundLink")],1)])]),t._v(" "),r("h2",{attrs:{id:"🌟-star随时间变化"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#🌟-star随时间变化"}},[t._v("#")]),t._v(" 🌟 Star随时间变化")]),t._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/trojanpanel/install-script",target:"_blank",rel:"noopener noreferrer"}},[r("img",{attrs:{src:"https://starchart.cc/trojanpanel/install-script.svg",alt:"Stargazers over time"}}),r("OutboundLink")],1)])])}),[],!1,null,null,null);r.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/9.0328fc36.js b/docs/assets/js/9.f1536518.js similarity index 99% rename from docs/assets/js/9.0328fc36.js rename to docs/assets/js/9.f1536518.js index 4937927..8245f38 100644 --- a/docs/assets/js/9.0328fc36.js +++ b/docs/assets/js/9.f1536518.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{284:function(t,v,e){"use strict";e.r(v);var _=e(7),a=Object(_.a)({},(function(){var t=this,v=t._self._c;return v("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[v("h1",{attrs:{id:"更新日志"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#更新日志"}},[t._v("#")]),t._v(" 更新日志")]),t._v(" "),v("h2",{attrs:{id:"_2023-10-09-犼"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_2023-10-09-犼"}},[t._v("#")]),t._v(" 2023.10.09 犼"),v("Badge",{attrs:{type:"tip",text:"v2.2",vertical:"top"}})],1),t._v(" "),v("ol",[v("li",[t._v("feat: 升级Xray至v1.8.4")]),t._v(" "),v("li",[t._v("fix: 将英语作为第一支持的的语言")]),t._v(" "),v("li",[t._v("fix: 修复修改用户名重复的Bug")]),t._v(" "),v("li",[t._v("pref: 优化反代软件和证书的安装逻辑")])]),t._v(" "),v("h4",{attrs:{id:"版本对应关系"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#版本对应关系"}},[t._v("#")]),t._v(" 版本对应关系")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",{staticStyle:{"text-align":"center"}},[t._v("Install Script")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel UI")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel Core")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Core SDK")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Xray")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Go")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Hysteria")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Caddy(NaiveProxy)")])])]),t._v(" "),v("tbody",[v("tr",[v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.2.1")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.1.6")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.2.0")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.2.1")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v0.0.1")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.8.4")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v0.10.6")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.3.4")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.6.4")])])])]),t._v(" "),v("h2",{attrs:{id:"_2023-07-08-帝江"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_2023-07-08-帝江"}},[t._v("#")]),t._v(" 2023.07.08 帝江"),v("Badge",{attrs:{type:"tip",text:"v2.1",vertical:"top"}})],1),t._v(" "),v("ol",[v("li",[t._v("新增Nginx反代")]),t._v(" "),v("li",[t._v("新增Xray reality 移除xtls")]),t._v(" "),v("li",[t._v("新增修改用户名")]),t._v(" "),v("li",[t._v("新增验证码登录,增强账户安全")]),t._v(" "),v("li",[t._v("新增密码输入三次后账户锁定30分钟,增强账户安全")]),t._v(" "),v("li",[t._v("新增Hysteria混淆密码")]),t._v(" "),v("li",[t._v("新增vless reality随机生成publicKey/privateKey/shortIds/spiderX")]),t._v(" "),v("li",[t._v("新增验证码登录开启和关闭选项")]),t._v(" "),v("li",[t._v("新增批量创建账户和导出未使用账户")]),t._v(" "),v("li",[t._v("新增账户最后一次登录时间")]),t._v(" "),v("li",[t._v("新增Hysteria wechat-video")]),t._v(" "),v("li",[t._v("新增前端单独部署、更新、卸载")]),t._v(" "),v("li",[t._v("新增自定义前端指定后端的IP和端口")]),t._v(" "),v("li",[t._v("新增自定义后端IP和端口")]),t._v(" "),v("li",[t._v("新增自定义内核的IP和端口")]),t._v(" "),v("li",[t._v("新增不设置证书选项")]),t._v(" "),v("li",[t._v("新增将后端和内核配置文件夹挂载到宿主机")]),t._v(" "),v("li",[t._v("新增前端版本号")]),t._v(" "),v("li",[t._v("新增自定义后端的服务端口")]),t._v(" "),v("li",[t._v("新增自定义内核的服务端口")]),t._v(" "),v("li",[t._v("新增在线更换证书选项")]),t._v(" "),v("li",[t._v("新增忘记密码选项")]),t._v(" "),v("li",[t._v("新增节点优先级")]),t._v(" "),v("li",[t._v("新增管理员复制指定账户订阅地址")]),t._v(" "),v("li",[t._v("新增账户列表排序查询")]),t._v(" "),v("li",[t._v("新增Hysteria支持SNI 允许不安全 快速打开")]),t._v(" "),v("li",[t._v("修改证书文件目录至/tpdta/cert/")]),t._v(" "),v("li",[t._v("修改伪装Web目录至/tpdate/web/")]),t._v(" "),v("li",[t._v("修改用户和服务器导出csv格式修改为json,格式更加通用")]),t._v(" "),v("li",[t._v("修改Xray和Clash规则模板长度调整至10240")]),t._v(" "),v("li",[t._v("移除Xray trojan 流控选项")]),t._v(" "),v("li",[t._v("修复Shadowsocks加密方式名称")]),t._v(" "),v("li",[t._v("修复Xray Trojan传输层加密的问题")]),t._v(" "),v("li",[t._v("修复Copy URL失效的问题")]),t._v(" "),v("li",[t._v("修复后端和内核更新不用输入数据库和Redis等相关信息")]),t._v(" "),v("li",[t._v("修复docker compose部署文件")]),t._v(" "),v("li",[t._v("修复Clash模板字符串长度限制提升到102400")]),t._v(" "),v("li",[t._v("修复自动化更新数据结构未变化的问题")]),t._v(" "),v("li",[t._v("升级Xray至v1.8.0,升级Hysteria至v1.3.4")]),t._v(" "),v("li",[t._v("组件化开发重构前端节点模块代码,对后端和内核代码进行优化,错误处理和必要的资源释放")]),t._v(" "),v("li",[t._v("优化Clash订阅")]),t._v(" "),v("li",[t._v("优化Xray分享链接")]),t._v(" "),v("li",[t._v("优化服务器状态检测逻辑")]),t._v(" "),v("li",[t._v("优化Xray reality serverNames编辑确认效果")]),t._v(" "),v("li",[t._v("优化Caddy2故障检测")]),t._v(" "),v("li",[t._v("将锁换成分布式锁,支持部署多个后端")]),t._v(" "),v("li",[t._v("优化代码,并发处理,提升系统性能")])]),t._v(" "),v("h4",{attrs:{id:"版本对应关系-2"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#版本对应关系-2"}},[t._v("#")]),t._v(" 版本对应关系")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",{staticStyle:{"text-align":"center"}},[t._v("Install Script")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel UI")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel Core")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Core SDK")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Xray")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Go")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Hysteria")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Caddy(NaiveProxy)")])])]),t._v(" "),v("tbody",[v("tr",[v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.1.8")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.1.6")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.1.5")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.1.2")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v0.0.1")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.8.0")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v0.10.6")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.3.4")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.6.4")])])])]),t._v(" "),v("h2",{attrs:{id:"_2023-03-31-穷奇"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_2023-03-31-穷奇"}},[t._v("#")]),t._v(" 2023.03.31 穷奇"),v("Badge",{attrs:{type:"tip",text:"v2.0",vertical:"top"}})],1),t._v(" "),v("ol",[v("li",[t._v("新增自动化无损升级")]),t._v(" "),v("li",[t._v("新增Xray模板")]),t._v(" "),v("li",[t._v("新增Clash规则模板")]),t._v(" "),v("li",[t._v("新增节点详情")]),t._v(" "),v("li",[t._v("新增服务器详情")]),t._v(" "),v("li",[t._v("新增波斯语")]),t._v(" "),v("li",[t._v("新增节点守护进程")]),t._v(" "),v("li",[t._v("新增Shadowsocks协议")]),t._v(" "),v("li",[t._v("新增流控设置")]),t._v(" "),v("li",[t._v("新增Xray tcp+tls自定义回落")]),t._v(" "),v("li",[t._v("新增版本查询功能")]),t._v(" "),v("li",[t._v("新增自定义面板与节点的通信端口")]),t._v(" "),v("li",[t._v("新增自定义Caddy2端口")]),t._v(" "),v("li",[t._v("新增旧版本安装")]),t._v(" "),v("li",[t._v("新增服务器选项框跳转到服务器列表")]),t._v(" "),v("li",[t._v("新增SQLite作为持久化")]),t._v(" "),v("li",[t._v("新增服务器管理TP Core版本显示")]),t._v(" "),v("li",[t._v("新增用户导入和导出")]),t._v(" "),v("li",[t._v("新增服务器导入和导出")]),t._v(" "),v("li",[t._v("新增自定义系统名称")]),t._v(" "),v("li",[t._v("新增自定义Logo")]),t._v(" "),v("li",[t._v("设置Docker日志文件大小最大值为50m")]),t._v(" "),v("li",[t._v("设置故障监测默认日志查询级别为error")]),t._v(" "),v("li",[t._v("设置MariaDB数据库默认编码为utf8mb4")]),t._v(" "),v("li",[t._v("设置Nginx支持TLSv1.3")]),t._v(" "),v("li",[t._v("修复一些显示错误和控制台报错")]),t._v(" "),v("li",[t._v("修复Clash订阅地址 Hysteria连接密码字段错误")]),t._v(" "),v("li",[t._v("修复弹窗显示异常的Bug")]),t._v(" "),v("li",[t._v("优化系统归档和更新")]),t._v(" "),v("li",[t._v("优化节点状态展示")]),t._v(" "),v("li",[t._v("优化服务器和节点的状态检测逻辑")]),t._v(" "),v("li",[t._v("升级Xray至v1.7.5,升级Hysteria至v1.3.3,升级Caddy(NaiveProxy)至v2.6.4")])]),t._v(" "),v("h4",{attrs:{id:"版本对应关系-3"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#版本对应关系-3"}},[t._v("#")]),t._v(" 版本对应关系")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel Core")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Xray")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Go")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Hysteria")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Caddy(NaiveProxy)")])])]),t._v(" "),v("tbody",[v("tr",[v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.0.5")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.0.4")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.7.5")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v0.10.6")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.3.3")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.6.4")])])])]),t._v(" "),v("h2",{attrs:{id:"_2022-12-29-麒麟"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_2022-12-29-麒麟"}},[t._v("#")]),t._v(" 2022.12.29 麒麟"),v("Badge",{attrs:{type:"tip",text:"v1.3",vertical:"top"}})],1),t._v(" "),v("ol",[v("li",[t._v("新增NaiveProxy节点类型")]),t._v(" "),v("li",[t._v("新增自定义数据库和Redis端口")]),t._v(" "),v("li",[t._v("新增重设用户下载和上传流量")]),t._v(" "),v("li",[t._v("新增关闭流量排行")]),t._v(" "),v("li",[t._v("新增服务器管理")]),t._v(" "),v("li",[t._v("新增韩语,更彻底的国际化")]),t._v(" "),v("li",[t._v("新增服务器信息显示")]),t._v(" "),v("li",[t._v("新增一键安装NaiveProxy单机版")]),t._v(" "),v("li",[t._v("新增Trojan Panel前端是否开启https选项")]),t._v(" "),v("li",[t._v("新增实时修改Trojan Panel前端端口")]),t._v(" "),v("li",[t._v("修复Trojan-Go复制URL的Bug")]),t._v(" "),v("li",[t._v("修复Xray tcp+tls 回落地址无法访问")]),t._v(" "),v("li",[t._v("修复Hysteria单客户端最大上传/下载速度上限为9999999999")]),t._v(" "),v("li",[t._v("优化订阅链接,支持导出Hysteria")]),t._v(" "),v("li",[t._v("升级Xray至v1.6.1,升级Hysteria至v1.3.2")]),t._v(" "),v("li",[t._v("使用Go 1.19.4编译")]),t._v(" "),v("li",[t._v("将一键安装脚本中Caddy升级至v2.6.2")]),t._v(" "),v("li",[t._v("优化一键安装脚本故障监测")]),t._v(" "),v("li",[t._v("新增一键安装脚本自动化升级")]),t._v(" "),v("li",[t._v("移除一键安装脚本本地IP检测")])]),t._v(" "),v("h4",{attrs:{id:"版本对应关系-4"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#版本对应关系-4"}},[t._v("#")]),t._v(" 版本对应关系")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel Core")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Xray")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Go")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Hysteria")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Caddy(NaiveProxy)")])])]),t._v(" "),v("tbody",[v("tr",[v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.3.1")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.3.2")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.6.1")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v0.10.6")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.3.2")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.6.2")])])])]),t._v(" "),v("div",{staticClass:"custom-block danger"},[v("p",{staticClass:"custom-block-title"},[t._v("注意")]),t._v(" "),v("p",[t._v("目前支持的NaiveProxy处于测试阶段,只支持用户认证不支持流量统计。")])]),t._v(" "),v("h2",{attrs:{id:"_2022-11-08-饕餮"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_2022-11-08-饕餮"}},[t._v("#")]),t._v(" 2022.11.08 饕餮"),v("Badge",{attrs:{type:"tip",text:"v1.2",vertical:"top"}})],1),t._v(" "),v("ol",[v("li",[t._v("新增一键安装Trojan Panel Core,远程自动化部署和管理节点")]),t._v(" "),v("li",[t._v("新增自定义Trojan Panel前端端口")]),t._v(" "),v("li",[t._v("新增一键刷新Redis缓存")]),t._v(" "),v("li",[t._v("新增Xray节点类型")]),t._v(" "),v("li",[t._v("新增Clash订阅")]),t._v(" "),v("li",[t._v("修改用户密码加密方式")]),t._v(" "),v("li",[t._v("修改Docker网络模式为Host")]),t._v(" "),v("li",[t._v("修改日志输出级别")]),t._v(" "),v("li",[t._v("将单机版一键安装脚本从主脚本中分离")]),t._v(" "),v("li",[t._v("优化UI界面")])]),t._v(" "),v("h4",{attrs:{id:"版本对应关系-5"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#版本对应关系-5"}},[t._v("#")]),t._v(" 版本对应关系")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel Core")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Xray")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan-Go")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Hysteria")])])]),t._v(" "),v("tbody",[v("tr",[v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.2.0")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.2.0")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.6.0")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v0.10.6")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.2.1")])])])]),t._v(" "),v("h2",{attrs:{id:"_2022-05-16-伏羲"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_2022-05-16-伏羲"}},[t._v("#")]),t._v(" 2022.05.16 伏羲"),v("Badge",{attrs:{type:"tip",text:"v1.1",vertical:"top"}})],1),t._v(" "),v("ol",[v("li",[t._v("新增一键安装Redis")]),t._v(" "),v("li",[t._v("新增一键安装Hysteria")]),t._v(" "),v("li",[t._v("新增黑名单管理")]),t._v(" "),v("li",[t._v("新增邮件管理")]),t._v(" "),v("li",[t._v("新增流量排行")]),t._v(" "),v("li",[t._v("新增国际化,中/英文切换")]),t._v(" "),v("li",[t._v("新增系统字体大小设置")]),t._v(" "),v("li",[t._v("新增全屏显示")]),t._v(" "),v("li",[t._v("新增一键卸载Caddy TLS")]),t._v(" "),v("li",[t._v("新增一键卸载MariaDB")]),t._v(" "),v("li",[t._v("新增一键卸载Redis")]),t._v(" "),v("li",[t._v("新增一键故障检测")]),t._v(" "),v("li",[t._v("移除Trojan GFW,支持Hysteria")]),t._v(" "),v("li",[t._v("优化Trojan-Go,新增Websocket+SS配置")]),t._v(" "),v("li",[t._v("优化Trojan-Go节点生成的URL")]),t._v(" "),v("li",[t._v("优化Hysteria,新增单客户端最大上传/下载速度")]),t._v(" "),v("li",[t._v("引入Redis作为缓存")]),t._v(" "),v("li",[t._v("支持arm64架构")]),t._v(" "),v("li",[t._v("使用Docker Hub镜像:"),v("a",{attrs:{href:"https://hub.docker.com/r/jonssonyan/trojan-panel-ui",target:"_blank",rel:"noopener noreferrer"}},[t._v("trojan-panel-ui"),v("OutboundLink")],1),t._v("\n& "),v("a",{attrs:{href:"https://hub.docker.com/r/jonssonyan/trojan-panel",target:"_blank",rel:"noopener noreferrer"}},[t._v("trojan-panel"),v("OutboundLink")],1)])]),t._v(" "),v("div",{staticClass:"custom-block danger"},[v("p",{staticClass:"custom-block-title"},[t._v("注意")]),t._v(" "),v("p",[t._v("目前支持的Hysteria处于测试阶段,只支持用户认证不支持流量统计。")])]),t._v(" "),v("h2",{attrs:{id:"_2022-02-10-盘古"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_2022-02-10-盘古"}},[t._v("#")]),t._v(" 2022.02.10 盘古"),v("Badge",{attrs:{type:"tip",text:"v1.0",vertical:"top"}})],1),t._v(" "),v("p",[t._v("Hello Trojan Panel")])])}),[],!1,null,null,null);v.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{292:function(t,v,e){"use strict";e.r(v);var _=e(7),a=Object(_.a)({},(function(){var t=this,v=t._self._c;return v("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[v("h1",{attrs:{id:"更新日志"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#更新日志"}},[t._v("#")]),t._v(" 更新日志")]),t._v(" "),v("h2",{attrs:{id:"_2023-10-09-犼"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_2023-10-09-犼"}},[t._v("#")]),t._v(" 2023.10.09 犼"),v("Badge",{attrs:{type:"tip",text:"v2.2",vertical:"top"}})],1),t._v(" "),v("ol",[v("li",[t._v("feat: 升级Xray至v1.8.4")]),t._v(" "),v("li",[t._v("fix: 将英语作为第一支持的的语言")]),t._v(" "),v("li",[t._v("fix: 修复修改用户名重复的Bug")]),t._v(" "),v("li",[t._v("pref: 优化反代软件和证书的安装逻辑")])]),t._v(" "),v("h4",{attrs:{id:"版本对应关系"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#版本对应关系"}},[t._v("#")]),t._v(" 版本对应关系")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",{staticStyle:{"text-align":"center"}},[t._v("Install Script")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel UI")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel Core")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Core SDK")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Xray")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Go")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Hysteria")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Caddy(NaiveProxy)")])])]),t._v(" "),v("tbody",[v("tr",[v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.2.1")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.1.6")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.2.0")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.2.1")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v0.0.1")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.8.4")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v0.10.6")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.3.4")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.6.4")])])])]),t._v(" "),v("h2",{attrs:{id:"_2023-07-08-帝江"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_2023-07-08-帝江"}},[t._v("#")]),t._v(" 2023.07.08 帝江"),v("Badge",{attrs:{type:"tip",text:"v2.1",vertical:"top"}})],1),t._v(" "),v("ol",[v("li",[t._v("新增Nginx反代")]),t._v(" "),v("li",[t._v("新增Xray reality 移除xtls")]),t._v(" "),v("li",[t._v("新增修改用户名")]),t._v(" "),v("li",[t._v("新增验证码登录,增强账户安全")]),t._v(" "),v("li",[t._v("新增密码输入三次后账户锁定30分钟,增强账户安全")]),t._v(" "),v("li",[t._v("新增Hysteria混淆密码")]),t._v(" "),v("li",[t._v("新增vless reality随机生成publicKey/privateKey/shortIds/spiderX")]),t._v(" "),v("li",[t._v("新增验证码登录开启和关闭选项")]),t._v(" "),v("li",[t._v("新增批量创建账户和导出未使用账户")]),t._v(" "),v("li",[t._v("新增账户最后一次登录时间")]),t._v(" "),v("li",[t._v("新增Hysteria wechat-video")]),t._v(" "),v("li",[t._v("新增前端单独部署、更新、卸载")]),t._v(" "),v("li",[t._v("新增自定义前端指定后端的IP和端口")]),t._v(" "),v("li",[t._v("新增自定义后端IP和端口")]),t._v(" "),v("li",[t._v("新增自定义内核的IP和端口")]),t._v(" "),v("li",[t._v("新增不设置证书选项")]),t._v(" "),v("li",[t._v("新增将后端和内核配置文件夹挂载到宿主机")]),t._v(" "),v("li",[t._v("新增前端版本号")]),t._v(" "),v("li",[t._v("新增自定义后端的服务端口")]),t._v(" "),v("li",[t._v("新增自定义内核的服务端口")]),t._v(" "),v("li",[t._v("新增在线更换证书选项")]),t._v(" "),v("li",[t._v("新增忘记密码选项")]),t._v(" "),v("li",[t._v("新增节点优先级")]),t._v(" "),v("li",[t._v("新增管理员复制指定账户订阅地址")]),t._v(" "),v("li",[t._v("新增账户列表排序查询")]),t._v(" "),v("li",[t._v("新增Hysteria支持SNI 允许不安全 快速打开")]),t._v(" "),v("li",[t._v("修改证书文件目录至/tpdta/cert/")]),t._v(" "),v("li",[t._v("修改伪装Web目录至/tpdate/web/")]),t._v(" "),v("li",[t._v("修改用户和服务器导出csv格式修改为json,格式更加通用")]),t._v(" "),v("li",[t._v("修改Xray和Clash规则模板长度调整至10240")]),t._v(" "),v("li",[t._v("移除Xray trojan 流控选项")]),t._v(" "),v("li",[t._v("修复Shadowsocks加密方式名称")]),t._v(" "),v("li",[t._v("修复Xray Trojan传输层加密的问题")]),t._v(" "),v("li",[t._v("修复Copy URL失效的问题")]),t._v(" "),v("li",[t._v("修复后端和内核更新不用输入数据库和Redis等相关信息")]),t._v(" "),v("li",[t._v("修复docker compose部署文件")]),t._v(" "),v("li",[t._v("修复Clash模板字符串长度限制提升到102400")]),t._v(" "),v("li",[t._v("修复自动化更新数据结构未变化的问题")]),t._v(" "),v("li",[t._v("升级Xray至v1.8.0,升级Hysteria至v1.3.4")]),t._v(" "),v("li",[t._v("组件化开发重构前端节点模块代码,对后端和内核代码进行优化,错误处理和必要的资源释放")]),t._v(" "),v("li",[t._v("优化Clash订阅")]),t._v(" "),v("li",[t._v("优化Xray分享链接")]),t._v(" "),v("li",[t._v("优化服务器状态检测逻辑")]),t._v(" "),v("li",[t._v("优化Xray reality serverNames编辑确认效果")]),t._v(" "),v("li",[t._v("优化Caddy2故障检测")]),t._v(" "),v("li",[t._v("将锁换成分布式锁,支持部署多个后端")]),t._v(" "),v("li",[t._v("优化代码,并发处理,提升系统性能")])]),t._v(" "),v("h4",{attrs:{id:"版本对应关系-2"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#版本对应关系-2"}},[t._v("#")]),t._v(" 版本对应关系")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",{staticStyle:{"text-align":"center"}},[t._v("Install Script")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel UI")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel Core")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Core SDK")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Xray")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Go")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Hysteria")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Caddy(NaiveProxy)")])])]),t._v(" "),v("tbody",[v("tr",[v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.1.8")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.1.6")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.1.5")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.1.2")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v0.0.1")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.8.0")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v0.10.6")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.3.4")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.6.4")])])])]),t._v(" "),v("h2",{attrs:{id:"_2023-03-31-穷奇"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_2023-03-31-穷奇"}},[t._v("#")]),t._v(" 2023.03.31 穷奇"),v("Badge",{attrs:{type:"tip",text:"v2.0",vertical:"top"}})],1),t._v(" "),v("ol",[v("li",[t._v("新增自动化无损升级")]),t._v(" "),v("li",[t._v("新增Xray模板")]),t._v(" "),v("li",[t._v("新增Clash规则模板")]),t._v(" "),v("li",[t._v("新增节点详情")]),t._v(" "),v("li",[t._v("新增服务器详情")]),t._v(" "),v("li",[t._v("新增波斯语")]),t._v(" "),v("li",[t._v("新增节点守护进程")]),t._v(" "),v("li",[t._v("新增Shadowsocks协议")]),t._v(" "),v("li",[t._v("新增流控设置")]),t._v(" "),v("li",[t._v("新增Xray tcp+tls自定义回落")]),t._v(" "),v("li",[t._v("新增版本查询功能")]),t._v(" "),v("li",[t._v("新增自定义面板与节点的通信端口")]),t._v(" "),v("li",[t._v("新增自定义Caddy2端口")]),t._v(" "),v("li",[t._v("新增旧版本安装")]),t._v(" "),v("li",[t._v("新增服务器选项框跳转到服务器列表")]),t._v(" "),v("li",[t._v("新增SQLite作为持久化")]),t._v(" "),v("li",[t._v("新增服务器管理TP Core版本显示")]),t._v(" "),v("li",[t._v("新增用户导入和导出")]),t._v(" "),v("li",[t._v("新增服务器导入和导出")]),t._v(" "),v("li",[t._v("新增自定义系统名称")]),t._v(" "),v("li",[t._v("新增自定义Logo")]),t._v(" "),v("li",[t._v("设置Docker日志文件大小最大值为50m")]),t._v(" "),v("li",[t._v("设置故障监测默认日志查询级别为error")]),t._v(" "),v("li",[t._v("设置MariaDB数据库默认编码为utf8mb4")]),t._v(" "),v("li",[t._v("设置Nginx支持TLSv1.3")]),t._v(" "),v("li",[t._v("修复一些显示错误和控制台报错")]),t._v(" "),v("li",[t._v("修复Clash订阅地址 Hysteria连接密码字段错误")]),t._v(" "),v("li",[t._v("修复弹窗显示异常的Bug")]),t._v(" "),v("li",[t._v("优化系统归档和更新")]),t._v(" "),v("li",[t._v("优化节点状态展示")]),t._v(" "),v("li",[t._v("优化服务器和节点的状态检测逻辑")]),t._v(" "),v("li",[t._v("升级Xray至v1.7.5,升级Hysteria至v1.3.3,升级Caddy(NaiveProxy)至v2.6.4")])]),t._v(" "),v("h4",{attrs:{id:"版本对应关系-3"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#版本对应关系-3"}},[t._v("#")]),t._v(" 版本对应关系")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel Core")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Xray")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Go")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Hysteria")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Caddy(NaiveProxy)")])])]),t._v(" "),v("tbody",[v("tr",[v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.0.5")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.0.4")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.7.5")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v0.10.6")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.3.3")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.6.4")])])])]),t._v(" "),v("h2",{attrs:{id:"_2022-12-29-麒麟"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_2022-12-29-麒麟"}},[t._v("#")]),t._v(" 2022.12.29 麒麟"),v("Badge",{attrs:{type:"tip",text:"v1.3",vertical:"top"}})],1),t._v(" "),v("ol",[v("li",[t._v("新增NaiveProxy节点类型")]),t._v(" "),v("li",[t._v("新增自定义数据库和Redis端口")]),t._v(" "),v("li",[t._v("新增重设用户下载和上传流量")]),t._v(" "),v("li",[t._v("新增关闭流量排行")]),t._v(" "),v("li",[t._v("新增服务器管理")]),t._v(" "),v("li",[t._v("新增韩语,更彻底的国际化")]),t._v(" "),v("li",[t._v("新增服务器信息显示")]),t._v(" "),v("li",[t._v("新增一键安装NaiveProxy单机版")]),t._v(" "),v("li",[t._v("新增Trojan Panel前端是否开启https选项")]),t._v(" "),v("li",[t._v("新增实时修改Trojan Panel前端端口")]),t._v(" "),v("li",[t._v("修复Trojan-Go复制URL的Bug")]),t._v(" "),v("li",[t._v("修复Xray tcp+tls 回落地址无法访问")]),t._v(" "),v("li",[t._v("修复Hysteria单客户端最大上传/下载速度上限为9999999999")]),t._v(" "),v("li",[t._v("优化订阅链接,支持导出Hysteria")]),t._v(" "),v("li",[t._v("升级Xray至v1.6.1,升级Hysteria至v1.3.2")]),t._v(" "),v("li",[t._v("使用Go 1.19.4编译")]),t._v(" "),v("li",[t._v("将一键安装脚本中Caddy升级至v2.6.2")]),t._v(" "),v("li",[t._v("优化一键安装脚本故障监测")]),t._v(" "),v("li",[t._v("新增一键安装脚本自动化升级")]),t._v(" "),v("li",[t._v("移除一键安装脚本本地IP检测")])]),t._v(" "),v("h4",{attrs:{id:"版本对应关系-4"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#版本对应关系-4"}},[t._v("#")]),t._v(" 版本对应关系")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel Core")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Xray")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Go")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Hysteria")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Caddy(NaiveProxy)")])])]),t._v(" "),v("tbody",[v("tr",[v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.3.1")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.3.2")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.6.1")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v0.10.6")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.3.2")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v2.6.2")])])])]),t._v(" "),v("div",{staticClass:"custom-block danger"},[v("p",{staticClass:"custom-block-title"},[t._v("注意")]),t._v(" "),v("p",[t._v("目前支持的NaiveProxy处于测试阶段,只支持用户认证不支持流量统计。")])]),t._v(" "),v("h2",{attrs:{id:"_2022-11-08-饕餮"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_2022-11-08-饕餮"}},[t._v("#")]),t._v(" 2022.11.08 饕餮"),v("Badge",{attrs:{type:"tip",text:"v1.2",vertical:"top"}})],1),t._v(" "),v("ol",[v("li",[t._v("新增一键安装Trojan Panel Core,远程自动化部署和管理节点")]),t._v(" "),v("li",[t._v("新增自定义Trojan Panel前端端口")]),t._v(" "),v("li",[t._v("新增一键刷新Redis缓存")]),t._v(" "),v("li",[t._v("新增Xray节点类型")]),t._v(" "),v("li",[t._v("新增Clash订阅")]),t._v(" "),v("li",[t._v("修改用户密码加密方式")]),t._v(" "),v("li",[t._v("修改Docker网络模式为Host")]),t._v(" "),v("li",[t._v("修改日志输出级别")]),t._v(" "),v("li",[t._v("将单机版一键安装脚本从主脚本中分离")]),t._v(" "),v("li",[t._v("优化UI界面")])]),t._v(" "),v("h4",{attrs:{id:"版本对应关系-5"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#版本对应关系-5"}},[t._v("#")]),t._v(" 版本对应关系")]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan Panel Core")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Xray")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Trojan-Go")]),t._v(" "),v("th",{staticStyle:{"text-align":"center"}},[t._v("Hysteria")])])]),t._v(" "),v("tbody",[v("tr",[v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.2.0")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.2.0")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.6.0")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v0.10.6")]),t._v(" "),v("td",{staticStyle:{"text-align":"center"}},[t._v("v1.2.1")])])])]),t._v(" "),v("h2",{attrs:{id:"_2022-05-16-伏羲"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_2022-05-16-伏羲"}},[t._v("#")]),t._v(" 2022.05.16 伏羲"),v("Badge",{attrs:{type:"tip",text:"v1.1",vertical:"top"}})],1),t._v(" "),v("ol",[v("li",[t._v("新增一键安装Redis")]),t._v(" "),v("li",[t._v("新增一键安装Hysteria")]),t._v(" "),v("li",[t._v("新增黑名单管理")]),t._v(" "),v("li",[t._v("新增邮件管理")]),t._v(" "),v("li",[t._v("新增流量排行")]),t._v(" "),v("li",[t._v("新增国际化,中/英文切换")]),t._v(" "),v("li",[t._v("新增系统字体大小设置")]),t._v(" "),v("li",[t._v("新增全屏显示")]),t._v(" "),v("li",[t._v("新增一键卸载Caddy TLS")]),t._v(" "),v("li",[t._v("新增一键卸载MariaDB")]),t._v(" "),v("li",[t._v("新增一键卸载Redis")]),t._v(" "),v("li",[t._v("新增一键故障检测")]),t._v(" "),v("li",[t._v("移除Trojan GFW,支持Hysteria")]),t._v(" "),v("li",[t._v("优化Trojan-Go,新增Websocket+SS配置")]),t._v(" "),v("li",[t._v("优化Trojan-Go节点生成的URL")]),t._v(" "),v("li",[t._v("优化Hysteria,新增单客户端最大上传/下载速度")]),t._v(" "),v("li",[t._v("引入Redis作为缓存")]),t._v(" "),v("li",[t._v("支持arm64架构")]),t._v(" "),v("li",[t._v("使用Docker Hub镜像:"),v("a",{attrs:{href:"https://hub.docker.com/r/jonssonyan/trojan-panel-ui",target:"_blank",rel:"noopener noreferrer"}},[t._v("trojan-panel-ui"),v("OutboundLink")],1),t._v("\n& "),v("a",{attrs:{href:"https://hub.docker.com/r/jonssonyan/trojan-panel",target:"_blank",rel:"noopener noreferrer"}},[t._v("trojan-panel"),v("OutboundLink")],1)])]),t._v(" "),v("div",{staticClass:"custom-block danger"},[v("p",{staticClass:"custom-block-title"},[t._v("注意")]),t._v(" "),v("p",[t._v("目前支持的Hysteria处于测试阶段,只支持用户认证不支持流量统计。")])]),t._v(" "),v("h2",{attrs:{id:"_2022-02-10-盘古"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#_2022-02-10-盘古"}},[t._v("#")]),t._v(" 2022.02.10 盘古"),v("Badge",{attrs:{type:"tip",text:"v1.0",vertical:"top"}})],1),t._v(" "),v("p",[t._v("Hello Trojan Panel")])])}),[],!1,null,null,null);v.default=a.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/app.e3085957.js b/docs/assets/js/app.13fc439f.js similarity index 87% rename from docs/assets/js/app.e3085957.js rename to docs/assets/js/app.13fc439f.js index dcf6a9a..b450fd0 100644 --- a/docs/assets/js/app.e3085957.js +++ b/docs/assets/js/app.13fc439f.js @@ -1,4 +1,4 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,a,s=e[0],u=e[1],c=e[2],f=0,p=[];f=e||n<0||m&&t-c>=i}function x(){var t=d();if(_(t))return w(t);s=setTimeout(x,function(t){var n=e-(t-u);return m?p(n,i-(t-c)):n}(t))}function w(t){return s=void 0,g&&r?y(t):(r=o=void 0,a)}function k(){var t=d(),n=_(t);if(r=arguments,o=this,u=t,n){if(void 0===s)return b(u);if(m)return s=setTimeout(x,e),y(u)}return void 0===s&&(s=setTimeout(x,e)),a}return e=v(e)||0,h(n)&&(l=!!n.leading,i=(m="maxWait"in n)?f(v(n.maxWait)||0,e):i,g="trailing"in n?!!n.trailing:g),k.cancel=function(){void 0!==s&&clearTimeout(s),c=0,r=u=o=s=void 0},k.flush=function(){return void 0===s?a:w(d())},k}},function(t,e,n){var r,o; +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,a,s=e[0],u=e[1],c=e[2],f=0,p=[];f=e||n<0||m&&t-c>=i}function x(){var t=d();if(_(t))return w(t);s=setTimeout(x,function(t){var n=e-(t-u);return m?p(n,i-(t-c)):n}(t))}function w(t){return s=void 0,g&&r?y(t):(r=o=void 0,a)}function k(){var t=d(),n=_(t);if(r=arguments,o=this,u=t,n){if(void 0===s)return b(u);if(m)return s=setTimeout(x,e),y(u)}return void 0===s&&(s=setTimeout(x,e)),a}return e=v(e)||0,h(n)&&(l=!!n.leading,i=(m="maxWait"in n)?f(v(n.maxWait)||0,e):i,g="trailing"in n?!!n.trailing:g),k.cancel=function(){void 0!==s&&clearTimeout(s),c=0,r=u=o=s=void 0},k.flush=function(){return void 0===s?a:w(d())},k}},function(t,e,n){var r,o; /* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress * @license MIT */void 0===(o="function"==typeof(r=function(){var t,e,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function o(t,e,n){return tn?n:t}function i(t){return 100*(-1+t)}n.configure=function(t){var e,n;for(e in t)void 0!==(n=t[e])&&t.hasOwnProperty(e)&&(r[e]=n);return this},n.status=null,n.set=function(t){var e=n.isStarted();t=o(t,r.minimum,1),n.status=1===t?null:t;var u=n.render(!e),c=u.querySelector(r.barSelector),l=r.speed,f=r.easing;return u.offsetWidth,a((function(e){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(c,function(t,e,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+i(t)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+i(t)+"%,0)"}:{"margin-left":i(t)+"%"}).transition="all "+e+"ms "+n,o}(t,l,f)),1===t?(s(u,{transition:"none",opacity:1}),u.offsetWidth,setTimeout((function(){s(u,{transition:"all "+l+"ms linear",opacity:0}),setTimeout((function(){n.remove(),e()}),l)}),l)):setTimeout(e,l)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var t=function(){setTimeout((function(){n.status&&(n.trickle(),t())}),r.trickleSpeed)};return r.trickle&&t(),this},n.done=function(t){return t||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(t){var e=n.status;return e?("number"!=typeof t&&(t=(1-e)*o(Math.random()*e,.1,.95)),e=o(e+t,0,.994),n.set(e)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},t=0,e=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===e&&n.start(),t++,e++,r.always((function(){0==--e?(t=0,n.done()):n.set((t-e)/t)})),this):this},n.render=function(t){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var e=document.createElement("div");e.id="nprogress",e.innerHTML=r.template;var o,a=e.querySelector(r.barSelector),u=t?"-100":i(n.status||0),l=document.querySelector(r.parent);return s(a,{transition:"all 0 linear",transform:"translate3d("+u+"%,0,0)"}),r.showSpinner||(o=e.querySelector(r.spinnerSelector))&&p(o),l!=document.body&&c(l,"nprogress-custom-parent"),l.appendChild(e),e},n.remove=function(){l(document.documentElement,"nprogress-busy"),l(document.querySelector(r.parent),"nprogress-custom-parent");var t=document.getElementById("nprogress");t&&p(t)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var t=document.body.style,e="WebkitTransform"in t?"Webkit":"MozTransform"in t?"Moz":"msTransform"in t?"ms":"OTransform"in t?"O":"";return e+"Perspective"in t?"translate3d":e+"Transform"in t?"translate":"margin"};var a=function(){var t=[];function e(){var n=t.shift();n&&n(e)}return function(n){t.push(n),1==t.length&&e()}}(),s=function(){var t=["Webkit","O","Moz","ms"],e={};function n(n){return n=n.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(t,e){return e.toUpperCase()})),e[n]||(e[n]=function(e){var n=document.body.style;if(e in n)return e;for(var r,o=t.length,i=e.charAt(0).toUpperCase()+e.slice(1);o--;)if((r=t[o]+i)in n)return r;return e}(n))}function r(t,e,r){e=n(e),t.style[e]=r}return function(t,e){var n,o,i=arguments;if(2==i.length)for(n in e)void 0!==(o=e[n])&&e.hasOwnProperty(n)&&r(t,n,o);else r(t,i[1],i[2])}}();function u(t,e){return("string"==typeof t?t:f(t)).indexOf(" "+e+" ")>=0}function c(t,e){var n=f(t),r=n+e;u(n,e)||(t.className=r.substring(1))}function l(t,e){var n,r=f(t);u(t,e)&&(n=r.replace(" "+e+" "," "),t.className=n.substring(1,n.length-1))}function f(t){return(" "+(t.className||"")+" ").replace(/\s+/gi," ")}function p(t){t&&t.parentNode&&t.parentNode.removeChild(t)}return n})?r.call(e,n,e,t):r)||(t.exports=o)},function(t,e,n){var r=n(1),o=n(45).f,i=n(16),a=n(105),s=n(32),u=n(62),c=n(121);t.exports=function(t,e){var n,l,f,p,d,h=t.target,v=t.global,m=t.stat;if(n=v?r:m?r[h]||s(h,{}):(r[h]||{}).prototype)for(l in e){if(p=e[l],f=t.dontCallGetSet?(d=o(n,l))&&d.value:n[l],!c(v?l:h+(m?".":"#")+l,t.forced)&&void 0!==f){if(typeof p==typeof f)continue;u(p,f)}(t.sham||f&&f.sham)&&i(p,"sham",!0),a(n,l,p,t)}}},function(t,e,n){var r=n(27),o=Function.prototype.call;t.exports=r?o.bind(o):function(){return o.apply(o,arguments)}},function(t,e,n){var r=n(2);t.exports=!r((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){var r=n(46),o=n(47);t.exports=function(t){return r(o(t))}},function(t,e,n){var r=n(1),o=n(57),i=n(8),a=n(59),s=n(54),u=n(53),c=o("wks"),l=r.Symbol,f=l&&l.for,p=u?l:l&&l.withoutSetter||a;t.exports=function(t){if(!i(c,t)||!s&&"string"!=typeof c[t]){var e="Symbol."+t;s&&i(l,t)?c[t]=l[t]:c[t]=u&&f?f(e):p(e)}return c[t]}},function(t,e,n){var r=n(1),o=n(32),i=r["__core-js_shared__"]||o("__core-js_shared__",{});t.exports=i},function(t,e,n){var r=n(1),o=Object.defineProperty;t.exports=function(t,e){try{o(r,t,{value:e,configurable:!0,writable:!0})}catch(n){r[t]=e}return e}},function(t,e,n){var r=n(47),o=Object;t.exports=function(t){return o(r(t))}},function(t,e,n){var r=n(9),o=String,i=TypeError;t.exports=function(t){if(r(t))return t;throw i(o(t)+" is not an object")}},function(t,e,n){var r=n(118);t.exports=function(t){return r(t.length)}},function(t,e,n){var r=n(143),o=n(11),i=Object.prototype,a=i.hasOwnProperty,s=i.propertyIsEnumerable,u=r(function(){return arguments}())?r:function(t){return o(t)&&a.call(t,"callee")&&!s.call(t,"callee")};t.exports=u},function(t,e,n){var r=n(10)(n(6),"Map");t.exports=r},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,n){var r=n(163),o=n(170),i=n(172),a=n(173),s=n(174);function u(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e-1&&t%1==0&&t<=9007199254740991}},function(t,e,n){var r=n(4),o=n(43),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;t.exports=function(t,e){if(r(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!o(t))||(a.test(t)||!i.test(t)||null!=e&&t in Object(e))}},function(t,e,n){var r=n(12),o=n(11);t.exports=function(t){return"symbol"==typeof t||o(t)&&"[object Symbol]"==r(t)}},function(t,e){t.exports=function(t){return t}},function(t,e,n){var r=n(5),o=n(26),i=n(97),a=n(28),s=n(29),u=n(49),c=n(8),l=n(60),f=Object.getOwnPropertyDescriptor;e.f=r?f:function(t,e){if(t=s(t),e=u(e),l)try{return f(t,e)}catch(t){}if(c(t,e))return a(!o(i.f,t,e),t[e])}},function(t,e,n){var r=n(3),o=n(2),i=n(14),a=Object,s=r("".split);t.exports=o((function(){return!a("z").propertyIsEnumerable(0)}))?function(t){return"String"==i(t)?s(t,""):a(t)}:a},function(t,e,n){var r=n(48),o=TypeError;t.exports=function(t){if(r(t))throw o("Can't call method on "+t);return t}},function(t,e){t.exports=function(t){return null==t}},function(t,e,n){var r=n(98),o=n(51);t.exports=function(t){var e=r(t,"string");return o(e)?e:e+""}},function(t,e){var n="object"==typeof document&&document.all,r=void 0===n&&void 0!==n;t.exports={all:n,IS_HTMLDDA:r}},function(t,e,n){var r=n(15),o=n(0),i=n(52),a=n(53),s=Object;t.exports=a?function(t){return"symbol"==typeof t}:function(t){var e=r("Symbol");return o(e)&&i(e.prototype,s(t))}},function(t,e,n){var r=n(3);t.exports=r({}.isPrototypeOf)},function(t,e,n){var r=n(54);t.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(t,e,n){var r=n(55),o=n(2);t.exports=!!Object.getOwnPropertySymbols&&!o((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},function(t,e,n){var r,o,i=n(1),a=n(99),s=i.process,u=i.Deno,c=s&&s.versions||u&&u.version,l=c&&c.v8;l&&(o=(r=l.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!o&&a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(o=+r[1]),t.exports=o},function(t,e,n){var r=n(0),o=n(101),i=TypeError;t.exports=function(t){if(r(t))return t;throw i(o(t)+" is not a function")}},function(t,e,n){var r=n(58),o=n(31);(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.26.1",mode:r?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.26.1/LICENSE",source:"https://github.com/zloirock/core-js"})},function(t,e){t.exports=!1},function(t,e,n){var r=n(3),o=0,i=Math.random(),a=r(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+a(++o+i,36)}},function(t,e,n){var r=n(5),o=n(2),i=n(103);t.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},function(t,e){t.exports={}},function(t,e,n){var r=n(8),o=n(112),i=n(45),a=n(17);t.exports=function(t,e,n){for(var s=o(e),u=a.f,c=i.f,l=0;ll))return!1;var p=u.get(t),d=u.get(e);if(p&&d)return p==e&&d==t;var h=-1,v=!0,m=2&n?new r:void 0;for(u.set(t,e),u.set(e,t);++h-1&&t%1==0&&t=0&&Math.floor(e)===e&&isFinite(t)}function v(t){return a(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function m(t){return null==t?"":Array.isArray(t)||p(t)&&t.toString===f?JSON.stringify(t,null,2):String(t)}function g(t){var e=parseFloat(t);return isNaN(e)?t:e}function y(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(r,1)}}var x=Object.prototype.hasOwnProperty;function w(t,e){return x.call(t,e)}function k(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var C=/-(\w)/g,O=k((function(t){return t.replace(C,(function(t,e){return e?e.toUpperCase():""}))})),$=k((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),j=/\B([A-Z])/g,S=k((function(t){return t.replace(j,"-$1").toLowerCase()}));var T=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function E(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function P(t,e){for(var n in e)t[n]=e[n];return t}function A(t){for(var e={},n=0;n0,Y=X&&X.indexOf("edge/")>0;X&&X.indexOf("android");var Z=X&&/iphone|ipad|ipod|ios/.test(X);X&&/chrome\/\d+/.test(X),X&&/phantomjs/.test(X);var tt,et=X&&X.match(/firefox\/(\d+)/),nt={}.watch,rt=!1;if(G)try{var ot={};Object.defineProperty(ot,"passive",{get:function(){rt=!0}}),window.addEventListener("test-passive",null,ot)}catch(t){}var it=function(){return void 0===tt&&(tt=!G&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),tt},at=G&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function st(t){return"function"==typeof t&&/native code/.test(t.toString())}var ut,ct="undefined"!=typeof Symbol&&st(Symbol)&&"undefined"!=typeof Reflect&&st(Reflect.ownKeys);ut="undefined"!=typeof Set&&st(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var lt=null;function ft(t){void 0===t&&(t=null),t||lt&<._scope.off(),lt=t,t&&t._scope.on()}var pt=function(){function t(t,e,n,r,o,i,a,s){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t}(),dt=function(t){void 0===t&&(t="");var e=new pt;return e.text=t,e.isComment=!0,e};function ht(t){return new pt(void 0,void 0,void 0,String(t))}function vt(t){var e=new pt(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}var mt=0,gt=[],yt=function(){function t(){this._pending=!1,this.id=mt++,this.subs=[]}return t.prototype.addSub=function(t){this.subs.push(t)},t.prototype.removeSub=function(t){this.subs[this.subs.indexOf(t)]=null,this._pending||(this._pending=!0,gt.push(this))},t.prototype.depend=function(e){t.target&&t.target.addDep(this)},t.prototype.notify=function(t){var e=this.subs.filter((function(t){return t}));for(var n=0,r=e.length;n0&&(Xt((c=t(c,"".concat(n||"","_").concat(r)))[0])&&Xt(f)&&(p[l]=ht(f.text+c[0].text),c.shift()),p.push.apply(p,c)):u(c)?Xt(f)?p[l]=ht(f.text+c):""!==c&&p.push(ht(c)):Xt(c)&&Xt(f)?p[l]=ht(f.text+c.text):(s(e._isVList)&&a(c.tag)&&i(c.key)&&a(n)&&(c.key="__vlist".concat(n,"_").concat(r,"__")),p.push(c)));return p}(t):void 0}function Xt(t){return a(t)&&a(t.text)&&!1===t.isComment}function Jt(t,e){var n,r,i,s,u=null;if(o(t)||"string"==typeof t)for(u=new Array(t.length),n=0,r=t.length;n0,s=e?!!e.$stable:!a,u=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(s&&o&&o!==r&&u===o.$key&&!a&&!o.$hasNormal)return o;for(var c in i={},e)e[c]&&"$"!==c[0]&&(i[c]=ve(t,n,c,e[c]))}else i={};for(var l in n)l in i||(i[l]=me(n,l));return e&&Object.isExtensible(e)&&(e._normalized=i),H(i,"$stable",s),H(i,"$key",u),H(i,"$hasNormal",a),i}function ve(t,e,n,r){var i=function(){var e=lt;ft(t);var n=arguments.length?r.apply(null,arguments):r({}),i=(n=n&&"object"==typeof n&&!o(n)?[n]:Gt(n))&&n[0];return ft(e),n&&(!i||1===n.length&&i.isComment&&!de(i))?void 0:n};return r.proxy&&Object.defineProperty(e,n,{get:i,enumerable:!0,configurable:!0}),i}function me(t,e){return function(){return t[e]}}function ge(t){return{get attrs(){if(!t._attrsProxy){var e=t._attrsProxy={};H(e,"_v_attr_proxy",!0),ye(e,t.$attrs,r,t,"$attrs")}return t._attrsProxy},get listeners(){t._listenersProxy||ye(t._listenersProxy={},t.$listeners,r,t,"$listeners");return t._listenersProxy},get slots(){return function(t){t._slotsProxy||_e(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(t)},emit:T(t.$emit,t),expose:function(e){e&&Object.keys(e).forEach((function(n){return Nt(t,e,n)}))}}}function ye(t,e,n,r,o){var i=!1;for(var a in e)a in t?e[a]!==n[a]&&(i=!0):(i=!0,be(t,a,r,o));for(var a in t)a in e||(i=!0,delete t[a]);return i}function be(t,e,n,r){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return n[r][e]}})}function _e(t,e){for(var n in e)t[n]=e[n];for(var n in t)n in e||delete t[n]}var xe=null;function we(t,e){return(t.__esModule||ct&&"Module"===t[Symbol.toStringTag])&&(t=t.default),l(t)?e.extend(t):t}function ke(t){if(o(t))for(var e=0;edocument.createEvent("Event").timeStamp&&(un=function(){return cn.now()})}var ln=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function fn(){var t,e;for(sn=un(),on=!0,tn.sort(ln),an=0;anan&&tn[n].id>t.id;)n--;tn.splice(n+1,0,t)}else tn.push(t);rn||(rn=!0,De(fn))}}function dn(t,e){if(t){for(var n=Object.create(null),r=ct?Reflect.ownKeys(t):Object.keys(t),o=0;o-1)if(i&&!w(o,"default"))a=!1;else if(""===a||a===S(t)){var u=Rn(String,o.type);(u<0||s-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!d(t)&&t.test(e)}function Jn(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var a=n[i];if(a){var s=a.name;s&&!e(s)&&Qn(n,i,r,o)}}}function Qn(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,_(n,e)}Wn.prototype._init=function(t){var e=this;e._uid=Vn++,e._isVue=!0,e.__v_skip=!0,e._scope=new Bt(!0),e._scope._vm=!0,t&&t._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=Tn(Hn(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(e),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Ge(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,o=n&&n.context;t.$slots=fe(e._renderChildren,o),t.$scopedSlots=n?he(t.$parent,n.data.scopedSlots,t.$slots):r,t._c=function(e,n,r,o){return Ce(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return Ce(t,e,n,r,o,!0)};var i=n&&n.data;Pt(t,"$attrs",i&&i.attrs||r,null,!0),Pt(t,"$listeners",e._parentListeners||r,null,!0)}(e),Ze(e,"beforeCreate",void 0,!1),function(t){var e=dn(t.$options.inject,t);e&&(jt(!1),Object.keys(e).forEach((function(n){Pt(t,n,e[n])})),jt(!0))}(e),Dn(e),function(t){var e=t.$options.provide;if(e){var n=c(e)?e.call(t):e;if(!l(n))return;for(var r=zt(t),o=ct?Reflect.ownKeys(n):Object.keys(n),i=0;i1?E(n):n;for(var r=E(arguments,1),o='event handler for "'.concat(t,'"'),i=0,a=n.length;iparseInt(this.max)&&Qn(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Qn(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){Jn(t,(function(t){return Xn(e,t)}))})),this.$watch("exclude",(function(e){Jn(t,(function(t){return!Xn(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=ke(t),n=e&&e.componentOptions;if(n){var r=Gn(n),o=this.include,i=this.exclude;if(o&&(!r||!Xn(o,r))||i&&r&&Xn(i,r))return e;var a=this.cache,s=this.keys,u=null==e.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):e.key;a[u]?(e.componentInstance=a[u].componentInstance,_(s,u),s.push(u)):(this.vnodeToCache=e,this.keyToCache=u),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return z}};Object.defineProperty(t,"config",e),t.util={warn:wn,extend:P,mergeOptions:Tn,defineReactive:Pt},t.set=At,t.delete=Lt,t.nextTick=De,t.observable=function(t){return Et(t),t},t.options=Object.create(null),F.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,P(t.options.components,Zn),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=E(arguments,1);return n.unshift(this),c(t.install)?t.install.apply(t,n):c(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=Tn(this.options,t),this}}(t),Kn(t),function(t){F.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&p(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&c(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(Wn),Object.defineProperty(Wn.prototype,"$isServer",{get:it}),Object.defineProperty(Wn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Wn,"FunctionalRenderContext",{value:hn}),Wn.version="2.7.14";var tr=y("style,class"),er=y("input,textarea,option,select,progress"),nr=y("contenteditable,draggable,spellcheck"),rr=y("events,caret,typing,plaintext-only"),or=y("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),ir="http://www.w3.org/1999/xlink",ar=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},sr=function(t){return ar(t)?t.slice(6,t.length):""},ur=function(t){return null==t||!1===t};function cr(t){for(var e=t.data,n=t,r=t;a(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=lr(r.data,e));for(;a(n=n.parent);)n&&n.data&&(e=lr(e,n.data));return function(t,e){if(a(t)||a(e))return fr(t,pr(e));return""}(e.staticClass,e.class)}function lr(t,e){return{staticClass:fr(t.staticClass,e.staticClass),class:a(t.class)?[t.class,e.class]:e.class}}function fr(t,e){return t?e?t+" "+e:t:e||""}function pr(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,o=t.length;r-1?Ir(t,e,n):or(e)?ur(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):nr(e)?t.setAttribute(e,function(t,e){return ur(e)||"false"===e?"false":"contenteditable"===t&&rr(e)?e:"true"}(e,n)):ar(e)?ur(n)?t.removeAttributeNS(ir,sr(e)):t.setAttributeNS(ir,e,n):Ir(t,e,n)}function Ir(t,e,n){if(ur(n))t.removeAttribute(e);else{if(J&&!Q&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var Ur={create:Mr,update:Mr};function Dr(t,e){var n=e.elm,r=e.data,o=t.data;if(!(i(r.staticClass)&&i(r.class)&&(i(o)||i(o.staticClass)&&i(o.class)))){var s=cr(e),u=n._transitionClasses;a(u)&&(s=fr(s,pr(u))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var Nr,Fr={create:Dr,update:Dr};function Br(t,e,n){var r=Nr;return function o(){var i=e.apply(null,arguments);null!==i&&Vr(t,o,n,r)}}var zr=Ee&&!(et&&Number(et[1])<=53);function qr(t,e,n,r){if(zr){var o=sn,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}Nr.addEventListener(t,e,rt?{capture:n,passive:r}:n)}function Vr(t,e,n,r){(r||Nr).removeEventListener(t,e._wrapper||e,n)}function Hr(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=t.data.on||{};Nr=e.elm||t.elm,function(t){if(a(t.__r)){var e=J?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}a(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(n),Ht(n,r,qr,Vr,Br,e.context),Nr=void 0}}var Wr,Kr={create:Hr,update:Hr,destroy:function(t){return Hr(t,kr)}};function Gr(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,r,o=e.elm,u=t.data.domProps||{},c=e.data.domProps||{};for(n in(a(c.__ob__)||s(c._v_attr_proxy))&&(c=e.data.domProps=P({},c)),u)n in c||(o[n]="");for(n in c){if(r=c[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===u[n])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===n&&"PROGRESS"!==o.tagName){o._value=r;var l=i(r)?"":String(r);Xr(o,l)&&(o.value=l)}else if("innerHTML"===n&&vr(o.tagName)&&i(o.innerHTML)){(Wr=Wr||document.createElement("div")).innerHTML="".concat(r,"");for(var f=Wr.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;f.firstChild;)o.appendChild(f.firstChild)}else if(r!==u[n])try{o[n]=r}catch(t){}}}}function Xr(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,r=t._vModifiers;if(a(r)){if(r.number)return g(n)!==g(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var Jr={create:Gr,update:Gr},Qr=k((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function Yr(t){var e=Zr(t.style);return t.staticStyle?P(t.staticStyle,e):e}function Zr(t){return Array.isArray(t)?A(t):"string"==typeof t?Qr(t):t}var to,eo=/^--/,no=/\s*!important$/,ro=function(t,e,n){if(eo.test(e))t.style.setProperty(e,n);else if(no.test(n))t.style.setProperty(S(e),n.replace(no,""),"important");else{var r=io(e);if(Array.isArray(n))for(var o=0,i=n.length;o-1?e.split(uo).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" ".concat(t.getAttribute("class")||""," ");n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function lo(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(uo).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" ".concat(t.getAttribute("class")||""," "),r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function fo(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&P(e,po(t.name||"v")),P(e,t),e}return"string"==typeof t?po(t):void 0}}var po=k((function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}})),ho=G&&!Q,vo="transition",mo="transitionend",go="animation",yo="animationend";ho&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(vo="WebkitTransition",mo="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(go="WebkitAnimation",yo="webkitAnimationEnd"));var bo=G?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function _o(t){bo((function(){bo(t)}))}function xo(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),co(t,e))}function wo(t,e){t._transitionClasses&&_(t._transitionClasses,e),lo(t,e)}function ko(t,e,n){var r=Oo(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s="transition"===o?mo:yo,u=0,c=function(){t.removeEventListener(s,l),n()},l=function(e){e.target===t&&++u>=a&&c()};setTimeout((function(){u0&&(n="transition",l=a,f=i.length):"animation"===e?c>0&&(n="animation",l=c,f=u.length):f=(n=(l=Math.max(a,c))>0?a>c?"transition":"animation":null)?"transition"===n?i.length:u.length:0,{type:n,timeout:l,propCount:f,hasTransform:"transition"===n&&Co.test(r[vo+"Property"])}}function $o(t,e){for(;t.length1}function Ao(t,e){!0!==e.data.show&&So(e)}var Lo=function(t){var e,n,r={},c=t.modules,l=t.nodeOps;for(e=0;eh?_(t,i(n[g+1])?null:n[g+1].elm,n,d,g,r):d>g&&w(e,f,h)}(f,v,g,n,c):a(g)?(a(t.text)&&l.setTextContent(f,""),_(f,null,g,0,g.length-1,n)):a(v)?w(v,0,v.length-1):a(t.text)&&l.setTextContent(f,""):t.text!==e.text&&l.setTextContent(f,e.text),a(h)&&a(d=h.hook)&&a(d=d.postpatch)&&d(t,e)}}}function $(t,e,n){if(s(n)&&a(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,a.selected!==i&&(a.selected=i);else if(I(Do(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));o||(t.selectedIndex=-1)}}function Uo(t,e){return e.every((function(e){return!I(e,t)}))}function Do(t){return"_value"in t?t._value:t.value}function No(t){t.target.composing=!0}function Fo(t){t.target.composing&&(t.target.composing=!1,Bo(t.target,"input"))}function Bo(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function zo(t){return!t.componentInstance||t.data&&t.data.transition?t:zo(t.componentInstance._vnode)}var qo={model:Mo,show:{bind:function(t,e,n){var r=e.value,o=(n=zo(n)).data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,So(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=zo(n)).data&&n.data.transition?(n.data.show=!0,r?So(n,(function(){t.style.display=t.__vOriginalDisplay})):To(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}}},Vo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Ho(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Ho(ke(e.children)):t}function Wo(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var r in o)e[O(r)]=o[r];return e}function Ko(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var Go=function(t){return t.tag||de(t)},Xo=function(t){return"show"===t.name},Jo={name:"transition",props:Vo,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(Go)).length){0;var r=this.mode;0;var o=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;var i=Ho(o);if(!i)return o;if(this._leaving)return Ko(t,o);var a="__transition-".concat(this._uid,"-");i.key=null==i.key?i.isComment?a+"comment":a+i.tag:u(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var s=(i.data||(i.data={})).transition=Wo(this),c=this._vnode,l=Ho(c);if(i.data.directives&&i.data.directives.some(Xo)&&(i.data.show=!0),l&&l.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(i,l)&&!de(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=P({},s);if("out-in"===r)return this._leaving=!0,Wt(f,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),Ko(t,o);if("in-out"===r){if(de(i))return c;var p,d=function(){p()};Wt(s,"afterEnter",d),Wt(s,"enterCancelled",d),Wt(f,"delayLeave",(function(t){p=t}))}}return o}}},Qo=P({tag:String,moveClass:String},Vo);function Yo(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function Zo(t){t.data.newPos=t.elm.getBoundingClientRect()}function ti(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate(".concat(r,"px,").concat(o,"px)"),i.transitionDuration="0s"}}delete Qo.mode;var ei={Transition:Jo,TransitionGroup:{props:Qo,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Je(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=Wo(this),s=0;s-1?gr[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:gr[t]=/HTMLUnknownElement/.test(e.toString())},P(Wn.options.directives,qo),P(Wn.options.components,ei),Wn.prototype.__patch__=G?Lo:L,Wn.prototype.$mount=function(t,e){return function(t,e,n){var r;t.$el=e,t.$options.render||(t.$options.render=dt),Ze(t,"beforeMount"),r=function(){t._update(t._render(),n)},new Ve(t,r,L,{before:function(){t._isMounted&&!t._isDestroyed&&Ze(t,"beforeUpdate")}},!0),n=!1;var o=t._preWatchers;if(o)for(var i=0;i=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),c=e&&e.path||"/",l=u.path?wi(u.path,c,n||o.append):c,f=function(t,e,n){void 0===e&&(e={});var r,o=n||ci;try{r=o(t||"")}catch(t){r={}}for(var i in e){var a=e[i];r[i]=Array.isArray(a)?a.map(ui):ui(a)}return r}(u.query,o.query,r&&r.options.parseQuery),p=o.hash||u.hash;return p&&"#"!==p.charAt(0)&&(p="#"+p),{_normalized:!0,path:l,query:f,hash:p}}var qi,Vi=function(){},Hi={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,a=o.route,s=o.href,u={},c=n.options.linkActiveClass,l=n.options.linkExactActiveClass,f=null==c?"router-link-active":c,p=null==l?"router-link-exact-active":l,d=null==this.activeClass?f:this.activeClass,h=null==this.exactActiveClass?p:this.exactActiveClass,v=a.redirectedFrom?pi(null,zi(a.redirectedFrom),null,n):a;u[h]=gi(r,v,this.exactPath),u[d]=this.exact||this.exactPath?u[h]:function(t,e){return 0===t.path.replace(fi,"/").indexOf(e.path.replace(fi,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,v);var m=u[h]?this.ariaCurrentValue:null,g=function(t){Wi(t)&&(e.replace?n.replace(i,Vi):n.push(i,Vi))},y={click:Wi};Array.isArray(this.event)?this.event.forEach((function(t){y[t]=g})):y[this.event]=g;var b={class:u},_=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:s,route:a,navigate:g,isActive:u[d],isExactActive:u[h]});if(_){if(1===_.length)return _[0];if(_.length>1||!_.length)return 0===_.length?t():t("span",{},_)}if("a"===this.tag)b.on=y,b.attrs={href:s,"aria-current":m};else{var x=function t(e){var n;if(e)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=Bi(l.path,s.params),u(l,s,a)}if(s.path){s.params={};for(var d=0;d-1}function ka(t,e){return wa(t)&&t._isRouter&&(null==e||t.type===e)}function Ca(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}function Oa(t){return function(e,n,r){var o=!1,i=0,a=null;$a(t,(function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var u,c=Ta((function(e){var o;((o=e).__esModule||Sa&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:qi.extend(e),n.components[s]=e,--i<=0&&r()})),l=Ta((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=wa(t)?t:new Error(e),r(a))}));try{u=t(c,l)}catch(t){l(t)}if(u)if("function"==typeof u.then)u.then(c,l);else{var f=u.component;f&&"function"==typeof f.then&&f.then(c,l)}}})),o||r()}}function $a(t,e){return ja(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function ja(t){return Array.prototype.concat.apply([],t)}var Sa="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Ta(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var Ea=function(t,e){this.router=t,this.base=function(t){if(!t)if(Ki){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=hi,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Pa(t,e,n,r){var o=$a(t,(function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=qi.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,o,i)})):n(a,r,o,i)}));return ja(r?o.reverse():o)}function Aa(t,e){if(e)return function(){return t.apply(e,arguments)}}Ea.prototype.listen=function(t){this.cb=t},Ea.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Ea.prototype.onError=function(t){this.errorCbs.push(t)},Ea.prototype.transitionTo=function(t,e,n){var r,o=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(r,(function(){o.updateRoute(r),e&&e(r),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(r,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!o.ready&&(ka(t,ga.redirected)&&i===hi||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},Ea.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current;this.pending=t;var i,a,s=function(t){!ka(t)&&wa(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},u=t.matched.length-1,c=o.matched.length-1;if(gi(t,o)&&u===c&&t.matched[u]===o.matched[c])return this.ensureURL(),t.hash&&ia(this.router,o,t,!1),s(((a=_a(i=o,t,ga.duplicated,'Avoided redundant navigation to current location: "'+i.fullPath+'".')).name="NavigationDuplicated",a));var l=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=ha&&n;r&&this.listeners.push(oa());var o=function(){var n=t.current,o=Ma(t.base);t.current===hi&&o===t._startLocation||t.transitionTo(o,(function(t){r&&ia(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){va(ki(r.base+t.fullPath)),ia(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){ma(ki(r.base+t.fullPath)),ia(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(Ma(this.base)!==this.current.fullPath){var e=ki(this.base+this.current.fullPath);t?va(e):ma(e)}},e.prototype.getCurrentLocation=function(){return Ma(this.base)},e}(Ea);function Ma(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(ki(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Ra=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=Ma(t);if(!/^\/#/.test(e))return window.location.replace(ki(t+"/#"+e)),!0}(this.base)||Ia()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=ha&&e;n&&this.listeners.push(oa());var r=function(){var e=t.current;Ia()&&t.transitionTo(Ua(),(function(r){n&&ia(t.router,r,e,!0),ha||Fa(r.fullPath)}))},o=ha?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Na(t.fullPath),ia(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Fa(t.fullPath),ia(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Ua()!==e&&(t?Na(e):Fa(e))},e.prototype.getCurrentLocation=function(){return Ua()},e}(Ea);function Ia(){var t=Ua();return"/"===t.charAt(0)||(Fa("/"+t),!1)}function Ua(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Da(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function Na(t){ha?va(Da(t)):window.location.hash=t}function Fa(t){ha?ma(Da(t)):window.location.replace(Da(t))}var Ba=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){ka(t,ga.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Ea),za=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Ji(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!ha&&!1!==t.fallback,this.fallback&&(e="hash"),Ki||(e="abstract"),this.mode=e,e){case"history":this.history=new La(this,t.base);break;case"hash":this.history=new Ra(this,t.base,this.fallback);break;case"abstract":this.history=new Ba(this,t.base);break;default:0}},qa={currentRoute:{configurable:!0}};za.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},qa.currentRoute.get=function(){return this.history&&this.history.current},za.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof La||n instanceof Ra){var r=function(t){n.setupListeners(),function(t){var r=n.current,o=e.options.scrollBehavior;ha&&o&&"fullPath"in t&&ia(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},za.prototype.beforeEach=function(t){return Ha(this.beforeHooks,t)},za.prototype.beforeResolve=function(t){return Ha(this.resolveHooks,t)},za.prototype.afterEach=function(t){return Ha(this.afterHooks,t)},za.prototype.onReady=function(t,e){this.history.onReady(t,e)},za.prototype.onError=function(t){this.history.onError(t)},za.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},za.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},za.prototype.go=function(t){this.history.go(t)},za.prototype.back=function(){this.go(-1)},za.prototype.forward=function(){this.go(1)},za.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},za.prototype.resolve=function(t,e,n){var r=zi(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?ki(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},za.prototype.getRoutes=function(){return this.matcher.getRoutes()},za.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==hi&&this.history.transitionTo(this.history.getCurrentLocation())},za.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==hi&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(za.prototype,qa);var Va=za;function Ha(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}za.install=function t(e){if(!t.installed||qi!==e){t.installed=!0,qi=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",_i),e.component("RouterLink",Hi);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},za.version="3.6.5",za.isNavigationFailure=ka,za.NavigationFailureType=ga,za.START_LOCATION=hi,Ki&&window.Vue&&window.Vue.use(za);n(96);n(92),n(128);var Wa={NotFound:()=>n.e(6).then(n.bind(null,280)),Layout:()=>Promise.all([n.e(0),n.e(2)]).then(n.bind(null,279))},Ka={"v-cf184462":()=>n.e(7).then(n.bind(null,283)),"v-031147ce":()=>n.e(9).then(n.bind(null,284)),"v-440298ff":()=>n.e(8).then(n.bind(null,285)),"v-65455d52":()=>n.e(11).then(n.bind(null,286)),"v-49ef63ff":()=>n.e(10).then(n.bind(null,287)),"v-7813dc19":()=>n.e(12).then(n.bind(null,288)),"v-5f99fff9":()=>n.e(13).then(n.bind(null,289)),"v-75b0c0ff":()=>n.e(14).then(n.bind(null,290)),"v-2a284842":()=>n.e(15).then(n.bind(null,291)),"v-7e7f881f":()=>n.e(17).then(n.bind(null,292)),"v-4371f14e":()=>n.e(18).then(n.bind(null,293)),"v-570f3d19":()=>n.e(19).then(n.bind(null,294)),"v-61821d87":()=>n.e(16).then(n.bind(null,295)),"v-01c7100e":()=>n.e(21).then(n.bind(null,296)),"v-8a6ff24e":()=>n.e(22).then(n.bind(null,297)),"v-3f415241":()=>n.e(20).then(n.bind(null,298)),"v-82155162":()=>n.e(24).then(n.bind(null,299)),"v-ff770e42":()=>n.e(23).then(n.bind(null,300))};function Ga(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const Xa=/-(\w)/g,Ja=Ga(t=>t.replace(Xa,(t,e)=>e?e.toUpperCase():"")),Qa=/\B([A-Z])/g,Ya=Ga(t=>t.replace(Qa,"-$1").toLowerCase()),Za=Ga(t=>t.charAt(0).toUpperCase()+t.slice(1));function ts(t,e){if(!e)return;if(t(e))return t(e);return e.includes("-")?t(Za(Ja(e))):t(Za(e))||t(Ya(e))}const es=Object.assign({},Wa,Ka),ns=t=>es[t],rs=t=>Ka[t],os=t=>Wa[t],is=t=>Wn.component(t);function as(t){return ts(rs,t)}function ss(t){return ts(os,t)}function us(t){return ts(ns,t)}function cs(t){return ts(is,t)}function ls(...t){return Promise.all(t.filter(t=>t).map(async t=>{if(!cs(t)&&us(t)){const e=await us(t)();Wn.component(t,e.default)}}))}function fs(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}var ps=n(90),ds=n.n(ps),hs=n(91),vs=n.n(hs),ms={created(){if(this.siteMeta=this.$site.headTags.filter(([t])=>"meta"===t).map(([t,e])=>e),this.$ssrContext){const e=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(t=e)?t.map(t=>{let e="{e+=` ${n}="${vs()(t[n])}"`}),e+">"}).join("\n "):"",this.$ssrContext.canonicalLink=ys(this.$canonicalUrl)}var t},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const t=this.getMergedMetaTags();this.currentMetaTags=bs(t,this.currentMetaTags)},getMergedMetaTags(){const t=this.$page.frontmatter.meta||[];return ds()([{name:"description",content:this.$description}],t,this.siteMeta,_s)},updateCanonicalLink(){gs(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",ys(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){bs(null,this.currentMetaTags),gs()}};function gs(){const t=document.querySelector("link[rel='canonical']");t&&t.remove()}function ys(t=""){return t?``:""}function bs(t,e){if(e&&[...e].filter(t=>t.parentNode===document.head).forEach(t=>document.head.removeChild(t)),t)return t.map(t=>{const e=document.createElement("meta");return Object.keys(t).forEach(n=>{e.setAttribute(n,t[n])}),document.head.appendChild(e),e})}function _s(t){for(const e of["name","property","itemprop"])if(t.hasOwnProperty(e))return t[e]+e;return JSON.stringify(t)}var xs=n(23),ws=n.n(xs),ks={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:ws()((function(){this.setActiveHash()}),300),setActiveHash(){const t=[].slice.call(document.querySelectorAll(".sidebar-link")),e=[].slice.call(document.querySelectorAll(".header-anchor")).filter(e=>t.some(t=>t.hash===e.hash)),n=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),r=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),o=window.innerHeight+n;for(let t=0;t=i.parentElement.offsetTop+10&&(!a||n{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},Cs=n(24),Os=n.n(Cs),$s={mounted(){Os.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||Wn.component(t.name)||Os.a.start(),n()}),this.$router.afterEach(()=>{Os.a.done(),this.isSidebarOpen=!1})}},js={props:{parent:Object,code:String,options:{align:String,color:String,backgroundTransition:Boolean,backgroundColor:String,successText:String,staticIcon:Boolean}},data:()=>({success:!1,originalBackground:null,originalTransition:null}),computed:{alignStyle(){let t={};return t[this.options.align]="7.5px",t},iconClass(){return this.options.staticIcon?"":"hover"}},mounted(){this.originalTransition=this.parent.style.transition,this.originalBackground=this.parent.style.background},beforeDestroy(){this.parent.style.transition=this.originalTransition,this.parent.style.background=this.originalBackground},methods:{hexToRgb(t){let e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return e?{r:parseInt(e[1],16),g:parseInt(e[2],16),b:parseInt(e[3],16)}:null},copyToClipboard(t){if(navigator.clipboard)navigator.clipboard.writeText(this.code).then(()=>{this.setSuccessTransitions()},()=>{});else{let t=document.createElement("textarea");document.body.appendChild(t),t.value=this.code,t.select(),document.execCommand("Copy"),t.remove(),this.setSuccessTransitions()}},setSuccessTransitions(){if(clearTimeout(this.successTimeout),this.options.backgroundTransition){this.parent.style.transition="background 350ms";let t=this.hexToRgb(this.options.backgroundColor);this.parent.style.background=`rgba(${t.r}, ${t.g}, ${t.b}, 0.1)`}this.success=!0,this.successTimeout=setTimeout(()=>{this.options.backgroundTransition&&(this.parent.style.background=this.originalBackground,this.parent.style.transition=this.originalTransition),this.success=!1},500)}}},Ss=(n(234),n(7)),Ts=Object(Ss.a)(js,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"code-copy"},[e("svg",{class:t.iconClass,style:t.alignStyle,attrs:{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},on:{click:t.copyToClipboard}},[e("path",{attrs:{fill:"none",d:"M0 0h24v24H0z"}}),t._v(" "),e("path",{attrs:{fill:t.options.color,d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z"}})]),t._v(" "),e("span",{class:t.success?"success":"",style:t.alignStyle},[t._v("\n "+t._s(t.options.successText)+"\n ")])])}),[],!1,null,"56cbd8b4",null).exports,Es=(n(235),[ms,ks,$s,{updated(){this.update()},methods:{update(){setTimeout(()=>{document.querySelectorAll('div[class*="language-"] pre').forEach(t=>{if(t.classList.contains("code-copy-added"))return;let e=new(Wn.extend(Ts));e.options={align:"bottom",color:"#27b1ff",backgroundTransition:!0,backgroundColor:"#0075b8",successText:"Copied!",staticIcon:!1},e.code=t.innerText,e.parent=t,e.$mount(),t.classList.add("code-copy-added"),t.appendChild(e.$el)})},100)}}}]),Ps={name:"GlobalLayout",computed:{layout(){const t=this.getLayout();return fs("layout",t),Wn.component(t)}},methods:{getLayout(){if(this.$page.path){const t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},As=Object(Ss.a)(Ps,(function(){return(0,this._self._c)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(t,e,n){switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),t[e].push(...n);break;default:throw new Error("Unknown option name.")}}(As,"mixins",Es);const Ls=[{name:"v-cf184462",path:"/",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-cf184462").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-031147ce",path:"/change/change-log.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-031147ce").then(n)}},{name:"v-440298ff",path:"/api/api.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-440298ff").then(n)}},{name:"v-65455d52",path:"/install-tutorial/custom-installation.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-65455d52").then(n)}},{name:"v-49ef63ff",path:"/faq/faq.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-49ef63ff").then(n)}},{name:"v-7813dc19",path:"/install-tutorial/docker-compose.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-7813dc19").then(n)}},{name:"v-5f99fff9",path:"/install-tutorial/installation.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-5f99fff9").then(n)}},{name:"v-75b0c0ff",path:"/sdk/sdk.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-75b0c0ff").then(n)}},{name:"v-2a284842",path:"/start/introduce.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-2a284842").then(n)}},{name:"v-7e7f881f",path:"/tutorial/client-config.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-7e7f881f").then(n)}},{name:"v-4371f14e",path:"/tutorial/common-problem.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-4371f14e").then(n)}},{name:"v-570f3d19",path:"/tutorial/des-of-related-doc.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-570f3d19").then(n)}},{name:"v-61821d87",path:"/start/system-structure.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-61821d87").then(n)}},{name:"v-01c7100e",path:"/tutorial/performance-tuning.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-01c7100e").then(n)}},{name:"v-8a6ff24e",path:"/tutorial/recommend-tool.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-8a6ff24e").then(n)}},{name:"v-3f415241",path:"/tutorial/performance-testing.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-3f415241").then(n)}},{name:"v-82155162",path:"/tutorial/using-tutorials.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-82155162").then(n)}},{name:"v-ff770e42",path:"/tutorial/using-cdn.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-ff770e42").then(n)}},{path:"*",component:As}],Ms={title:"Trojan Panel",description:"支持Xray/Trojan-Go/Hysteria/NaiveProxy的多用户Web管理面板",base:"/",headTags:[["link",{rel:"icon",href:"logo.png"}],["script",{},'\n var _hmt = _hmt || [];\n(function() {\n var hm = document.createElement("script");\n hm.src = "https://hm.baidu.com/hm.js?37275f991707c27db91dbb6f668ee1c6";\n var s = document.getElementsByTagName("script")[0]; \n s.parentNode.insertBefore(hm, s);\n})();\n'],["script",{async:!0,src:"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9763379843362753",crossorigin:"anonymous"}]],pages:[{title:"Home",frontmatter:{home:!0,heroImage:"/logo.png",heroText:"Trojan Panel",tagline:"支持Xray/Trojan-Go/Hysteria/NaiveProxy的多用户Web管理面板",actionText:"快速上手 →",actionLink:"./start/introduce",features:[{title:"极速搭建",details:"一键安装脚本,降低部署门槛,快速搭建系统"},{title:"国际化",details:"系统语言支持中文/English/한국인/فارسی"},{title:"多代理支持",details:"节点类型支持Xray/Trojan-Go/Hysteria/NaiveProxy"},{title:"分布式",details:"前后端分离开发,减少模块之间耦合度,可以自由组合部署在多个服务器"},{title:"功能强大",details:"支持登录注册/用户管理/节点管理/邮件管理/黑名单管理/自定义伪装网站/系统看板等"},{title:"所见即所得",details:"支持多节点管理,自动化管理远程节点,自动化申请/续签证书,面板内编辑节点,远程服务实时修改节点配置"}],footer:"Copyright © 2021-2023 Trojan Panel"},regularPath:"/",relativePath:"README.md",key:"v-cf184462",path:"/",headers:[{level:2,title:"🚀 安装",slug:"🚀-安装"},{level:2,title:"✨ Community",slug:"✨-community"},{level:2,title:"🔍 报告缺陷与问题",slug:"🔍-报告缺陷与问题"},{level:2,title:"💞 支持",slug:"💞-支持"},{level:2,title:"🌟 Star随时间变化",slug:"🌟-star随时间变化"}],lastUpdated:"8/6/2023, 12:39:47 AM",lastUpdatedTimestamp:1691253587e3},{title:"更新日志",frontmatter:{},regularPath:"/change/change-log.html",relativePath:"change/change-log.md",key:"v-031147ce",path:"/change/change-log.html",headers:[{level:2,title:"2023.10.09 犼",slug:"_2023-10-09-犼"},{level:2,title:"2023.07.08 帝江",slug:"_2023-07-08-帝江"},{level:2,title:"2023.03.31 穷奇",slug:"_2023-03-31-穷奇"},{level:2,title:"2022.12.29 麒麟",slug:"_2022-12-29-麒麟"},{level:2,title:"2022.11.08 饕餮",slug:"_2022-11-08-饕餮"},{level:2,title:"2022.05.16 伏羲",slug:"_2022-05-16-伏羲"},{level:2,title:"2022.02.10 盘古",slug:"_2022-02-10-盘古"}],lastUpdated:"10/9/2023, 5:23:55 PM",lastUpdatedTimestamp:1696843435e3},{title:"API文档",frontmatter:{},regularPath:"/api/api.html",relativePath:"api/api.md",key:"v-440298ff",path:"/api/api.html",headers:[{level:2,title:"开发前必读",slug:"开发前必读"},{level:2,title:"开放接口",slug:"开放接口"},{level:3,title:"验证码",slug:"验证码"},{level:3,title:"登录",slug:"登录"},{level:3,title:"注册",slug:"注册"},{level:3,title:"系统默认设置",slug:"系统默认设置"},{level:3,title:"订阅",slug:"订阅"},{level:3,title:"logo",slug:"logo"},{level:2,title:"首页",slug:"首页"},{level:3,title:"仪表板",slug:"仪表板"},{level:3,title:"流量排行榜",slug:"流量排行榜"},{level:2,title:"账户",slug:"账户"},{level:3,title:"注销",slug:"注销"},{level:3,title:"查询单个账户",slug:"查询单个账户"},{level:3,title:"创建账户",slug:"创建账户"},{level:3,title:"获取当前账户信息",slug:"获取当前账户信息"},{level:3,title:"分页查询账户",slug:"分页查询账户"},{level:3,title:"通过id删除账户",slug:"通过id删除账户"},{level:3,title:"修改密码",slug:"修改密码"},{level:3,title:"修改用户名或者邮箱",slug:"修改用户名或者邮箱"},{level:3,title:"修改账户",slug:"修改账户"},{level:3,title:"获取Clash订阅地址",slug:"获取clash订阅地址"},{level:3,title:"获取指定账户的Clash订阅地址",slug:"获取指定账户的clash订阅地址"},{level:3,title:"重设下载和上传流量",slug:"重设下载和上传流量"},{level:3,title:"导出账户",slug:"导出账户"},{level:3,title:"导入账户",slug:"导入账户"},{level:3,title:"批量创建账户",slug:"批量创建账户"},{level:3,title:"导出未使用的账户",slug:"导出未使用的账户"},{level:2,title:"角色",slug:"角色"},{level:3,title:"查询角色列表",slug:"查询角色列表"},{level:2,title:"服务器",slug:"服务器"},{level:3,title:"根据id查询服务器",slug:"根据id查询服务器"},{level:3,title:"创建服务器",slug:"创建服务器"},{level:3,title:"分页查询服务器",slug:"分页查询服务器"},{level:3,title:"删除服务器",slug:"删除服务器"},{level:3,title:"更新服务器",slug:"更新服务器"},{level:3,title:"查询服务器列表",slug:"查询服务器列表"},{level:3,title:"查询服务器状态",slug:"查询服务器状态"},{level:3,title:"导出服务器",slug:"导出服务器"},{level:3,title:"导入服务器",slug:"导入服务器"},{level:2,title:"节点",slug:"节点"},{level:3,title:"根据id查询节点",slug:"根据id查询节点"},{level:3,title:"查询节点连接信息",slug:"查询节点连接信息"},{level:3,title:"创建节点",slug:"创建节点"},{level:3,title:"分页查询节点",slug:"分页查询节点"},{level:3,title:"删除节点",slug:"删除节点"},{level:3,title:"更新节点",slug:"更新节点"},{level:3,title:"获取节点二维码",slug:"获取节点二维码"},{level:3,title:"复制URL",slug:"复制url"},{level:3,title:"节点部分属性的默认值",slug:"节点部分属性的默认值"},{level:2,title:"节点类型",slug:"节点类型"},{level:3,title:"查询节点类型列表",slug:"查询节点类型列表"},{level:2,title:"系统设置",slug:"系统设置"},{level:3,title:"查询系统设置",slug:"查询系统设置"},{level:3,title:"更新系统配置",slug:"更新系统配置"},{level:3,title:"上传静态网站文件",slug:"上传静态网站文件"},{level:3,title:"上传logo",slug:"上传logo"},{level:2,title:"黑名单",slug:"黑名单"},{level:3,title:"分页查询黑名单",slug:"分页查询黑名单"},{level:3,title:"删除黑名单",slug:"删除黑名单"},{level:3,title:"创建黑名单",slug:"创建黑名单"},{level:2,title:"邮件",slug:"邮件"},{level:3,title:"查询邮件发送记录",slug:"查询邮件发送记录"},{level:2,title:"文件任务",slug:"文件任务"},{level:3,title:"分页查询文件任务",slug:"分页查询文件任务"},{level:3,title:"删除文件任务",slug:"删除文件任务"},{level:3,title:"下载文件任务的文件",slug:"下载文件任务的文件"},{level:3,title:"获取文件模板",slug:"获取文件模板"}],lastUpdated:"8/20/2023, 12:24:00 AM",lastUpdatedTimestamp:169246224e4},{title:"手动安装教程",frontmatter:{},regularPath:"/install-tutorial/custom-installation.html",relativePath:"install-tutorial/custom-installation.md",key:"v-65455d52",path:"/install-tutorial/custom-installation.html",headers:[{level:2,title:"准备",slug:"准备"},{level:2,title:"安装Docker",slug:"安装docker"},{level:2,title:"安装Caddy2",slug:"安装caddy2"},{level:2,title:"安装MariaDB",slug:"安装mariadb"},{level:2,title:"安装Redis",slug:"安装redis"},{level:2,title:"安装Trojan Panel Backend",slug:"安装trojan-panel-backend"},{level:2,title:"安装Trojan Panel Frontend",slug:"安装trojan-panel-frontend"},{level:2,title:"安装Trojan Panel Core",slug:"安装trojan-panel-core"}],lastUpdated:"8/24/2023, 12:49:36 AM",lastUpdatedTimestamp:1692809376e3},{title:"FAQ",frontmatter:{},regularPath:"/faq/faq.html",relativePath:"faq/faq.md",key:"v-49ef63ff",path:"/faq/faq.html",headers:[{level:2,title:"联机和单机有什么区别?",slug:"联机和单机有什么区别"},{level:2,title:"是否考虑支持商业化功能?",slug:"是否考虑支持商业化功能"},{level:2,title:"会收费么?",slug:"会收费么"},{level:2,title:"是否开源?",slug:"是否开源"}],lastUpdated:"8/6/2023, 12:08:11 AM",lastUpdatedTimestamp:1691251691e3},{title:"Docker Compose方式安装",frontmatter:{},regularPath:"/install-tutorial/docker-compose.html",relativePath:"install-tutorial/docker-compose.md",key:"v-7813dc19",path:"/install-tutorial/docker-compose.html",headers:[{level:2,title:"准备",slug:"准备"},{level:3,title:"设置伪装网站",slug:"设置伪装网站"},{level:3,title:"新建Caddy配置文件",slug:"新建caddy配置文件"},{level:3,title:"新建Nginx配置文件",slug:"新建nginx配置文件"},{level:2,title:"配置文件",slug:"配置文件"},{level:2,title:"部署",slug:"部署"}],lastUpdated:"8/11/2023, 5:04:23 PM",lastUpdatedTimestamp:1691744663e3},{title:"自动安装教程",frontmatter:{},regularPath:"/install-tutorial/installation.html",relativePath:"install-tutorial/installation.md",key:"v-5f99fff9",path:"/install-tutorial/installation.html",headers:[{level:2,title:"准备",slug:"准备"},{level:2,title:"一键安装脚本",slug:"一键安装脚本"},{level:2,title:"安装Trojan Panel",slug:"安装trojan-panel"},{level:2,title:"安装Trojan Panel Core",slug:"安装trojan-panel-core"}],lastUpdated:"8/24/2023, 12:48:43 AM",lastUpdatedTimestamp:1692809323e3},{title:"Core SDK",frontmatter:{},regularPath:"/sdk/sdk.html",relativePath:"sdk/sdk.md",key:"v-75b0c0ff",path:"/sdk/sdk.html",lastUpdated:"8/6/2023, 12:39:47 AM",lastUpdatedTimestamp:1691253587e3},{title:"介绍",frontmatter:{},regularPath:"/start/introduce.html",relativePath:"start/introduce.md",key:"v-2a284842",path:"/start/introduce.html",lastUpdated:"12/4/2022, 12:16:18 AM",lastUpdatedTimestamp:1670084178e3},{title:"客户端配置",frontmatter:{},regularPath:"/tutorial/client-config.html",relativePath:"tutorial/client-config.md",key:"v-7e7f881f",path:"/tutorial/client-config.html",headers:[{level:2,title:"v2rayN",slug:"v2rayn"},{level:3,title:"配置Hysteria(Windows)",slug:"配置hysteria-windows"},{level:3,title:"配置NaiveProxy(Windows)",slug:"配置naiveproxy-windows"},{level:2,title:"Qv2ray",slug:"qv2ray"},{level:3,title:"配置Trojan-Go(Windows)",slug:"配置trojan-go-windows"},{level:3,title:"配置Trojan(Windows)",slug:"配置trojan-windows"},{level:3,title:"配置NaiveProxy(Windows)",slug:"配置naiveproxy-windows-2"},{level:3,title:"配置SS/SSR(Windows)",slug:"配置ss-ssr-windows"}],lastUpdated:"3/20/2023, 6:14:44 PM",lastUpdatedTimestamp:1679307284e3},{title:"常见问题",frontmatter:{},regularPath:"/tutorial/common-problem.html",relativePath:"tutorial/common-problem.md",key:"v-4371f14e",path:"/tutorial/common-problem.html",headers:[{level:2,title:"搭建失败或系统报错的常见解决方案",slug:"搭建失败或系统报错的常见解决方案"},{level:2,title:"证书申请失败",slug:"证书申请失败"}],lastUpdated:"6/10/2023, 11:41:05 PM",lastUpdatedTimestamp:1686411665e3},{title:"相关说明",frontmatter:{},regularPath:"/tutorial/des-of-related-doc.html",relativePath:"tutorial/des-of-related-doc.md",key:"v-570f3d19",path:"/tutorial/des-of-related-doc.html",headers:[{level:2,title:"文件路径",slug:"文件路径"},{level:2,title:"Xray",slug:"xray"},{level:2,title:"Clash",slug:"clash"}],lastUpdated:"5/8/2023, 11:21:24 AM",lastUpdatedTimestamp:1683516084e3},{title:"架构设计",frontmatter:{},regularPath:"/start/system-structure.html",relativePath:"start/system-structure.md",key:"v-61821d87",path:"/start/system-structure.html",lastUpdated:"11/7/2022, 3:25:40 PM",lastUpdatedTimestamp:166780594e4},{title:"性能调优",frontmatter:{},regularPath:"/tutorial/performance-tuning.html",relativePath:"tutorial/performance-tuning.md",key:"v-01c7100e",path:"/tutorial/performance-tuning.html",headers:[{level:2,title:"定时重启",slug:"定时重启"},{level:2,title:"网络加速",slug:"网络加速"}],lastUpdated:"8/24/2023, 12:36:58 AM",lastUpdatedTimestamp:1692808618e3},{title:"工具推荐",frontmatter:{},regularPath:"/tutorial/recommend-tool.html",relativePath:"tutorial/recommend-tool.md",key:"v-8a6ff24e",path:"/tutorial/recommend-tool.html",headers:[{level:2,title:"客户端",slug:"客户端"},{level:3,title:"Xray",slug:"xray"},{level:3,title:"Trojan-gfw & Trojan-go",slug:"trojan-gfw-trojan-go"},{level:3,title:"Hysteria",slug:"hysteria"},{level:2,title:"申请免费证书",slug:"申请免费证书"}],lastUpdated:"8/24/2023, 12:48:43 AM",lastUpdatedTimestamp:1692809323e3},{title:"性能测试",frontmatter:{},regularPath:"/tutorial/performance-testing.html",relativePath:"tutorial/performance-testing.md",key:"v-3f415241",path:"/tutorial/performance-testing.html",lastUpdated:"11/7/2022, 3:25:40 PM",lastUpdatedTimestamp:166780594e4},{title:"使用教程",frontmatter:{},regularPath:"/tutorial/using-tutorials.html",relativePath:"tutorial/using-tutorials.md",key:"v-82155162",path:"/tutorial/using-tutorials.html",headers:[{level:3,title:"登录/注册",slug:"登录-注册"},{level:2,title:"用户管理",slug:"用户管理"},{level:2,title:"节点管理",slug:"节点管理"},{level:2,title:"用户设置",slug:"用户设置"},{level:2,title:"服务器管理",slug:"服务器管理"},{level:2,title:"系统邮箱设置",slug:"系统邮箱设置"},{level:2,title:"自定义伪装网站",slug:"自定义伪装网站"},{level:2,title:"黑名单管理",slug:"黑名单管理"},{level:2,title:"模板设置",slug:"模板设置"},{level:2,title:"数据统计",slug:"数据统计"},{level:2,title:"小功能",slug:"小功能"}],lastUpdated:"2/16/2023, 11:25:26 AM",lastUpdatedTimestamp:1676517926e3},{title:"使用CDN",frontmatter:{},regularPath:"/tutorial/using-cdn.html",relativePath:"tutorial/using-cdn.md",key:"v-ff770e42",path:"/tutorial/using-cdn.html",headers:[{level:2,title:"Cloudflare",slug:"cloudflare"}],lastUpdated:"12/29/2022, 10:06:02 AM",lastUpdatedTimestamp:1672279562e3}],themeConfig:{sidebarDepth:3,logo:"/logo.png",lastUpdated:"Last Updated",nav:[{text:"新手起步",link:"/start/introduce"},{text:"相关教程",items:[{text:"安装教程",link:"/install-tutorial/installation"},{text:"使用教程",link:"/tutorial/using-tutorials"}]},{text:"开发文档",items:[{text:"API文档",link:"/api/api"},{text:"Core SDK",link:"/sdk/sdk"}]},{text:"FAQ",link:"/faq/faq"},{text:"更新日志",link:"/change/change-log"},{text:"GitHub",link:"https://github.com/trojanpanel"}],sidebar:{"/start/":["introduce","system-structure"],"/tutorial/":["using-tutorials","des-of-related-doc","common-problem","using-cdn","client-config","recommend-tool","performance-tuning","performance-testing"],"/install-tutorial/":["installation","custom-installation","docker-compose"],"/api/":["api"],"/sdk/":["sdk"],"/faq/":["faq"],"/change/":["change-log"]}}};n(236);Wn.component("CodeBlock",()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,281))),Wn.component("CodeGroup",()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,282))),Wn.component("Badge",()=>Promise.all([n.e(0),n.e(3)]).then(n.bind(null,301)));n(237);var Rs={name:"BackToTop",props:{threshold:{type:Number,default:300}},data:()=>({scrollTop:null}),computed:{show(){return this.scrollTop>this.threshold}},mounted(){this.scrollTop=this.getScrollTop(),window.addEventListener("scroll",ws()(()=>{this.scrollTop=this.getScrollTop()},100))},methods:{getScrollTop:()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,scrollToTop(){window.scrollTo({top:0,behavior:"smooth"}),this.scrollTop=0}}},Is=(n(238),Object(Ss.a)(Rs,(function(){var t=this._self._c;return t("transition",{attrs:{name:"fade"}},[this.show?t("svg",{staticClass:"go-to-top",attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 49.484 28.284"},on:{click:this.scrollToTop}},[t("g",{attrs:{transform:"translate(-229 -126.358)"}},[t("rect",{attrs:{fill:"currentColor",width:"35",height:"5",rx:"2",transform:"translate(229 151.107) rotate(-45)"}}),this._v(" "),t("rect",{attrs:{fill:"currentColor",width:"35",height:"5",rx:"2",transform:"translate(274.949 154.642) rotate(-135)"}})])]):this._e()])}),[],!1,null,"1c80d7ad",null).exports),Us=[{},({Vue:t})=>{t.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},{},({Vue:t})=>{t.component("BackToTop",Is)},({Vue:t})=>{t.component("CodeCopy",Ts)}],Ds=["BackToTop"];class Ns extends class{constructor(){this.store=new Wn({data:{state:{}}})}$get(t){return this.store.state[t]}$set(t,e){Wn.set(this.store.state,t,e)}$emit(...t){this.store.$emit(...t)}$on(...t){this.store.$on(...t)}}{}Object.assign(Ns.prototype,{getPageAsyncComponent:as,getLayoutAsyncComponent:ss,getAsyncComponent:us,getVueComponent:cs});var Fs={install(t){const e=new Ns;t.$vuepress=e,t.prototype.$vuepress=e}};function Bs(t,e){const n=e.toLowerCase();return t.options.routes.some(t=>t.path.toLowerCase()===n)}var zs={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(t){const e=this.pageKey||this.$parent.$page.key;return fs("pageKey",e),Wn.component(e)||Wn.component(e,as(e)),Wn.component(e)?t(e):t("")}},qs={functional:!0,props:{slotKey:String,required:!0},render:(t,{props:e,slots:n})=>t("div",{class:["content__"+e.slotKey]},n()[e.slotKey])},Vs={computed:{openInNewWindowTitle(){return this.$themeLocaleConfig.openNewWindowText||"(opens new window)"}}},Hs=(n(239),n(240),Object(Ss.a)(Vs,(function(){var t=this._self._c;return t("span",[t("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[t("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),this._v(" "),t("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})]),this._v(" "),t("span",{staticClass:"sr-only"},[this._v(this._s(this.openInNewWindowTitle))])])}),[],!1,null,null,null).exports),Ws={functional:!0,render(t,{parent:e,children:n}){if(e._isMounted)return n;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};Wn.config.productionTip=!1,Wn.use(Va),Wn.use(Fs),Wn.mixin(function(t,e,n=Wn){!function(t){t.locales&&Object.keys(t.locales).forEach(e=>{t.locales[e].path=e});Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);const r=new(t(n.$vuepress.$get("siteData"))),o=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(r)),i={};return Object.keys(o).reduce((t,e)=>(e.startsWith("$")&&(t[e]=o[e].get),t),i),{computed:i}}(t=>class{setPage(t){this.__page=t}get $site(){return t}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:t={}}=this.$site;let e,n;for(const r in t)"/"===r?n=t[r]:0===this.$page.path.indexOf(r)&&(e=t[r]);return e||n||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $canonicalUrl(){const{canonicalUrl:t}=this.$page.frontmatter;return"string"==typeof t&&t}get $title(){const t=this.$page,{metaTitle:e}=this.$page.frontmatter;if("string"==typeof e)return e;const n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}get $description(){const t=function(t){if(t){const e=t.filter(t=>"description"===t.name)[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(t,e){for(let n=0;nn||(t.hash?!Wn.$vuepress.$get("disableScrollBehavior")&&{selector:decodeURIComponent(t.hash)}:{x:0,y:0})});!function(t){t.beforeEach((e,n,r)=>{if(Bs(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const n=e.path.replace(/\/$/,"")+".html";Bs(t,n)?r(n):r()}else r();else{const n=e.path+"/",o=e.path+".html";Bs(t,o)?r(o):Bs(t,n)?r(n):r()}})}(n);const r={};try{await Promise.all(Us.filter(t=>"function"==typeof t).map(e=>e({Vue:Wn,options:r,router:n,siteData:Ms,isServer:t})))}catch(t){console.error(t)}return{app:new Wn(Object.assign(r,{router:n,render:t=>t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},Ds.map(e=>t(e)))])})),router:n}}(!1).then(({app:t,router:e})=>{e.onReady(()=>{t.$mount("#app")})})}]); \ No newline at end of file +var r=Object.freeze({}),o=Array.isArray;function i(t){return null==t}function a(t){return null!=t}function s(t){return!0===t}function u(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function c(t){return"function"==typeof t}function l(t){return null!==t&&"object"==typeof t}var f=Object.prototype.toString;function p(t){return"[object Object]"===f.call(t)}function d(t){return"[object RegExp]"===f.call(t)}function h(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function v(t){return a(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function m(t){return null==t?"":Array.isArray(t)||p(t)&&t.toString===f?JSON.stringify(t,null,2):String(t)}function g(t){var e=parseFloat(t);return isNaN(e)?t:e}function y(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(r,1)}}var x=Object.prototype.hasOwnProperty;function w(t,e){return x.call(t,e)}function k(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var C=/-(\w)/g,O=k((function(t){return t.replace(C,(function(t,e){return e?e.toUpperCase():""}))})),$=k((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),j=/\B([A-Z])/g,S=k((function(t){return t.replace(j,"-$1").toLowerCase()}));var T=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function E(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function P(t,e){for(var n in e)t[n]=e[n];return t}function A(t){for(var e={},n=0;n0,Y=X&&X.indexOf("edge/")>0;X&&X.indexOf("android");var Z=X&&/iphone|ipad|ipod|ios/.test(X);X&&/chrome\/\d+/.test(X),X&&/phantomjs/.test(X);var tt,et=X&&X.match(/firefox\/(\d+)/),nt={}.watch,rt=!1;if(G)try{var ot={};Object.defineProperty(ot,"passive",{get:function(){rt=!0}}),window.addEventListener("test-passive",null,ot)}catch(t){}var it=function(){return void 0===tt&&(tt=!G&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),tt},at=G&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function st(t){return"function"==typeof t&&/native code/.test(t.toString())}var ut,ct="undefined"!=typeof Symbol&&st(Symbol)&&"undefined"!=typeof Reflect&&st(Reflect.ownKeys);ut="undefined"!=typeof Set&&st(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var lt=null;function ft(t){void 0===t&&(t=null),t||lt&<._scope.off(),lt=t,t&&t._scope.on()}var pt=function(){function t(t,e,n,r,o,i,a,s){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t}(),dt=function(t){void 0===t&&(t="");var e=new pt;return e.text=t,e.isComment=!0,e};function ht(t){return new pt(void 0,void 0,void 0,String(t))}function vt(t){var e=new pt(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}var mt=0,gt=[],yt=function(){function t(){this._pending=!1,this.id=mt++,this.subs=[]}return t.prototype.addSub=function(t){this.subs.push(t)},t.prototype.removeSub=function(t){this.subs[this.subs.indexOf(t)]=null,this._pending||(this._pending=!0,gt.push(this))},t.prototype.depend=function(e){t.target&&t.target.addDep(this)},t.prototype.notify=function(t){var e=this.subs.filter((function(t){return t}));for(var n=0,r=e.length;n0&&(Xt((c=t(c,"".concat(n||"","_").concat(r)))[0])&&Xt(f)&&(p[l]=ht(f.text+c[0].text),c.shift()),p.push.apply(p,c)):u(c)?Xt(f)?p[l]=ht(f.text+c):""!==c&&p.push(ht(c)):Xt(c)&&Xt(f)?p[l]=ht(f.text+c.text):(s(e._isVList)&&a(c.tag)&&i(c.key)&&a(n)&&(c.key="__vlist".concat(n,"_").concat(r,"__")),p.push(c)));return p}(t):void 0}function Xt(t){return a(t)&&a(t.text)&&!1===t.isComment}function Jt(t,e){var n,r,i,s,u=null;if(o(t)||"string"==typeof t)for(u=new Array(t.length),n=0,r=t.length;n0,s=e?!!e.$stable:!a,u=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(s&&o&&o!==r&&u===o.$key&&!a&&!o.$hasNormal)return o;for(var c in i={},e)e[c]&&"$"!==c[0]&&(i[c]=ve(t,n,c,e[c]))}else i={};for(var l in n)l in i||(i[l]=me(n,l));return e&&Object.isExtensible(e)&&(e._normalized=i),H(i,"$stable",s),H(i,"$key",u),H(i,"$hasNormal",a),i}function ve(t,e,n,r){var i=function(){var e=lt;ft(t);var n=arguments.length?r.apply(null,arguments):r({}),i=(n=n&&"object"==typeof n&&!o(n)?[n]:Gt(n))&&n[0];return ft(e),n&&(!i||1===n.length&&i.isComment&&!de(i))?void 0:n};return r.proxy&&Object.defineProperty(e,n,{get:i,enumerable:!0,configurable:!0}),i}function me(t,e){return function(){return t[e]}}function ge(t){return{get attrs(){if(!t._attrsProxy){var e=t._attrsProxy={};H(e,"_v_attr_proxy",!0),ye(e,t.$attrs,r,t,"$attrs")}return t._attrsProxy},get listeners(){t._listenersProxy||ye(t._listenersProxy={},t.$listeners,r,t,"$listeners");return t._listenersProxy},get slots(){return function(t){t._slotsProxy||_e(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(t)},emit:T(t.$emit,t),expose:function(e){e&&Object.keys(e).forEach((function(n){return Nt(t,e,n)}))}}}function ye(t,e,n,r,o){var i=!1;for(var a in e)a in t?e[a]!==n[a]&&(i=!0):(i=!0,be(t,a,r,o));for(var a in t)a in e||(i=!0,delete t[a]);return i}function be(t,e,n,r){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return n[r][e]}})}function _e(t,e){for(var n in e)t[n]=e[n];for(var n in t)n in e||delete t[n]}var xe=null;function we(t,e){return(t.__esModule||ct&&"Module"===t[Symbol.toStringTag])&&(t=t.default),l(t)?e.extend(t):t}function ke(t){if(o(t))for(var e=0;edocument.createEvent("Event").timeStamp&&(un=function(){return cn.now()})}var ln=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function fn(){var t,e;for(sn=un(),on=!0,tn.sort(ln),an=0;anan&&tn[n].id>t.id;)n--;tn.splice(n+1,0,t)}else tn.push(t);rn||(rn=!0,De(fn))}}function dn(t,e){if(t){for(var n=Object.create(null),r=ct?Reflect.ownKeys(t):Object.keys(t),o=0;o-1)if(i&&!w(o,"default"))a=!1;else if(""===a||a===S(t)){var u=Rn(String,o.type);(u<0||s-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!d(t)&&t.test(e)}function Jn(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var a=n[i];if(a){var s=a.name;s&&!e(s)&&Qn(n,i,r,o)}}}function Qn(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,_(n,e)}Wn.prototype._init=function(t){var e=this;e._uid=Vn++,e._isVue=!0,e.__v_skip=!0,e._scope=new Bt(!0),e._scope._vm=!0,t&&t._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=Tn(Hn(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(e),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Ge(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,o=n&&n.context;t.$slots=fe(e._renderChildren,o),t.$scopedSlots=n?he(t.$parent,n.data.scopedSlots,t.$slots):r,t._c=function(e,n,r,o){return Ce(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return Ce(t,e,n,r,o,!0)};var i=n&&n.data;Pt(t,"$attrs",i&&i.attrs||r,null,!0),Pt(t,"$listeners",e._parentListeners||r,null,!0)}(e),Ze(e,"beforeCreate",void 0,!1),function(t){var e=dn(t.$options.inject,t);e&&(jt(!1),Object.keys(e).forEach((function(n){Pt(t,n,e[n])})),jt(!0))}(e),Dn(e),function(t){var e=t.$options.provide;if(e){var n=c(e)?e.call(t):e;if(!l(n))return;for(var r=zt(t),o=ct?Reflect.ownKeys(n):Object.keys(n),i=0;i1?E(n):n;for(var r=E(arguments,1),o='event handler for "'.concat(t,'"'),i=0,a=n.length;iparseInt(this.max)&&Qn(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Qn(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){Jn(t,(function(t){return Xn(e,t)}))})),this.$watch("exclude",(function(e){Jn(t,(function(t){return!Xn(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=ke(t),n=e&&e.componentOptions;if(n){var r=Gn(n),o=this.include,i=this.exclude;if(o&&(!r||!Xn(o,r))||i&&r&&Xn(i,r))return e;var a=this.cache,s=this.keys,u=null==e.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):e.key;a[u]?(e.componentInstance=a[u].componentInstance,_(s,u),s.push(u)):(this.vnodeToCache=e,this.keyToCache=u),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return z}};Object.defineProperty(t,"config",e),t.util={warn:wn,extend:P,mergeOptions:Tn,defineReactive:Pt},t.set=At,t.delete=Lt,t.nextTick=De,t.observable=function(t){return Et(t),t},t.options=Object.create(null),F.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,P(t.options.components,Zn),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=E(arguments,1);return n.unshift(this),c(t.install)?t.install.apply(t,n):c(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=Tn(this.options,t),this}}(t),Kn(t),function(t){F.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&p(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&c(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(Wn),Object.defineProperty(Wn.prototype,"$isServer",{get:it}),Object.defineProperty(Wn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Wn,"FunctionalRenderContext",{value:hn}),Wn.version="2.7.14";var tr=y("style,class"),er=y("input,textarea,option,select,progress"),nr=y("contenteditable,draggable,spellcheck"),rr=y("events,caret,typing,plaintext-only"),or=y("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),ir="http://www.w3.org/1999/xlink",ar=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},sr=function(t){return ar(t)?t.slice(6,t.length):""},ur=function(t){return null==t||!1===t};function cr(t){for(var e=t.data,n=t,r=t;a(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=lr(r.data,e));for(;a(n=n.parent);)n&&n.data&&(e=lr(e,n.data));return function(t,e){if(a(t)||a(e))return fr(t,pr(e));return""}(e.staticClass,e.class)}function lr(t,e){return{staticClass:fr(t.staticClass,e.staticClass),class:a(t.class)?[t.class,e.class]:e.class}}function fr(t,e){return t?e?t+" "+e:t:e||""}function pr(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,o=t.length;r-1?Ir(t,e,n):or(e)?ur(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):nr(e)?t.setAttribute(e,function(t,e){return ur(e)||"false"===e?"false":"contenteditable"===t&&rr(e)?e:"true"}(e,n)):ar(e)?ur(n)?t.removeAttributeNS(ir,sr(e)):t.setAttributeNS(ir,e,n):Ir(t,e,n)}function Ir(t,e,n){if(ur(n))t.removeAttribute(e);else{if(J&&!Q&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var Ur={create:Mr,update:Mr};function Dr(t,e){var n=e.elm,r=e.data,o=t.data;if(!(i(r.staticClass)&&i(r.class)&&(i(o)||i(o.staticClass)&&i(o.class)))){var s=cr(e),u=n._transitionClasses;a(u)&&(s=fr(s,pr(u))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var Nr,Fr={create:Dr,update:Dr};function Br(t,e,n){var r=Nr;return function o(){var i=e.apply(null,arguments);null!==i&&Vr(t,o,n,r)}}var zr=Ee&&!(et&&Number(et[1])<=53);function qr(t,e,n,r){if(zr){var o=sn,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}Nr.addEventListener(t,e,rt?{capture:n,passive:r}:n)}function Vr(t,e,n,r){(r||Nr).removeEventListener(t,e._wrapper||e,n)}function Hr(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=t.data.on||{};Nr=e.elm||t.elm,function(t){if(a(t.__r)){var e=J?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}a(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(n),Ht(n,r,qr,Vr,Br,e.context),Nr=void 0}}var Wr,Kr={create:Hr,update:Hr,destroy:function(t){return Hr(t,kr)}};function Gr(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,r,o=e.elm,u=t.data.domProps||{},c=e.data.domProps||{};for(n in(a(c.__ob__)||s(c._v_attr_proxy))&&(c=e.data.domProps=P({},c)),u)n in c||(o[n]="");for(n in c){if(r=c[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===u[n])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===n&&"PROGRESS"!==o.tagName){o._value=r;var l=i(r)?"":String(r);Xr(o,l)&&(o.value=l)}else if("innerHTML"===n&&vr(o.tagName)&&i(o.innerHTML)){(Wr=Wr||document.createElement("div")).innerHTML="".concat(r,"");for(var f=Wr.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;f.firstChild;)o.appendChild(f.firstChild)}else if(r!==u[n])try{o[n]=r}catch(t){}}}}function Xr(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,r=t._vModifiers;if(a(r)){if(r.number)return g(n)!==g(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var Jr={create:Gr,update:Gr},Qr=k((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function Yr(t){var e=Zr(t.style);return t.staticStyle?P(t.staticStyle,e):e}function Zr(t){return Array.isArray(t)?A(t):"string"==typeof t?Qr(t):t}var to,eo=/^--/,no=/\s*!important$/,ro=function(t,e,n){if(eo.test(e))t.style.setProperty(e,n);else if(no.test(n))t.style.setProperty(S(e),n.replace(no,""),"important");else{var r=io(e);if(Array.isArray(n))for(var o=0,i=n.length;o-1?e.split(uo).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" ".concat(t.getAttribute("class")||""," ");n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function lo(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(uo).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" ".concat(t.getAttribute("class")||""," "),r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function fo(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&P(e,po(t.name||"v")),P(e,t),e}return"string"==typeof t?po(t):void 0}}var po=k((function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}})),ho=G&&!Q,vo="transition",mo="transitionend",go="animation",yo="animationend";ho&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(vo="WebkitTransition",mo="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(go="WebkitAnimation",yo="webkitAnimationEnd"));var bo=G?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function _o(t){bo((function(){bo(t)}))}function xo(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),co(t,e))}function wo(t,e){t._transitionClasses&&_(t._transitionClasses,e),lo(t,e)}function ko(t,e,n){var r=Oo(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s="transition"===o?mo:yo,u=0,c=function(){t.removeEventListener(s,l),n()},l=function(e){e.target===t&&++u>=a&&c()};setTimeout((function(){u0&&(n="transition",l=a,f=i.length):"animation"===e?c>0&&(n="animation",l=c,f=u.length):f=(n=(l=Math.max(a,c))>0?a>c?"transition":"animation":null)?"transition"===n?i.length:u.length:0,{type:n,timeout:l,propCount:f,hasTransform:"transition"===n&&Co.test(r[vo+"Property"])}}function $o(t,e){for(;t.length1}function Ao(t,e){!0!==e.data.show&&So(e)}var Lo=function(t){var e,n,r={},c=t.modules,l=t.nodeOps;for(e=0;eh?_(t,i(n[g+1])?null:n[g+1].elm,n,d,g,r):d>g&&w(e,f,h)}(f,v,g,n,c):a(g)?(a(t.text)&&l.setTextContent(f,""),_(f,null,g,0,g.length-1,n)):a(v)?w(v,0,v.length-1):a(t.text)&&l.setTextContent(f,""):t.text!==e.text&&l.setTextContent(f,e.text),a(h)&&a(d=h.hook)&&a(d=d.postpatch)&&d(t,e)}}}function $(t,e,n){if(s(n)&&a(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,a.selected!==i&&(a.selected=i);else if(I(Do(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));o||(t.selectedIndex=-1)}}function Uo(t,e){return e.every((function(e){return!I(e,t)}))}function Do(t){return"_value"in t?t._value:t.value}function No(t){t.target.composing=!0}function Fo(t){t.target.composing&&(t.target.composing=!1,Bo(t.target,"input"))}function Bo(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function zo(t){return!t.componentInstance||t.data&&t.data.transition?t:zo(t.componentInstance._vnode)}var qo={model:Mo,show:{bind:function(t,e,n){var r=e.value,o=(n=zo(n)).data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,So(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=zo(n)).data&&n.data.transition?(n.data.show=!0,r?So(n,(function(){t.style.display=t.__vOriginalDisplay})):To(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}}},Vo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Ho(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Ho(ke(e.children)):t}function Wo(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var r in o)e[O(r)]=o[r];return e}function Ko(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var Go=function(t){return t.tag||de(t)},Xo=function(t){return"show"===t.name},Jo={name:"transition",props:Vo,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(Go)).length){0;var r=this.mode;0;var o=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;var i=Ho(o);if(!i)return o;if(this._leaving)return Ko(t,o);var a="__transition-".concat(this._uid,"-");i.key=null==i.key?i.isComment?a+"comment":a+i.tag:u(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var s=(i.data||(i.data={})).transition=Wo(this),c=this._vnode,l=Ho(c);if(i.data.directives&&i.data.directives.some(Xo)&&(i.data.show=!0),l&&l.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(i,l)&&!de(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=P({},s);if("out-in"===r)return this._leaving=!0,Wt(f,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),Ko(t,o);if("in-out"===r){if(de(i))return c;var p,d=function(){p()};Wt(s,"afterEnter",d),Wt(s,"enterCancelled",d),Wt(f,"delayLeave",(function(t){p=t}))}}return o}}},Qo=P({tag:String,moveClass:String},Vo);function Yo(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function Zo(t){t.data.newPos=t.elm.getBoundingClientRect()}function ti(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate(".concat(r,"px,").concat(o,"px)"),i.transitionDuration="0s"}}delete Qo.mode;var ei={Transition:Jo,TransitionGroup:{props:Qo,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Je(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=Wo(this),s=0;s-1?gr[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:gr[t]=/HTMLUnknownElement/.test(e.toString())},P(Wn.options.directives,qo),P(Wn.options.components,ei),Wn.prototype.__patch__=G?Lo:L,Wn.prototype.$mount=function(t,e){return function(t,e,n){var r;t.$el=e,t.$options.render||(t.$options.render=dt),Ze(t,"beforeMount"),r=function(){t._update(t._render(),n)},new Ve(t,r,L,{before:function(){t._isMounted&&!t._isDestroyed&&Ze(t,"beforeUpdate")}},!0),n=!1;var o=t._preWatchers;if(o)for(var i=0;i=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),c=e&&e.path||"/",l=u.path?wi(u.path,c,n||o.append):c,f=function(t,e,n){void 0===e&&(e={});var r,o=n||ci;try{r=o(t||"")}catch(t){r={}}for(var i in e){var a=e[i];r[i]=Array.isArray(a)?a.map(ui):ui(a)}return r}(u.query,o.query,r&&r.options.parseQuery),p=o.hash||u.hash;return p&&"#"!==p.charAt(0)&&(p="#"+p),{_normalized:!0,path:l,query:f,hash:p}}var qi,Vi=function(){},Hi={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,a=o.route,s=o.href,u={},c=n.options.linkActiveClass,l=n.options.linkExactActiveClass,f=null==c?"router-link-active":c,p=null==l?"router-link-exact-active":l,d=null==this.activeClass?f:this.activeClass,h=null==this.exactActiveClass?p:this.exactActiveClass,v=a.redirectedFrom?pi(null,zi(a.redirectedFrom),null,n):a;u[h]=gi(r,v,this.exactPath),u[d]=this.exact||this.exactPath?u[h]:function(t,e){return 0===t.path.replace(fi,"/").indexOf(e.path.replace(fi,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,v);var m=u[h]?this.ariaCurrentValue:null,g=function(t){Wi(t)&&(e.replace?n.replace(i,Vi):n.push(i,Vi))},y={click:Wi};Array.isArray(this.event)?this.event.forEach((function(t){y[t]=g})):y[this.event]=g;var b={class:u},_=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:s,route:a,navigate:g,isActive:u[d],isExactActive:u[h]});if(_){if(1===_.length)return _[0];if(_.length>1||!_.length)return 0===_.length?t():t("span",{},_)}if("a"===this.tag)b.on=y,b.attrs={href:s,"aria-current":m};else{var x=function t(e){var n;if(e)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=Bi(l.path,s.params),u(l,s,a)}if(s.path){s.params={};for(var d=0;d-1}function ka(t,e){return wa(t)&&t._isRouter&&(null==e||t.type===e)}function Ca(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}function Oa(t){return function(e,n,r){var o=!1,i=0,a=null;$a(t,(function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var u,c=Ta((function(e){var o;((o=e).__esModule||Sa&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:qi.extend(e),n.components[s]=e,--i<=0&&r()})),l=Ta((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=wa(t)?t:new Error(e),r(a))}));try{u=t(c,l)}catch(t){l(t)}if(u)if("function"==typeof u.then)u.then(c,l);else{var f=u.component;f&&"function"==typeof f.then&&f.then(c,l)}}})),o||r()}}function $a(t,e){return ja(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function ja(t){return Array.prototype.concat.apply([],t)}var Sa="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Ta(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var Ea=function(t,e){this.router=t,this.base=function(t){if(!t)if(Ki){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=hi,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Pa(t,e,n,r){var o=$a(t,(function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=qi.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,o,i)})):n(a,r,o,i)}));return ja(r?o.reverse():o)}function Aa(t,e){if(e)return function(){return t.apply(e,arguments)}}Ea.prototype.listen=function(t){this.cb=t},Ea.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Ea.prototype.onError=function(t){this.errorCbs.push(t)},Ea.prototype.transitionTo=function(t,e,n){var r,o=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(r,(function(){o.updateRoute(r),e&&e(r),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(r,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!o.ready&&(ka(t,ga.redirected)&&i===hi||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},Ea.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current;this.pending=t;var i,a,s=function(t){!ka(t)&&wa(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},u=t.matched.length-1,c=o.matched.length-1;if(gi(t,o)&&u===c&&t.matched[u]===o.matched[c])return this.ensureURL(),t.hash&&ia(this.router,o,t,!1),s(((a=_a(i=o,t,ga.duplicated,'Avoided redundant navigation to current location: "'+i.fullPath+'".')).name="NavigationDuplicated",a));var l=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=ha&&n;r&&this.listeners.push(oa());var o=function(){var n=t.current,o=Ma(t.base);t.current===hi&&o===t._startLocation||t.transitionTo(o,(function(t){r&&ia(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){va(ki(r.base+t.fullPath)),ia(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){ma(ki(r.base+t.fullPath)),ia(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(Ma(this.base)!==this.current.fullPath){var e=ki(this.base+this.current.fullPath);t?va(e):ma(e)}},e.prototype.getCurrentLocation=function(){return Ma(this.base)},e}(Ea);function Ma(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(ki(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Ra=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=Ma(t);if(!/^\/#/.test(e))return window.location.replace(ki(t+"/#"+e)),!0}(this.base)||Ia()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=ha&&e;n&&this.listeners.push(oa());var r=function(){var e=t.current;Ia()&&t.transitionTo(Ua(),(function(r){n&&ia(t.router,r,e,!0),ha||Fa(r.fullPath)}))},o=ha?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Na(t.fullPath),ia(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Fa(t.fullPath),ia(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Ua()!==e&&(t?Na(e):Fa(e))},e.prototype.getCurrentLocation=function(){return Ua()},e}(Ea);function Ia(){var t=Ua();return"/"===t.charAt(0)||(Fa("/"+t),!1)}function Ua(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Da(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function Na(t){ha?va(Da(t)):window.location.hash=t}function Fa(t){ha?ma(Da(t)):window.location.replace(Da(t))}var Ba=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){ka(t,ga.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Ea),za=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Ji(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!ha&&!1!==t.fallback,this.fallback&&(e="hash"),Ki||(e="abstract"),this.mode=e,e){case"history":this.history=new La(this,t.base);break;case"hash":this.history=new Ra(this,t.base,this.fallback);break;case"abstract":this.history=new Ba(this,t.base);break;default:0}},qa={currentRoute:{configurable:!0}};za.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},qa.currentRoute.get=function(){return this.history&&this.history.current},za.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof La||n instanceof Ra){var r=function(t){n.setupListeners(),function(t){var r=n.current,o=e.options.scrollBehavior;ha&&o&&"fullPath"in t&&ia(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},za.prototype.beforeEach=function(t){return Ha(this.beforeHooks,t)},za.prototype.beforeResolve=function(t){return Ha(this.resolveHooks,t)},za.prototype.afterEach=function(t){return Ha(this.afterHooks,t)},za.prototype.onReady=function(t,e){this.history.onReady(t,e)},za.prototype.onError=function(t){this.history.onError(t)},za.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},za.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},za.prototype.go=function(t){this.history.go(t)},za.prototype.back=function(){this.go(-1)},za.prototype.forward=function(){this.go(1)},za.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},za.prototype.resolve=function(t,e,n){var r=zi(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?ki(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},za.prototype.getRoutes=function(){return this.matcher.getRoutes()},za.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==hi&&this.history.transitionTo(this.history.getCurrentLocation())},za.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==hi&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(za.prototype,qa);var Va=za;function Ha(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}za.install=function t(e){if(!t.installed||qi!==e){t.installed=!0,qi=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",_i),e.component("RouterLink",Hi);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},za.version="3.6.5",za.isNavigationFailure=ka,za.NavigationFailureType=ga,za.START_LOCATION=hi,Ki&&window.Vue&&window.Vue.use(za);n(96);n(92),n(128);var Wa={NotFound:()=>n.e(6).then(n.bind(null,280)),Layout:()=>Promise.all([n.e(0),n.e(2)]).then(n.bind(null,279))},Ka={"v-cf184462":()=>n.e(7).then(n.bind(null,283)),"v-49ef63ff":()=>n.e(10).then(n.bind(null,284)),"v-440298ff":()=>n.e(8).then(n.bind(null,285)),"v-5f99fff9":()=>n.e(13).then(n.bind(null,286)),"v-75b0c0ff":()=>n.e(14).then(n.bind(null,287)),"v-2a284842":()=>n.e(15).then(n.bind(null,288)),"v-61821d87":()=>n.e(16).then(n.bind(null,289)),"v-65455d52":()=>n.e(11).then(n.bind(null,290)),"v-7e7f881f":()=>n.e(17).then(n.bind(null,291)),"v-031147ce":()=>n.e(9).then(n.bind(null,292)),"v-3f415241":()=>n.e(20).then(n.bind(null,293)),"v-01c7100e":()=>n.e(21).then(n.bind(null,294)),"v-7813dc19":()=>n.e(12).then(n.bind(null,295)),"v-8a6ff24e":()=>n.e(22).then(n.bind(null,296)),"v-ff770e42":()=>n.e(23).then(n.bind(null,297)),"v-82155162":()=>n.e(24).then(n.bind(null,298)),"v-4371f14e":()=>n.e(18).then(n.bind(null,299)),"v-570f3d19":()=>n.e(19).then(n.bind(null,300))};function Ga(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const Xa=/-(\w)/g,Ja=Ga(t=>t.replace(Xa,(t,e)=>e?e.toUpperCase():"")),Qa=/\B([A-Z])/g,Ya=Ga(t=>t.replace(Qa,"-$1").toLowerCase()),Za=Ga(t=>t.charAt(0).toUpperCase()+t.slice(1));function ts(t,e){if(!e)return;if(t(e))return t(e);return e.includes("-")?t(Za(Ja(e))):t(Za(e))||t(Ya(e))}const es=Object.assign({},Wa,Ka),ns=t=>es[t],rs=t=>Ka[t],os=t=>Wa[t],is=t=>Wn.component(t);function as(t){return ts(rs,t)}function ss(t){return ts(os,t)}function us(t){return ts(ns,t)}function cs(t){return ts(is,t)}function ls(...t){return Promise.all(t.filter(t=>t).map(async t=>{if(!cs(t)&&us(t)){const e=await us(t)();Wn.component(t,e.default)}}))}function fs(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}var ps=n(90),ds=n.n(ps),hs=n(91),vs=n.n(hs),ms={created(){if(this.siteMeta=this.$site.headTags.filter(([t])=>"meta"===t).map(([t,e])=>e),this.$ssrContext){const e=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(t=e)?t.map(t=>{let e="{e+=` ${n}="${vs()(t[n])}"`}),e+">"}).join("\n "):"",this.$ssrContext.canonicalLink=ys(this.$canonicalUrl)}var t},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const t=this.getMergedMetaTags();this.currentMetaTags=bs(t,this.currentMetaTags)},getMergedMetaTags(){const t=this.$page.frontmatter.meta||[];return ds()([{name:"description",content:this.$description}],t,this.siteMeta,_s)},updateCanonicalLink(){gs(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",ys(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){bs(null,this.currentMetaTags),gs()}};function gs(){const t=document.querySelector("link[rel='canonical']");t&&t.remove()}function ys(t=""){return t?``:""}function bs(t,e){if(e&&[...e].filter(t=>t.parentNode===document.head).forEach(t=>document.head.removeChild(t)),t)return t.map(t=>{const e=document.createElement("meta");return Object.keys(t).forEach(n=>{e.setAttribute(n,t[n])}),document.head.appendChild(e),e})}function _s(t){for(const e of["name","property","itemprop"])if(t.hasOwnProperty(e))return t[e]+e;return JSON.stringify(t)}var xs=n(23),ws=n.n(xs),ks={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:ws()((function(){this.setActiveHash()}),300),setActiveHash(){const t=[].slice.call(document.querySelectorAll(".sidebar-link")),e=[].slice.call(document.querySelectorAll(".header-anchor")).filter(e=>t.some(t=>t.hash===e.hash)),n=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),r=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),o=window.innerHeight+n;for(let t=0;t=i.parentElement.offsetTop+10&&(!a||n{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},Cs=n(24),Os=n.n(Cs),$s={mounted(){Os.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||Wn.component(t.name)||Os.a.start(),n()}),this.$router.afterEach(()=>{Os.a.done(),this.isSidebarOpen=!1})}},js={props:{parent:Object,code:String,options:{align:String,color:String,backgroundTransition:Boolean,backgroundColor:String,successText:String,staticIcon:Boolean}},data:()=>({success:!1,originalBackground:null,originalTransition:null}),computed:{alignStyle(){let t={};return t[this.options.align]="7.5px",t},iconClass(){return this.options.staticIcon?"":"hover"}},mounted(){this.originalTransition=this.parent.style.transition,this.originalBackground=this.parent.style.background},beforeDestroy(){this.parent.style.transition=this.originalTransition,this.parent.style.background=this.originalBackground},methods:{hexToRgb(t){let e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return e?{r:parseInt(e[1],16),g:parseInt(e[2],16),b:parseInt(e[3],16)}:null},copyToClipboard(t){if(navigator.clipboard)navigator.clipboard.writeText(this.code).then(()=>{this.setSuccessTransitions()},()=>{});else{let t=document.createElement("textarea");document.body.appendChild(t),t.value=this.code,t.select(),document.execCommand("Copy"),t.remove(),this.setSuccessTransitions()}},setSuccessTransitions(){if(clearTimeout(this.successTimeout),this.options.backgroundTransition){this.parent.style.transition="background 350ms";let t=this.hexToRgb(this.options.backgroundColor);this.parent.style.background=`rgba(${t.r}, ${t.g}, ${t.b}, 0.1)`}this.success=!0,this.successTimeout=setTimeout(()=>{this.options.backgroundTransition&&(this.parent.style.background=this.originalBackground,this.parent.style.transition=this.originalTransition),this.success=!1},500)}}},Ss=(n(234),n(7)),Ts=Object(Ss.a)(js,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"code-copy"},[e("svg",{class:t.iconClass,style:t.alignStyle,attrs:{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},on:{click:t.copyToClipboard}},[e("path",{attrs:{fill:"none",d:"M0 0h24v24H0z"}}),t._v(" "),e("path",{attrs:{fill:t.options.color,d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z"}})]),t._v(" "),e("span",{class:t.success?"success":"",style:t.alignStyle},[t._v("\n "+t._s(t.options.successText)+"\n ")])])}),[],!1,null,"56cbd8b4",null).exports,Es=(n(235),[ms,ks,$s,{updated(){this.update()},methods:{update(){setTimeout(()=>{document.querySelectorAll('div[class*="language-"] pre').forEach(t=>{if(t.classList.contains("code-copy-added"))return;let e=new(Wn.extend(Ts));e.options={align:"bottom",color:"#27b1ff",backgroundTransition:!0,backgroundColor:"#0075b8",successText:"Copied!",staticIcon:!1},e.code=t.innerText,e.parent=t,e.$mount(),t.classList.add("code-copy-added"),t.appendChild(e.$el)})},100)}}}]),Ps={name:"GlobalLayout",computed:{layout(){const t=this.getLayout();return fs("layout",t),Wn.component(t)}},methods:{getLayout(){if(this.$page.path){const t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},As=Object(Ss.a)(Ps,(function(){return(0,this._self._c)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(t,e,n){switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),t[e].push(...n);break;default:throw new Error("Unknown option name.")}}(As,"mixins",Es);const Ls=[{name:"v-cf184462",path:"/",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-cf184462").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-49ef63ff",path:"/faq/faq.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-49ef63ff").then(n)}},{name:"v-440298ff",path:"/api/api.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-440298ff").then(n)}},{name:"v-5f99fff9",path:"/install-tutorial/installation.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-5f99fff9").then(n)}},{name:"v-75b0c0ff",path:"/sdk/sdk.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-75b0c0ff").then(n)}},{name:"v-2a284842",path:"/start/introduce.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-2a284842").then(n)}},{name:"v-61821d87",path:"/start/system-structure.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-61821d87").then(n)}},{name:"v-65455d52",path:"/install-tutorial/custom-installation.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-65455d52").then(n)}},{name:"v-7e7f881f",path:"/tutorial/client-config.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-7e7f881f").then(n)}},{name:"v-031147ce",path:"/change/change-log.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-031147ce").then(n)}},{name:"v-3f415241",path:"/tutorial/performance-testing.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-3f415241").then(n)}},{name:"v-01c7100e",path:"/tutorial/performance-tuning.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-01c7100e").then(n)}},{name:"v-7813dc19",path:"/install-tutorial/docker-compose.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-7813dc19").then(n)}},{name:"v-8a6ff24e",path:"/tutorial/recommend-tool.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-8a6ff24e").then(n)}},{name:"v-ff770e42",path:"/tutorial/using-cdn.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-ff770e42").then(n)}},{name:"v-82155162",path:"/tutorial/using-tutorials.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-82155162").then(n)}},{name:"v-4371f14e",path:"/tutorial/common-problem.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-4371f14e").then(n)}},{name:"v-570f3d19",path:"/tutorial/des-of-related-doc.html",component:As,beforeEnter:(t,e,n)=>{ls("Layout","v-570f3d19").then(n)}},{path:"*",component:As}],Ms={title:"Trojan Panel",description:"支持Xray/Trojan-Go/Hysteria/NaiveProxy的多用户Web管理面板",base:"/",headTags:[["link",{rel:"icon",href:"logo.png"}],["script",{},'\n var _hmt = _hmt || [];\n(function() {\n var hm = document.createElement("script");\n hm.src = "https://hm.baidu.com/hm.js?37275f991707c27db91dbb6f668ee1c6";\n var s = document.getElementsByTagName("script")[0]; \n s.parentNode.insertBefore(hm, s);\n})();\n'],["script",{async:!0,src:"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9763379843362753",crossorigin:"anonymous"}]],pages:[{title:"Home",frontmatter:{home:!0,heroImage:"/logo.png",heroText:"Trojan Panel",tagline:"支持Xray/Trojan-Go/Hysteria/NaiveProxy的多用户Web管理面板",actionText:"快速上手 →",actionLink:"./start/introduce",features:[{title:"极速搭建",details:"一键安装脚本,降低部署门槛,快速搭建系统"},{title:"国际化",details:"系统语言支持中文/English/한국인/فارسی"},{title:"多代理支持",details:"节点类型支持Xray/Trojan-Go/Hysteria/NaiveProxy"},{title:"分布式",details:"前后端分离开发,减少模块之间耦合度,可以自由组合部署在多个服务器"},{title:"功能强大",details:"支持登录注册/用户管理/节点管理/邮件管理/黑名单管理/自定义伪装网站/系统看板等"},{title:"所见即所得",details:"支持多节点管理,自动化管理远程节点,自动化申请/续签证书,面板内编辑节点,远程服务实时修改节点配置"}],footer:"Copyright © 2021-2023 Trojan Panel"},regularPath:"/",relativePath:"README.md",key:"v-cf184462",path:"/",headers:[{level:2,title:"🚀 安装",slug:"🚀-安装"},{level:2,title:"✨ 社区",slug:"✨-社区"},{level:2,title:"🔍 报告缺陷与问题",slug:"🔍-报告缺陷与问题"},{level:2,title:"💞 支持",slug:"💞-支持"},{level:2,title:"🌟 Star随时间变化",slug:"🌟-star随时间变化"}],lastUpdated:"11/15/2023, 2:56:56 PM",lastUpdatedTimestamp:1700031416e3},{title:"FAQ",frontmatter:{},regularPath:"/faq/faq.html",relativePath:"faq/faq.md",key:"v-49ef63ff",path:"/faq/faq.html",headers:[{level:2,title:"联机和单机有什么区别?",slug:"联机和单机有什么区别"},{level:2,title:"是否考虑支持商业化功能?",slug:"是否考虑支持商业化功能"},{level:2,title:"会收费么?",slug:"会收费么"},{level:2,title:"是否开源?",slug:"是否开源"}],lastUpdated:"8/6/2023, 12:08:11 AM",lastUpdatedTimestamp:1691251691e3},{title:"API文档",frontmatter:{},regularPath:"/api/api.html",relativePath:"api/api.md",key:"v-440298ff",path:"/api/api.html",headers:[{level:2,title:"开发前必读",slug:"开发前必读"},{level:2,title:"开放接口",slug:"开放接口"},{level:3,title:"验证码",slug:"验证码"},{level:3,title:"登录",slug:"登录"},{level:3,title:"注册",slug:"注册"},{level:3,title:"系统默认设置",slug:"系统默认设置"},{level:3,title:"订阅",slug:"订阅"},{level:3,title:"logo",slug:"logo"},{level:2,title:"首页",slug:"首页"},{level:3,title:"仪表板",slug:"仪表板"},{level:3,title:"流量排行榜",slug:"流量排行榜"},{level:2,title:"账户",slug:"账户"},{level:3,title:"注销",slug:"注销"},{level:3,title:"查询单个账户",slug:"查询单个账户"},{level:3,title:"创建账户",slug:"创建账户"},{level:3,title:"获取当前账户信息",slug:"获取当前账户信息"},{level:3,title:"分页查询账户",slug:"分页查询账户"},{level:3,title:"通过id删除账户",slug:"通过id删除账户"},{level:3,title:"修改密码",slug:"修改密码"},{level:3,title:"修改用户名或者邮箱",slug:"修改用户名或者邮箱"},{level:3,title:"修改账户",slug:"修改账户"},{level:3,title:"获取Clash订阅地址",slug:"获取clash订阅地址"},{level:3,title:"获取指定账户的Clash订阅地址",slug:"获取指定账户的clash订阅地址"},{level:3,title:"重设下载和上传流量",slug:"重设下载和上传流量"},{level:3,title:"导出账户",slug:"导出账户"},{level:3,title:"导入账户",slug:"导入账户"},{level:3,title:"批量创建账户",slug:"批量创建账户"},{level:3,title:"导出未使用的账户",slug:"导出未使用的账户"},{level:2,title:"角色",slug:"角色"},{level:3,title:"查询角色列表",slug:"查询角色列表"},{level:2,title:"服务器",slug:"服务器"},{level:3,title:"根据id查询服务器",slug:"根据id查询服务器"},{level:3,title:"创建服务器",slug:"创建服务器"},{level:3,title:"分页查询服务器",slug:"分页查询服务器"},{level:3,title:"删除服务器",slug:"删除服务器"},{level:3,title:"更新服务器",slug:"更新服务器"},{level:3,title:"查询服务器列表",slug:"查询服务器列表"},{level:3,title:"查询服务器状态",slug:"查询服务器状态"},{level:3,title:"导出服务器",slug:"导出服务器"},{level:3,title:"导入服务器",slug:"导入服务器"},{level:2,title:"节点",slug:"节点"},{level:3,title:"根据id查询节点",slug:"根据id查询节点"},{level:3,title:"查询节点连接信息",slug:"查询节点连接信息"},{level:3,title:"创建节点",slug:"创建节点"},{level:3,title:"分页查询节点",slug:"分页查询节点"},{level:3,title:"删除节点",slug:"删除节点"},{level:3,title:"更新节点",slug:"更新节点"},{level:3,title:"获取节点二维码",slug:"获取节点二维码"},{level:3,title:"复制URL",slug:"复制url"},{level:3,title:"节点部分属性的默认值",slug:"节点部分属性的默认值"},{level:2,title:"节点类型",slug:"节点类型"},{level:3,title:"查询节点类型列表",slug:"查询节点类型列表"},{level:2,title:"系统设置",slug:"系统设置"},{level:3,title:"查询系统设置",slug:"查询系统设置"},{level:3,title:"更新系统配置",slug:"更新系统配置"},{level:3,title:"上传静态网站文件",slug:"上传静态网站文件"},{level:3,title:"上传logo",slug:"上传logo"},{level:2,title:"黑名单",slug:"黑名单"},{level:3,title:"分页查询黑名单",slug:"分页查询黑名单"},{level:3,title:"删除黑名单",slug:"删除黑名单"},{level:3,title:"创建黑名单",slug:"创建黑名单"},{level:2,title:"邮件",slug:"邮件"},{level:3,title:"查询邮件发送记录",slug:"查询邮件发送记录"},{level:2,title:"文件任务",slug:"文件任务"},{level:3,title:"分页查询文件任务",slug:"分页查询文件任务"},{level:3,title:"删除文件任务",slug:"删除文件任务"},{level:3,title:"下载文件任务的文件",slug:"下载文件任务的文件"},{level:3,title:"获取文件模板",slug:"获取文件模板"}],lastUpdated:"8/20/2023, 12:24:00 AM",lastUpdatedTimestamp:169246224e4},{title:"自动安装教程",frontmatter:{},regularPath:"/install-tutorial/installation.html",relativePath:"install-tutorial/installation.md",key:"v-5f99fff9",path:"/install-tutorial/installation.html",headers:[{level:2,title:"准备",slug:"准备"},{level:2,title:"一键安装脚本",slug:"一键安装脚本"},{level:2,title:"安装Trojan Panel",slug:"安装trojan-panel"},{level:2,title:"安装Trojan Panel Core",slug:"安装trojan-panel-core"}],lastUpdated:"8/24/2023, 12:48:43 AM",lastUpdatedTimestamp:1692809323e3},{title:"Core SDK",frontmatter:{},regularPath:"/sdk/sdk.html",relativePath:"sdk/sdk.md",key:"v-75b0c0ff",path:"/sdk/sdk.html",lastUpdated:"8/6/2023, 12:39:47 AM",lastUpdatedTimestamp:1691253587e3},{title:"介绍",frontmatter:{},regularPath:"/start/introduce.html",relativePath:"start/introduce.md",key:"v-2a284842",path:"/start/introduce.html",lastUpdated:"12/4/2022, 12:16:18 AM",lastUpdatedTimestamp:1670084178e3},{title:"架构设计",frontmatter:{},regularPath:"/start/system-structure.html",relativePath:"start/system-structure.md",key:"v-61821d87",path:"/start/system-structure.html",lastUpdated:"11/15/2023, 2:56:56 PM",lastUpdatedTimestamp:1700031416e3},{title:"手动安装教程",frontmatter:{},regularPath:"/install-tutorial/custom-installation.html",relativePath:"install-tutorial/custom-installation.md",key:"v-65455d52",path:"/install-tutorial/custom-installation.html",headers:[{level:2,title:"准备",slug:"准备"},{level:2,title:"安装Docker",slug:"安装docker"},{level:2,title:"安装Caddy2",slug:"安装caddy2"},{level:2,title:"安装MariaDB",slug:"安装mariadb"},{level:2,title:"安装Redis",slug:"安装redis"},{level:2,title:"安装Trojan Panel Backend",slug:"安装trojan-panel-backend"},{level:2,title:"安装Trojan Panel Frontend",slug:"安装trojan-panel-frontend"},{level:2,title:"安装Trojan Panel Core",slug:"安装trojan-panel-core"}],lastUpdated:"8/24/2023, 12:49:36 AM",lastUpdatedTimestamp:1692809376e3},{title:"客户端配置",frontmatter:{},regularPath:"/tutorial/client-config.html",relativePath:"tutorial/client-config.md",key:"v-7e7f881f",path:"/tutorial/client-config.html",headers:[{level:2,title:"v2rayN",slug:"v2rayn"},{level:3,title:"配置Hysteria(Windows)",slug:"配置hysteria-windows"},{level:3,title:"配置NaiveProxy(Windows)",slug:"配置naiveproxy-windows"},{level:2,title:"Qv2ray",slug:"qv2ray"},{level:3,title:"配置Trojan-Go(Windows)",slug:"配置trojan-go-windows"},{level:3,title:"配置Trojan(Windows)",slug:"配置trojan-windows"},{level:3,title:"配置NaiveProxy(Windows)",slug:"配置naiveproxy-windows-2"},{level:3,title:"配置SS/SSR(Windows)",slug:"配置ss-ssr-windows"}],lastUpdated:"3/20/2023, 6:14:44 PM",lastUpdatedTimestamp:1679307284e3},{title:"更新日志",frontmatter:{},regularPath:"/change/change-log.html",relativePath:"change/change-log.md",key:"v-031147ce",path:"/change/change-log.html",headers:[{level:2,title:"2023.10.09 犼",slug:"_2023-10-09-犼"},{level:2,title:"2023.07.08 帝江",slug:"_2023-07-08-帝江"},{level:2,title:"2023.03.31 穷奇",slug:"_2023-03-31-穷奇"},{level:2,title:"2022.12.29 麒麟",slug:"_2022-12-29-麒麟"},{level:2,title:"2022.11.08 饕餮",slug:"_2022-11-08-饕餮"},{level:2,title:"2022.05.16 伏羲",slug:"_2022-05-16-伏羲"},{level:2,title:"2022.02.10 盘古",slug:"_2022-02-10-盘古"}],lastUpdated:"10/9/2023, 5:23:55 PM",lastUpdatedTimestamp:1696843435e3},{title:"性能测试",frontmatter:{},regularPath:"/tutorial/performance-testing.html",relativePath:"tutorial/performance-testing.md",key:"v-3f415241",path:"/tutorial/performance-testing.html",lastUpdated:"11/7/2022, 3:25:40 PM",lastUpdatedTimestamp:166780594e4},{title:"性能调优",frontmatter:{},regularPath:"/tutorial/performance-tuning.html",relativePath:"tutorial/performance-tuning.md",key:"v-01c7100e",path:"/tutorial/performance-tuning.html",headers:[{level:2,title:"定时重启",slug:"定时重启"},{level:2,title:"网络加速",slug:"网络加速"}],lastUpdated:"8/24/2023, 12:36:58 AM",lastUpdatedTimestamp:1692808618e3},{title:"Docker Compose方式安装",frontmatter:{},regularPath:"/install-tutorial/docker-compose.html",relativePath:"install-tutorial/docker-compose.md",key:"v-7813dc19",path:"/install-tutorial/docker-compose.html",headers:[{level:2,title:"准备",slug:"准备"},{level:3,title:"设置伪装网站",slug:"设置伪装网站"},{level:3,title:"新建Caddy配置文件",slug:"新建caddy配置文件"},{level:3,title:"新建Nginx配置文件",slug:"新建nginx配置文件"},{level:2,title:"配置文件",slug:"配置文件"},{level:2,title:"部署",slug:"部署"}],lastUpdated:"8/11/2023, 5:04:23 PM",lastUpdatedTimestamp:1691744663e3},{title:"工具推荐",frontmatter:{},regularPath:"/tutorial/recommend-tool.html",relativePath:"tutorial/recommend-tool.md",key:"v-8a6ff24e",path:"/tutorial/recommend-tool.html",headers:[{level:2,title:"客户端",slug:"客户端"},{level:3,title:"Xray",slug:"xray"},{level:3,title:"Trojan-gfw & Trojan-go",slug:"trojan-gfw-trojan-go"},{level:3,title:"Hysteria",slug:"hysteria"},{level:2,title:"申请免费证书",slug:"申请免费证书"}],lastUpdated:"8/24/2023, 12:48:43 AM",lastUpdatedTimestamp:1692809323e3},{title:"使用CDN",frontmatter:{},regularPath:"/tutorial/using-cdn.html",relativePath:"tutorial/using-cdn.md",key:"v-ff770e42",path:"/tutorial/using-cdn.html",headers:[{level:2,title:"Cloudflare",slug:"cloudflare"}],lastUpdated:"12/29/2022, 10:06:02 AM",lastUpdatedTimestamp:1672279562e3},{title:"使用教程",frontmatter:{},regularPath:"/tutorial/using-tutorials.html",relativePath:"tutorial/using-tutorials.md",key:"v-82155162",path:"/tutorial/using-tutorials.html",headers:[{level:3,title:"登录/注册",slug:"登录-注册"},{level:2,title:"用户管理",slug:"用户管理"},{level:2,title:"节点管理",slug:"节点管理"},{level:2,title:"用户设置",slug:"用户设置"},{level:2,title:"服务器管理",slug:"服务器管理"},{level:2,title:"系统邮箱设置",slug:"系统邮箱设置"},{level:2,title:"自定义伪装网站",slug:"自定义伪装网站"},{level:2,title:"黑名单管理",slug:"黑名单管理"},{level:2,title:"模板设置",slug:"模板设置"},{level:2,title:"数据统计",slug:"数据统计"},{level:2,title:"小功能",slug:"小功能"}],lastUpdated:"2/16/2023, 11:25:26 AM",lastUpdatedTimestamp:1676517926e3},{title:"常见问题",frontmatter:{},regularPath:"/tutorial/common-problem.html",relativePath:"tutorial/common-problem.md",key:"v-4371f14e",path:"/tutorial/common-problem.html",headers:[{level:2,title:"搭建失败或系统报错的常见解决方案",slug:"搭建失败或系统报错的常见解决方案"},{level:2,title:"证书申请失败",slug:"证书申请失败"}],lastUpdated:"6/10/2023, 11:41:05 PM",lastUpdatedTimestamp:1686411665e3},{title:"相关说明",frontmatter:{},regularPath:"/tutorial/des-of-related-doc.html",relativePath:"tutorial/des-of-related-doc.md",key:"v-570f3d19",path:"/tutorial/des-of-related-doc.html",headers:[{level:2,title:"文件路径",slug:"文件路径"},{level:2,title:"Xray",slug:"xray"},{level:2,title:"Clash",slug:"clash"}],lastUpdated:"5/8/2023, 11:21:24 AM",lastUpdatedTimestamp:1683516084e3}],themeConfig:{sidebarDepth:3,logo:"/logo.png",lastUpdated:"Last Updated",nav:[{text:"新手起步",link:"/start/introduce"},{text:"相关教程",items:[{text:"安装教程",link:"/install-tutorial/installation"},{text:"使用教程",link:"/tutorial/using-tutorials"}]},{text:"开发文档",items:[{text:"API文档",link:"/api/api"},{text:"Core SDK",link:"/sdk/sdk"}]},{text:"FAQ",link:"/faq/faq"},{text:"更新日志",link:"/change/change-log"},{text:"GitHub",link:"https://github.com/trojanpanel"}],sidebar:{"/start/":["introduce","system-structure"],"/tutorial/":["using-tutorials","des-of-related-doc","common-problem","using-cdn","client-config","recommend-tool","performance-tuning","performance-testing"],"/install-tutorial/":["installation","custom-installation","docker-compose"],"/api/":["api"],"/sdk/":["sdk"],"/faq/":["faq"],"/change/":["change-log"]}}};n(236);Wn.component("Badge",()=>Promise.all([n.e(0),n.e(3)]).then(n.bind(null,301))),Wn.component("CodeBlock",()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,281))),Wn.component("CodeGroup",()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,282)));n(237);var Rs={name:"BackToTop",props:{threshold:{type:Number,default:300}},data:()=>({scrollTop:null}),computed:{show(){return this.scrollTop>this.threshold}},mounted(){this.scrollTop=this.getScrollTop(),window.addEventListener("scroll",ws()(()=>{this.scrollTop=this.getScrollTop()},100))},methods:{getScrollTop:()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,scrollToTop(){window.scrollTo({top:0,behavior:"smooth"}),this.scrollTop=0}}},Is=(n(238),Object(Ss.a)(Rs,(function(){var t=this._self._c;return t("transition",{attrs:{name:"fade"}},[this.show?t("svg",{staticClass:"go-to-top",attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 49.484 28.284"},on:{click:this.scrollToTop}},[t("g",{attrs:{transform:"translate(-229 -126.358)"}},[t("rect",{attrs:{fill:"currentColor",width:"35",height:"5",rx:"2",transform:"translate(229 151.107) rotate(-45)"}}),this._v(" "),t("rect",{attrs:{fill:"currentColor",width:"35",height:"5",rx:"2",transform:"translate(274.949 154.642) rotate(-135)"}})])]):this._e()])}),[],!1,null,"1c80d7ad",null).exports),Us=[{},({Vue:t})=>{t.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},{},({Vue:t})=>{t.component("BackToTop",Is)},({Vue:t})=>{t.component("CodeCopy",Ts)}],Ds=["BackToTop"];class Ns extends class{constructor(){this.store=new Wn({data:{state:{}}})}$get(t){return this.store.state[t]}$set(t,e){Wn.set(this.store.state,t,e)}$emit(...t){this.store.$emit(...t)}$on(...t){this.store.$on(...t)}}{}Object.assign(Ns.prototype,{getPageAsyncComponent:as,getLayoutAsyncComponent:ss,getAsyncComponent:us,getVueComponent:cs});var Fs={install(t){const e=new Ns;t.$vuepress=e,t.prototype.$vuepress=e}};function Bs(t,e){const n=e.toLowerCase();return t.options.routes.some(t=>t.path.toLowerCase()===n)}var zs={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(t){const e=this.pageKey||this.$parent.$page.key;return fs("pageKey",e),Wn.component(e)||Wn.component(e,as(e)),Wn.component(e)?t(e):t("")}},qs={functional:!0,props:{slotKey:String,required:!0},render:(t,{props:e,slots:n})=>t("div",{class:["content__"+e.slotKey]},n()[e.slotKey])},Vs={computed:{openInNewWindowTitle(){return this.$themeLocaleConfig.openNewWindowText||"(opens new window)"}}},Hs=(n(239),n(240),Object(Ss.a)(Vs,(function(){var t=this._self._c;return t("span",[t("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[t("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),this._v(" "),t("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})]),this._v(" "),t("span",{staticClass:"sr-only"},[this._v(this._s(this.openInNewWindowTitle))])])}),[],!1,null,null,null).exports),Ws={functional:!0,render(t,{parent:e,children:n}){if(e._isMounted)return n;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};Wn.config.productionTip=!1,Wn.use(Va),Wn.use(Fs),Wn.mixin(function(t,e,n=Wn){!function(t){t.locales&&Object.keys(t.locales).forEach(e=>{t.locales[e].path=e});Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);const r=new(t(n.$vuepress.$get("siteData"))),o=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(r)),i={};return Object.keys(o).reduce((t,e)=>(e.startsWith("$")&&(t[e]=o[e].get),t),i),{computed:i}}(t=>class{setPage(t){this.__page=t}get $site(){return t}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:t={}}=this.$site;let e,n;for(const r in t)"/"===r?n=t[r]:0===this.$page.path.indexOf(r)&&(e=t[r]);return e||n||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $canonicalUrl(){const{canonicalUrl:t}=this.$page.frontmatter;return"string"==typeof t&&t}get $title(){const t=this.$page,{metaTitle:e}=this.$page.frontmatter;if("string"==typeof e)return e;const n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}get $description(){const t=function(t){if(t){const e=t.filter(t=>"description"===t.name)[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(t,e){for(let n=0;nn||(t.hash?!Wn.$vuepress.$get("disableScrollBehavior")&&{selector:decodeURIComponent(t.hash)}:{x:0,y:0})});!function(t){t.beforeEach((e,n,r)=>{if(Bs(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const n=e.path.replace(/\/$/,"")+".html";Bs(t,n)?r(n):r()}else r();else{const n=e.path+"/",o=e.path+".html";Bs(t,o)?r(o):Bs(t,n)?r(n):r()}})}(n);const r={};try{await Promise.all(Us.filter(t=>"function"==typeof t).map(e=>e({Vue:Wn,options:r,router:n,siteData:Ms,isServer:t})))}catch(t){console.error(t)}return{app:new Wn(Object.assign(r,{router:n,render:t=>t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},Ds.map(e=>t(e)))])})),router:n}}(!1).then(({app:t,router:e})=>{e.onReady(()=>{t.$mount("#app")})})}]); \ No newline at end of file diff --git a/docs/change/change-log.html b/docs/change/change-log.html index 6aed691..2b9a371 100644 --- a/docs/change/change-log.html +++ b/docs/change/change-log.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/docs/faq/faq.html b/docs/faq/faq.html index 3755fe3..f64b701 100644 --- a/docs/faq/faq.html +++ b/docs/faq/faq.html @@ -18,8 +18,8 @@ - - + +
- + diff --git a/docs/index.html b/docs/index.html index 8bef42c..36c32a0 100644 --- a/docs/index.html +++ b/docs/index.html @@ -18,8 +18,8 @@ - - + +

极速搭建

一键安装脚本,降低部署门槛,快速搭建系统

国际化

系统语言支持中文/English/한국인/فارسی

多代理支持

节点类型支持Xray/Trojan-Go/Hysteria/NaiveProxy

分布式

前后端分离开发,减少模块之间耦合度,可以自由组合部署在多个服务器

功能强大

支持登录注册/用户管理/节点管理/邮件管理/黑名单管理/自定义伪装网站/系统看板等

所见即所得

支持多节点管理,自动化管理远程节点,自动化申请/续签证书,面板内编辑节点,远程服务实时修改节点配置

# 🚀 安装

  1. 联机(推荐)

    source <(curl -L https://github.com/trojanpanel/install-script/raw/main/install_script.sh)
    +

    极速搭建

    一键安装脚本,降低部署门槛,快速搭建系统

    国际化

    系统语言支持中文/English/한국인/فارسی

    多代理支持

    节点类型支持Xray/Trojan-Go/Hysteria/NaiveProxy

    分布式

    前后端分离开发,减少模块之间耦合度,可以自由组合部署在多个服务器

    功能强大

    支持登录注册/用户管理/节点管理/邮件管理/黑名单管理/自定义伪装网站/系统看板等

    所见即所得

    支持多节点管理,自动化管理远程节点,自动化申请/续签证书,面板内编辑节点,远程服务实时修改节点配置

    # 🚀 安装

    • 联机(推荐)

      source <(curl -L https://github.com/trojanpanel/install-script/raw/main/install_script.sh)
       
    • 单机

      source <(curl -L https://github.com/trojanpanel/install-script/raw/main/install_script_standalone.sh)
      -
    • 安装旧版本 (opens new window)

# ✨ Community

Telegram 频道: Trojan Panel (opens new window)

# 🔍 报告缺陷与问题

Issues (opens new window)

# 💞 支持

# 🌟 Star随时间变化

Stargazers over time (opens new window)

  • 安装旧版本 (opens new window)

  • # ✨ 社区

    Telegram 频道: Trojan Panel (opens new window)

    # 🔍 报告缺陷与问题

    Issues (opens new window)

    # 💞 支持

    # 🌟 Star随时间变化

    Stargazers over time (opens new window)

    - + diff --git a/docs/install-tutorial/custom-installation.html b/docs/install-tutorial/custom-installation.html index 1711a86..c444980 100644 --- a/docs/install-tutorial/custom-installation.html +++ b/docs/install-tutorial/custom-installation.html @@ -18,8 +18,8 @@ - - + +
    - + diff --git a/docs/install-tutorial/docker-compose.html b/docs/install-tutorial/docker-compose.html index e00d5b3..a3c7a16 100644 --- a/docs/install-tutorial/docker-compose.html +++ b/docs/install-tutorial/docker-compose.html @@ -18,8 +18,8 @@ - - + +
    - + diff --git a/docs/install-tutorial/installation.html b/docs/install-tutorial/installation.html index 997ec74..63b8442 100644 --- a/docs/install-tutorial/installation.html +++ b/docs/install-tutorial/installation.html @@ -18,8 +18,8 @@ - - + +
    - + diff --git a/docs/sdk/sdk.html b/docs/sdk/sdk.html index 5dff49b..6d63623 100644 --- a/docs/sdk/sdk.html +++ b/docs/sdk/sdk.html @@ -18,8 +18,8 @@ - - + +
    - + diff --git a/docs/start/introduce.html b/docs/start/introduce.html index 585045e..73013f8 100644 --- a/docs/start/introduce.html +++ b/docs/start/introduce.html @@ -18,8 +18,8 @@ - - + +
    - + diff --git a/docs/start/system-structure.html b/docs/start/system-structure.html index 0182765..fbb3bae 100644 --- a/docs/start/system-structure.html +++ b/docs/start/system-structure.html @@ -18,8 +18,8 @@ - - + +
    - + diff --git a/docs/tutorial/client-config.html b/docs/tutorial/client-config.html index c89857d..260a1ac 100644 --- a/docs/tutorial/client-config.html +++ b/docs/tutorial/client-config.html @@ -18,8 +18,8 @@ - - + +
    - + diff --git a/docs/tutorial/common-problem.html b/docs/tutorial/common-problem.html index d0f382e..40bcd5b 100644 --- a/docs/tutorial/common-problem.html +++ b/docs/tutorial/common-problem.html @@ -18,8 +18,8 @@ - - + +
    - + diff --git a/docs/tutorial/des-of-related-doc.html b/docs/tutorial/des-of-related-doc.html index 9ce1934..983afc7 100644 --- a/docs/tutorial/des-of-related-doc.html +++ b/docs/tutorial/des-of-related-doc.html @@ -18,8 +18,8 @@ - - + +
    - + diff --git a/docs/tutorial/performance-testing.html b/docs/tutorial/performance-testing.html index dac9633..c8521f8 100644 --- a/docs/tutorial/performance-testing.html +++ b/docs/tutorial/performance-testing.html @@ -18,8 +18,8 @@ - - + +
    - + diff --git a/docs/tutorial/performance-tuning.html b/docs/tutorial/performance-tuning.html index 4f72b90..0a59a09 100644 --- a/docs/tutorial/performance-tuning.html +++ b/docs/tutorial/performance-tuning.html @@ -18,8 +18,8 @@ - - + +
    - + diff --git a/docs/tutorial/recommend-tool.html b/docs/tutorial/recommend-tool.html index 9c2318e..2abacc7 100644 --- a/docs/tutorial/recommend-tool.html +++ b/docs/tutorial/recommend-tool.html @@ -18,8 +18,8 @@ - - + +
    - + diff --git a/docs/tutorial/using-cdn.html b/docs/tutorial/using-cdn.html index aead719..eef0a30 100644 --- a/docs/tutorial/using-cdn.html +++ b/docs/tutorial/using-cdn.html @@ -18,8 +18,8 @@ - - + +
    - + diff --git a/docs/tutorial/using-tutorials.html b/docs/tutorial/using-tutorials.html index c0acc69..3659b46 100644 --- a/docs/tutorial/using-tutorials.html +++ b/docs/tutorial/using-tutorials.html @@ -18,8 +18,8 @@ - - + +