diff --git a/.DS_Store b/.DS_Store index 679427c..3ca1add 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.vscode/settings.json b/.vscode/settings.json index 8168377..e58b186 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,6 +10,7 @@ "диалогом", "другой", "задать", + "запущен", "корректный", "Можно", "Название", @@ -27,6 +28,7 @@ "приложением", "проходами", "проходом", + "сервер", "скрытой", "скрытую", "существует", diff --git a/cmd/evening_detective/main.go b/cmd/evening_detective/main.go index 7dff4c9..b15abce 100644 --- a/cmd/evening_detective/main.go +++ b/cmd/evening_detective/main.go @@ -34,11 +34,10 @@ var userFS embed.FS var adminFS embed.FS func main() { - // Create a listener on TCP port - lis, err := net.Listen("tcp", ":8080") - if err != nil { - log.Fatalln("Failed to listen:", err) - } + grpcGatewayHost := config.GetGrpcGatewayHost() + userClientHost := config.GetUserClientHost() + adminClientHost := config.GetAdminClientHost() + fileHost := config.GetFileHost() // Create a gRPC server object s := grpc.NewServer() @@ -50,10 +49,6 @@ func main() { log.Fatalln(err) } - clientHost := config.GetHost() - adminClientHost := config.GetAdminHost() - fileHost := config.GetFileHost() - cleaner := cleaner.NewCleaner() formatter := formatter.NewFormatter() @@ -72,7 +67,7 @@ func main() { log.Fatalln(err) } - linkService := link.NewLinkService(clientHost) + linkService := link.NewLinkService(userClientHost) passwordGenerator := password.NewPasswordGenerator() @@ -90,12 +85,17 @@ func main() { ), ), ) - // Serve gRPC server - log.Println("Serving gRPC on 0.0.0.0:8080") + + // Server gRPC + lis, err := net.Listen("tcp", ":8080") + if err != nil { + log.Fatalln("Failed to listen:", err) + } go func() { log.Fatalln(s.Serve(lis)) }() + // Client gRPC // Create a client connection to the gRPC server we just started // This is where the gRPC-Gateway proxies the requests conn, err := grpc.NewClient( @@ -122,13 +122,12 @@ func main() { log.Fatalln("Failed to register gateway:", err) } + // Server gRPC-Gateway gwServer := &http.Server{ - Addr: ":8090", + Addr: config.GrpcGatewayPort, Handler: cors(gwmux), } - - // Serve gRPC-Gateway server - log.Println("Serving gRPC-Gateway on http://0.0.0.0:8090") + log.Printf("Serving %s for gRPC-Gateway\n", grpcGatewayHost) go func() { log.Fatalln(gwServer.ListenAndServe()) }() @@ -141,23 +140,18 @@ func main() { fileServerUser := http.FileServer(http.FS(subUserFS)) muxUser.Handle("/", fileServerUser) - // Serve user web server - log.Println("Serving user web on http://0.0.0.0" + config.ClientPort) + // Server user web + log.Printf("Serving %s for user web\n", userClientHost) go func() { - log.Fatalln(http.ListenAndServe(config.ClientPort, muxUser)) + log.Fatalln(http.ListenAndServe(config.UserClientPort, muxUser)) }() go func() { dir := "./data/story/images" - // Создаем файловый сервер fs := http.FileServer(http.Dir(dir)) - - // Добавляем middleware для логирования http.Handle("/", loggingMiddleware(fs)) - - log.Println("Файловый сервер запущен на http://localhost:8120") - log.Println("Обслуживается директория: " + dir) - log.Fatal(http.ListenAndServe(":8120", nil)) + log.Printf("Serving %s for file server, directory: %s\n", fileHost, dir) + log.Fatal(http.ListenAndServe(config.FilePort, nil)) }() muxAdmin := http.NewServeMux() @@ -168,9 +162,9 @@ func main() { fileServerAdmin := http.FileServer(http.FS(subAdminFS)) muxAdmin.Handle("/", fileServerAdmin) - // Serve admin web server - log.Printf("Serving admin web on %s\n", adminClientHost) - log.Fatalln(http.ListenAndServe(":8110", muxAdmin)) + // Server admin web + log.Printf("Serving %s for admin web \n", adminClientHost) + log.Fatalln(http.ListenAndServe(config.AdminClientPort, muxAdmin)) } func cors(h http.Handler) http.Handler { diff --git a/docker-compose.yml b/docker-compose.yml index 5133b6e..fddee7d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,8 +11,24 @@ services: - "8100:8100" - "8110:8110" - "8120:8120" + networks: + - crabs-network volumes: - data:/data + labels: + reproxy.1.server: "rodniki.crabs-games.art" + reproxy.1.route: "^/schedule" + reproxy.1.dest: "http://pinned_message:8210/schedule" + reproxy.1.port: "8210" + reproxy.1.ping: "/" -volumes: - data: + reproxy.2.server: "rodniki.crabs-games.art" + reproxy.2.route: "/(.*)" + reproxy.2.dest: "http://pinned_message:8220/$$1" + reproxy.2.port: "8220" + reproxy.2.ping: "/" + +networks: + crabs-network: + name: crabs-network + external: true diff --git a/internal/config/config.go b/internal/config/config.go index 949a008..daf5f11 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -7,7 +7,8 @@ import ( ) const ( - ClientPort = ":8100" + GrpcGatewayPort = ":8090" + UserClientPort = ":8100" AdminClientPort = ":8110" FilePort = ":8120" ) @@ -20,7 +21,19 @@ func GetDBFilepath() string { return getFilepath("DB_FILENAME", "data/db/store.db") } -func GetAdminHost() string { +func GetGrpcGatewayHost() string { + host := os.Getenv("HOST") + if host != "" { + return host + } + ips, err := getLocalIPs() + if err != nil || len(ips) == 0 { + return "http://127.0.0.1" + GrpcGatewayPort + } + return "http://" + ips[0] + GrpcGatewayPort +} + +func GetAdminClientHost() string { host := os.Getenv("HOST") if host != "" { return host @@ -32,20 +45,20 @@ func GetAdminHost() string { return "http://" + ips[0] + AdminClientPort } -func GetHost() string { +func GetUserClientHost() string { host := os.Getenv("HOST") if host != "" { return host } ips, err := getLocalIPs() if err != nil || len(ips) == 0 { - return "http://127.0.0.1" + ClientPort + return "http://127.0.0.1" + UserClientPort } - return "http://" + ips[0] + ClientPort + return "http://" + ips[0] + UserClientPort } func GetFileHost() string { - host := os.Getenv("FILE_HOST") + host := os.Getenv("HOST") if host != "" { return host } diff --git a/internal/services/db/service.go b/internal/services/db/service.go index 5978c4c..0026bae 100644 --- a/internal/services/db/service.go +++ b/internal/services/db/service.go @@ -19,7 +19,7 @@ func NewDBService(filepath string) (IDBService, error) { if err != nil { return nil, err } - log.Printf("load db from: %s", filepath) + log.Printf("Load db from: %s", filepath) _, err = db.Exec("CREATE TABLE IF NOT EXISTS teams (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE NOT NULL CHECK(length(trim(name)) > 0), password TEXT);") if err != nil { return nil, err diff --git a/internal/services/story_storage/file_storage_service.go b/internal/services/story_storage/file_storage_service.go index bfcbc49..998156e 100644 --- a/internal/services/story_storage/file_storage_service.go +++ b/internal/services/story_storage/file_storage_service.go @@ -25,7 +25,7 @@ func (s *fileService) Load(ctx context.Context) (*models.Story, error) { if err != nil { return nil, fmt.Errorf("story file %s not found", s.filepath) } - log.Printf("load story from: %s", s.filepath) + log.Printf("Load story from: %s", s.filepath) story := &models.Story{} if err := json.Unmarshal(data, story); err != nil { return nil, err