diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2ed2e551..0fd6dd6d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -91,7 +91,7 @@ jobs: with: src: ./dist/release/* host: ${{ secrets.SSH_HOST }} - remote: /data/down/ + remote: /data/release/ui/ port: ${{ secrets.SSH_PORT }} user: ${{ secrets.SSH_USER }} key: ${{ secrets.SSH_KEY }} diff --git a/cmd/root.go b/cmd/root.go index 85fd1eea..2d20d22e 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -45,6 +45,7 @@ var langs = map[string]string{ "NEXT:": "下一步:", "Listening": " 监听", "✨LISTENING✨": "✨服务正在运行✨", + "SessionPort": "会话服务端口", } // L 多语言切换 diff --git a/cmd/start.go b/cmd/start.go index 82786003..8ab181f2 100644 --- a/cmd/start.go +++ b/cmd/start.go @@ -78,6 +78,7 @@ var startCmd = &cobra.Command{ fmt.Println(color.WhiteString(L("Frontend")), color.GreenString(" http://%s%s/", host, port)) fmt.Println(color.WhiteString(L("Dashboard")), color.GreenString(" http://%s%s/xiang/login/admin", host, port)) fmt.Println(color.WhiteString(L("API")), color.GreenString(" http://%s%s/api", host, port)) + fmt.Println(color.WhiteString(L("SessionPort")), color.GreenString(" %d", share.SessionPort)) fmt.Println(color.WhiteString(L("Listening")), color.GreenString(" %s:%d", config.Conf.Host, config.Conf.Port)) fmt.Println("") diff --git a/network/ip.go b/network/ip.go index d4f1cd99..6f1243f3 100644 --- a/network/ip.go +++ b/network/ip.go @@ -38,3 +38,25 @@ func IP() map[string]string { func ProcessIP(process *gou.Process) interface{} { return IP() } + +// FreePort xiang.network.FreePort 获取可用端口 +func FreePort() int { + addr, err := net.ResolveTCPAddr("tcp", "localhost:0") + if err != nil { + exception.New("获取可用端口失败 %s", 500, err.Error()).Throw() + return 0 + } + + l, err := net.ListenTCP("tcp", addr) + if err != nil { + exception.New("获取可用端口失败 %s", 500, err.Error()).Throw() + return 0 + } + defer l.Close() + return l.Addr().(*net.TCPAddr).Port +} + +// ProcessFreePort xiang.network.FreePort 获取可用端口 +func ProcessFreePort(process *gou.Process) interface{} { + return FreePort() +} diff --git a/network/ip_test.go b/network/ip_test.go index e6d3ddd2..67c9e509 100644 --- a/network/ip_test.go +++ b/network/ip_test.go @@ -18,3 +18,15 @@ func TestProcessIP(t *testing.T) { assert.True(t, ok) assert.True(t, len(resp) > 0) } + +func TestFreePort(t *testing.T) { + port := FreePort() + assert.True(t, port > 0) +} + +func TestProcessFreePort(t *testing.T) { + res := gou.NewProcess("xiang.network.FreePort").Run() + port, ok := res.(int) + assert.True(t, ok) + assert.True(t, port > 0) +} diff --git a/network/process.go b/network/process.go index 67311638..6c244dec 100644 --- a/network/process.go +++ b/network/process.go @@ -5,6 +5,7 @@ import "github.com/yaoapp/gou" func init() { // 注册处理器 gou.RegisterProcessHandler("xiang.network.ip", ProcessIP) + gou.RegisterProcessHandler("xiang.network.FreePort", ProcessFreePort) gou.RegisterProcessHandler("xiang.network.Get", ProcessGet) gou.RegisterProcessHandler("xiang.network.Post", ProcessPost) gou.RegisterProcessHandler("xiang.network.PostJSON", ProcessPostJSON) diff --git a/share/const.go b/share/const.go index bea717c2..251321e4 100644 --- a/share/const.go +++ b/share/const.go @@ -1,5 +1,8 @@ package share +// Logs +// (session -> freeport) + // VERSION 版本号 const VERSION = "0.9.0" diff --git a/share/session.go b/share/session.go index 719bf4dd..90964f52 100644 --- a/share/session.go +++ b/share/session.go @@ -15,15 +15,24 @@ import ( "github.com/yaoapp/gou/session" "github.com/yaoapp/kun/exception" "github.com/yaoapp/yao/config" + "github.com/yaoapp/yao/network" ) var sessServer *olric.Olric +// SessionPort Session 端口 +var SessionPort int + +func init() { + SessionPort = network.FreePort() + klog.Trace("session port: %d", SessionPort) +} + // SessionConnect 加载会话信息 func SessionConnect(conf config.SessionConfig) { var clientConfig = &client.Config{ - Servers: []string{fmt.Sprintf("%s:%d", conf.Host, conf.Port)}, + Servers: []string{fmt.Sprintf("%s:%d", "127.0.0.1", SessionPort)}, Serializer: serializer.NewMsgpackSerializer(), Client: config_olric.NewClient(), } @@ -46,9 +55,10 @@ func SessionServerStop() { // SessionServerStart 启动会话服务器 func SessionServerStart() { + c := &config_olric.Config{ - BindAddr: config.Conf.Session.Host, - BindPort: config.Conf.Session.Port, + BindAddr: "127.0.0.1", + BindPort: SessionPort, ReadRepair: false, ReplicaCount: 1, WriteQuorum: 1,