new server conf
All checks were successful
Create and publish a Docker image 🚀 / build-and-push-image (push) Successful in 2m1s

This commit is contained in:
Smile Rex
2026-03-03 22:44:58 +03:00
parent 23e7878e0d
commit cf66954538

59
main.go
View File

@@ -1,7 +1,7 @@
package main package main
import ( import (
"log" "fmt"
"log/slog" "log/slog"
"net/http" "net/http"
@@ -11,17 +11,26 @@ import (
) )
func main() { func main() {
certmagic.DefaultACME.Email = "serverussnap@outlook.com" domain := "qgo-server.quizer.space"
certmagic.DefaultACME.Agreed = true email := "serverussnap@outlook.com"
tlsConfig, err := certmagic.TLS([]string{"qgo-server.quizer.space"}) // 1. Настройка CertMagic
certmagic.DefaultACME.Email = email
certmagic.DefaultACME.Agreed = true
certmagic.Default.Storage = &certmagic.FileStorage{Path: "/root/.local/share/certmagic"}
// Создаем TLS конфигурацию
tlsConfig, err := certmagic.TLS([]string{domain})
if err != nil { if err != nil {
log.Fatal(err) slog.Error("failed to setup TLS", "error", err)
return
} }
tlsConfig.NextProtos = append([]string{"h3"}, tlsConfig.NextProtos...) // Поддержка протоколов для браузера и MoQ
tlsConfig.NextProtos = []string{"h3", "moq-00", "http/1.1"}
server := moqt.Server{ // 2. Инициализация MoQ сервера
moqServer := moqt.Server{
Addr: ":443", Addr: ":443",
TLSConfig: tlsConfig, TLSConfig: tlsConfig,
QUICConfig: &quic.Config{ QUICConfig: &quic.Config{
@@ -32,39 +41,43 @@ func main() {
path := "/relay" path := "/relay"
http.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
slog.Info("Incoming WebTransport request") w.Header().Set("Alt-Svc", `h3=":443"; ma=2592000`)
err := server.HandleWebTransport(w, r) if r.URL.Path == path {
err := moqServer.HandleWebTransport(w, r)
if err != nil { if err != nil {
slog.Error("WebTransport error", "error", err) slog.Error("WebTransport error", "error", err)
} }
return
}
fmt.Fprintf(w, "MoQ Server is active at %s", path)
}) })
moqt.HandleFunc(path, func(w moqt.SetupResponseWriter, r *moqt.SetupRequest) { moqt.HandleFunc(path, func(w moqt.SetupResponseWriter, r *moqt.SetupRequest) {
slog.Info("MoQ setup request received")
sess, err := moqt.Accept(w, r, nil) sess, err := moqt.Accept(w, r, nil)
if err != nil { if err != nil {
slog.Error("Failed to accept session", "error", err)
return return
} }
slog.Info("MoQ session established", "remote", sess.RemoteAddr())
go handleSession(sess) go handleSession(sess)
}) })
slog.Info("Server starting on https://localhost:8080") slog.Info("Starting MoQ server", "url", "https://"+domain)
if err := server.ListenAndServe(); err != nil { go func() {
slog.Error("Server failed", "error", err) err := certmagic.HTTPS([]string{domain}, http.DefaultServeMux)
if err != nil {
slog.Error("TCP/HTTPS Server failed", "error", err)
}
}()
if err := moqServer.ListenAndServe(); err != nil {
slog.Error("MoQ UDP Server failed", "error", err)
} }
} }
func handleSession(sess *moqt.Session) { func handleSession(sess *moqt.Session) {
defer sess.Context().Done() slog.Info("MoQ session established", "remote", sess.RemoteAddr())
<-sess.Context().Done()
for { slog.Info("MoQ session closed")
select {}
}
} }