Browse Source

update README.md

Hamidreza Ghavami 1 year ago
parent
commit
44cede41fd

+ 75 - 28
README.md

@@ -1,11 +1,11 @@
 # 3x-ui
+
 [![](https://img.shields.io/github/v/release/mhsanaei/3x-ui.svg)](https://github.com/MHSanaei/3x-ui/releases)
 [![](https://img.shields.io/github/actions/workflow/status/mhsanaei/3x-ui/release.yml.svg)](#)
 [![GO Version](https://img.shields.io/github/go-mod/go-version/mhsanaei/3x-ui.svg)](#)
 [![Downloads](https://img.shields.io/github/downloads/mhsanaei/3x-ui/total.svg)](#)
 [![License](https://img.shields.io/badge/license-GPL%20V3-blue.svg?longCache=true)](https://www.gnu.org/licenses/gpl-3.0.en.html)
 
-
 > **Disclaimer: This project is only for personal learning and communication, please do not use it for illegal purposes, please do not use it in a production environment**
 
 xray panel supporting multi-protocol, **Multi-lang (English,Farsi,Chinese)**
@@ -15,19 +15,24 @@ xray panel supporting multi-protocol, **Multi-lang (English,Farsi,Chinese)**
 ```
 bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
 ```
+
 ## Install custom version
+
 To install your desired version you can add the version to the end of install command. Example for ver `v1.0.9`:
+
 ```
 bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) v1.0.9
 ```
+
 # SSL
+
 ```
 apt-get install certbot -y
 certbot certonly --standalone --agree-tos --register-unsafely-without-email -d yourdomain.com
 certbot renew --dry-run
 ```
 
-**If you think this project is helpful to you, you may wish to give a** :star2: 
+**If you think this project is helpful to you, you may wish to give a** :star2:
 
 # Default settings
 
@@ -36,18 +41,58 @@ certbot renew --dry-run
 - database path: /etc/x-ui/x-ui.db
 - xray config path: /usr/local/x-ui/bin/config.json
 
-before you set ssl on settings
-- http:// ip or domain:2053/xui
+Before you set ssl on settings
+
+- http://ip:2053/xui
+- http://domain:2053/xui
+
+After you set ssl on settings
 
-After you set ssl on settings 
 - https://yourdomain:2053/xui
 
-# Enable Traffic For Users:
+# Environment Variables
+
+| Variable       |                      Type                      | Default       |
+| -------------- | :--------------------------------------------: | :------------ |
+| XUI_LOG_LEVEL  | `"debug"` \| `"info"` \| `"warn"` \| `"error"` | `"info"`      |
+| XUI_DEBUG      |                   `boolean`                    | `false`       |
+| XUI_BIN_FOLDER |                    `string`                    | `"bin"`       |
+| XUI_DB_FOLDER  |                    `string`                    | `"/etc/x-ui"` |
+
+Example:
+
+```sh
+XUI_BIN_FOLDER="bin" XUI_DB_FOLDER="/etc/x-ui" go build main.go
+```
+
+# Xray Configurations:
 
 **copy and paste to xray Configuration :** (you don't need to do this if you have a fresh install)
-- [enable traffic](./media/enable-traffic.txt)
-- [enable traffic+block all IR IP address](./media/enable-traffic+block-IR-IP.txt)
-- [enable traffic+block all IR domain](./media/enable-traffic+block-IR-domain.txt)
+
+- [traffic](./media/configs/traffic.json)
+- [traffic + Block all Iran IP address](./media/configs/traffic+block-iran-ip.json)
+- [traffic + Block all Iran Domains](./media/configs/traffic+block-iran-domains.json)
+- [traffic + Block Ads + Use IPv4 for Google](./media/configs/traffic+block-ads+ipv4-google.json)
+- [traffic + Block Ads + Route Iran domains + Google + Netflix + Spotify + OpenAI (ChatGPT) to WARP](./media/configs/traffic+block-ads+warp-global+iran-domains.json)
+
+# [WARP Configuration](https://github.com/fscarmen/warp) (Optional)
+
+If you want to use routing to WARP follow steps as below:
+
+1. Install WARP on **socks proxy mode**:
+
+   ```sh
+   curl -fsSL https://gist.githubusercontent.com/hamid-gh98/dc5dd9b0cc5b0412af927b1ccdb294c7/raw/install_warp_proxy.sh | bash
+   ```
+
+2. [Copy and paste this file to Xray Configuration](./media/configs/traffic+block-ads+warp-global+iran-domains.json) or Turn on the config you need in panel
+
+   Config Features:
+
+   - Block Ads
+   - Route Google + Netflix + Spotify + OpenAI (ChatGPT) to WARP
+   - Route Iran Domains to WARP
+   - Fix Google 403 error
 
 # Features
 
@@ -62,7 +107,8 @@ After you set ssl on settings
 - Support https access panel (self-provided domain name + ssl certificate)
 - Support one-click SSL certificate application and automatic renewal
 - For more advanced configuration items, please refer to the panel
-- fix api routes (user setting will create with api)
+- Fix api routes (user setting will create with api)
+- Support to change switch config by different type of items provided in panel
 
 # Tg robot use
 
@@ -79,8 +125,8 @@ Set the robot-related parameters in the panel background, including:
 
 Reference syntax:
 
-- 30 * * * * * //Notify at the 30s of each point
-- 0 */10 * * * * //Notify at the first second of each 10 minutes
+- 30 \* \* \* \* \* //Notify at the 30s of each point
+- 0 \*/10 \* \* \* \* //Notify at the first second of each 10 minutes
 - @hourly // hourly notification
 - @daily // Daily notification (00:00 in the morning)
 - @every 8h // notify every 8 hours
@@ -100,33 +146,34 @@ Reference syntax:
 - Check depleted users
 - Receive backup by request and in periodic reports
 
-
 ## API routes
 
 - `/login` with `PUSH` user data: `{username: '', password: ''}` for login
 - `/xui/API/inbounds` base for following actions:
 
-| Method | Path | Action |
-| ------------- | ------------- | ------------- |
-| GET | "/list" | Get all inbounds |
-| GET | "/get/:id" | Get inbound with inbound.id |
-| POST | "/add" | Add inbound |
-| POST | "/del/:id" | Delete Inbound |
-| POST | "/update/:id" | Update Inbound |
-| POST | "/clientIps/:email" | Client Ip address |
-| POST | "/clearClientIps/:email" | Clear Client Ip address |
-| POST | "/addClient/" | Add Client to inbound |
-| POST | "/delClient/:email" | Delete Client |
-| POST | "/updateClient/:index" | Update Client |
-| POST | "/:id/resetClientTraffic/:email" | Reset Client's Traffic |
-| POST | "/resetAllTraffics" | Reset traffics of all inbounds |
-| POST | "/resetAllClientTraffics/:id" | Reset traffics of all clients in an inbound |
+| Method | Path                               | Action                                      |
+| :----: | ---------------------------------- | ------------------------------------------- |
+| `GET`  | `"/list"`                          | Get all inbounds                            |
+| `GET`  | `"/get/:id"`                       | Get inbound with inbound.id                 |
+| `POST` | `"/add"`                           | Add inbound                                 |
+| `POST` | `"/del/:id"`                       | Delete Inbound                              |
+| `POST` | `"/update/:id"`                    | Update Inbound                              |
+| `POST` | `"/clientIps/:email"`              | Client Ip address                           |
+| `POST` | `"/clearClientIps/:email"`         | Clear Client Ip address                     |
+| `POST` | `"/addClient/"`                    | Add Client to inbound                       |
+| `POST` | `"/delClient/:email"`              | Delete Client                               |
+| `POST` | `"/updateClient/:index"`           | Update Client                               |
+| `POST` | `"/:id/resetClientTraffic/:email"` | Reset Client's Traffic                      |
+| `POST` | `"/resetAllTraffics"`              | Reset traffics of all inbounds              |
+| `POST` | `"/resetAllClientTraffics/:id"`    | Reset traffics of all clients in an inbound |
 
 # A Special Thanks To
+
 - [alireza0](https://github.com/alireza0/)
 - [FranzKafkaYu](https://github.com/FranzKafkaYu)
 
 # Suggestion System
+
 - Ubuntu 20.04+
 - Debian 10+
 - CentOS 8+

+ 88 - 0
media/configs/traffic+block-ads+ipv4-google.json

@@ -0,0 +1,88 @@
+{
+  "log": {
+    "loglevel": "warning",
+    "access": "./access.log",
+    "error": "./error.log"
+  },
+  "api": {
+    "tag": "api",
+    "services": ["HandlerService", "LoggerService", "StatsService"]
+  },
+  "inbounds": [
+    {
+      "tag": "api",
+      "listen": "127.0.0.1",
+      "port": 62789,
+      "protocol": "dokodemo-door",
+      "settings": {
+        "address": "127.0.0.1"
+      }
+    }
+  ],
+  "outbounds": [
+    {
+      "protocol": "freedom",
+      "settings": {}
+    },
+    {
+      "tag": "blocked",
+      "protocol": "blackhole",
+      "settings": {}
+    },
+    {
+      "tag": "IPv4",
+      "protocol": "freedom",
+      "settings": {
+        "domainStrategy": "UseIPv4"
+      }
+    }
+  ],
+  "policy": {
+    "levels": {
+      "0": {
+        "statsUserDownlink": true,
+        "statsUserUplink": true
+      }
+    },
+    "system": {
+      "statsInboundDownlink": true,
+      "statsInboundUplink": true
+    }
+  },
+  "routing": {
+    "domainStrategy": "IPIfNonMatch",
+    "rules": [
+      {
+        "type": "field",
+        "inboundTag": ["api"],
+        "outboundTag": "api"
+      },
+      {
+        "type": "field",
+        "outboundTag": "blocked",
+        "ip": ["geoip:private"]
+      },
+      {
+        "type": "field",
+        "outboundTag": "blocked",
+        "protocol": ["bittorrent"]
+      },
+      {
+        "type": "field",
+        "outboundTag": "blocked",
+        "domain": [
+          "geosite:category-ads-all",
+          "geosite:category-ads",
+          "geosite:google-ads",
+          "geosite:spotify-ads"
+        ]
+      },
+      {
+        "type": "field",
+        "outboundTag": "IPv4",
+        "domain": ["geosite:google"]
+      }
+    ]
+  },
+  "stats": {}
+}

+ 127 - 0
media/configs/traffic+block-ads+warp-global+iran-domains.json

@@ -0,0 +1,127 @@
+{
+  "log": {
+    "loglevel": "warning",
+    "access": "./access.log",
+    "error": "./error.log"
+  },
+  "api": {
+    "tag": "api",
+    "services": ["HandlerService", "LoggerService", "StatsService"]
+  },
+  "inbounds": [
+    {
+      "tag": "api",
+      "listen": "127.0.0.1",
+      "port": 62789,
+      "protocol": "dokodemo-door",
+      "settings": {
+        "address": "127.0.0.1"
+      }
+    }
+  ],
+  "outbounds": [
+    {
+      "protocol": "freedom",
+      "settings": {}
+    },
+    {
+      "tag": "blocked",
+      "protocol": "blackhole",
+      "settings": {}
+    },
+    {
+      "tag": "WARP",
+      "protocol": "socks",
+      "settings": {
+        "servers": [
+          {
+            "address": "127.0.0.1",
+            "port": 40000
+          }
+        ]
+      }
+    }
+  ],
+  "policy": {
+    "levels": {
+      "0": {
+        "statsUserDownlink": true,
+        "statsUserUplink": true
+      }
+    },
+    "system": {
+      "statsInboundDownlink": true,
+      "statsInboundUplink": true
+    }
+  },
+  "routing": {
+    "domainStrategy": "IPIfNonMatch",
+    "rules": [
+      {
+        "type": "field",
+        "inboundTag": ["api"],
+        "outboundTag": "api"
+      },
+      {
+        "type": "field",
+        "outboundTag": "blocked",
+        "ip": ["geoip:private"]
+      },
+      {
+        "type": "field",
+        "outboundTag": "blocked",
+        "protocol": ["bittorrent"]
+      },
+      {
+        "type": "field",
+        "outboundTag": "blocked",
+        "domain": [
+          "geosite:category-ads-all",
+          "geosite:category-ads",
+          "geosite:google-ads",
+          "geosite:spotify-ads"
+        ]
+      },
+      {
+        "type": "field",
+        "outboundTag": "WARP",
+        "domain": [
+          "geosite:google",
+          "geosite:netflix",
+          "geosite:spotify",
+          "geosite:openai"
+        ]
+      },
+      {
+        "type": "field",
+        "outboundTag": "WARP",
+        "domain": [
+          "regexp:.*\\.ir$",
+          "ext:iran.dat:ir",
+          "ext:iran.dat:other",
+          "geosite:category-ir",
+          "bank",
+          "tapsi",
+          "snapp",
+          "blogfa",
+          "digikala",
+          "Torob.com",
+          "sheypoor.com",
+          "Tgju.org",
+          "sb24.com",
+          "tebyan.net",
+          "beytoote.com",
+          "telewebion.com",
+          "Film2movie.ws",
+          "Setare.com",
+          "Filimo.com",
+          "downloadha.com",
+          "P30download.com",
+          "Sarzamindownload.com",
+          "Sanjesh.org"
+        ]
+      }
+    ]
+  },
+  "stats": {}
+}

+ 95 - 0
media/configs/traffic+block-iran-domains.json

@@ -0,0 +1,95 @@
+{
+  "log": {
+    "loglevel": "warning",
+    "access": "./access.log",
+    "error": "./error.log"
+  },
+  "api": {
+    "tag": "api",
+    "services": ["HandlerService", "LoggerService", "StatsService"]
+  },
+  "inbounds": [
+    {
+      "tag": "api",
+      "listen": "127.0.0.1",
+      "port": 62789,
+      "protocol": "dokodemo-door",
+      "settings": {
+        "address": "127.0.0.1"
+      }
+    }
+  ],
+  "outbounds": [
+    {
+      "protocol": "freedom",
+      "settings": {}
+    },
+    {
+      "tag": "blocked",
+      "protocol": "blackhole",
+      "settings": {}
+    }
+  ],
+  "policy": {
+    "levels": {
+      "0": {
+        "statsUserDownlink": true,
+        "statsUserUplink": true
+      }
+    },
+    "system": {
+      "statsInboundDownlink": true,
+      "statsInboundUplink": true
+    }
+  },
+  "routing": {
+    "domainStrategy": "IPIfNonMatch",
+    "rules": [
+      {
+        "type": "field",
+        "inboundTag": ["api"],
+        "outboundTag": "api"
+      },
+      {
+        "type": "field",
+        "outboundTag": "blocked",
+        "ip": ["geoip:private"]
+      },
+      {
+        "type": "field",
+        "outboundTag": "blocked",
+        "protocol": ["bittorrent"]
+      },
+      {
+        "type": "field",
+        "outboundTag": "blocked",
+        "domain": [
+          "regexp:.*\\.ir$",
+          "ext:iran.dat:ir",
+          "ext:iran.dat:other",
+          "geosite:category-ir",
+          "bank",
+          "tapsi",
+          "snapp",
+          "blogfa",
+          "digikala",
+          "Torob.com",
+          "sheypoor.com",
+          "Tgju.org",
+          "sb24.com",
+          "tebyan.net",
+          "beytoote.com",
+          "telewebion.com",
+          "Film2movie.ws",
+          "Setare.com",
+          "Filimo.com",
+          "downloadha.com",
+          "P30download.com",
+          "Sarzamindownload.com",
+          "Sanjesh.org"
+        ]
+      }
+    ]
+  },
+  "stats": {}
+}

+ 25 - 31
media/enable-traffic+block-IR-IP.txt → media/configs/traffic+block-iran-ip.json

@@ -1,25 +1,22 @@
 {
   "log": {
     "loglevel": "warning",
-    "access": "./access.log"
+    "access": "./access.log",
+    "error": "./error.log"
   },
   "api": {
-    "services": [
-      "HandlerService",
-      "LoggerService",
-      "StatsService"
-    ],
-    "tag": "api"
+    "tag": "api",
+    "services": ["HandlerService", "LoggerService", "StatsService"]
   },
   "inbounds": [
     {
+      "tag": "api",
       "listen": "127.0.0.1",
       "port": 62789,
       "protocol": "dokodemo-door",
       "settings": {
         "address": "127.0.0.1"
-      },
-      "tag": "api"
+      }
     }
   ],
   "outbounds": [
@@ -28,16 +25,16 @@
       "settings": {}
     },
     {
+      "tag": "blocked",
       "protocol": "blackhole",
-      "settings": {},
-      "tag": "blocked"
+      "settings": {}
     }
   ],
   "policy": {
     "levels": {
       "0": {
-        "statsUserUplink": true,
-        "statsUserDownlink": true
+        "statsUserDownlink": true,
+        "statsUserUplink": true
       }
     },
     "system": {
@@ -49,34 +46,31 @@
     "domainStrategy": "IPIfNonMatch",
     "rules": [
       {
-        "inboundTag": [
-          "api"
-        ],
-        "outboundTag": "api",
-        "type": "field"
+        "type": "field",
+        "inboundTag": ["api"],
+        "outboundTag": "api"
+      },
+      {
+        "type": "field",
+        "outboundTag": "blocked",
+        "ip": ["geoip:private"]
       },
       {
+        "type": "field",
         "outboundTag": "blocked",
-        "protocol": [
-          "bittorrent"
-        ],
-        "type": "field"
+        "protocol": ["bittorrent"]
       },
       {
+        "type": "field",
         "outboundTag": "blocked",
-        "ip": [
-          "geoip:private"
-        ],
-        "type": "field"
+        "ip": ["geoip:private"]
       },
       {
+        "type": "field",
         "outboundTag": "blocked",
-        "ip": [
-          "geoip:ir"
-        ],
-        "type": "field"
+        "ip": ["geoip:ir"]
       }
     ]
   },
   "stats": {}
-}
+}

+ 18 - 27
media/enable-traffic.txt → media/configs/traffic.json

@@ -1,25 +1,22 @@
 {
   "log": {
     "loglevel": "warning",
-    "access": "./access.log"
+    "access": "./access.log",
+    "error": "./error.log"
   },
   "api": {
-    "services": [
-      "HandlerService",
-      "LoggerService",
-      "StatsService"
-    ],
-    "tag": "api"
+    "tag": "api",
+    "services": ["HandlerService", "LoggerService", "StatsService"]
   },
   "inbounds": [
     {
+      "tag": "api",
       "listen": "127.0.0.1",
       "port": 62789,
       "protocol": "dokodemo-door",
       "settings": {
         "address": "127.0.0.1"
-      },
-      "tag": "api"
+      }
     }
   ],
   "outbounds": [
@@ -28,16 +25,16 @@
       "settings": {}
     },
     {
+      "tag": "blocked",
       "protocol": "blackhole",
-      "settings": {},
-      "tag": "blocked"
+      "settings": {}
     }
   ],
   "policy": {
     "levels": {
       "0": {
-        "statsUserUplink": true,
-        "statsUserDownlink": true
+        "statsUserDownlink": true,
+        "statsUserUplink": true
       }
     },
     "system": {
@@ -49,27 +46,21 @@
     "domainStrategy": "IPIfNonMatch",
     "rules": [
       {
-        "inboundTag": [
-          "api"
-        ],
-        "outboundTag": "api",
-        "type": "field"
+        "type": "field",
+        "inboundTag": ["api"],
+        "outboundTag": "api"
       },
       {
+        "type": "field",
         "outboundTag": "blocked",
-        "ip": [
-          "geoip:private"
-        ],
-        "type": "field"
+        "ip": ["geoip:private"]
       },
       {
+        "type": "field",
         "outboundTag": "blocked",
-        "protocol": [
-          "bittorrent"
-        ],
-        "type": "field"
+        "protocol": ["bittorrent"]
       }
     ]
   },
   "stats": {}
-}
+}

+ 0 - 84
media/enable-traffic+block-IR-domain.txt

@@ -1,84 +0,0 @@
-{
-  "log": {
-    "loglevel": "warning",
-    "access": "./access.log"
-  },
-  "api": {
-    "services": [
-      "HandlerService",
-      "LoggerService",
-      "StatsService"
-    ],
-    "tag": "api"
-  },
-  "inbounds": [
-    {
-      "listen": "127.0.0.1",
-      "port": 62789,
-      "protocol": "dokodemo-door",
-      "settings": {
-        "address": "127.0.0.1"
-      },
-      "tag": "api"
-    }
-  ],
-  "outbounds": [
-    {
-      "protocol": "freedom",
-      "settings": {}
-    },
-    {
-      "protocol": "blackhole",
-      "settings": {},
-      "tag": "blocked"
-    }
-  ],
-  "policy": {
-    "levels": {
-      "0": {
-        "statsUserUplink": true,
-        "statsUserDownlink": true
-      }
-    },
-    "system": {
-      "statsInboundDownlink": true,
-      "statsInboundUplink": true
-    }
-  },
-  "routing": {
-    "domainStrategy": "IPIfNonMatch",
-    "rules": [
-      {
-        "inboundTag": [
-          "api"
-        ],
-        "outboundTag": "api",
-        "type": "field"
-      },
-      {
-        "ip": [
-          "geoip:private"
-        ],
-        "outboundTag": "blocked",
-        "type": "field"
-      },
-      {
-        "outboundTag": "blocked",
-        "protocol": [
-          "bittorrent"
-        ],
-        "type": "field"
-      },
-      {
-        "outboundTag": "blocked",
-        "domain": [
-          "regexp:.+.ir$",
-          "ext:iran.dat:ir",
-          "ext:iran.dat:other"
-        ],
-        "type": "field"
-      }
-    ]
-  },
-  "stats": {}
-}