lightweight go reverse proxy for ollama with bearer token authentication
go
proxy
ollama
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}