diff --git a/main.go b/main.go index 2a580c8..cdbd3f2 100644 --- a/main.go +++ b/main.go @@ -14,52 +14,42 @@ import ( ) func main() { - // 1. Настройка TLS (обязательно для WebTransport/QUIC) - // Поскольку SSL терминация на VPS, здесь мы используем самоподписанный сертификат - // для внутренней связи (Dokploy <-> Caddy). Nixpacks соберет это. - // Но для простоты примера мы просто слушаем обычный HTTP, так как Caddy проксирует. - // ОДНАКО: WebTransport ТРЕБУЕТ TLS. Внутренний TLS тоже нужен. - // Мы сгенерируем его на лету, чтобы не возиться с файлами. + // Генерируем сертификат для внутреннего TLS (Caddy -> Go) + cert, err := generateSelfSignedCert() + if err != nil { + log.Fatal(err) + } - cert, err := generateSelfSignedCert() - if err != nil { - log.Fatal(err) - } + tlsConfig := &tls.Config{ + Certificates: []tls.Certificate{cert}, + NextProtos: []string{"h3"}, + } - tlsConfig := &tls.Config{ - Certificates: []tls.Certificate{cert}, - NextProtos: []string{"h3"}, // HTTP/3 - } + server := webtransport.Server{ + H3: http3.Server{ + Addr: ":9001", // МЕНЯЕМ ПОРТ ЗДЕСЬ + TLSConfig: tlsConfig, + }, + CheckOrigin: func(r *http.Request) bool { return true }, + } - // 2. Настройка WebTransport Handler - server := webtransport.Server{ - H3: http3.Server{ - Addr: ":8080", // Порт внутри контейнера - TLSConfig: tlsConfig, - }, - CheckOrigin: func(r *http.Request) bool { return true }, // Разрешить все Origin для теста - } - // Раздаем index.html - http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - http.ServeFile(w, r, "index.html") - }) - http.HandleFunc("/wt", func(w http.ResponseWriter, r *http.Request) { - log.Println("New WebTransport request from:", r.RemoteAddr) - sess, err := server.Upgrade(w, r) - if err != nil { - log.Printf("Upgrade failed: %v", err) - return - } - - // Обработка сессии в отдельной горутине - go handleSession(sess) - }) + // Раздаем статику и вешаем обработчик WT + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + http.ServeFile(w, r, "index.html") + }) - log.Println("WebTransport server listening on https://localhost:8080/wt (via Caddy)") - // Запускаем HTTP/3 сервер - if err := server.ListenAndServe(); err != nil { - log.Fatal(err) - } + http.HandleFunc("/wt", func(w http.ResponseWriter, r *http.Request) { + sess, err := server.Upgrade(w, r) + if err != nil { + return + } + go handleSession(sess) + }) + + log.Println("WebTransport server started on :9001") + if err := server.ListenAndServe(); err != nil { + log.Fatal(err) + } } // Обработка одной WebTransport сессии