diff --git a/docker-compose.yaml b/docker-compose.yaml index 0eee0c5..8c64b8b 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -11,7 +11,6 @@ services: context: . dockerfile: ./server/Dockerfile environment: - - BINDADDR=0.0.0.0 - PORT=7480 - RAFTPORT=8000 - MLPORT=7946 @@ -31,7 +30,6 @@ services: context: . dockerfile: ./server/Dockerfile environment: - - BINDADDR=0.0.0.0 - PORT=7480 - RAFTPORT=8000 - MLPORT=7946 @@ -52,7 +50,6 @@ services: context: . dockerfile: ./server/Dockerfile environment: - - BINDADDR=0.0.0.0 - PORT=7480 - RAFTPORT=8000 - MLPORT=7946 diff --git a/server/config.go b/server/config.go index 208a31f..bae843e 100644 --- a/server/config.go +++ b/server/config.go @@ -31,7 +31,7 @@ func GetConfig() Config { http := flag.Bool("http", false, "Use HTTP protocol instead of raw TCP. Default is false") serverId := flag.String("serverId", "1", "Server ID in raft cluster. Leave empty for client.") joinAddr := flag.String("joinAddr", "", "Address of cluster member in a cluster to you want to join.") - bindAddr := flag.String("bindAddr", "127.0.0.1", "Address to bind the server to.") + bindAddr := flag.String("bindAddr", "", "Address to bind the server to.") raftBindPort := flag.Int("raftPort", 7481, "Port to use for intra-cluster communication. Leave on the client.") mlBindPort := flag.Int("mlPort", 7946, "Port to use for memberlist communication.") config := flag.String( diff --git a/server/main.go b/server/main.go index ebd874b..080ca88 100644 --- a/server/main.go +++ b/server/main.go @@ -5,6 +5,7 @@ import ( "crypto/tls" "fmt" "io" + "log" "net" "net/http" "os" @@ -103,13 +104,13 @@ func (server *Server) StartTCP() { fmt.Printf("Starting TLS server at Address %s, Port %d...\n", conf.BindAddr, conf.Port) cer, err := tls.LoadX509KeyPair(conf.Cert, conf.Key) if err != nil { - panic(err) + log.Fatal(err) } if l, err := tls.Listen("tcp", fmt.Sprintf("%s:%d", conf.BindAddr, conf.Port), &tls.Config{ Certificates: []tls.Certificate{cer}, }); err != nil { - panic(err) + log.Fatal(err) } else { listener = l } @@ -119,7 +120,7 @@ func (server *Server) StartTCP() { // TCP fmt.Printf("Starting TCP server at Address %s, Port %d...\n", conf.BindAddr, conf.Port) if l, err := net.Listen("tcp", fmt.Sprintf("%s:%d", conf.BindAddr, conf.Port)); err != nil { - panic(err) + log.Fatal(err) } else { listener = l } @@ -170,7 +171,7 @@ func (server *Server) Start() { } server.MemberListInit() - // server.RaftInit() + server.RaftInit() if conf.HTTP { server.StartHTTP() @@ -188,6 +189,15 @@ func (server *Server) ShutDown() { func main() { config := GetConfig() + // Default BindAddr if it's not set + if config.BindAddr == "" { + if addr, err := GetIPAddress(); err != nil { + log.Fatal(err) + } else { + config.BindAddr = addr + } + } + cancelCh := make(chan (os.Signal), 1) signal.Notify(cancelCh, syscall.SIGINT, syscall.SIGTERM) diff --git a/server/raft.go b/server/raft.go index 3e2a2e0..7472def 100644 --- a/server/raft.go +++ b/server/raft.go @@ -15,6 +15,7 @@ func (server *Server) RaftInit() { // Triggered after MemberList init conf := server.config + fmt.Println(conf) raftConfig := raft.DefaultConfig() raftConfig.LocalID = raft.ServerID(conf.ServerID) @@ -24,9 +25,10 @@ func (server *Server) RaftInit() { raftSnapshotStore := raft.NewInmemSnapshotStore() raftAddr := fmt.Sprintf("%s:%d", conf.BindAddr, conf.RaftBindPort) + raftAdvertiseAddr, err := net.ResolveTCPAddr("tcp", raftAddr) if err != nil { - log.Fatal("Could not resolve advertise address.") + log.Fatal(err) } raftTransport, err := raft.NewTCPTransport( diff --git a/server/utils.go b/server/utils.go index 0cda2f7..095babe 100644 --- a/server/utils.go +++ b/server/utils.go @@ -8,6 +8,7 @@ import ( "fmt" "math" "math/big" + "net" "reflect" "strings" "time" @@ -188,3 +189,17 @@ func RetryBackoff(b retry.Backoff, maxRetries uint64, jitter, cappedDuration, ma return backoff } + +func GetIPAddress() (string, error) { + conn, err := net.Dial("udp", "8.8.8.8:80") + + if err != nil { + return "", err + } + + defer conn.Close() + + localAddr := strings.Split(conn.LocalAddr().String(), ":")[0] + + return localAddr, nil +}