Update main.go

This commit is contained in:
2026-03-30 17:29:09 +00:00
parent d3fe3ac5aa
commit d11e51d576

74
main.go
View File

@@ -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 сессии