diff --git a/api.go b/api.go index 44b6cdc..2792da7 100644 --- a/api.go +++ b/api.go @@ -5,6 +5,7 @@ import ( "fmt" "net/http" "strconv" + "text/template" "github.com/gin-gonic/gin" "golang.org/x/crypto/bcrypt" @@ -56,6 +57,7 @@ func SetupRouter() *gin.Engine { // 🟢 导入 TOML(新增) auth.POST("/import/toml", importTomlHandler) + auth.GET("/export/toml", ExportTomlHandler) } } @@ -339,6 +341,54 @@ func importTomlHandler(c *gin.Context) { }) } +// ExportTomlHandler 导出 TOML 配置文件 +func ExportTomlHandler(c *gin.Context) { + cfg, err := GetGlobalConfig() + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"code": 2, "msg": "读取配置失败: " + err.Error()}) + return + } + + proxies, err := GetProxies() + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"code": 2, "msg": "读取隧道失败: " + err.Error()}) + return + } + + var activeProxies []Proxy + for _, p := range proxies { + if p.Enabled { + activeProxies = append(activeProxies, p) + } + } + + data := struct { + *GlobalConfig + Proxies []Proxy + }{ + GlobalConfig: cfg, + Proxies: activeProxies, + } + + // 解析模板(直接使用 frp.go 中的 frpcTemplateContent) + tmpl, err := template.New("frpc").Parse(FrpcTemplateContent) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"code": 2, "msg": "解析模板失败: " + err.Error()}) + return + } + + var buf bytes.Buffer + if err := tmpl.Execute(&buf, data); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"code": 2, "msg": "渲染模板失败: " + err.Error()}) + return + } + + // 返回文件下载 + c.Header("Content-Type", "text/plain; charset=utf-8") + c.Header("Content-Disposition", "attachment; filename=frpc.toml") + c.String(http.StatusOK, buf.String()) +} + // ========== 辅助函数 ========== func generateAndReload() error { if err := GenerateFrpcConfig(); err != nil { diff --git a/frp.go b/frp.go index 68fdd57..badeab8 100644 --- a/frp.go +++ b/frp.go @@ -18,7 +18,7 @@ import ( var embeddedFrpc embed.FS //go:embed frpc.tmpl -var frpcTemplateContent string +var FrpcTemplateContent string var ( cachedFrpcPath string @@ -127,11 +127,11 @@ func GenerateFrpcConfig() error { tmplContent = string(content) } else { // 读取失败时回退到 embed - tmplContent = frpcTemplateContent + tmplContent = FrpcTemplateContent } } else { // 外部文件不存在,使用 embed 中的模板 - tmplContent = frpcTemplateContent + tmplContent = FrpcTemplateContent } // ===== 核心改动结束 ===== diff --git a/frpc-console.db b/frpc-console.db index 5afffff..312e52d 100644 Binary files a/frpc-console.db and b/frpc-console.db differ diff --git a/frpc.log b/frpc.log index 9739ee6..dee2c6f 100644 --- a/frpc.log +++ b/frpc.log @@ -973,3 +973,504 @@ 2026-07-23 21:06:45.903 [W] [client/control.go:163] [41fdf70f15bb171a] [podux] start error: proxy [podux] already exists 2026-07-23 21:06:45.903 [W] [client/control.go:163] [41fdf70f15bb171a] [sun-panel] start error: proxy [sun-panel] already exists 2026-07-23 21:06:45.903 [W] [client/control.go:163] [41fdf70f15bb171a] [Halo] start error: proxy [Halo] already exists +2026-07-23 21:07:18.837 [W] [client/control.go:163] [41fdf70f15bb171a] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:07:18.837 [W] [client/control.go:163] [41fdf70f15bb171a] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:07:18.837 [W] [client/control.go:163] [41fdf70f15bb171a] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:07:18.837 [W] [client/control.go:163] [41fdf70f15bb171a] [Halo] start error: proxy [Halo] already exists +2026-07-23 21:07:18.837 [W] [client/control.go:163] [41fdf70f15bb171a] [immich] start error: proxy [immich] already exists +2026-07-23 21:07:18.907 [W] [client/control.go:163] [41fdf70f15bb171a] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:07:18.907 [W] [client/control.go:163] [41fdf70f15bb171a] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:07:18.907 [W] [client/control.go:163] [41fdf70f15bb171a] [podux] start error: proxy [podux] already exists +2026-07-23 21:07:18.907 [W] [client/control.go:163] [41fdf70f15bb171a] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:07:18.907 [W] [client/control.go:163] [41fdf70f15bb171a] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:07:18.907 [W] [client/control.go:163] [41fdf70f15bb171a] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:07:18.907 [W] [client/control.go:163] [41fdf70f15bb171a] [Grafana] start error: proxy [Grafana] already exists +2026-07-23 21:07:18.907 [W] [client/control.go:163] [41fdf70f15bb171a] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:07:18.907 [W] [client/control.go:163] [41fdf70f15bb171a] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:07:51.839 [W] [client/control.go:163] [41fdf70f15bb171a] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:07:51.839 [W] [client/control.go:163] [41fdf70f15bb171a] [podux] start error: proxy [podux] already exists +2026-07-23 21:07:51.839 [W] [client/control.go:163] [41fdf70f15bb171a] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:07:51.839 [W] [client/control.go:163] [41fdf70f15bb171a] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:07:51.839 [W] [client/control.go:163] [41fdf70f15bb171a] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:07:51.905 [W] [client/control.go:163] [41fdf70f15bb171a] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:07:51.905 [W] [client/control.go:163] [41fdf70f15bb171a] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:07:51.905 [W] [client/control.go:163] [41fdf70f15bb171a] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:07:51.905 [W] [client/control.go:163] [41fdf70f15bb171a] [Halo] start error: proxy [Halo] already exists +2026-07-23 21:07:51.905 [W] [client/control.go:163] [41fdf70f15bb171a] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:07:51.905 [W] [client/control.go:163] [41fdf70f15bb171a] [immich] start error: proxy [immich] already exists +2026-07-23 21:07:51.905 [W] [client/control.go:163] [41fdf70f15bb171a] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:07:51.905 [W] [client/control.go:163] [41fdf70f15bb171a] [Grafana] start error: proxy [Grafana] already exists +2026-07-23 21:07:51.905 [W] [client/control.go:163] [41fdf70f15bb171a] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:08:24.844 [W] [client/control.go:163] [41fdf70f15bb171a] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:08:24.844 [W] [client/control.go:163] [41fdf70f15bb171a] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:08:24.844 [W] [client/control.go:163] [41fdf70f15bb171a] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:08:24.844 [W] [client/control.go:163] [41fdf70f15bb171a] [immich] start error: proxy [immich] already exists +2026-07-23 21:08:24.883 [W] [client/control.go:163] [41fdf70f15bb171a] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:08:24.883 [W] [client/control.go:163] [41fdf70f15bb171a] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:08:24.883 [W] [client/control.go:163] [41fdf70f15bb171a] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:08:24.883 [W] [client/control.go:163] [41fdf70f15bb171a] [Halo] start error: proxy [Halo] already exists +2026-07-23 21:08:24.883 [W] [client/control.go:163] [41fdf70f15bb171a] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:08:24.883 [W] [client/control.go:163] [41fdf70f15bb171a] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:08:24.883 [W] [client/control.go:163] [41fdf70f15bb171a] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:08:24.883 [W] [client/control.go:163] [41fdf70f15bb171a] [podux] start error: proxy [podux] already exists +2026-07-23 21:08:24.883 [W] [client/control.go:163] [41fdf70f15bb171a] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:08:24.883 [W] [client/control.go:163] [41fdf70f15bb171a] [Grafana] start error: proxy [Grafana] already exists +2026-07-23 21:08:57.850 [W] [client/control.go:163] [41fdf70f15bb171a] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:08:57.851 [W] [client/control.go:163] [41fdf70f15bb171a] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:08:57.851 [W] [client/control.go:163] [41fdf70f15bb171a] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:08:57.851 [W] [client/control.go:163] [41fdf70f15bb171a] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:08:57.851 [W] [client/control.go:163] [41fdf70f15bb171a] [immich] start error: proxy [immich] already exists +2026-07-23 21:08:57.918 [W] [client/control.go:163] [41fdf70f15bb171a] [Halo] start error: proxy [Halo] already exists +2026-07-23 21:08:57.918 [W] [client/control.go:163] [41fdf70f15bb171a] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:08:57.918 [W] [client/control.go:163] [41fdf70f15bb171a] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:08:57.918 [W] [client/control.go:163] [41fdf70f15bb171a] [podux] start error: proxy [podux] already exists +2026-07-23 21:08:57.918 [W] [client/control.go:163] [41fdf70f15bb171a] [Grafana] start error: proxy [Grafana] already exists +2026-07-23 21:08:57.918 [W] [client/control.go:163] [41fdf70f15bb171a] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:08:57.918 [W] [client/control.go:163] [41fdf70f15bb171a] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:08:57.918 [W] [client/control.go:163] [41fdf70f15bb171a] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:08:57.918 [W] [client/control.go:163] [41fdf70f15bb171a] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:09:09.518 [I] [sub/root.go:201] start frpc service for config file [./frpc.toml] with aggregated configuration +2026-07-23 21:09:09.528 [I] [client/service.go:308] try to connect to server... +2026-07-23 21:09:09.806 [I] [client/service.go:328] [b9fd4954c711ba05] login to server success, get run id [b9fd4954c711ba05] +2026-07-23 21:09:09.806 [I] [proxy/proxy_manager.go:180] [b9fd4954c711ba05] proxy added: [1panel-1 Gitea Grafana Halo SMB SSH immich immich-APP napcat napcat-2 navidrome openlist podux sun-panel] +2026-07-23 21:09:09.873 [W] [client/control.go:163] [b9fd4954c711ba05] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:09:09.873 [W] [client/control.go:163] [b9fd4954c711ba05] [Halo] start error: proxy [Halo] already exists +2026-07-23 21:09:09.873 [W] [client/control.go:163] [b9fd4954c711ba05] [Grafana] start error: proxy [Grafana] already exists +2026-07-23 21:09:09.873 [W] [client/control.go:163] [b9fd4954c711ba05] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:09:09.873 [W] [client/control.go:163] [b9fd4954c711ba05] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:09:09.873 [W] [client/control.go:163] [b9fd4954c711ba05] [immich] start error: proxy [immich] already exists +2026-07-23 21:09:09.873 [W] [client/control.go:163] [b9fd4954c711ba05] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:09:09.939 [W] [client/control.go:163] [b9fd4954c711ba05] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:09:09.939 [W] [client/control.go:163] [b9fd4954c711ba05] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:09:09.939 [W] [client/control.go:163] [b9fd4954c711ba05] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:09:09.939 [W] [client/control.go:163] [b9fd4954c711ba05] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:09:09.939 [W] [client/control.go:163] [b9fd4954c711ba05] [podux] start error: proxy [podux] already exists +2026-07-23 21:09:09.939 [W] [client/control.go:163] [b9fd4954c711ba05] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:09:09.939 [W] [client/control.go:163] [b9fd4954c711ba05] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:09:42.875 [W] [client/control.go:163] [b9fd4954c711ba05] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:09:42.878 [W] [client/control.go:163] [b9fd4954c711ba05] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:09:42.939 [W] [client/control.go:163] [b9fd4954c711ba05] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:09:42.939 [W] [client/control.go:163] [b9fd4954c711ba05] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:09:42.939 [W] [client/control.go:163] [b9fd4954c711ba05] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:09:42.939 [W] [client/control.go:163] [b9fd4954c711ba05] [Grafana] start error: proxy [Grafana] already exists +2026-07-23 21:09:42.939 [W] [client/control.go:163] [b9fd4954c711ba05] [podux] start error: proxy [podux] already exists +2026-07-23 21:09:42.939 [W] [client/control.go:163] [b9fd4954c711ba05] [Halo] start error: proxy [Halo] already exists +2026-07-23 21:09:42.939 [W] [client/control.go:163] [b9fd4954c711ba05] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:09:42.939 [W] [client/control.go:163] [b9fd4954c711ba05] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:09:42.939 [W] [client/control.go:163] [b9fd4954c711ba05] [immich] start error: proxy [immich] already exists +2026-07-23 21:09:42.939 [W] [client/control.go:163] [b9fd4954c711ba05] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:09:42.939 [W] [client/control.go:163] [b9fd4954c711ba05] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:09:42.939 [W] [client/control.go:163] [b9fd4954c711ba05] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:10:15.881 [W] [client/control.go:163] [b9fd4954c711ba05] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:10:15.881 [W] [client/control.go:163] [b9fd4954c711ba05] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:10:15.881 [W] [client/control.go:163] [b9fd4954c711ba05] [Halo] start error: proxy [Halo] already exists +2026-07-23 21:10:15.881 [W] [client/control.go:163] [b9fd4954c711ba05] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:10:15.881 [W] [client/control.go:163] [b9fd4954c711ba05] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:10:15.947 [W] [client/control.go:163] [b9fd4954c711ba05] [Grafana] start error: proxy [Grafana] already exists +2026-07-23 21:10:15.947 [W] [client/control.go:163] [b9fd4954c711ba05] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:10:15.947 [W] [client/control.go:163] [b9fd4954c711ba05] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:10:15.947 [W] [client/control.go:163] [b9fd4954c711ba05] [immich] start error: proxy [immich] already exists +2026-07-23 21:10:15.947 [W] [client/control.go:163] [b9fd4954c711ba05] [podux] start error: proxy [podux] already exists +2026-07-23 21:10:15.947 [W] [client/control.go:163] [b9fd4954c711ba05] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:10:15.947 [W] [client/control.go:163] [b9fd4954c711ba05] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:10:15.947 [W] [client/control.go:163] [b9fd4954c711ba05] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:10:15.947 [W] [client/control.go:163] [b9fd4954c711ba05] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:10:48.882 [W] [client/control.go:163] [b9fd4954c711ba05] [Grafana] start error: proxy [Grafana] already exists +2026-07-23 21:10:48.884 [W] [client/control.go:163] [b9fd4954c711ba05] [Halo] start error: proxy [Halo] already exists +2026-07-23 21:10:48.884 [W] [client/control.go:163] [b9fd4954c711ba05] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:10:48.884 [W] [client/control.go:163] [b9fd4954c711ba05] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:10:48.884 [W] [client/control.go:163] [b9fd4954c711ba05] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:10:48.947 [W] [client/control.go:163] [b9fd4954c711ba05] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:10:48.947 [W] [client/control.go:163] [b9fd4954c711ba05] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:10:48.947 [W] [client/control.go:163] [b9fd4954c711ba05] [podux] start error: proxy [podux] already exists +2026-07-23 21:10:48.947 [W] [client/control.go:163] [b9fd4954c711ba05] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:10:48.947 [W] [client/control.go:163] [b9fd4954c711ba05] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:10:48.947 [W] [client/control.go:163] [b9fd4954c711ba05] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:10:48.947 [W] [client/control.go:163] [b9fd4954c711ba05] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:10:48.947 [W] [client/control.go:163] [b9fd4954c711ba05] [immich] start error: proxy [immich] already exists +2026-07-23 21:10:48.947 [W] [client/control.go:163] [b9fd4954c711ba05] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:10:55.825 [I] [sub/root.go:201] start frpc service for config file [./frpc.toml] with aggregated configuration +2026-07-23 21:10:55.834 [I] [client/service.go:308] try to connect to server... +2026-07-23 21:10:56.003 [I] [client/service.go:328] [095dc4721f280b4a] login to server success, get run id [095dc4721f280b4a] +2026-07-23 21:10:56.003 [I] [proxy/proxy_manager.go:180] [095dc4721f280b4a] proxy added: [1panel-1 Gitea Grafana Halo SMB SSH immich immich-APP napcat napcat-2 navidrome openlist podux sun-panel] +2026-07-23 21:10:56.073 [W] [client/control.go:163] [095dc4721f280b4a] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:10:56.073 [W] [client/control.go:163] [095dc4721f280b4a] [Halo] start error: proxy [Halo] already exists +2026-07-23 21:10:56.073 [W] [client/control.go:163] [095dc4721f280b4a] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:10:56.073 [W] [client/control.go:163] [095dc4721f280b4a] [immich] start error: proxy [immich] already exists +2026-07-23 21:10:56.073 [W] [client/control.go:163] [095dc4721f280b4a] [Grafana] start error: proxy [Grafana] already exists +2026-07-23 21:10:56.073 [W] [client/control.go:163] [095dc4721f280b4a] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:10:56.118 [W] [client/control.go:163] [095dc4721f280b4a] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:10:56.118 [W] [client/control.go:163] [095dc4721f280b4a] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:10:56.118 [W] [client/control.go:163] [095dc4721f280b4a] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:10:56.118 [W] [client/control.go:163] [095dc4721f280b4a] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:10:56.118 [W] [client/control.go:163] [095dc4721f280b4a] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:10:56.118 [W] [client/control.go:163] [095dc4721f280b4a] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:10:56.118 [W] [client/control.go:163] [095dc4721f280b4a] [podux] start error: proxy [podux] already exists +2026-07-23 21:10:56.118 [W] [client/control.go:163] [095dc4721f280b4a] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:11:00.830 [I] [sub/root.go:201] start frpc service for config file [./frpc.toml] with aggregated configuration +2026-07-23 21:11:00.839 [I] [client/service.go:308] try to connect to server... +2026-07-23 21:11:01.013 [I] [client/service.go:328] [c5b62093adc18bf7] login to server success, get run id [c5b62093adc18bf7] +2026-07-23 21:11:01.013 [I] [proxy/proxy_manager.go:180] [c5b62093adc18bf7] proxy added: [1panel-1 Gitea Grafana Halo SMB SSH immich immich-APP napcat napcat-2 navidrome podux sun-panel] +2026-07-23 21:11:01.082 [W] [client/control.go:163] [c5b62093adc18bf7] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:11:01.082 [W] [client/control.go:163] [c5b62093adc18bf7] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:11:01.082 [W] [client/control.go:163] [c5b62093adc18bf7] [Grafana] start error: proxy [Grafana] already exists +2026-07-23 21:11:01.082 [W] [client/control.go:163] [c5b62093adc18bf7] [Halo] start error: proxy [Halo] already exists +2026-07-23 21:11:01.131 [W] [client/control.go:163] [c5b62093adc18bf7] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:11:01.131 [W] [client/control.go:163] [c5b62093adc18bf7] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:11:01.131 [W] [client/control.go:163] [c5b62093adc18bf7] [immich] start error: proxy [immich] already exists +2026-07-23 21:11:01.131 [W] [client/control.go:163] [c5b62093adc18bf7] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:11:01.131 [W] [client/control.go:163] [c5b62093adc18bf7] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:11:01.131 [W] [client/control.go:163] [c5b62093adc18bf7] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:11:01.131 [W] [client/control.go:163] [c5b62093adc18bf7] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:11:01.131 [W] [client/control.go:163] [c5b62093adc18bf7] [podux] start error: proxy [podux] already exists +2026-07-23 21:11:01.131 [W] [client/control.go:163] [c5b62093adc18bf7] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:11:03.006 [I] [sub/root.go:201] start frpc service for config file [./frpc.toml] with aggregated configuration +2026-07-23 21:11:03.016 [I] [client/service.go:308] try to connect to server... +2026-07-23 21:11:03.187 [I] [client/service.go:328] [3948774b46dfcf16] login to server success, get run id [3948774b46dfcf16] +2026-07-23 21:11:03.188 [I] [proxy/proxy_manager.go:180] [3948774b46dfcf16] proxy added: [1panel-1 Gitea Grafana Halo SMB SSH immich immich-APP napcat napcat-2 navidrome openlist podux sun-panel] +2026-07-23 21:11:03.257 [W] [client/control.go:163] [3948774b46dfcf16] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:11:03.257 [W] [client/control.go:163] [3948774b46dfcf16] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:11:03.257 [W] [client/control.go:163] [3948774b46dfcf16] [immich] start error: proxy [immich] already exists +2026-07-23 21:11:03.258 [W] [client/control.go:163] [3948774b46dfcf16] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:11:03.258 [W] [client/control.go:163] [3948774b46dfcf16] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:11:03.258 [W] [client/control.go:163] [3948774b46dfcf16] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:11:03.258 [W] [client/control.go:163] [3948774b46dfcf16] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:11:03.342 [W] [client/control.go:163] [3948774b46dfcf16] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:11:03.342 [W] [client/control.go:163] [3948774b46dfcf16] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:11:03.342 [W] [client/control.go:163] [3948774b46dfcf16] [podux] start error: proxy [podux] already exists +2026-07-23 21:11:03.342 [W] [client/control.go:163] [3948774b46dfcf16] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:11:03.342 [W] [client/control.go:163] [3948774b46dfcf16] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:11:03.342 [W] [client/control.go:163] [3948774b46dfcf16] [Grafana] start error: proxy [Grafana] already exists +2026-07-23 21:11:03.342 [W] [client/control.go:163] [3948774b46dfcf16] [Halo] start error: proxy [Halo] already exists +2026-07-23 21:11:36.259 [W] [client/control.go:163] [3948774b46dfcf16] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:11:36.259 [W] [client/control.go:163] [3948774b46dfcf16] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:11:36.261 [W] [client/control.go:163] [3948774b46dfcf16] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:11:36.261 [W] [client/control.go:163] [3948774b46dfcf16] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:11:36.261 [W] [client/control.go:163] [3948774b46dfcf16] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:11:36.328 [W] [client/control.go:163] [3948774b46dfcf16] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:11:36.328 [W] [client/control.go:163] [3948774b46dfcf16] [immich] start error: proxy [immich] already exists +2026-07-23 21:11:36.328 [W] [client/control.go:163] [3948774b46dfcf16] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:11:36.328 [W] [client/control.go:163] [3948774b46dfcf16] [Halo] start error: proxy [Halo] already exists +2026-07-23 21:11:36.328 [W] [client/control.go:163] [3948774b46dfcf16] [podux] start error: proxy [podux] already exists +2026-07-23 21:11:36.328 [W] [client/control.go:163] [3948774b46dfcf16] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:11:36.328 [W] [client/control.go:163] [3948774b46dfcf16] [Grafana] start error: proxy [Grafana] already exists +2026-07-23 21:11:36.328 [W] [client/control.go:163] [3948774b46dfcf16] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:11:36.328 [W] [client/control.go:163] [3948774b46dfcf16] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:12:09.264 [W] [client/control.go:163] [3948774b46dfcf16] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:12:09.266 [W] [client/control.go:163] [3948774b46dfcf16] [Halo] start error: proxy [Halo] already exists +2026-07-23 21:12:09.266 [W] [client/control.go:163] [3948774b46dfcf16] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:12:09.266 [W] [client/control.go:163] [3948774b46dfcf16] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:12:09.266 [W] [client/control.go:163] [3948774b46dfcf16] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:12:09.333 [W] [client/control.go:163] [3948774b46dfcf16] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:12:09.333 [W] [client/control.go:163] [3948774b46dfcf16] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:12:09.333 [W] [client/control.go:163] [3948774b46dfcf16] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:12:09.333 [W] [client/control.go:163] [3948774b46dfcf16] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:12:09.333 [W] [client/control.go:163] [3948774b46dfcf16] [Grafana] start error: proxy [Grafana] already exists +2026-07-23 21:12:09.333 [W] [client/control.go:163] [3948774b46dfcf16] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:12:09.333 [W] [client/control.go:163] [3948774b46dfcf16] [immich] start error: proxy [immich] already exists +2026-07-23 21:12:09.333 [W] [client/control.go:163] [3948774b46dfcf16] [podux] start error: proxy [podux] already exists +2026-07-23 21:12:09.333 [W] [client/control.go:163] [3948774b46dfcf16] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:12:46.823 [I] [sub/root.go:201] start frpc service for config file [./frpc.toml] with aggregated configuration +2026-07-23 21:12:46.832 [I] [client/service.go:308] try to connect to server... +2026-07-23 21:12:47.000 [I] [client/service.go:328] [298d0f4f1ff6598b] login to server success, get run id [298d0f4f1ff6598b] +2026-07-23 21:12:47.000 [I] [proxy/proxy_manager.go:180] [298d0f4f1ff6598b] proxy added: [1panel-1 Gitea Grafana Halo SMB SSH immich immich-APP napcat napcat-2 navidrome openlist podux sun-panel] +2026-07-23 21:12:47.068 [W] [client/control.go:163] [298d0f4f1ff6598b] [Grafana] start error: proxy [Grafana] already exists +2026-07-23 21:12:47.069 [W] [client/control.go:163] [298d0f4f1ff6598b] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:12:47.069 [W] [client/control.go:163] [298d0f4f1ff6598b] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:12:47.069 [W] [client/control.go:163] [298d0f4f1ff6598b] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:12:47.069 [W] [client/control.go:163] [298d0f4f1ff6598b] [Halo] start error: proxy [Halo] already exists +2026-07-23 21:12:47.069 [W] [client/control.go:163] [298d0f4f1ff6598b] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:12:47.111 [W] [client/control.go:163] [298d0f4f1ff6598b] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:12:47.111 [W] [client/control.go:163] [298d0f4f1ff6598b] [immich] start error: proxy [immich] already exists +2026-07-23 21:12:47.111 [W] [client/control.go:163] [298d0f4f1ff6598b] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:12:47.111 [W] [client/control.go:163] [298d0f4f1ff6598b] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:12:47.111 [W] [client/control.go:163] [298d0f4f1ff6598b] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:12:47.111 [W] [client/control.go:163] [298d0f4f1ff6598b] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:12:47.111 [W] [client/control.go:163] [298d0f4f1ff6598b] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:12:47.111 [W] [client/control.go:163] [298d0f4f1ff6598b] [podux] start error: proxy [podux] already exists +2026-07-23 21:13:20.075 [W] [client/control.go:163] [298d0f4f1ff6598b] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:13:20.075 [W] [client/control.go:163] [298d0f4f1ff6598b] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:13:20.075 [W] [client/control.go:163] [298d0f4f1ff6598b] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:13:20.075 [W] [client/control.go:163] [298d0f4f1ff6598b] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:13:20.075 [W] [client/control.go:163] [298d0f4f1ff6598b] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:13:20.143 [W] [client/control.go:163] [298d0f4f1ff6598b] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:13:20.143 [W] [client/control.go:163] [298d0f4f1ff6598b] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:13:20.143 [W] [client/control.go:163] [298d0f4f1ff6598b] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:13:20.143 [W] [client/control.go:163] [298d0f4f1ff6598b] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:13:20.143 [W] [client/control.go:163] [298d0f4f1ff6598b] [podux] start error: proxy [podux] already exists +2026-07-23 21:13:20.143 [W] [client/control.go:163] [298d0f4f1ff6598b] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:13:20.143 [W] [client/control.go:163] [298d0f4f1ff6598b] [Halo] start error: proxy [Halo] already exists +2026-07-23 21:13:20.143 [W] [client/control.go:163] [298d0f4f1ff6598b] [immich] start error: proxy [immich] already exists +2026-07-23 21:13:20.143 [W] [client/control.go:163] [298d0f4f1ff6598b] [Grafana] start error: proxy [Grafana] already exists +2026-07-23 21:13:46.190 [I] [sub/root.go:201] start frpc service for config file [./frpc.toml] with aggregated configuration +2026-07-23 21:13:46.200 [I] [client/service.go:308] try to connect to server... +2026-07-23 21:13:46.367 [I] [client/service.go:328] [4a240b31618e1de3] login to server success, get run id [4a240b31618e1de3] +2026-07-23 21:13:46.367 [I] [proxy/proxy_manager.go:180] [4a240b31618e1de3] proxy added: [1panel-1 Gitea Grafana Halo SMB SSH immich immich-APP napcat napcat-2 navidrome openlist podux sun-panel] +2026-07-23 21:13:46.435 [W] [client/control.go:163] [4a240b31618e1de3] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:13:46.435 [W] [client/control.go:163] [4a240b31618e1de3] [Halo] start error: proxy [Halo] already exists +2026-07-23 21:13:46.435 [W] [client/control.go:163] [4a240b31618e1de3] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:13:46.435 [W] [client/control.go:163] [4a240b31618e1de3] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:13:46.435 [W] [client/control.go:163] [4a240b31618e1de3] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:13:46.502 [W] [client/control.go:163] [4a240b31618e1de3] [Grafana] start error: proxy [Grafana] already exists +2026-07-23 21:13:46.502 [W] [client/control.go:163] [4a240b31618e1de3] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:13:46.502 [W] [client/control.go:163] [4a240b31618e1de3] [immich] start error: proxy [immich] already exists +2026-07-23 21:13:46.502 [W] [client/control.go:163] [4a240b31618e1de3] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:13:46.502 [W] [client/control.go:163] [4a240b31618e1de3] [podux] start error: proxy [podux] already exists +2026-07-23 21:13:46.502 [W] [client/control.go:163] [4a240b31618e1de3] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:13:46.502 [W] [client/control.go:163] [4a240b31618e1de3] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:13:46.502 [W] [client/control.go:163] [4a240b31618e1de3] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:13:46.502 [W] [client/control.go:163] [4a240b31618e1de3] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:13:55.393 [I] [sub/root.go:201] start frpc service for config file [./frpc.toml] with aggregated configuration +2026-07-23 21:13:55.403 [I] [client/service.go:308] try to connect to server... +2026-07-23 21:13:55.597 [I] [client/service.go:328] [cf5981dc2ef07a1a] login to server success, get run id [cf5981dc2ef07a1a] +2026-07-23 21:13:55.597 [I] [proxy/proxy_manager.go:180] [cf5981dc2ef07a1a] proxy added: [1panel-1 Gitea Grafana Halo SMB SSH immich immich-APP napcat napcat-2 navidrome openlist sun-panel] +2026-07-23 21:13:55.712 [W] [client/control.go:163] [cf5981dc2ef07a1a] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:13:55.719 [W] [client/control.go:163] [cf5981dc2ef07a1a] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:13:55.719 [W] [client/control.go:163] [cf5981dc2ef07a1a] [Grafana] start error: proxy [Grafana] already exists +2026-07-23 21:13:55.719 [W] [client/control.go:163] [cf5981dc2ef07a1a] [Halo] start error: proxy [Halo] already exists +2026-07-23 21:13:55.719 [W] [client/control.go:163] [cf5981dc2ef07a1a] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:13:55.719 [W] [client/control.go:163] [cf5981dc2ef07a1a] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:13:55.777 [W] [client/control.go:163] [cf5981dc2ef07a1a] [immich] start error: proxy [immich] already exists +2026-07-23 21:13:55.777 [W] [client/control.go:163] [cf5981dc2ef07a1a] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:13:55.777 [W] [client/control.go:163] [cf5981dc2ef07a1a] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:13:55.777 [W] [client/control.go:163] [cf5981dc2ef07a1a] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:13:55.777 [W] [client/control.go:163] [cf5981dc2ef07a1a] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:13:55.777 [W] [client/control.go:163] [cf5981dc2ef07a1a] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:13:55.777 [W] [client/control.go:163] [cf5981dc2ef07a1a] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:13:59.292 [I] [sub/root.go:201] start frpc service for config file [./frpc.toml] with aggregated configuration +2026-07-23 21:13:59.302 [I] [client/service.go:308] try to connect to server... +2026-07-23 21:13:59.529 [I] [client/service.go:328] [6d8d68a1be508853] login to server success, get run id [6d8d68a1be508853] +2026-07-23 21:13:59.529 [I] [proxy/proxy_manager.go:180] [6d8d68a1be508853] proxy added: [1panel-1 Gitea Halo SMB SSH immich immich-APP napcat napcat-2 navidrome openlist sun-panel] +2026-07-23 21:13:59.598 [W] [client/control.go:163] [6d8d68a1be508853] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:13:59.598 [W] [client/control.go:163] [6d8d68a1be508853] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:13:59.599 [W] [client/control.go:163] [6d8d68a1be508853] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:13:59.599 [W] [client/control.go:163] [6d8d68a1be508853] [Halo] start error: proxy [Halo] already exists +2026-07-23 21:13:59.599 [W] [client/control.go:163] [6d8d68a1be508853] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:13:59.599 [W] [client/control.go:163] [6d8d68a1be508853] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:13:59.599 [W] [client/control.go:163] [6d8d68a1be508853] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:13:59.663 [W] [client/control.go:163] [6d8d68a1be508853] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:13:59.663 [W] [client/control.go:163] [6d8d68a1be508853] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:13:59.663 [W] [client/control.go:163] [6d8d68a1be508853] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:13:59.663 [W] [client/control.go:163] [6d8d68a1be508853] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:13:59.663 [W] [client/control.go:163] [6d8d68a1be508853] [immich] start error: proxy [immich] already exists +2026-07-23 21:14:02.993 [I] [sub/root.go:201] start frpc service for config file [./frpc.toml] with aggregated configuration +2026-07-23 21:14:03.003 [I] [client/service.go:308] try to connect to server... +2026-07-23 21:14:03.173 [I] [client/service.go:328] [90da601a2686fc62] login to server success, get run id [90da601a2686fc62] +2026-07-23 21:14:03.173 [I] [proxy/proxy_manager.go:180] [90da601a2686fc62] proxy added: [1panel-1 Gitea SMB SSH immich immich-APP napcat napcat-2 navidrome openlist sun-panel] +2026-07-23 21:14:03.237 [W] [client/control.go:163] [90da601a2686fc62] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:14:03.237 [W] [client/control.go:163] [90da601a2686fc62] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:14:03.237 [W] [client/control.go:163] [90da601a2686fc62] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:14:03.237 [W] [client/control.go:163] [90da601a2686fc62] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:14:03.237 [W] [client/control.go:163] [90da601a2686fc62] [immich] start error: proxy [immich] already exists +2026-07-23 21:14:03.237 [W] [client/control.go:163] [90da601a2686fc62] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:14:03.239 [W] [client/control.go:163] [90da601a2686fc62] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:14:03.280 [W] [client/control.go:163] [90da601a2686fc62] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:14:03.280 [W] [client/control.go:163] [90da601a2686fc62] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:14:03.280 [W] [client/control.go:163] [90da601a2686fc62] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:14:03.280 [W] [client/control.go:163] [90da601a2686fc62] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:14:36.245 [W] [client/control.go:163] [90da601a2686fc62] [immich] start error: proxy [immich] already exists +2026-07-23 21:14:36.245 [W] [client/control.go:163] [90da601a2686fc62] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:14:36.245 [W] [client/control.go:163] [90da601a2686fc62] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:14:36.245 [W] [client/control.go:163] [90da601a2686fc62] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:14:36.245 [W] [client/control.go:163] [90da601a2686fc62] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:14:36.312 [W] [client/control.go:163] [90da601a2686fc62] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:14:36.312 [W] [client/control.go:163] [90da601a2686fc62] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:14:36.312 [W] [client/control.go:163] [90da601a2686fc62] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:14:36.312 [W] [client/control.go:163] [90da601a2686fc62] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:14:36.312 [W] [client/control.go:163] [90da601a2686fc62] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:14:36.312 [W] [client/control.go:163] [90da601a2686fc62] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:14:52.047 [I] [sub/root.go:201] start frpc service for config file [./frpc.toml] with aggregated configuration +2026-07-23 21:14:52.057 [I] [client/service.go:308] try to connect to server... +2026-07-23 21:14:52.265 [I] [client/service.go:328] [6688844d29639a28] login to server success, get run id [6688844d29639a28] +2026-07-23 21:14:52.265 [I] [proxy/proxy_manager.go:180] [6688844d29639a28] proxy added: [1panel-1 Gitea SMB SSH immich immich-APP napcat napcat-2 navidrome openlist sun-panel] +2026-07-23 21:14:52.334 [W] [client/control.go:163] [6688844d29639a28] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:14:52.335 [W] [client/control.go:163] [6688844d29639a28] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:14:52.335 [W] [client/control.go:163] [6688844d29639a28] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:14:52.335 [W] [client/control.go:163] [6688844d29639a28] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:14:52.335 [W] [client/control.go:163] [6688844d29639a28] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:14:52.335 [W] [client/control.go:163] [6688844d29639a28] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:14:52.373 [W] [client/control.go:163] [6688844d29639a28] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:14:52.373 [W] [client/control.go:163] [6688844d29639a28] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:14:52.373 [W] [client/control.go:163] [6688844d29639a28] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:14:52.373 [W] [client/control.go:163] [6688844d29639a28] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:14:52.373 [W] [client/control.go:163] [6688844d29639a28] [immich] start error: proxy [immich] already exists +2026-07-23 21:15:25.337 [W] [client/control.go:163] [6688844d29639a28] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:15:25.337 [W] [client/control.go:163] [6688844d29639a28] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:15:25.337 [W] [client/control.go:163] [6688844d29639a28] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:15:25.337 [W] [client/control.go:163] [6688844d29639a28] [immich] start error: proxy [immich] already exists +2026-07-23 21:15:25.337 [W] [client/control.go:163] [6688844d29639a28] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:15:25.404 [W] [client/control.go:163] [6688844d29639a28] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:15:25.404 [W] [client/control.go:163] [6688844d29639a28] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:15:25.404 [W] [client/control.go:163] [6688844d29639a28] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:15:25.404 [W] [client/control.go:163] [6688844d29639a28] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:15:25.404 [W] [client/control.go:163] [6688844d29639a28] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:15:25.404 [W] [client/control.go:163] [6688844d29639a28] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:15:58.340 [W] [client/control.go:163] [6688844d29639a28] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:15:58.340 [W] [client/control.go:163] [6688844d29639a28] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:15:58.340 [W] [client/control.go:163] [6688844d29639a28] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:15:58.340 [W] [client/control.go:163] [6688844d29639a28] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:15:58.340 [W] [client/control.go:163] [6688844d29639a28] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:15:58.406 [W] [client/control.go:163] [6688844d29639a28] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:15:58.406 [W] [client/control.go:163] [6688844d29639a28] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:15:58.406 [W] [client/control.go:163] [6688844d29639a28] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:15:58.406 [W] [client/control.go:163] [6688844d29639a28] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:15:58.406 [W] [client/control.go:163] [6688844d29639a28] [immich] start error: proxy [immich] already exists +2026-07-23 21:15:58.406 [W] [client/control.go:163] [6688844d29639a28] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:16:05.699 [I] [sub/root.go:201] start frpc service for config file [./frpc.toml] with aggregated configuration +2026-07-23 21:16:05.708 [I] [client/service.go:308] try to connect to server... +2026-07-23 21:16:05.898 [I] [client/service.go:328] [e910adc6646a25c4] login to server success, get run id [e910adc6646a25c4] +2026-07-23 21:16:05.898 [I] [proxy/proxy_manager.go:180] [e910adc6646a25c4] proxy added: [1panel-1 Gitea SMB SSH immich immich-APP napcat napcat-2 navidrome openlist sun-panel] +2026-07-23 21:16:05.967 [W] [client/control.go:163] [e910adc6646a25c4] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:16:05.967 [W] [client/control.go:163] [e910adc6646a25c4] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:16:05.968 [W] [client/control.go:163] [e910adc6646a25c4] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:16:05.968 [W] [client/control.go:163] [e910adc6646a25c4] [immich] start error: proxy [immich] already exists +2026-07-23 21:16:05.968 [W] [client/control.go:163] [e910adc6646a25c4] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:16:05.968 [W] [client/control.go:163] [e910adc6646a25c4] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:16:05.968 [W] [client/control.go:163] [e910adc6646a25c4] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:16:06.017 [W] [client/control.go:163] [e910adc6646a25c4] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:16:06.017 [W] [client/control.go:163] [e910adc6646a25c4] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:16:06.017 [W] [client/control.go:163] [e910adc6646a25c4] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:16:06.017 [W] [client/control.go:163] [e910adc6646a25c4] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:16:38.970 [W] [client/control.go:163] [e910adc6646a25c4] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:16:38.970 [W] [client/control.go:163] [e910adc6646a25c4] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:16:38.971 [W] [client/control.go:163] [e910adc6646a25c4] [immich] start error: proxy [immich] already exists +2026-07-23 21:16:38.971 [W] [client/control.go:163] [e910adc6646a25c4] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:16:38.971 [W] [client/control.go:163] [e910adc6646a25c4] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:16:39.033 [W] [client/control.go:163] [e910adc6646a25c4] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:16:39.033 [W] [client/control.go:163] [e910adc6646a25c4] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:16:39.033 [W] [client/control.go:163] [e910adc6646a25c4] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:16:39.033 [W] [client/control.go:163] [e910adc6646a25c4] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:16:39.033 [W] [client/control.go:163] [e910adc6646a25c4] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:16:39.033 [W] [client/control.go:163] [e910adc6646a25c4] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:17:11.978 [W] [client/control.go:163] [e910adc6646a25c4] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:17:11.978 [W] [client/control.go:163] [e910adc6646a25c4] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:17:11.978 [W] [client/control.go:163] [e910adc6646a25c4] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:17:11.978 [W] [client/control.go:163] [e910adc6646a25c4] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:17:11.978 [W] [client/control.go:163] [e910adc6646a25c4] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:17:12.043 [W] [client/control.go:163] [e910adc6646a25c4] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:17:12.043 [W] [client/control.go:163] [e910adc6646a25c4] [immich] start error: proxy [immich] already exists +2026-07-23 21:17:12.043 [W] [client/control.go:163] [e910adc6646a25c4] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:17:12.043 [W] [client/control.go:163] [e910adc6646a25c4] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:17:12.043 [W] [client/control.go:163] [e910adc6646a25c4] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:17:12.043 [W] [client/control.go:163] [e910adc6646a25c4] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:17:44.979 [W] [client/control.go:163] [e910adc6646a25c4] [immich] start error: proxy [immich] already exists +2026-07-23 21:17:44.979 [W] [client/control.go:163] [e910adc6646a25c4] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:17:44.979 [W] [client/control.go:163] [e910adc6646a25c4] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:17:44.979 [W] [client/control.go:163] [e910adc6646a25c4] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:17:44.979 [W] [client/control.go:163] [e910adc6646a25c4] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:17:45.043 [W] [client/control.go:163] [e910adc6646a25c4] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:17:45.043 [W] [client/control.go:163] [e910adc6646a25c4] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:17:45.043 [W] [client/control.go:163] [e910adc6646a25c4] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:17:45.043 [W] [client/control.go:163] [e910adc6646a25c4] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:17:45.043 [W] [client/control.go:163] [e910adc6646a25c4] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:17:45.043 [W] [client/control.go:163] [e910adc6646a25c4] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:18:17.986 [W] [client/control.go:163] [e910adc6646a25c4] [immich] start error: proxy [immich] already exists +2026-07-23 21:18:17.986 [W] [client/control.go:163] [e910adc6646a25c4] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:18:17.986 [W] [client/control.go:163] [e910adc6646a25c4] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:18:17.986 [W] [client/control.go:163] [e910adc6646a25c4] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:18:17.986 [W] [client/control.go:163] [e910adc6646a25c4] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:18:18.048 [W] [client/control.go:163] [e910adc6646a25c4] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:18:18.049 [W] [client/control.go:163] [e910adc6646a25c4] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:18:18.049 [W] [client/control.go:163] [e910adc6646a25c4] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:18:18.049 [W] [client/control.go:163] [e910adc6646a25c4] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:18:18.049 [W] [client/control.go:163] [e910adc6646a25c4] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:18:18.049 [W] [client/control.go:163] [e910adc6646a25c4] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:18:51.002 [W] [client/control.go:163] [e910adc6646a25c4] [immich] start error: proxy [immich] already exists +2026-07-23 21:18:51.002 [W] [client/control.go:163] [e910adc6646a25c4] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:18:51.002 [W] [client/control.go:163] [e910adc6646a25c4] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:18:51.012 [W] [client/control.go:163] [e910adc6646a25c4] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:18:51.021 [W] [client/control.go:163] [e910adc6646a25c4] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:18:51.065 [W] [client/control.go:163] [e910adc6646a25c4] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:18:51.065 [W] [client/control.go:163] [e910adc6646a25c4] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:18:51.065 [W] [client/control.go:163] [e910adc6646a25c4] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:18:51.065 [W] [client/control.go:163] [e910adc6646a25c4] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:18:51.065 [W] [client/control.go:163] [e910adc6646a25c4] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:18:51.065 [W] [client/control.go:163] [e910adc6646a25c4] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:19:23.988 [W] [client/control.go:163] [e910adc6646a25c4] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:19:23.988 [W] [client/control.go:163] [e910adc6646a25c4] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:19:23.988 [W] [client/control.go:163] [e910adc6646a25c4] [immich] start error: proxy [immich] already exists +2026-07-23 21:19:23.988 [W] [client/control.go:163] [e910adc6646a25c4] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:19:23.988 [W] [client/control.go:163] [e910adc6646a25c4] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:19:24.051 [W] [client/control.go:163] [e910adc6646a25c4] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:19:24.051 [W] [client/control.go:163] [e910adc6646a25c4] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:19:24.051 [W] [client/control.go:163] [e910adc6646a25c4] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:19:24.051 [W] [client/control.go:163] [e910adc6646a25c4] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:19:24.051 [W] [client/control.go:163] [e910adc6646a25c4] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:19:24.051 [W] [client/control.go:163] [e910adc6646a25c4] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:19:56.991 [W] [client/control.go:163] [e910adc6646a25c4] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:19:56.991 [W] [client/control.go:163] [e910adc6646a25c4] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:19:56.991 [W] [client/control.go:163] [e910adc6646a25c4] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:19:56.991 [W] [client/control.go:163] [e910adc6646a25c4] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:19:56.991 [W] [client/control.go:163] [e910adc6646a25c4] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:19:57.054 [W] [client/control.go:163] [e910adc6646a25c4] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:19:57.054 [W] [client/control.go:163] [e910adc6646a25c4] [immich] start error: proxy [immich] already exists +2026-07-23 21:19:57.054 [W] [client/control.go:163] [e910adc6646a25c4] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:19:57.054 [W] [client/control.go:163] [e910adc6646a25c4] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:19:57.054 [W] [client/control.go:163] [e910adc6646a25c4] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:19:57.054 [W] [client/control.go:163] [e910adc6646a25c4] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:20:29.995 [W] [client/control.go:163] [e910adc6646a25c4] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:20:29.995 [W] [client/control.go:163] [e910adc6646a25c4] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:20:29.995 [W] [client/control.go:163] [e910adc6646a25c4] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:20:29.995 [W] [client/control.go:163] [e910adc6646a25c4] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:20:29.995 [W] [client/control.go:163] [e910adc6646a25c4] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:20:30.059 [W] [client/control.go:163] [e910adc6646a25c4] [immich] start error: proxy [immich] already exists +2026-07-23 21:20:30.059 [W] [client/control.go:163] [e910adc6646a25c4] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:20:30.059 [W] [client/control.go:163] [e910adc6646a25c4] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:20:30.059 [W] [client/control.go:163] [e910adc6646a25c4] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:20:30.059 [W] [client/control.go:163] [e910adc6646a25c4] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:20:30.059 [W] [client/control.go:163] [e910adc6646a25c4] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:21:02.996 [W] [client/control.go:163] [e910adc6646a25c4] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:21:02.996 [W] [client/control.go:163] [e910adc6646a25c4] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:21:02.996 [W] [client/control.go:163] [e910adc6646a25c4] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:21:02.996 [W] [client/control.go:163] [e910adc6646a25c4] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:21:02.996 [W] [client/control.go:163] [e910adc6646a25c4] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:21:03.061 [W] [client/control.go:163] [e910adc6646a25c4] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:21:03.061 [W] [client/control.go:163] [e910adc6646a25c4] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:21:03.061 [W] [client/control.go:163] [e910adc6646a25c4] [immich] start error: proxy [immich] already exists +2026-07-23 21:21:03.061 [W] [client/control.go:163] [e910adc6646a25c4] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:21:03.061 [W] [client/control.go:163] [e910adc6646a25c4] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:21:03.061 [W] [client/control.go:163] [e910adc6646a25c4] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:21:35.999 [W] [client/control.go:163] [e910adc6646a25c4] [immich] start error: proxy [immich] already exists +2026-07-23 21:21:36.000 [W] [client/control.go:163] [e910adc6646a25c4] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:21:36.000 [W] [client/control.go:163] [e910adc6646a25c4] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:21:36.000 [W] [client/control.go:163] [e910adc6646a25c4] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:21:36.000 [W] [client/control.go:163] [e910adc6646a25c4] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:21:36.064 [W] [client/control.go:163] [e910adc6646a25c4] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:21:36.064 [W] [client/control.go:163] [e910adc6646a25c4] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:21:36.064 [W] [client/control.go:163] [e910adc6646a25c4] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:21:36.064 [W] [client/control.go:163] [e910adc6646a25c4] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:21:36.064 [W] [client/control.go:163] [e910adc6646a25c4] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:21:36.064 [W] [client/control.go:163] [e910adc6646a25c4] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:22:09.004 [W] [client/control.go:163] [e910adc6646a25c4] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:22:09.004 [W] [client/control.go:163] [e910adc6646a25c4] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:22:09.004 [W] [client/control.go:163] [e910adc6646a25c4] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:22:09.004 [W] [client/control.go:163] [e910adc6646a25c4] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:22:09.004 [W] [client/control.go:163] [e910adc6646a25c4] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:22:09.069 [W] [client/control.go:163] [e910adc6646a25c4] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:22:09.069 [W] [client/control.go:163] [e910adc6646a25c4] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:22:09.069 [W] [client/control.go:163] [e910adc6646a25c4] [immich] start error: proxy [immich] already exists +2026-07-23 21:22:09.069 [W] [client/control.go:163] [e910adc6646a25c4] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:22:09.069 [W] [client/control.go:163] [e910adc6646a25c4] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:22:09.069 [W] [client/control.go:163] [e910adc6646a25c4] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:22:42.007 [W] [client/control.go:163] [e910adc6646a25c4] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:22:42.007 [W] [client/control.go:163] [e910adc6646a25c4] [immich] start error: proxy [immich] already exists +2026-07-23 21:22:42.007 [W] [client/control.go:163] [e910adc6646a25c4] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:22:42.007 [W] [client/control.go:163] [e910adc6646a25c4] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:22:42.007 [W] [client/control.go:163] [e910adc6646a25c4] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:22:42.071 [W] [client/control.go:163] [e910adc6646a25c4] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:22:42.071 [W] [client/control.go:163] [e910adc6646a25c4] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:22:42.071 [W] [client/control.go:163] [e910adc6646a25c4] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:22:42.071 [W] [client/control.go:163] [e910adc6646a25c4] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:22:42.071 [W] [client/control.go:163] [e910adc6646a25c4] [napcat] start error: proxy [napcat] already exists +2026-07-23 21:22:42.071 [W] [client/control.go:163] [e910adc6646a25c4] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:23:15.010 [W] [client/control.go:163] [e910adc6646a25c4] [Gitea] start error: proxy [Gitea] already exists +2026-07-23 21:23:15.010 [W] [client/control.go:163] [e910adc6646a25c4] [1panel-1] start error: proxy [1panel-1] already exists +2026-07-23 21:23:15.019 [W] [client/control.go:163] [e910adc6646a25c4] [sun-panel] start error: proxy [sun-panel] already exists +2026-07-23 21:23:15.019 [W] [client/control.go:163] [e910adc6646a25c4] [navidrome] start error: proxy [navidrome] already exists +2026-07-23 21:23:15.019 [W] [client/control.go:163] [e910adc6646a25c4] [immich] start error: proxy [immich] already exists +2026-07-23 21:23:15.075 [W] [client/control.go:163] [e910adc6646a25c4] [SMB] start error: proxy [SMB] already exists +2026-07-23 21:23:15.075 [W] [client/control.go:163] [e910adc6646a25c4] [immich-APP] start error: proxy [immich-APP] already exists +2026-07-23 21:23:15.075 [W] [client/control.go:163] [e910adc6646a25c4] [openlist] start error: proxy [openlist] already exists +2026-07-23 21:23:15.075 [W] [client/control.go:163] [e910adc6646a25c4] [SSH] start error: proxy [SSH] already exists +2026-07-23 21:23:15.075 [W] [client/control.go:163] [e910adc6646a25c4] [napcat-2] start error: proxy [napcat-2] already exists +2026-07-23 21:23:15.075 [W] [client/control.go:163] [e910adc6646a25c4] [napcat] start error: proxy [napcat] already exists diff --git a/frpc.toml b/frpc.toml index 2e18b58..8879ea7 100644 --- a/frpc.toml +++ b/frpc.toml @@ -83,13 +83,6 @@ localIP = "192.168.3.16" localPort = 2283 remotePort = 20020 -[[proxies]] -name = "Halo" -type = "tcp" -localIP = "192.168.3.16" -localPort = 65535 -remotePort = 65535 - [[proxies]] name = "immich" type = "tcp" @@ -103,17 +96,3 @@ type = "tcp" localIP = "192.168.3.16" localPort = 6100 remotePort = 20012 - -[[proxies]] -name = "podux" -type = "tcp" -localIP = "192.168.3.16" -localPort = 8090 -remotePort = 20010 - -[[proxies]] -name = "Grafana" -type = "tcp" -localIP = "192.168.3.16" -localPort = 3030 -remotePort = 20014 diff --git a/static/app.js b/static/app.js index 131223b..5bf67a0 100644 --- a/static/app.js +++ b/static/app.js @@ -7,21 +7,22 @@ const { createApp, ref, reactive, computed, onMounted } = Vue; // ============================================================ // ---------- api ---------- -const API_BASE = '/api'; +const API_BASE = "/api"; function getToken() { - return localStorage.getItem('frpc_token') || ''; + return localStorage.getItem("frpc_token") || ""; } function getHeaders() { return { - 'Content-Type': 'application/json', - 'Authorization': 'Bearer ' + getToken(), + "Content-Type": "application/json", + Authorization: "Bearer " + getToken(), }; } async function apiFetch(endpoint, options = {}) { const url = API_BASE + endpoint; - const headers = options.body instanceof FormData - ? { 'Authorization': 'Bearer ' + getToken() } - : getHeaders(); + const headers = + options.body instanceof FormData + ? { Authorization: "Bearer " + getToken() } + : getHeaders(); const res = await fetch(url, { ...options, headers: { ...headers, ...(options.headers || {}) }, @@ -32,7 +33,7 @@ async function apiFetch(endpoint, options = {}) { // ---------- auth ---------- function parseJwtExpire(token) { try { - const payload = JSON.parse(atob(token.split('.')[1])); + const payload = JSON.parse(atob(token.split(".")[1])); return payload.exp * 1000; } catch { return Date.now() + 7 * 24 * 60 * 60 * 1000; @@ -40,29 +41,29 @@ function parseJwtExpire(token) { } function saveAuthState(token, username) { const expire = parseJwtExpire(token); - localStorage.setItem('frpc_token', token); - localStorage.setItem('frpc_token_expire', String(expire)); - localStorage.setItem('frpc_username', username); + localStorage.setItem("frpc_token", token); + localStorage.setItem("frpc_token_expire", String(expire)); + localStorage.setItem("frpc_username", username); return expire; } function loadAuthState() { - const token = localStorage.getItem('frpc_token'); - const expire = parseInt(localStorage.getItem('frpc_token_expire') || '0', 10); - const username = localStorage.getItem('frpc_username') || ''; + const token = localStorage.getItem("frpc_token"); + const expire = parseInt(localStorage.getItem("frpc_token_expire") || "0", 10); + const username = localStorage.getItem("frpc_username") || ""; if (token && expire > Date.now()) { return { token, expire, username, valid: true }; } clearAuthState(); - return { token: '', expire: 0, username: '', valid: false }; + return { token: "", expire: 0, username: "", valid: false }; } function clearAuthState() { - localStorage.removeItem('frpc_token'); - localStorage.removeItem('frpc_token_expire'); - localStorage.removeItem('frpc_username'); + localStorage.removeItem("frpc_token"); + localStorage.removeItem("frpc_token_expire"); + localStorage.removeItem("frpc_username"); } async function login(username, password) { - const data = await apiFetch('/login', { - method: 'POST', + const data = await apiFetch("/login", { + method: "POST", body: JSON.stringify({ username, password }), }); if (data.code === 0) { @@ -70,15 +71,15 @@ async function login(username, password) { const expire = saveAuthState(token, username); return { success: true, token, expire }; } - return { success: false, error: data.msg || '登录失败' }; + return { success: false, error: data.msg || "登录失败" }; } // ---------- config ---------- const defaultConfig = { - serverAddr: 'frp.whitetop.xyz', + serverAddr: "frp.whitetop.xyz", serverPort: 9358, - token: '', - logLevel: 'info', + token: "", + logLevel: "info", logMaxDays: 3, tcpMux: true, tcpMuxKeepalive: 30, @@ -88,18 +89,18 @@ const defaultConfig = { }; async function loadConfig() { try { - const data = await apiFetch('/config'); + const data = await apiFetch("/config"); if (data.code === 0) { return { ...defaultConfig, ...data.data }; } } catch (e) { - console.warn('加载配置失败', e); + console.warn("加载配置失败", e); } return { ...defaultConfig }; } async function saveConfigApi(config) { - const data = await apiFetch('/config', { - method: 'PUT', + const data = await apiFetch("/config", { + method: "PUT", body: JSON.stringify(config), }); return data; @@ -108,96 +109,104 @@ async function saveConfigApi(config) { // ---------- proxies ---------- async function loadProxies() { try { - const data = await apiFetch('/proxies'); + const data = await apiFetch("/proxies"); if (data.code === 0) { return data.data || []; } } catch (e) { - console.warn('加载隧道失败', e); + console.warn("加载隧道失败", e); } return []; } async function createProxy(proxy) { - const data = await apiFetch('/proxy', { - method: 'POST', + const data = await apiFetch("/proxy", { + method: "POST", body: JSON.stringify(proxy), }); return data; } async function updateProxy(proxy) { - const data = await apiFetch('/proxy/' + proxy.id, { - method: 'PUT', + const data = await apiFetch("/proxy/" + proxy.id, { + method: "PUT", body: JSON.stringify(proxy), }); return data; } async function deleteProxy(id) { - const data = await apiFetch('/proxy/' + id, { - method: 'DELETE', + const data = await apiFetch("/proxy/" + id, { + method: "DELETE", }); return data; } function filterProxies(list, keyword) { if (!keyword) return list; const kw = keyword.toLowerCase(); - return list.filter(p => - p.name.toLowerCase().includes(kw) || - p.localIP.includes(kw) || - String(p.remotePort).includes(kw) + return list.filter( + (p) => + p.name.toLowerCase().includes(kw) || + p.localIP.includes(kw) || + String(p.remotePort).includes(kw), ); } // ---------- frpc ---------- async function getFrpcStatus() { try { - const data = await apiFetch('/frpc/status'); + const data = await apiFetch("/frpc/status"); if (data.code === 0) { return data.data.running || false; } } catch (e) { - console.warn('获取 frpc 状态失败', e); + console.warn("获取 frpc 状态失败", e); } return false; } async function reloadFrpc() { - const data = await apiFetch('/frpc/reload', { method: 'POST' }); + const data = await apiFetch("/frpc/reload", { method: "POST" }); return data; } async function startFrpc() { - const data = await apiFetch('/frpc/start', { method: 'POST' }); + const data = await apiFetch("/frpc/start", { method: "POST" }); return data; } async function stopFrpc() { - const data = await apiFetch('/frpc/stop', { method: 'POST' }); + const data = await apiFetch("/frpc/stop", { method: "POST" }); return data; } // ---------- ui ---------- // Tab 切换 -const activeTab = ref('proxies'); +const activeTab = ref("proxies"); function switchTab(tab) { activeTab.value = tab; } // 弹窗控制 const dialogVisible = ref(false); -const dialogMode = ref('add'); +const dialogMode = ref("add"); const dialogForm = ref({ id: null, - name: '', - type: 'tcp', - localIP: '', + name: "", + type: "tcp", + localIP: "", localPort: 0, remotePort: 0, }); function openAddDialog() { - dialogMode.value = 'add'; - dialogForm.value = { id: null, name: '', type: 'tcp', localIP: '', localPort: 0, remotePort: 0 }; + dialogMode.value = "add"; + dialogForm.value = { + id: null, + name: "", + type: "tcp", + localIP: "", + localPort: 0, + remotePort: 0, + }; dialogVisible.value = true; } function openEditDialog(proxy) { - dialogMode.value = 'edit'; + dialogMode.value = "edit"; dialogForm.value = { ...proxy }; dialogVisible.value = true; } @@ -205,21 +214,21 @@ function closeDialog() { dialogVisible.value = false; } -const searchKeyword = ref(''); +const searchKeyword = ref(""); // ---------- import/export 功能 ---------- async function triggerImport() { - document.getElementById('tomlFileInput').click(); + document.getElementById("tomlFileInput").click(); } async function handleImport(e) { const file = e.target.files[0]; if (!file) return; const formData = new FormData(); - formData.append('file', file); + formData.append("file", file); try { - const res = await fetch('/api/import/toml', { - method: 'POST', - headers: { 'Authorization': 'Bearer ' + getToken() }, + const res = await fetch("/api/import/toml", { + method: "POST", + headers: { Authorization: "Bearer " + getToken() }, body: formData, }); const data = await res.json(); @@ -227,55 +236,39 @@ async function handleImport(e) { alert(data.msg); await loadAllData(); } else { - alert('导入失败: ' + data.msg); + alert("导入失败: " + data.msg); } } catch (err) { - alert('网络错误: ' + err.message); + alert("网络错误: " + err.message); } - e.target.value = ''; + e.target.value = ""; } async function exportToml() { + console.log('🔍 exportToml 被调用了'); try { - const configData = await apiFetch('/config'); - if (configData.code !== 0) { - alert('获取配置失败'); + const res = await fetch('/api/export/toml', { + method: 'GET', + headers: { 'Authorization': 'Bearer ' + getToken() }, + }); + + if (!res.ok) { + const data = await res.json(); + alert('导出失败: ' + (data.msg || '未知错误')); return; } - const proxyData = await apiFetch('/proxies'); - if (proxyData.code !== 0) { - alert('获取隧道列表失败'); - return; - } - const cfg = configData.data; - const proxyList = proxyData.data || []; - const tomlObj = { - serverAddr: cfg.serverAddr, - serverPort: cfg.serverPort, - auth: { token: cfg.token }, - log: { to: './frpc.log', level: cfg.logLevel, maxDays: cfg.logMaxDays }, - transport: { - tcpMux: cfg.tcpMux, - tcpMuxKeepaliveInterval: cfg.tcpMuxKeepalive, - heartbeatInterval: cfg.heartbeatInterval, - heartbeatTimeout: cfg.heartbeatTimeout, - poolCount: cfg.poolCount, - }, - proxies: proxyList.map(p => ({ - name: p.name, - type: p.type, - localIP: p.localIP, - localPort: p.localPort, - remotePort: p.remotePort, - })), - }; - const tomlStr = TOML.stringify(tomlObj); - const blob = new Blob([tomlStr], { type: 'text/plain' }); + + const blob = await res.blob(); const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = 'frpc.toml'; + document.body.appendChild(a); a.click(); + document.body.removeChild(a); URL.revokeObjectURL(a.href); + + console.log('✅ 导出成功'); } catch (e) { + console.error('导出失败:', e); alert('导出失败: ' + e.message); } } @@ -289,9 +282,9 @@ const app = createApp({ // ===== 登录态 ===== const loggedIn = ref(false); const loading = ref(false); - const loginError = ref(''); - const loginForm = reactive({ username: '', password: '' }); - const token = ref(''); + const loginError = ref(""); + const loginForm = reactive({ username: "", password: "" }); + const token = ref(""); const tokenExpireTime = ref(0); const transitioning = ref(false); const contentVisible = ref(false); @@ -323,7 +316,7 @@ const app = createApp({ expireTimer = setInterval(() => { if (Date.now() >= tokenExpireTime.value) { doLogout(); - alert('登录已超时,请重新登录'); + alert("登录已超时,请重新登录"); } }, 5000); }; @@ -342,11 +335,11 @@ const app = createApp({ // ===== 登录/退出 ===== const doLogin = async () => { if (!loginForm.username || !loginForm.password) { - loginError.value = '请输入用户名和密码'; + loginError.value = "请输入用户名和密码"; return; } loading.value = true; - loginError.value = ''; + loginError.value = ""; const result = await login(loginForm.username, loginForm.password); if (result.success) { token.value = result.token; @@ -372,10 +365,10 @@ const app = createApp({ if (expireTimer) clearInterval(expireTimer); contentVisible.value = false; loggedIn.value = false; - token.value = ''; + token.value = ""; tokenExpireTime.value = 0; - loginForm.username = ''; - loginForm.password = ''; + loginForm.username = ""; + loginForm.password = ""; loading.value = false; transitioning.value = false; clearAuthState(); @@ -386,9 +379,9 @@ const app = createApp({ const result = await saveConfigApi(globalConfig); if (result.code === 0) { frpcRunning.value = await getFrpcStatus(); - alert('配置已更新并热加载'); + alert("配置已更新并热加载"); } else { - alert('保存失败: ' + result.msg); + alert("保存失败: " + result.msg); } }; @@ -396,7 +389,7 @@ const app = createApp({ const toggleProxy = async (p) => { const result = await updateProxy(p); if (result.code !== 0) { - alert('更新失败: ' + result.msg); + alert("更新失败: " + result.msg); proxies.value = await loadProxies(); } else { frpcRunning.value = await getFrpcStatus(); @@ -404,37 +397,40 @@ const app = createApp({ }; const removeProxy = async (id) => { - console.log('🔍 removeProxy 被调用, id:', id); // ← 加这行 - if (!confirm('确定要删除这条隧道吗?')) return; + console.log("🔍 removeProxy 被调用, id:", id); // ← 加这行 + if (!confirm("确定要删除这条隧道吗?")) return; const result = await deleteProxy(id); if (result.code === 0) { proxies.value = await loadProxies(); frpcRunning.value = await getFrpcStatus(); } else { - alert('删除失败: ' + result.msg); + alert("删除失败: " + result.msg); } }; const confirmDialog = async () => { const form = dialogForm.value; if (!form.name || !form.localIP || !form.localPort || !form.remotePort) { - alert('请填写完整信息'); + alert("请填写完整信息"); return; } - const result = dialogMode.value === 'add' - ? await createProxy(form) - : await updateProxy(form); + const result = + dialogMode.value === "add" + ? await createProxy(form) + : await updateProxy(form); if (result.code === 0) { closeDialog(); proxies.value = await loadProxies(); frpcRunning.value = await getFrpcStatus(); } else { - alert('操作失败: ' + result.msg); + alert("操作失败: " + result.msg); } }; // ===== 计算属性 ===== - const filteredProxies = computed(() => filterProxies(proxies.value, searchKeyword.value)); + const filteredProxies = computed(() => + filterProxies(proxies.value, searchKeyword.value), + ); return { loggedIn, @@ -470,4 +466,4 @@ const app = createApp({ }, }); -app.mount('#app'); \ No newline at end of file +app.mount("#app"); diff --git a/static/index.html b/static/index.html index 5dae20f..27708f7 100644 --- a/static/index.html +++ b/static/index.html @@ -10,8 +10,8 @@ - - + + @@ -188,7 +188,8 @@ - @@ -211,44 +212,44 @@ - -
-
-

{{ dialogMode === 'add' ? '新增隧道' : '编辑隧道' }}

-
-
- - + +
+
+

{{ dialogMode === 'add' ? '新增隧道' : '编辑隧道' }}

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
-
- - -
-
- - -
-
- - -
-
- - +
+ +
-
- - -
-