diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml new file mode 100644 index 0000000..c8cc613 --- /dev/null +++ b/.github/workflows/deploy-docs.yml @@ -0,0 +1,43 @@ +name: Deploy Docs +on: + push: + branches: + - main + - master + - beta + paths: + - 'doc/**' + - 'mkdocs.yml' + +permissions: + contents: write + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Configure Git Credentials + run: | + git config user.name github-actions[bot] + git config user.email 41898282+github-actions[bot]@users.noreply.github.com + + - uses: actions/setup-python@v5 + with: + python-version: 3.x + + - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV + + - uses: actions/cache@v4 + with: + key: mkdocs-material-${{ env.cache_id }} + path: .cache + restore-keys: | + mkdocs-material- + + - name: Install MkDocs and Material Theme + run: pip install mkdocs-material + + - name: Build and Deploy + run: mkdocs gh-deploy --force diff --git a/AGENTS.md b/AGENTS.md index 8537fcc..442252a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -5,17 +5,15 @@ **Branch:** beta ## OVERVIEW -Flux Panel is a traffic forwarding management system built on a forked GOST v3 stack. It ships as Dockerized Spring Boot (admin API) + Vite/React UI + Go forwarding agent, with optional mobile WebView wrappers. +FLVX (formerly Flux Panel) is a traffic forwarding management system built on a forked GOST v3 stack. It ships as a Go-based admin API (SQLite) + Vite/React UI + Go forwarding agent, with optional mobile WebView wrappers. ## STRUCTURE ``` ./ ├── go-gost/ # Go forwarding agent (forked gost + local x/) │ └── x/ # Local fork of github.com/go-gost/x (replace => ./x) -├── springboot-backend/ # Java/Spring Boot admin API (SQLite/MyBatis) +├── go-backend/ # Go Admin API (SQLite, net/http) ├── vite-frontend/ # React/Vite dashboard (HeroUI + Tailwind) -├── android-app/ # Android WebView wrapper (optional) -├── ios-app/ # iOS WebView wrapper (optional) ├── docker-compose-v4.yml # Panel deploy (IPv4-only bridge) ├── docker-compose-v6.yml # Panel deploy (IPv6-enabled bridge) ├── panel_install.sh # Panel installer/upgrader (downloads compose) @@ -30,13 +28,19 @@ Flux Panel is a traffic forwarding management system built on a forked GOST v3 s | **Deploy (IPv6)** | `docker-compose-v6.yml` | Same as v4 + IPv6-enabled bridge | | **Panel install** | `panel_install.sh` | Picks v4/v6, generates `JWT_SECRET`, downloads compose | | **Node install** | `install.sh` | Installs `/etc/flux_agent/flux_agent` + writes `config.json`/`gost.json` + systemd `flux_agent.service` | -| **Admin API entry** | `springboot-backend/src/main/java/com/admin/AdminApplication.java` | Spring Boot app | -| **Admin API routes** | `springboot-backend/src/main/java/com/admin/controller/` | Mostly `/api/v1/*` controllers | -| **Admin auth** | `springboot-backend/src/main/java/com/admin/common/interceptor/JwtInterceptor.java` | Checks `Authorization` header | -| **Web UI routing** | `vite-frontend/src/App.tsx` | React Router v6 + ProtectedRoute/H5 layouts | -| **Web UI API client** | `vite-frontend/src/api/network.ts` | Axios `baseURL` + `Authorization` header | -| **Go agent entry** | `go-gost/main.go` | Reads panel `config.json` + starts gost services | -| **Go x fork** | `go-gost/x/` | Handlers/listeners/dialers + management API | +| **Admin API** | `go-backend/` | Go Admin API (SQLite) | +| **Web UI** | `vite-frontend/` | React/Vite dashboard (HeroUI + Tailwind) | +| **Go Agent** | `go-gost/` | Forwarding agent (forked gost + local x/) | +| **Go Core** | `go-gost/x/` | Handlers/listeners/dialers + management API | + +## CODE MAP +| Symbol | Type | Location | Role | +|--------|------|----------|------| +| `flvx` | Project | `.` | Root directory | +| `main` | Func | `go-backend/cmd/paneld/main.go` | Backend Entry | +| `App` | Component | `vite-frontend/src/App.tsx` | Frontend Entry | +| `main` | Func | `go-gost/main.go` | Agent Entry | + ## CONVENTIONS - `Authorization` header carries the raw JWT token (no `Bearer` prefix) between `vite-frontend/` and `springboot-backend/`. diff --git a/README.md b/README.md index 403adda..d09cb84 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -# flux-panel转发面板 哆啦A梦转发面板 +# FLVX + +> 📞 **联系我们**: [Telegram群组](https://t.me/flvxpanel) 本项目基于 [go-gost/gost](https://github.com/go-gost/gost) 和 [go-gost/x](https://github.com/go-gost/x) 两个开源库,实现了转发面板。 --- diff --git a/doc/as211392.png b/doc/as211392.png deleted file mode 100644 index acbcf02..0000000 Binary files a/doc/as211392.png and /dev/null differ diff --git a/doc/faq.md b/doc/faq.md new file mode 100644 index 0000000..b49afe4 --- /dev/null +++ b/doc/faq.md @@ -0,0 +1,24 @@ +# 常见问题 (FAQ) + +### Q1: 安装脚本提示 "Docker command not found"? +**A**: 请确保您的系统已安装 Docker 和 Docker Compose。 +- Ubuntu/Debian 安装 Docker: `curl -fsSL https://get.docker.com | bash` + +### Q2: 面板无法访问 (Connection Refused)? +**A**: +1. 检查防火墙是否放行了前端端口(默认 `6366`)。 +2. 检查容器是否正常运行: `docker ps`。 +3. 查看容器日志: `docker logs flux-panel-backend` 或 `docker logs vite-frontend`。 + +### Q3: 节点显示离线? +**A**: +1. 检查节点服务器与面板服务器之间的网络连通性。 +2. 确认在节点端安装时输入的 **面板地址** 和 **密钥** 是否正确。 +3. 检查节点端服务状态: `systemctl status flux_agent`。 +4. 查看节点端日志: `journalctl -u flux_agent -f`。 + +### Q4: 只有 TCP 能通,UDP 不通? +**A**: 请检查服务器防火墙和安全组(AWS/阿里云/腾讯云等)是否同时放行了对应端口的 **TCP 和 UDP** 协议。 + +### Q5: IPv6 无法使用? +**A**: 面板安装脚本会自动尝试配置 Docker 的 IPv6。如果失败,请手动检查 `/etc/docker/daemon.json` 配置,确保 `ipv6: true` 且分配了正确的 `fixed-cidr-v6` 子网。 diff --git a/doc/index.md b/doc/index.md new file mode 100644 index 0000000..2672494 --- /dev/null +++ b/doc/index.md @@ -0,0 +1,37 @@ +# FLVX 官方文档 + +**FLVX** 是一个基于 [go-gost/gost](https://github.com/go-gost/gost) 和 [go-gost/x](https://github.com/go-gost/x) 开发的高性能流量转发管理系统。 + +> 📞 **联系我们**: [Telegram群组](https://t.me/flvxpanel) + +## 核心特性 + +- **多协议支持**: 完美支持 TCP 和 UDP 协议转发。 +- **灵活转发**: 支持 **端口转发** 与 **隧道转发** 两种模式。 +- **流量控制**: 支持按 **隧道账号级别** 管理流量转发数量,用于用户/隧道配额控制。 +- **限速管理**: 可针对 **指定用户的指定隧道进行限速** 设置。 +- **计费策略**: 支持配置 **单向或双向流量计费方式**,灵活适配不同计费模型。 +- **策略配置**: 提供灵活的转发策略配置,适用于多种网络场景。 + +## 快速开始 + +- [安装部署](./install.md) +- [使用指南](./usage.md) +- [常见问题](./faq.md) + +## 免责声明 + +本项目仅供个人学习与研究使用,基于开源项目进行二次开发。 +使用本项目所带来的任何风险均由使用者自行承担。本项目为开源的流量转发工具,仅限合法、合规用途。 +**禁止将本项目用于任何违法或未经授权的行为,包括但不限于网络攻击、数据窃取、非法访问等。** + +## 捐赠支持 + +如果您觉得本项目对您有帮助,欢迎请作者喝杯咖啡! + +| 网络 | 地址 | +|------------|----------------------------------------------------------------------| +| BNB(BEP20) | `0xa608708fdc6279a2433fd4b82f0b72b8cbe97ed5` | +| TRC20 | `TM8VYdU3s3gSX5PC8swjAJrAzZFCHKqG2k` | +| Aptos | `0x49427bfcba1006a346447430689b2307ac156316bb34850d1d3029ff9d118da5` | +| Polygon | `0xa608708fdc6279a2433fd4b82f0b72b8cbe97ed5` | diff --git a/doc/install.md b/doc/install.md new file mode 100644 index 0000000..c76fbde --- /dev/null +++ b/doc/install.md @@ -0,0 +1,79 @@ +# 安装部署指南 + +本文档介绍如何部署 FLVX 面板端及节点端。 + +## 一、面板端部署 + +面板端负责管理用户、节点和转发规则。 + +### 1. 环境要求 +- 操作系统:Linux (推荐 Debian 10+ / Ubuntu 20.04+) +- 必须安装 Docker 和 Docker Compose + +### 2. 一键安装脚本 + +使用以下命令即可快速安装面板: + +```bash +curl -L https://raw.githubusercontent.com/Sagit-chu/flux-panel/main/panel_install.sh -o panel_install.sh && chmod +x panel_install.sh && ./panel_install.sh +``` + +**安装过程中会提示输入以下信息:** +- **前端端口**: 默认为 `6366` +- **后端端口**: 默认为 `6365` + +脚本会自动检测系统是否支持 IPv6,并自动配置 Docker 的 IPv6 支持。 + +### 3. 访问面板 + +安装完成后,访问: +`http://<服务器IP>:<前端端口>` (默认: `http://<服务器IP>:6366`) + +**默认管理员账号:** +- 用户名: `admin_user` +- 密码: `admin_user` + +> ⚠️ **注意**: 首次登录后,请务必在“个人中心”或“设置”中修改默认密码! + +### 4. 维护命令 + +再次运行 `./panel_install.sh` 脚本可以看到管理菜单: +1. 安装面板 +2. 更新面板 +3. 卸载面板 + +--- + +## 二、节点端部署 + +节点端运行在实际进行流量转发的服务器上,需要连接到面板端进行管理。 + +### 1. 获取接入密钥 +1. 登录面板端。 +2. 进入 **节点管理 (Node)** 页面。 +3. 点击 **添加节点**。 +4. 获取该节点的 **接入密钥 (Secret)**。 + +### 2. 一键安装脚本 + +在节点服务器上运行: + +```bash +curl -L https://raw.githubusercontent.com/Sagit-chu/flux-panel/main/install.sh -o install.sh && chmod +x install.sh && ./install.sh +``` + +**安装过程中会提示输入:** +- **服务器地址**: 面板端的通信地址(通常是 `http://<面板IP>:<后端端口>`,例如 `http://1.2.3.4:6365`)。 +- **密钥**: 刚才在面板中获取的节点密钥。 + +或者直接使用带参数的命令(适用于自动化部署): + +```bash +# 替换 <面板地址> 和 <密钥> +./install.sh -a "http://1.2.3.4:6365" -s "your_node_secret" +``` + +### 3. 验证安装 +安装完成后,服务会自动启动。 +- 查看状态: `systemctl status flux_agent` +- 回到面板 **节点管理** 页面,该节点状态应显示为 **在线**。 diff --git a/doc/usage.md b/doc/usage.md new file mode 100644 index 0000000..42e3520 --- /dev/null +++ b/doc/usage.md @@ -0,0 +1,35 @@ +# 使用指南 + +## 1. 仪表盘 (Dashboard) +登录系统后首先看到的是仪表盘,这里展示了系统的整体运行状态,包括: +- 在线节点数量 +- 用户总数 +- 流量统计信息 + +## 2. 节点管理 (Node) +节点是实际承载流量转发的服务器。 +- **添加节点**: 点击“添加”,获取密钥用于节点端安装。 +- **管理**: 可以查看节点在线状态、版本信息,以及对节点进行编辑或删除。 + +## 3. 用户管理 (User) +管理员可以创建和管理普通用户。 +- **创建用户**: 设置用户名、密码、流量配额等。 +- **用户组**: 可以将用户分配到不同的组 (Group),便于统一管理权限或策略。 + +## 4. 转发管理 (Forward) +这是核心功能区,用于设置端口转发规则。 +- **端口转发**: 将节点服务器的某个端口流量转发到目标地址。 + - **协议**: 支持 TCP / UDP。 + - **入口**: 选择入口节点和监听端口。 + - **出口**: 设置目标 IP 和端口。 +- **隧道转发**: 用于更复杂的网络穿透场景(具体配置视业务需求而定)。 + +## 5. 限制与策略 (Limit) +- **限速**: 可以对指定用户或指定隧道进行带宽限制,防止资源滥用。 +- **计费模式**: 支持配置流量计算方式(单向或双向),适合运营场景。 + +## 6. 系统配置 (Config) +在此页面进行系统的全局设置。 + +## 7. 个人设置 (Profile) +- **修改密码**: 为了安全,建议定期修改管理员密码。 diff --git a/doc/vpstown.png b/doc/vpstown.png deleted file mode 100644 index 5b02060..0000000 Binary files a/doc/vpstown.png and /dev/null differ diff --git a/go-backend/AGENTS.md b/go-backend/AGENTS.md new file mode 100644 index 0000000..204c8e9 --- /dev/null +++ b/go-backend/AGENTS.md @@ -0,0 +1,47 @@ +# GO BACKEND KNOWLEDGE BASE + +## OVERVIEW +Go-based Admin API for FLVX (formerly Flux Panel). Replaces the legacy Spring Boot backend. +**Stack:** Go 1.23, net/http (std lib), SQLite (modernc.org/sqlite). + +## STRUCTURE +``` +go-backend/ +├── cmd/paneld/main.go # Entry point; starts HTTP server + WebSocket +├── internal/ +│ ├── http/ # HTTP layer +│ │ ├── router.go # Routes (NewServeMux) + Middleware chain +│ │ ├── handler/ # API Handlers (User, Tunnel, Node, etc.) +│ │ ├── middleware/ # JWT, CORS, Logging, Recover +│ │ └── response/ # JSON response helpers +│ ├── store/sqlite/ # Data Access Layer (Repository pattern) +│ │ ├── repository.go # SQL queries & Struct definitions +│ │ └── sql/ # Embedded schema.sql & data.sql +│ └── auth/ # Auth logic +├── tests/ # Integration/Contract tests +├── Dockerfile # Multi-stage build (alpine) +└── Makefile # Build commands +``` + +## WHERE TO LOOK +| Task | Location | Notes | +|------|----------|-------| +| **API Routes** | `go-backend/internal/http/router.go` | Registers handlers to `http.ServeMux` | +| **DB Schema** | `go-backend/internal/store/sqlite/sql/schema.sql` | Embedded in binary | +| **SQL Queries** | `go-backend/internal/store/sqlite/repository.go` | Raw SQL, no ORM | +| **Auth Middleware** | `go-backend/internal/http/middleware/jwt.go` | Extracts `Authorization` header | +| **WebSocket** | `go-backend/internal/ws/` | Real-time updates (traffic, status) | + +## CONVENTIONS +- **No ORM**: Uses raw SQL with `database/sql` and `modernc.org/sqlite`. +- **Standard Lib**: Uses `net/http` for routing (Go 1.22+ patterns). +- **Auth**: Expects raw JWT in `Authorization` header (no `Bearer` prefix). +- **Config**: Loaded from environment variables (see `cmd/paneld/main.go`). + +## COMMANDS +```bash +cd go-backend +go run ./cmd/paneld +go test ./... +make build +``` diff --git a/go-backend/Dockerfile b/go-backend/Dockerfile index fcc41d4..394fb50 100644 --- a/go-backend/Dockerfile +++ b/go-backend/Dockerfile @@ -5,7 +5,9 @@ COPY go.mod ./ RUN go mod download COPY . . -RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o /out/paneld ./cmd/paneld +ARG TARGETOS +ARG TARGETARCH +RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} env ${TARGETARCH:+GOARCH=${TARGETARCH}} go build -o /out/paneld ./cmd/paneld FROM debian:bookworm-slim WORKDIR /app diff --git a/go-gost/x/go.mod b/go-gost/x/go.mod index 1d0e18b..5674fe1 100644 --- a/go-gost/x/go.mod +++ b/go-gost/x/go.mod @@ -4,9 +4,7 @@ go 1.22.0 toolchain go1.23.4 -require ( - github.com/shirou/gopsutil/v3 v3.24.5 -) +require github.com/shirou/gopsutil/v3 v3.24.5 require ( github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 @@ -76,6 +74,7 @@ require ( github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/gabriel-vasile/mimetype v1.4.3 // indirect github.com/gin-contrib/sse v0.1.0 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.20.0 // indirect @@ -91,6 +90,7 @@ require ( github.com/klauspost/cpuid/v2 v2.2.7 // indirect github.com/klauspost/reedsolomon v1.11.8 // indirect github.com/leodido/go-urn v1.4.0 // indirect + github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect @@ -103,6 +103,7 @@ require ( github.com/pion/udp/v2 v2.0.1 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect github.com/prometheus/client_model v0.6.0 // indirect github.com/prometheus/common v0.48.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect @@ -110,6 +111,7 @@ require ( github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/shoenig/go-m1cpu v0.1.6 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.6.0 // indirect @@ -118,8 +120,11 @@ require ( github.com/templexxx/cpu v0.1.0 // indirect github.com/templexxx/xorsimd v0.4.2 // indirect github.com/tjfoc/gmsm v1.4.1 // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.12 // indirect + github.com/yusufpapurcu/wmi v1.2.4 // indirect go.uber.org/mock v0.5.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/arch v0.8.0 // indirect diff --git a/go-gost/x/go.sum b/go-gost/x/go.sum index 1c3081c..6815082 100644 --- a/go-gost/x/go.sum +++ b/go-gost/x/go.sum @@ -65,6 +65,8 @@ github.com/go-gost/tls-dissector v0.1.1 h1:2zUOTPzCQAUQ54Rpy0UEi3JPMQSYsIFSeFeKr github.com/go-gost/tls-dissector v0.1.1/go.mod h1:/9QfdewqmHdaE362Hv5nDaSWLx3pCmtD870d6GaquXs= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= @@ -102,6 +104,7 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -133,6 +136,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= @@ -175,6 +180,8 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -204,7 +211,12 @@ github.com/shadowsocks/go-shadowsocks2 v0.1.5 h1:PDSQv9y2S85Fl7VBeOMF9StzeXZyK1H github.com/shadowsocks/go-shadowsocks2 v0.1.5/go.mod h1:AGGpIoek4HRno4xzyFiAtLHkOpcoznZEkAccaI/rplM= github.com/shadowsocks/shadowsocks-go v0.0.0-20200409064450-3e585ff90601 h1:XU9hik0exChEmY92ALW4l9WnDodxLVS9yOSNh2SizaQ= github.com/shadowsocks/shadowsocks-go v0.0.0-20200409064450-3e585ff90601/go.mod h1:mttDPaeLm87u74HMrP+n2tugXvIKWcwff/cqSX0lehY= +github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= +github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= +github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= +github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU= +github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= @@ -244,6 +256,10 @@ github.com/templexxx/xorsimd v0.4.2 h1:ocZZ+Nvu65LGHmCLZ7OoCtg8Fx8jnHKK37SjvngUo github.com/templexxx/xorsimd v0.4.2/go.mod h1:HgwaPoDREdi6OnULpSfxhzaiiSUY4Fi3JPn1wpt28NI= github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho= github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= @@ -266,6 +282,8 @@ github.com/xtaci/tcpraw v1.2.25/go.mod h1:dKyZ2V75s0cZ7cbgJYdxPvms7af0joIeOyx1Gg github.com/yl2chen/cidranger v1.0.2 h1:lbOWZVCG1tCRX4u24kuM1Tb4nHqWkDxwLdoS+SevawU= github.com/yl2chen/cidranger v1.0.2/go.mod h1:9U1yz7WPYDwf0vpNWFaeRh0bjwz5RVgRy/9UEQfHl0g= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= +github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/zalando/go-keyring v0.2.4 h1:wi2xxTqdiwMKbM6TWwi+uJCG/Tum2UV0jqaQhCa9/68= github.com/zalando/go-keyring v0.2.4/go.mod h1:HL4k+OXQfJUWaMnqyuSOc0drfGPX2b51Du6K+MRgZMk= go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= @@ -321,15 +339,19 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= diff --git a/go-gost/x/socket/config.go b/go-gost/x/socket/config.go index 66c7b87..074dff6 100644 --- a/go-gost/x/socket/config.go +++ b/go-gost/x/socket/config.go @@ -10,7 +10,7 @@ import ( // configMutex 保护配置文件的并发写入 var configMutex sync.Mutex -func saveConfig() { +func saveConfig() error { configMutex.Lock() defer configMutex.Unlock() @@ -18,14 +18,13 @@ func saveConfig() { f, err := os.Create(file) if err != nil { - return + return err } defer f.Close() if err := config.Global().Write(f, "json"); err != nil { - - return + return err } - return + return nil } diff --git a/go-gost/x/socket/websocket_reporter.go b/go-gost/x/socket/websocket_reporter.go index fd1a203..9a5817f 100644 --- a/go-gost/x/socket/websocket_reporter.go +++ b/go-gost/x/socket/websocket_reporter.go @@ -586,7 +586,16 @@ func (w *WebSocketReporter) routeCommand(cmd CommandMessage) { // 只有状态变更命令才保存配置 if needSaveConfig { - saveConfig() + if saveErr := saveConfig(); saveErr != nil { + fmt.Printf("❌ 保存配置失败: %v\n", saveErr) + if err == nil { + err = fmt.Errorf("保存配置失败: %v", saveErr) + } else { + err = fmt.Errorf("%v; 保存配置失败: %v", err, saveErr) + } + } else { + fmt.Println("✅ 配置已保存到 gost.json") + } } // 发送响应 diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..f058de8 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,40 @@ +site_name: FLVX 文档 +site_url: https://sagit-chu.github.io/flux-panel/ +site_description: FLVX官方文档 +site_author: Sagit-chu + +theme: + name: material + language: zh + palette: + - scheme: default + primary: indigo + accent: indigo + - scheme: slate + primary: indigo + accent: indigo + toggle: + icon: material/brightness-4 + name: Switch to dark mode + features: + - navigation.tabs + - navigation.sections + - navigation.top + - search.suggest + - search.highlight + - content.code.copy + +docs_dir: doc + +nav: + - 首页: index.md + - 安装部署: install.md + - 使用指南: usage.md + - 常见问题: faq.md + +markdown_extensions: + - admonition + - pymdownx.details + - pymdownx.superfences + - pymdownx.tabbed: + alternate_style: true diff --git a/vite-frontend/AGENTS.md b/vite-frontend/AGENTS.md index 2b62f41..2ebe205 100644 --- a/vite-frontend/AGENTS.md +++ b/vite-frontend/AGENTS.md @@ -3,7 +3,7 @@ **Generated:** Mon Feb 02 2026 ## OVERVIEW -Web management console for Flux Panel. +Web management console for FLVX (formerly Flux Panel). **Stack:** React 18, Vite 5, TypeScript, TailwindCSS 4, HeroUI. ## STRUCTURE diff --git a/vite-frontend/index.html b/vite-frontend/index.html index 7c3bc59..0c45f44 100644 --- a/vite-frontend/index.html +++ b/vite-frontend/index.html @@ -4,7 +4,7 @@ -