diff --git a/cmd/cmd.go b/cmd/cmd.go index 0c3c6f97..041d4421 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -513,23 +513,33 @@ func generateBatch(cmd *cobra.Command, model string) error { return nil } -func RunServer(_ *cobra.Command, _ []string) error { - host := os.Getenv("OLLAMA_HOST") - if host == "" { - host = "127.0.0.1" +func RunServer(cmd *cobra.Command, _ []string) error { + host, err := cmd.Flags().GetString("host") + if err != nil { + return errors.New("host unset") + } + if os.Getenv("OLLAMA_HOST") != "" { + host = os.Getenv("OLLAMA_HOST") + } + port, err := cmd.Flags().GetString("port") + if err != nil { + return errors.New("port unset") } - port := os.Getenv("OLLAMA_PORT") - if port == "" { - port = "11434" + if os.Getenv("OLLAMA_PORT") != "" { + port = os.Getenv("OLLAMA_PORT") } ln, err := net.Listen("tcp", fmt.Sprintf("%s:%s", host, port)) if err != nil { return err } + extraOrigins, err := cmd.Flags().GetStringSlice("allowed-origins") + if err != nil { + return err + } - return server.Serve(ln) + return server.Serve(ln, extraOrigins) } func startMacApp(client *api.Client) error { @@ -621,6 +631,10 @@ func NewCLI() *cobra.Command { RunE: RunServer, } + serveCmd.Flags().String("port", "11434", "Port to listen on, may also use OLLAMA_PORT environment variable") + serveCmd.Flags().String("host", "127.0.0.1", "Host listen address, may also use OLLAMA_HOST environment variable") + serveCmd.Flags().StringSlice("allowed-origins", []string{}, "Additional allowed CORS origins (outside of localhost), specify as comma-separated list") + pullCmd := &cobra.Command{ Use: "pull MODEL", Short: "Pull a model from a registry", diff --git a/server/routes.go b/server/routes.go index 5e8a356f..83afef1a 100644 --- a/server/routes.go +++ b/server/routes.go @@ -301,11 +301,11 @@ func CopyModelHandler(c *gin.Context) { } } -func Serve(ln net.Listener) error { +func Serve(ln net.Listener, extraOrigins []string) error { config := cors.DefaultConfig() config.AllowWildcard = true // only allow http/https from localhost - config.AllowOrigins = []string{ + allowedOrigins := []string{ "http://localhost", "http://localhost:*", "https://localhost", @@ -315,6 +315,8 @@ func Serve(ln net.Listener) error { "https://127.0.0.1", "https://127.0.0.1:*", } + allowedOrigins = append(allowedOrigins, extraOrigins...) + config.AllowOrigins = allowedOrigins r := gin.Default() r.Use(cors.New(config))