浏览代码

Add documentation for clash_api

世界 3 年之前
父节点
当前提交
45643fbed1
共有 6 个文件被更改,包括 72 次插入10 次删除
  1. 39 0
      docs/configuration/experimental.md
  2. 10 8
      docs/configuration/index.md
  3. 12 1
      docs/index.md
  4. 9 1
      experimental/clashapi/server.go
  5. 1 0
      mkdocs.yml
  6. 1 0
      option/experimental.go

+ 39 - 0
docs/configuration/experimental.md

@@ -0,0 +1,39 @@
+### Structure
+
+```json
+{
+  "experimental": {
+    "clash_api": {
+      "external_controller": "127.0.0.1:9090",
+      "external_ui": "folder",
+      "secret": ""
+    }
+  }
+}
+```
+
+### Clash API Fields
+
+!!! error ""
+
+    Clash API is not included by default, see [Installation](/#Installation).
+
+!!! note ""
+
+    Traffic statistics and connection management will disable TCP splice in linux and reduce performance, use at your own risk.
+
+#### external_controller
+
+RESTful web API listening address. Disabled if empty.
+
+#### external_ui
+
+A relative path to the configuration directory or an absolute path to a
+directory in which you put some static web resource. Clash core will then
+serve it at `http://{{external-controller}}/ui`.
+
+#### secret
+
+Secret for the RESTful API (optional)
+Authenticate by spedifying HTTP header `Authorization: Bearer ${secret}`
+ALWAYS set a secret if RESTful API is listening on 0.0.0.0

+ 10 - 8
docs/configuration/index.md

@@ -10,19 +10,21 @@ sing-box uses JSON for configuration files.
   "dns": {},
   "inbounds": {},
   "outbounds": {},
-  "route": {}
+  "route": {},
+  "experimental": {}
 }
 ```
 
 ### Fields
 
-| Key         | Format                 |
-|-------------|------------------------|
-| `log`       | [Log](./log)           |
-| `dns`       | [DNS](./dns)           |
-| `inbounds`  | [Inbound](./inbound)   |
-| `outbounds` | [Outbound](./outbound) |
-| `route`     | [Route](./route)       |
+| Key            | Format                         |
+|----------------|--------------------------------|
+| `log`          | [Log](./log)                   |
+| `dns`          | [DNS](./dns)                   |
+| `inbounds`     | [Inbound](./inbound)           |
+| `outbounds`    | [Outbound](./outbound)         |
+| `route`        | [Route](./route)               |
+| `experimental` | [Experimental](./experimental) |
 
 ### Check
 

+ 12 - 1
docs/index.md

@@ -9,9 +9,20 @@ The universal proxy platform.
 sing-box requires Golang 1.18 or a higher version.
 
 ```bash
-go install github.com/sagernet/sing-box/cmd/sing-box@latest
+go install -v github.com/sagernet/sing-box/cmd/sing-box@latest
 ```
 
+Install with options:
+
+```bash
+go install -v -tags "with_clash_api,no_gvisor" github.com/sagernet/sing-box/cmd/sing-box@latest
+```
+
+| Build Tag        | Description                                                                             |
+|------------------|-----------------------------------------------------------------------------------------|
+| `with_clash_api` | Build with clash api support, see [Experimental](./configuration/experimental).         |
+| `no_gvisor`      | Build without gVisor, which required by the [Tun](./configuration/inbound/tun) inbound. |
+
 The binary is built under $GOPATH/bin
 
 ```bash

+ 9 - 1
experimental/clashapi/server.go

@@ -58,7 +58,15 @@ func NewServer(router adapter.Router, logFactory log.ObservableFactory, options
 		r.Mount("/profile", profileRouter())
 		r.Mount("/cache", cacheRouter())
 	})
-
+	if options.ExternalUI != "" {
+		chiRouter.Group(func(r chi.Router) {
+			fs := http.StripPrefix("/ui", http.FileServer(http.Dir(options.ExternalUI)))
+			r.Get("/ui", http.RedirectHandler("/ui/", http.StatusTemporaryRedirect).ServeHTTP)
+			r.Get("/ui/*", func(w http.ResponseWriter, r *http.Request) {
+				fs.ServeHTTP(w, r)
+			})
+		})
+	}
 	return &Server{
 		logFactory.NewLogger("clash-api"),
 		&http.Server{

+ 1 - 0
mkdocs.yml

@@ -62,6 +62,7 @@ nav:
           - Geosite: configuration/route/geosite.md
           - Route Rule: configuration/route/rule.md
           - Protocol Sniff: configuration/route/sniff.md
+      - Experimental: configuration/experimental.md
   - Examples:
       - examples/index.md
       - Shadowsocks Server: examples/ss-server.md

+ 1 - 0
option/experimental.go

@@ -6,5 +6,6 @@ type ExperimentalOptions struct {
 
 type ClashAPIOptions struct {
 	ExternalController string `json:"external_controller,omitempty"`
+	ExternalUI         string `json:"external_ui,omitempty"`
 	Secret             string `json:"secret,omitempty"`
 }