lightweight go reverse proxy for ollama with bearer token authentication
go proxy ollama
at v1.0.0 996 B view raw
1package main 2 3import ( 4 "log" 5 "net/http" 6 "os" 7 8 "github.com/go-chi/chi/v5" 9 "github.com/go-chi/chi/v5/middleware" 10) 11 12const ( 13 portEnv = "OP_PORT" 14 authEnv = "OP_AUTH_TOKEN" 15 ollamaEnv = "OP_OLLAMA_URL" 16) 17 18func main() { 19 port := os.Getenv(portEnv) 20 if port == "" { 21 port = "11433" 22 } 23 24 ollamaURL := os.Getenv(ollamaEnv) 25 if ollamaURL == "" { 26 ollamaURL = "http://localhost:11434" 27 } 28 29 token := os.Getenv(authEnv) 30 if token == "" { 31 log.Fatalf("%s environment variable is required", authEnv) 32 } 33 34 proxy, err := newProxy(ollamaURL) 35 if err != nil { 36 log.Fatalf("failed to create proxy: %v", err) 37 } 38 39 r := chi.NewRouter() 40 r.Use(middleware.Logger) 41 r.Use(middleware.Recoverer) 42 r.Use(authMiddleware(token)) 43 44 r.HandleFunc("/*", func(w http.ResponseWriter, r *http.Request) { 45 proxy.ServeHTTP(w, r) 46 }) 47 48 log.Printf("Starting proxy server on port %s, forwarding to %s", port, ollamaURL) 49 if err := http.ListenAndServe(":"+port, r); err != nil { 50 log.Fatalf("server failed: %v", err) 51 } 52}