优化frpc.toml导出逻辑,从前端依赖库改为自建设计

This commit is contained in:
2026-07-23 21:26:08 +08:00
parent 9675420604
commit 892fc98be2
7 changed files with 705 additions and 178 deletions
+50
View File
@@ -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 {
+3 -3
View File
@@ -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
}
// ===== 核心改动结束 =====
BIN
View File
Binary file not shown.
+501
View File
@@ -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
-21
View File
@@ -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
+112 -116
View File
@@ -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');
app.mount("#app");
+39 -38
View File
@@ -10,8 +10,8 @@
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<!-- Naive UI CDN -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/naive-ui@2/dist/styles.css" />
<!-- TOML 解析库(用于导入/导出 -->
<script src="https://cdn.jsdelivr.net/npm/@iarna/toml@3.0.0/dist/toml.min.js"></script>
<!-- 不再需要前端 TOML 库,已改用后端导出 -->
<!--<script src="https://cdn.jsdelivr.net/npm/@iarna/toml@3.0.0/dist/toml.min.js"></script>-->
<!-- 自定义样式 -->
<link rel="stylesheet" href="/static/style-1.css" />
<link rel="stylesheet" href="/static/style-2.css" />
@@ -188,7 +188,8 @@
<button class="icon-btn" @click="openEditDialog(p)">
</button>
<button class="icon-btn danger" @click="deleteProxy(p.id)">
<button class="icon-btn danger"
@click="(function(){ console.log('点击了删除按钮, id:', p.id); removeProxy(p.id); })()">
</button>
</div>
@@ -211,44 +212,44 @@
</div>
<!-- ====== 新增/编辑弹窗 ====== -->
<Transition name="dialog">
<div v-if="dialogVisible" class="dialog-overlay" @click.self="dialogVisible = false">
<div class="dialog-card">
<h3>{{ dialogMode === 'add' ? '新增隧道' : '编辑隧道' }}</h3>
<div class="dialog-form">
<div class="form-row">
<label>名称</label>
<input v-model="dialogForm.name" />
<Transition name="dialog">
<div v-if="dialogVisible" class="dialog-overlay" @click.self="dialogVisible = false">
<div class="dialog-card">
<h3>{{ dialogMode === 'add' ? '新增隧道' : '编辑隧道' }}</h3>
<div class="dialog-form">
<div class="form-row">
<label>名称</label>
<input v-model="dialogForm.name" />
</div>
<div class="form-row">
<label>类型</label>
<select v-model="dialogForm.type">
<option value="tcp">tcp</option>
<option value="udp">udp</option>
<option value="http">http</option>
<option value="https">https</option>
</select>
</div>
<div class="form-row">
<label>本地 IP</label>
<input v-model="dialogForm.localIP" />
</div>
<div class="form-row">
<label>本地端口</label>
<input type="number" v-model="dialogForm.localPort" />
</div>
<div class="form-row">
<label>远程端口</label>
<input type="number" v-model="dialogForm.remotePort" />
</div>
</div>
<div class="form-row">
<label>类型</label>
<select v-model="dialogForm.type">
<option value="tcp">tcp</option>
<option value="udp">udp</option>
<option value="http">http</option>
<option value="https">https</option>
</select>
</div>
<div class="form-row">
<label>本地 IP</label>
<input v-model="dialogForm.localIP" />
</div>
<div class="form-row">
<label>本地端口</label>
<input type="number" v-model="dialogForm.localPort" />
</div>
<div class="form-row">
<label>远程端口</label>
<input type="number" v-model="dialogForm.remotePort" />
<div class="dialog-actions">
<button class="btn-cancel" @click="dialogVisible = false">
取消
</button>
<button class="btn-confirm" @click="confirmDialog">确认</button>
</div>
</div>
<div class="dialog-actions">
<button class="btn-cancel" @click="dialogVisible = false">
取消
</button>
<button class="btn-confirm" @click="confirmDialog">确认</button>
</div>
</div>
</Transition>
<!-- ====== 隐藏的文件输入(导入 TOML ====== -->